diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt index f9ca4d742..9f59bb879 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt @@ -3,6 +3,7 @@ package deckers.thibault.aves.channel.calls import android.content.Context import android.content.Intent import android.content.res.Resources +import android.location.Geocoder import android.net.Uri import android.os.Build import android.provider.MediaStore @@ -43,6 +44,7 @@ class DeviceHandler(private val context: Context) : MethodCallHandler { "canRenderFlagEmojis" to (sdkInt >= Build.VERSION_CODES.LOLLIPOP), "canRequestManageMedia" to (sdkInt >= Build.VERSION_CODES.S), "canSetLockScreenWallpaper" to (sdkInt >= Build.VERSION_CODES.N), + "hasGeocoder" to Geocoder.isPresent(), "isDynamicColorAvailable" to (sdkInt >= Build.VERSION_CODES.S), "showPinShortcutFeedback" to (sdkInt >= Build.VERSION_CODES.O), "supportEdgeToEdgeUIMode" to (sdkInt >= Build.VERSION_CODES.Q), diff --git a/lib/model/availability.dart b/lib/model/availability.dart index fb5446d6e..2661e2266 100644 --- a/lib/model/availability.dart +++ b/lib/model/availability.dart @@ -1,3 +1,4 @@ +import 'package:aves/model/device.dart'; import 'package:aves/model/settings/enums/map_style.dart'; import 'package:aves/services/common/services.dart'; import 'package:aves_map/aves_map.dart'; @@ -40,10 +41,8 @@ class LiveAvesAvailability implements AvesAvailability { } } - // local geocoding with `geocoder` seems to require Google Play Services - // what about devices with Huawei Mobile Services? @override - Future get canLocatePlaces async => mobileServices.isServiceAvailable && await isConnected; + Future get canLocatePlaces async => device.hasGeocoder && await isConnected; @override List get mapStyles => [ diff --git a/lib/model/device.dart b/lib/model/device.dart index d599ab64f..6c508653a 100644 --- a/lib/model/device.dart +++ b/lib/model/device.dart @@ -6,7 +6,7 @@ final Device device = Device._private(); class Device { late final String _userAgent; late final bool _canGrantDirectoryAccess, _canPinShortcut, _canPrint, _canRenderFlagEmojis, _canRequestManageMedia, _canSetLockScreenWallpaper; - late final bool _isDynamicColorAvailable, _showPinShortcutFeedback, _supportEdgeToEdgeUIMode; + late final bool _hasGeocoder, _isDynamicColorAvailable, _showPinShortcutFeedback, _supportEdgeToEdgeUIMode; String get userAgent => _userAgent; @@ -22,6 +22,8 @@ class Device { bool get canSetLockScreenWallpaper => _canSetLockScreenWallpaper; + bool get hasGeocoder => _hasGeocoder; + bool get isDynamicColorAvailable => _isDynamicColorAvailable; bool get showPinShortcutFeedback => _showPinShortcutFeedback; @@ -41,6 +43,7 @@ class Device { _canRenderFlagEmojis = capabilities['canRenderFlagEmojis'] ?? false; _canRequestManageMedia = capabilities['canRequestManageMedia'] ?? false; _canSetLockScreenWallpaper = capabilities['canSetLockScreenWallpaper'] ?? false; + _hasGeocoder = capabilities['hasGeocoder'] ?? false; _isDynamicColorAvailable = capabilities['isDynamicColorAvailable'] ?? false; _showPinShortcutFeedback = capabilities['showPinShortcutFeedback'] ?? false; _supportEdgeToEdgeUIMode = capabilities['supportEdgeToEdgeUIMode'] ?? false;