diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 62eb020b3..ef7801219 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,9 +49,6 @@ jobs: cp build/app/outputs/bundle/playRelease/*.aab outputs ./flutterw build apk -t lib/main_play.dart --flavor play --bundle-sksl-path shaders.sksl.json cp build/app/outputs/apk/play/release/*.apk outputs - scripts/apply_flavor_huawei.sh - ./flutterw build apk -t lib/main_huawei.dart --flavor huawei --bundle-sksl-path shaders.sksl.json - cp build/app/outputs/apk/huawei/release/*.apk outputs scripts/apply_flavor_izzy.sh ./flutterw build apk -t lib/main_izzy.dart --flavor izzy --split-per-abi cp build/app/outputs/apk/izzy/release/*.apk outputs @@ -65,7 +62,6 @@ jobs: AVES_KEY_ALIAS: ${{ secrets.AVES_KEY_ALIAS }} AVES_KEY_PASSWORD: ${{ secrets.AVES_KEY_PASSWORD }} AVES_GOOGLE_API_KEY: ${{ secrets.AVES_GOOGLE_API_KEY }} - AVES_HUAWEI_API_KEY: ${{ secrets.AVES_HUAWEI_API_KEY }} - name: Create a release with the APK and App Bundle. uses: ncipollo/release-action@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 35a9d80b0..8206431bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Removed + +- `huawei` app flavor + ## [v1.11.4] - 2024-07-09 ### Added diff --git a/android/app/build.gradle b/android/app/build.gradle index e793b3533..9fd533ff4 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -40,7 +40,6 @@ if (keystorePropertiesFile.exists()) { keystoreProperties["keyAlias"] = System.getenv("AVES_KEY_ALIAS") ?: "" keystoreProperties["keyPassword"] = System.getenv("AVES_KEY_PASSWORD") ?: "" keystoreProperties["googleApiKey"] = System.getenv("AVES_GOOGLE_API_KEY") ?: "" - keystoreProperties["huaweiApiKey"] = System.getenv("AVES_HUAWEI_API_KEY") ?: "" } android { @@ -70,8 +69,7 @@ android { targetSdk 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName - manifestPlaceholders = [googleApiKey: keystoreProperties["googleApiKey"] ?: "", - huaweiApiKey: keystoreProperties["huaweiApiKey"] ?: ""] + manifestPlaceholders = [googleApiKey: keystoreProperties["googleApiKey"] ?: ""] multiDexEnabled true } @@ -94,13 +92,6 @@ android { ext.useNdkAbiFilters = true } - huawei { - // Huawei AppGallery - dimension "store" - // generate a universal APK without x86 native libs - ext.useNdkAbiFilters = true - } - izzy { // IzzyOnDroid // check offending libraries with `scanapk` @@ -221,9 +212,6 @@ dependencies { implementation 'com.github.deckerst.mp4parser:muxer:4cc0c5d06c' implementation 'com.github.deckerst:pixymeta-android:9ec7097f17' - // huawei flavor only - huaweiImplementation "com.huawei.agconnect:agconnect-core:$huawei_agconnect_version" - testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.10.2' kapt 'androidx.annotation:annotation:1.8.0' @@ -237,8 +225,3 @@ if (useCrashlytics) { apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.firebase.crashlytics' } - -if (useHms) { - println("Building flavor with HMS plugin") - apply plugin: 'com.huawei.agconnect' -} \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 6d1cb4a88..99b8fa55a 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -313,9 +313,6 @@ - diff --git a/android/build.gradle b/android/build.gradle index 90a76ffec..0a9c09f32 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,38 +1,21 @@ buildscript { ext { - agp_version = '8.5.0' // same as `settings.ext.agp_version` in `/android/settings.gradle` glide_version = '4.16.0' - // AppGallery Connect plugin versions: https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agc-sdk-changenotes-0000001058732550 - huawei_agconnect_version = '1.9.1.300' abiCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4] useCrashlytics = gradle.startParameter.taskNames.any { task -> task.containsIgnoreCase("play") } - useHms = gradle.startParameter.taskNames.any { task -> task.containsIgnoreCase("huawei") } } repositories { google() mavenCentral() - - if (useHms) { - // HMS (used by some flavors only) - maven { url 'https://developer.huawei.com/repo/' } - } } dependencies { - // necessary when applying plugin `com.huawei.agconnect` - classpath "com.android.tools.build:gradle:$agp_version" - if (useCrashlytics) { // GMS & Firebase Crashlytics (used by some flavors only) classpath 'com.google.gms:google-services:4.4.1' classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' } - - if (useHms) { - // HMS (used by some flavors only) - classpath "com.huawei.agconnect:agcp:$huawei_agconnect_version" - } } } @@ -40,11 +23,6 @@ allprojects { repositories { google() mavenCentral() - - if (useHms) { - // HMS (used by some flavors only) - maven { url 'https://developer.huawei.com/repo/' } - } } // gradle.projectsEvaluated { diff --git a/android/gradle.properties b/android/gradle.properties index c795f344f..cbd2e29ca 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -20,7 +20,3 @@ android.nonFinalResIds=false # full mode is too aggressive and removes essential code # of `metadata-extractor` even when adding `-keep class com.drew.**{ *; }` android.enableR8.fullMode=false - -# fix for AppGallery Connect plugin which does not support yet Gradle 8 -# cf https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agc-common-faq-0000001063210244#section17273113244910 -apmsInstrumentationEnabled=false diff --git a/android/key_template.properties b/android/key_template.properties index 838a53514..e335f59b6 100644 --- a/android/key_template.properties +++ b/android/key_template.properties @@ -3,4 +3,3 @@ storePassword= keyAlias= keyPassword= googleApiKey= -huaweiApiKey= diff --git a/lib/app_flavor.dart b/lib/app_flavor.dart index 40e0e376c..461f9798e 100644 --- a/lib/app_flavor.dart +++ b/lib/app_flavor.dart @@ -1,11 +1,10 @@ -enum AppFlavor { play, huawei, izzy, libre } +enum AppFlavor { play, izzy, libre } extension ExtraAppFlavor on AppFlavor { bool get canEnableErrorReporting { switch (this) { case AppFlavor.play: return true; - case AppFlavor.huawei: case AppFlavor.izzy: case AppFlavor.libre: return false; @@ -15,7 +14,6 @@ extension ExtraAppFlavor on AppFlavor { bool get hasMapStyleDefault { switch (this) { case AppFlavor.play: - case AppFlavor.huawei: return true; case AppFlavor.izzy: case AppFlavor.libre: diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index dae5ad074..ef0394040 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -238,8 +238,6 @@ "mapStyleGoogleNormal": "Google Maps", "mapStyleGoogleHybrid": "Google Maps (Hybrid)", "mapStyleGoogleTerrain": "Google Maps (Terrain)", - "mapStyleHuaweiNormal": "Petal Maps", - "mapStyleHuaweiTerrain": "Petal Maps (Terrain)", "mapStyleOsmHot": "Humanitarian OSM", "mapStyleStamenWatercolor": "Stamen Watercolor", diff --git a/lib/main_huawei.dart b/lib/main_huawei.dart deleted file mode 100644 index 2cd615f8d..000000000 --- a/lib/main_huawei.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:aves/app_flavor.dart'; -import 'package:aves/main_common.dart'; -import 'package:aves/widget_common.dart'; - -const _flavor = AppFlavor.huawei; - -@pragma('vm:entry-point') -void main() => mainCommon(_flavor); - -@pragma('vm:entry-point') -void widgetMain() => widgetMainCommon(_flavor); diff --git a/lib/model/app/dependencies.dart b/lib/model/app/dependencies.dart index ca745410f..cc0f252b6 100644 --- a/lib/model/app/dependencies.dart +++ b/lib/model/app/dependencies.dart @@ -169,19 +169,6 @@ class Dependencies { ), ]; - static const List _huaweiMobileServices = [ - Dependency( - name: 'Huawei Mobile Services (Availability, Map)', - license: apache2, - licenseUrl: 'https://github.com/HMS-Core/hms-flutter-plugin/blob/master/LICENCE', - sourceUrl: 'https://github.com/HMS-Core/hms-flutter-plugin', - ), - ]; - - static const List _flutterPluginsHuaweiOnly = [ - ..._huaweiMobileServices, - ]; - static const List _flutterPluginsIzzyOnly = [ ..._googleMobileServices, ]; @@ -199,7 +186,6 @@ class Dependencies { static List flutterPlugins(AppFlavor flavor) => [ ..._flutterPluginsCommon, - if (flavor == AppFlavor.huawei) ..._flutterPluginsHuaweiOnly, if (flavor == AppFlavor.izzy) ..._flutterPluginsIzzyOnly, if (flavor == AppFlavor.libre) ..._flutterPluginsLibreOnly, if (flavor == AppFlavor.play) ..._flutterPluginsPlayOnly, diff --git a/lib/model/settings/enums/map_style.dart b/lib/model/settings/enums/map_style.dart index 3f0ab2a6f..a10231bfa 100644 --- a/lib/model/settings/enums/map_style.dart +++ b/lib/model/settings/enums/map_style.dart @@ -6,8 +6,6 @@ extension ExtraEntryMapStyle on EntryMapStyle { case EntryMapStyle.googleNormal: case EntryMapStyle.googleHybrid: case EntryMapStyle.googleTerrain: - case EntryMapStyle.hmsNormal: - case EntryMapStyle.hmsTerrain: return true; default: return false; diff --git a/lib/view/src/settings/enums.dart b/lib/view/src/settings/enums.dart index 064c9619b..12f15e10c 100644 --- a/lib/view/src/settings/enums.dart +++ b/lib/view/src/settings/enums.dart @@ -68,8 +68,6 @@ extension ExtraEntryMapStyleView on EntryMapStyle { EntryMapStyle.googleNormal => l10n.mapStyleGoogleNormal, EntryMapStyle.googleHybrid => l10n.mapStyleGoogleHybrid, EntryMapStyle.googleTerrain => l10n.mapStyleGoogleTerrain, - EntryMapStyle.hmsNormal => l10n.mapStyleHuaweiNormal, - EntryMapStyle.hmsTerrain => l10n.mapStyleHuaweiTerrain, EntryMapStyle.osmHot => l10n.mapStyleOsmHot, EntryMapStyle.stamenWatercolor => l10n.mapStyleStamenWatercolor, }; diff --git a/lib/widgets/common/map/geo_map.dart b/lib/widgets/common/map/geo_map.dart index 9c9ee0285..402d69ade 100644 --- a/lib/widgets/common/map/geo_map.dart +++ b/lib/widgets/common/map/geo_map.dart @@ -167,8 +167,6 @@ class _GeoMapState extends State { case EntryMapStyle.googleNormal: case EntryMapStyle.googleHybrid: case EntryMapStyle.googleTerrain: - case EntryMapStyle.hmsNormal: - case EntryMapStyle.hmsTerrain: child = mobileServices.buildMap( controller: controller, clusterListenable: _clusterChangeNotifier, diff --git a/plugins/aves_map/lib/src/style.dart b/plugins/aves_map/lib/src/style.dart index e5cd839f7..70b36f828 100644 --- a/plugins/aves_map/lib/src/style.dart +++ b/plugins/aves_map/lib/src/style.dart @@ -3,9 +3,6 @@ enum EntryMapStyle { googleNormal, googleHybrid, googleTerrain, - // Huawei - hmsNormal, - hmsTerrain, // Leaflet // browse providers at https://leaflet-extras.github.io/leaflet-providers/preview/ osmHot, diff --git a/plugins/aves_services_huawei/.gitignore b/plugins/aves_services_huawei/.gitignore deleted file mode 100644 index 28124a571..000000000 --- a/plugins/aves_services_huawei/.gitignore +++ /dev/null @@ -1,30 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -#/pubspec.lock -**/doc/api/ -.dart_tool/ -.packages -build/ diff --git a/plugins/aves_services_huawei/.metadata b/plugins/aves_services_huawei/.metadata deleted file mode 100644 index c24d00d29..000000000 --- a/plugins/aves_services_huawei/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 5464c5bac742001448fe4fc0597be939379f88ea - channel: stable - -project_type: package diff --git a/plugins/aves_services_huawei/analysis_options.yaml b/plugins/aves_services_huawei/analysis_options.yaml deleted file mode 100644 index f04c6cf0f..000000000 --- a/plugins/aves_services_huawei/analysis_options.yaml +++ /dev/null @@ -1 +0,0 @@ -include: ../../analysis_options.yaml diff --git a/plugins/aves_services_huawei/lib/aves_services_platform.dart b/plugins/aves_services_huawei/lib/aves_services_platform.dart deleted file mode 100644 index 304642d8b..000000000 --- a/plugins/aves_services_huawei/lib/aves_services_platform.dart +++ /dev/null @@ -1,89 +0,0 @@ -library aves_services_platform; - -import 'package:aves_map/aves_map.dart'; -import 'package:aves_platform_meta/aves_platform_meta_platform_interface.dart'; -import 'package:aves_services/aves_services.dart'; -import 'package:aves_services_platform/src/map.dart'; -import 'package:flutter/widgets.dart'; -import 'package:huawei_hmsavailability/huawei_hmsavailability.dart'; -import 'package:huawei_map/huawei_map.dart' as hmap; -import 'package:latlong2/latlong.dart'; - -class PlatformMobileServices extends MobileServices { - // cf https://developer.huawei.com/consumer/en/doc/development/hmscore-common-References/huaweiapiavailability-0000001050121134#section9492524178 - static const int _hmsCoreAvailable = 0; - - static const manifestApiKey = 'deckers.thibault.aves.huawei.API_KEY'; - - bool _isAvailable = false; - - @override - Future init() async { - try { - final result = await HmsApiAvailability().isHMSAvailable(); - _isAvailable = result == _hmsCoreAvailable; - } on Exception catch (e, stack) { - debugPrint('Failed to check services availability with exception=$e, stack=$stack'); - } - debugPrint('Device has Huawei Mobile Services=$_isAvailable'); - - final apiKey = await AvesPlatformMetaPlatform.instance.getMetadata(manifestApiKey); - hmap.HuaweiMapInitializer.setApiKey(apiKey: apiKey ?? ''); - hmap.HuaweiMapInitializer.initializeMap(); - } - - @override - bool get isServiceAvailable => _isAvailable; - - @override - EntryMapStyle get defaultMapStyle => EntryMapStyle.hmsNormal; - - @override - List get mapStyles => isServiceAvailable - ? [ - EntryMapStyle.hmsNormal, - EntryMapStyle.hmsTerrain, - ] - : []; - - @override - Widget buildMap({ - required AvesMapController? controller, - required Listenable clusterListenable, - required ValueNotifier boundsNotifier, - required EntryMapStyle style, - required TransitionBuilder decoratorBuilder, - required ButtonPanelBuilder buttonPanelBuilder, - required MarkerClusterBuilder markerClusterBuilder, - required MarkerWidgetBuilder markerWidgetBuilder, - required MarkerImageReadyChecker markerImageReadyChecker, - required ValueNotifier? dotLocationNotifier, - required ValueNotifier? overlayOpacityNotifier, - required MapOverlay? overlayEntry, - required UserZoomChangeCallback? onUserZoomChange, - required MapTapCallback? onMapTap, - required MarkerTapCallback? onMarkerTap, - required MarkerLongPressCallback? onMarkerLongPress, - }) { - return EntryHmsMap( - controller: controller, - clusterListenable: clusterListenable, - boundsNotifier: boundsNotifier, - minZoom: 3, - maxZoom: 20, - style: style, - decoratorBuilder: decoratorBuilder, - buttonPanelBuilder: buttonPanelBuilder, - markerClusterBuilder: markerClusterBuilder, - markerWidgetBuilder: markerWidgetBuilder, - markerImageReadyChecker: markerImageReadyChecker, - dotLocationNotifier: dotLocationNotifier, - overlayOpacityNotifier: overlayOpacityNotifier, - overlayEntry: overlayEntry, - onUserZoomChange: onUserZoomChange, - onMapTap: onMapTap, - onMarkerTap: onMarkerTap, - onMarkerLongPress: onMarkerLongPress, - ); - } -} diff --git a/plugins/aves_services_huawei/lib/src/map.dart b/plugins/aves_services_huawei/lib/src/map.dart deleted file mode 100644 index b53555ac0..000000000 --- a/plugins/aves_services_huawei/lib/src/map.dart +++ /dev/null @@ -1,341 +0,0 @@ -import 'dart:async'; -import 'dart:typed_data'; - -import 'package:aves_map/aves_map.dart'; -import 'package:aves_utils/aves_utils.dart'; -import 'package:flutter/material.dart'; -import 'package:huawei_map/huawei_map.dart'; -import 'package:latlong2/latlong.dart' as ll; -import 'package:provider/provider.dart'; - -class EntryHmsMap extends StatefulWidget { - final AvesMapController? controller; - final Listenable clusterListenable; - final ValueNotifier boundsNotifier; - final double? minZoom, maxZoom; - final EntryMapStyle style; - final TransitionBuilder decoratorBuilder; - final ButtonPanelBuilder buttonPanelBuilder; - final MarkerClusterBuilder markerClusterBuilder; - final MarkerWidgetBuilder markerWidgetBuilder; - final MarkerImageReadyChecker markerImageReadyChecker; - final ValueNotifier? dotLocationNotifier; - final ValueNotifier? overlayOpacityNotifier; - final MapOverlay? overlayEntry; - final UserZoomChangeCallback? onUserZoomChange; - final MapTapCallback? onMapTap; - final MarkerTapCallback? onMarkerTap; - final MarkerLongPressCallback? onMarkerLongPress; - - const EntryHmsMap({ - super.key, - this.controller, - required this.clusterListenable, - required this.boundsNotifier, - this.minZoom, - this.maxZoom, - required this.style, - required this.decoratorBuilder, - required this.buttonPanelBuilder, - required this.markerClusterBuilder, - required this.markerWidgetBuilder, - required this.markerImageReadyChecker, - required this.dotLocationNotifier, - this.overlayOpacityNotifier, - this.overlayEntry, - this.onUserZoomChange, - this.onMapTap, - this.onMarkerTap, - this.onMarkerLongPress, - }); - - @override - State createState() => _EntryHmsMapState(); -} - -class _EntryHmsMapState extends State> { - HuaweiMapController? _serviceMapController; - final List _subscriptions = []; - Map, GeoEntry> _geoEntryByMarkerKey = {}; - final Map, Uint8List> _markerBitmaps = {}; - final StreamController> _markerBitmapReadyStreamController = StreamController.broadcast(); - Uint8List? _dotMarkerBitmap; - - ValueNotifier get boundsNotifier => widget.boundsNotifier; - - ZoomedBounds get bounds => boundsNotifier.value; - - static const uninitializedLatLng = LatLng(0, 0); - - @override - void initState() { - super.initState(); - _registerWidget(widget); - } - - @override - void didUpdateWidget(covariant EntryHmsMap oldWidget) { - super.didUpdateWidget(oldWidget); - _unregisterWidget(oldWidget); - _registerWidget(widget); - } - - @override - void dispose() { - _unregisterWidget(widget); - super.dispose(); - } - - void _registerWidget(EntryHmsMap widget) { - final avesMapController = widget.controller; - if (avesMapController != null) { - _subscriptions.add(avesMapController.moveCommands.listen((event) => _moveTo(_toServiceLatLng(event.latLng)))); - _subscriptions.add(avesMapController.zoomCommands.listen((event) => _zoomBy(event.delta))); - } - widget.clusterListenable.addListener(_updateMarkers); - } - - void _unregisterWidget(EntryHmsMap widget) { - widget.clusterListenable.removeListener(_updateMarkers); - _subscriptions - ..forEach((sub) => sub.cancel()) - ..clear(); - } - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - MarkerGeneratorWidget( - markers: const [DotMarker(key: Key('dot'))], - isReadyToRender: (key) => true, - onRendered: (key, bitmap) => _dotMarkerBitmap = bitmap, - ), - MarkerGeneratorWidget>( - markers: _geoEntryByMarkerKey.keys.map(widget.markerWidgetBuilder).toList(), - isReadyToRender: widget.markerImageReadyChecker, - onRendered: (key, bitmap) { - _markerBitmaps[key] = bitmap; - _markerBitmapReadyStreamController.add(key); - }, - ), - widget.decoratorBuilder(context, _buildMap()), - widget.buttonPanelBuilder(_resetRotation), - ], - ); - } - - Widget _buildMap() { - final _onMarkerLongPress = widget.onMarkerLongPress; - return StreamBuilder( - stream: _markerBitmapReadyStreamController.stream, - builder: (context, _) { - final markers = {}; - _geoEntryByMarkerKey.forEach((markerKey, geoEntry) { - final bytes = _markerBitmaps[markerKey]; - if (bytes != null) { - final point = LatLng(geoEntry.latitude!, geoEntry.longitude!); - markers.add(Marker( - markerId: MarkerId(geoEntry.markerId!), - clickable: true, - icon: BitmapDescriptor.fromBytes(bytes), - position: point, - onClick: () => widget.onMarkerTap?.call(geoEntry), - )); - } - }); - - final interactive = context.select((v) => v.interactive); - // final overlayEntry = widget.overlayEntry; - return NullableValueListenableBuilder( - valueListenable: widget.dotLocationNotifier, - builder: (context, dotLocation, child) { - return NullableValueListenableBuilder( - valueListenable: widget.overlayOpacityNotifier, - builder: (context, value, child) { - // final double overlayOpacity = value ?? 1.0; - return HuaweiMap( - initialCameraPosition: CameraPosition( - bearing: bounds.rotation, - target: _toServiceLatLng(bounds.projectedCenter), - zoom: bounds.zoom, - ), - mapType: _toMapType(widget.style), - // compass disabled to use provider agnostic controls - compassEnabled: false, - mapToolbarEnabled: false, - minMaxZoomPreference: MinMaxZoomPreference( - widget.minZoom ?? MinMaxZoomPreference.unbounded.minZoom, - widget.maxZoom ?? MinMaxZoomPreference.unbounded.maxZoom, - ), - // `allGesturesEnabled`, if defined overrides specific gesture settings - rotateGesturesEnabled: interactive, - scrollGesturesEnabled: interactive, - // zoom controls disabled to use provider agnostic controls - zoomControlsEnabled: false, - zoomGesturesEnabled: interactive, - // tilt disabled to match leaflet - tiltGesturesEnabled: false, - myLocationEnabled: false, - myLocationButtonEnabled: false, - trafficEnabled: false, - isScrollGesturesEnabledDuringRotateOrZoom: true, - markers: { - ...markers, - if (dotLocation != null && _dotMarkerBitmap != null) - Marker( - markerId: const MarkerId('dot'), - anchor: const Offset(.5, .5), - clickable: true, - icon: BitmapDescriptor.fromBytes(_dotMarkerBitmap!), - position: _toServiceLatLng(dotLocation), - zIndex: 1, - ) - }, - // TODO TLAD [hms] GeoTIFF ground overlay - // groundOverlays: { - // if (overlayEntry != null && overlayEntry.canOverlay) - // GroundOverlay( - // groundOverlayId: GroundOverlayId('overlay'), - // // Google Maps API allows defining overlay either via - // // 1) position, anchor and width/height (in meters) - // // 2) bounds - // // Huawei requires width/height (in meters?), but also allows bounds... - // width: 42, - // height: 42, - // imageDescriptor: BitmapDescriptor.defaultMarker, - // position: _toServiceLatLng(overlayEntry.center!), - // ), - // }, - // TODO TLAD [hms] dynamic tile provider from current bounds, - // tileOverlays: { - // if (overlayEntry != null && overlayEntry.canOverlay) - // TileOverlay( - // tileOverlayId: TileOverlayId(overlayEntry.entry.uri), - // // `tileProvider` is `RepetitiveTile`, `UrlTile` or List - // // tileProvider: [ - // // Tile( - // // x: x, - // // y: y, - // // zoom: zoom, - // // imageData: imageData, - // // ), - // // ], - // transparency: 1 - overlayOpacity, - // ), - // }, - onMapCreated: (controller) async { - _serviceMapController = controller; - final zoom = await controller.getZoomLevel(); - await _updateVisibleRegion(zoom: zoom ?? bounds.zoom, rotation: bounds.rotation); - if (mounted) { - setState(() {}); - } - }, - onCameraMove: (position) => _updateVisibleRegion(zoom: position.zoom, rotation: position.bearing), - onCameraIdle: _onIdle, - onClick: (v) => widget.onMapTap?.call(_fromServiceLatLng(v)), - onLongPress: _onMarkerLongPress != null - ? (v) { - final pressLocation = _fromServiceLatLng(v); - final markers = _geoEntryByMarkerKey.values.toSet(); - final geoEntry = ImageMarker.markerMatch(pressLocation, bounds.zoom, markers); - if (geoEntry != null) { - _onMarkerLongPress(geoEntry, pressLocation); - } - } - : null, - onPoiClick: (poi) { - final poiPosition = poi.latLng; - if (poiPosition != null) { - widget.onMapTap?.call(_fromServiceLatLng(poiPosition)); - } - }, - logoPadding: const EdgeInsets.all(8), - // lite mode disabled because it is not interactive - liteMode: false, - ); - }, - ); - }, - ); - }, - ); - } - - void _onIdle() { - if (!mounted) return; - widget.controller?.notifyIdle(bounds); - _updateMarkers(); - } - - void _updateMarkers() { - setState(() => _geoEntryByMarkerKey = widget.markerClusterBuilder()); - } - - Future _updateVisibleRegion({required double zoom, required double rotation}) async { - if (!mounted) return; - - final bounds = await _serviceMapController?.getVisibleRegion(); - if (bounds != null && (bounds.northeast != uninitializedLatLng || bounds.southwest != uninitializedLatLng)) { - final sw = bounds.southwest; - final ne = bounds.northeast; - boundsNotifier.value = ZoomedBounds( - sw: _fromServiceLatLng(sw), - ne: _fromServiceLatLng(ne), - zoom: zoom, - rotation: rotation, - ); - } else { - // the visible region is sometimes uninitialized when queried right after creation, - // so we query it again next frame - WidgetsBinding.instance.addPostFrameCallback((_) { - _updateVisibleRegion(zoom: zoom, rotation: rotation); - }); - } - } - - Future _resetRotation() async { - final controller = _serviceMapController; - if (controller == null) return; - - await controller.animateCamera(CameraUpdate.newCameraPosition(CameraPosition( - target: _toServiceLatLng(bounds.projectedCenter), - zoom: bounds.zoom, - ))); - } - - Future _zoomBy(double amount) async { - final controller = _serviceMapController; - if (controller == null) return; - - final zoom = await controller.getZoomLevel(); - if (zoom == null) return; - - widget.onUserZoomChange?.call(zoom + amount); - await controller.animateCamera(CameraUpdate.zoomBy(amount)); - } - - Future _moveTo(LatLng point) async { - final controller = _serviceMapController; - if (controller == null) return; - - await controller.animateCamera(CameraUpdate.newLatLng(point)); - } - - // `LatLng` used by `google_maps_flutter` is not the one from `latlong2` package - LatLng _toServiceLatLng(ll.LatLng location) => LatLng(location.latitude, location.longitude); - - ll.LatLng _fromServiceLatLng(LatLng location) => ll.LatLng(location.lat, location.lng); - - MapType _toMapType(EntryMapStyle style) { - switch (style) { - case EntryMapStyle.hmsNormal: - return MapType.normal; - case EntryMapStyle.hmsTerrain: - return MapType.terrain; - default: - return MapType.none; - } - } -} diff --git a/plugins/aves_services_huawei/pubspec.lock b/plugins/aves_services_huawei/pubspec.lock deleted file mode 100644 index 289fef379..000000000 --- a/plugins/aves_services_huawei/pubspec.lock +++ /dev/null @@ -1,341 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - async: - dependency: transitive - description: - name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" - url: "https://pub.dev" - source: hosted - version: "2.11.0" - aves_map: - dependency: "direct main" - description: - path: "../aves_map" - relative: true - source: path - version: "0.0.1" - aves_platform_meta: - dependency: "direct main" - description: - path: "../aves_platform_meta" - relative: true - source: path - version: "0.0.1" - aves_services: - dependency: "direct main" - description: - path: "../aves_services" - relative: true - source: path - version: "0.0.1" - aves_ui: - dependency: transitive - description: - path: "../aves_ui" - relative: true - source: path - version: "0.0.1" - aves_utils: - dependency: "direct main" - description: - path: "../aves_utils" - relative: true - source: path - version: "0.0.1" - characters: - dependency: transitive - description: - name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - clock: - dependency: transitive - description: - name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" - source: hosted - version: "1.1.1" - collection: - dependency: transitive - description: - name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a - url: "https://pub.dev" - source: hosted - version: "1.18.0" - custom_rounded_rectangle_border: - dependency: transitive - description: - name: custom_rounded_rectangle_border - sha256: "3e8ca0c26b8d22d5d3842bab59dfd209995f8e42af7c2eef03da70642c040819" - url: "https://pub.dev" - source: hosted - version: "0.3.0" - dart_earcut: - dependency: transitive - description: - name: dart_earcut - sha256: "41b493147e30a051efb2da1e3acb7f38fe0db60afba24ac1ea5684cee272721e" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - equatable: - dependency: transitive - description: - name: equatable - sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 - url: "https://pub.dev" - source: hosted - version: "2.0.5" - fluster: - dependency: transitive - description: - name: fluster - sha256: "3807f5d088b7798f0416b8578498046338af98bb4fb922a70e2810b8293963f6" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - flutter_map: - dependency: transitive - description: - name: flutter_map - sha256: "2ecb34619a4be19df6f40c2f8dce1591675b4eff7a6857bd8f533706977385da" - url: "https://pub.dev" - source: hosted - version: "7.0.2" - http: - dependency: transitive - description: - name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - huawei_hmsavailability: - dependency: "direct main" - description: - path: flutter-hms-availability - ref: agp8-compat - resolved-ref: "031b7aa2553dfb71c2791c918f535b5d4e6a82be" - url: "https://github.com/deckerst/hms-flutter-plugin.git" - source: git - version: "6.6.0+300" - huawei_map: - dependency: "direct main" - description: - path: flutter-hms-map - ref: agp8-compat - resolved-ref: "031b7aa2553dfb71c2791c918f535b5d4e6a82be" - url: "https://github.com/deckerst/hms-flutter-plugin.git" - source: git - version: "6.11.0+304" - intl: - dependency: transitive - description: - name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.dev" - source: hosted - version: "0.19.0" - latlong2: - dependency: "direct main" - description: - name: latlong2 - sha256: "98227922caf49e6056f91b6c56945ea1c7b166f28ffcd5fb8e72fc0b453cc8fe" - url: "https://pub.dev" - source: hosted - version: "0.9.1" - lints: - dependency: transitive - description: - name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - lists: - dependency: transitive - description: - name: lists - sha256: "4ca5c19ae4350de036a7e996cdd1ee39c93ac0a2b840f4915459b7d0a7d4ab27" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - logger: - dependency: transitive - description: - name: logger - sha256: af05cc8714f356fd1f3888fb6741cbe9fbe25cdb6eedbab80e1a6db21047d4a4 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" - url: "https://pub.dev" - source: hosted - version: "0.8.0" - meta: - dependency: transitive - description: - name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" - url: "https://pub.dev" - source: hosted - version: "1.12.0" - mgrs_dart: - dependency: transitive - description: - name: mgrs_dart - sha256: fb89ae62f05fa0bb90f70c31fc870bcbcfd516c843fb554452ab3396f78586f7 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - nested: - dependency: transitive - description: - name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - path: - dependency: transitive - description: - name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" - source: hosted - version: "1.9.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - polylabel: - dependency: transitive - description: - name: polylabel - sha256: "41b9099afb2aa6c1730bdd8a0fab1400d287694ec7615dd8516935fa3144214b" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - proj4dart: - dependency: transitive - description: - name: proj4dart - sha256: c8a659ac9b6864aa47c171e78d41bbe6f5e1d7bd790a5814249e6b68bc44324e - url: "https://pub.dev" - source: hosted - version: "2.1.0" - provider: - dependency: "direct main" - description: - name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c - url: "https://pub.dev" - source: hosted - version: "6.1.2" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.99" - source_span: - dependency: transitive - description: - name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" - url: "https://pub.dev" - source: hosted - version: "1.10.0" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c - url: "https://pub.dev" - source: hosted - version: "1.3.2" - unicode: - dependency: transitive - description: - name: unicode - sha256: "0f69e46593d65245774d4f17125c6084d2c20b4e473a983f6e21b7d7762218f1" - url: "https://pub.dev" - source: hosted - version: "0.3.1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - web: - dependency: transitive - description: - name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" - url: "https://pub.dev" - source: hosted - version: "0.5.1" - wkt_parser: - dependency: transitive - description: - name: wkt_parser - sha256: "8a555fc60de3116c00aad67891bcab20f81a958e4219cc106e3c037aa3937f13" - url: "https://pub.dev" - source: hosted - version: "2.0.0" -sdks: - dart: ">=3.4.1 <4.0.0" - flutter: ">=3.10.0" diff --git a/plugins/aves_services_huawei/pubspec.yaml b/plugins/aves_services_huawei/pubspec.yaml deleted file mode 100644 index e0a49987d..000000000 --- a/plugins/aves_services_huawei/pubspec.yaml +++ /dev/null @@ -1,37 +0,0 @@ -name: aves_services_platform -version: 0.0.1 -publish_to: none - -environment: - sdk: '>=3.4.1 <4.0.0' - -dependencies: - flutter: - sdk: flutter - aves_map: - path: ../aves_map - aves_platform_meta: - path: ../aves_platform_meta - aves_services: - path: ../aves_services - aves_utils: - path: ../aves_utils - # cf https://github.com/HMS-Core/hms-flutter-plugin/pull/296 - huawei_hmsavailability: - git: - url: https://github.com/deckerst/hms-flutter-plugin.git - ref: agp8-compat - path: flutter-hms-availability - # cf https://github.com/HMS-Core/hms-flutter-plugin/pull/296 - huawei_map: - git: - url: https://github.com/deckerst/hms-flutter-plugin.git - ref: agp8-compat - path: flutter-hms-map - latlong2: - provider: - -dev_dependencies: - flutter_lints: - -flutter: diff --git a/scripts/apply_flavor_huawei.sh b/scripts/apply_flavor_huawei.sh deleted file mode 100755 index af65d4c4a..000000000 --- a/scripts/apply_flavor_huawei.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -if [ ! -d "scripts" ]; then - cd .. -fi - -PUBSPEC_PATH="pubspec.yaml" - -./flutterw clean - -sed -i 's|plugins/aves_services_.*|plugins/aves_services_huawei|g' "$PUBSPEC_PATH" -sed -i 's|plugins/aves_report_.*|plugins/aves_report_console|g' "$PUBSPEC_PATH" - -./flutterw pub get