From c4a7969ed7caf6c05c2a24df12422052210346ae Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Wed, 22 May 2024 22:16:42 +0200 Subject: [PATCH] android compat fix for old devices --- .../deckers/thibault/aves/utils/Compat.kt | 8 +---- .../deckers/thibault/aves/utils/Compat33.kt | 30 +++++++++++++++++++ android/build.gradle | 2 +- android/settings.gradle | 6 ++-- .../aves_platform_meta/android/build.gradle | 4 +-- .../aves_screen_state/android/build.gradle | 4 +-- 6 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 android/app/src/main/kotlin/deckers/thibault/aves/utils/Compat33.kt diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/utils/Compat.kt b/android/app/src/main/kotlin/deckers/thibault/aves/utils/Compat.kt index 90a9b154f..eea1b08cb 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/utils/Compat.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/utils/Compat.kt @@ -56,13 +56,7 @@ fun Geocoder.getFromLocationCompat( onError: (errorCode: String, errorMessage: String?, errorDetails: Any?) -> Unit, ) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - getFromLocation(latitude, longitude, maxResults, object : Geocoder.GeocodeListener { - override fun onGeocode(addresses: List) = processAddresses(addresses.filterNotNull()) - - override fun onError(errorMessage: String?) { - onError("getAddress-asyncerror", "failed to get address", errorMessage) - } - }) + Compat33.geocoderGetFromLocation(this, latitude, longitude, maxResults, processAddresses, onError) } else { try { @Suppress("deprecation") diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/utils/Compat33.kt b/android/app/src/main/kotlin/deckers/thibault/aves/utils/Compat33.kt new file mode 100644 index 000000000..537773205 --- /dev/null +++ b/android/app/src/main/kotlin/deckers/thibault/aves/utils/Compat33.kt @@ -0,0 +1,30 @@ +package deckers.thibault.aves.utils + +import android.location.Address +import android.location.Geocoder +import android.os.Build +import androidx.annotation.RequiresApi + +/** + * Compatibility layer in a separate object to avoid class loading issues on older Android versions. + * e.g. `ClassNotFoundException` for `android.location.Geocoder$GeocodeListener` + */ +@RequiresApi(Build.VERSION_CODES.TIRAMISU) +object Compat33 { + fun geocoderGetFromLocation( + geocoder: Geocoder, + latitude: Double, + longitude: Double, + maxResults: Int, + processAddresses: (addresses: List
) -> Unit, + onError: (errorCode: String, errorMessage: String?, errorDetails: Any?) -> Unit, + ) { + geocoder.getFromLocation(latitude, longitude, maxResults, object : Geocoder.GeocodeListener { + override fun onGeocode(addresses: List) = processAddresses(addresses.filterNotNull()) + + override fun onError(errorMessage: String?) { + onError("getAddress-asyncerror", "failed to get address", errorMessage) + } + }) + } +} \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 141ec6ba5..87bd1337b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,6 +1,6 @@ buildscript { ext { - agp_version = '8.4.0' // same as `settings.ext.agp_version` in `/android/settings.gradle` + agp_version = '8.4.1' // 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' diff --git a/android/settings.gradle b/android/settings.gradle index 1e195978e..293bc6423 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -8,9 +8,9 @@ pluginManagement { } settings.ext.flutterSdkPath = flutterSdkPath() - settings.ext.kotlin_version = '1.9.21' - settings.ext.ksp_version = "$kotlin_version-1.0.15" - settings.ext.agp_version = '8.4.0' + settings.ext.kotlin_version = '1.9.24' + settings.ext.ksp_version = "$kotlin_version-1.0.20" + settings.ext.agp_version = '8.4.1' includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") diff --git a/plugins/aves_platform_meta/android/build.gradle b/plugins/aves_platform_meta/android/build.gradle index 81a5f9038..0c38b3d1e 100644 --- a/plugins/aves_platform_meta/android/build.gradle +++ b/plugins/aves_platform_meta/android/build.gradle @@ -3,8 +3,8 @@ version '1.0-SNAPSHOT' buildscript { ext { - kotlin_version = '1.8.21' - agp_version = '8.3.1' + kotlin_version = '1.9.24' + agp_version = '8.4.1' } repositories { diff --git a/plugins/aves_screen_state/android/build.gradle b/plugins/aves_screen_state/android/build.gradle index 49286b6ab..941d165b2 100644 --- a/plugins/aves_screen_state/android/build.gradle +++ b/plugins/aves_screen_state/android/build.gradle @@ -3,8 +3,8 @@ version '1.0-SNAPSHOT' buildscript { ext { - kotlin_version = '1.9.22' - agp_version = '8.4.0' + kotlin_version = '1.9.24' + agp_version = '8.4.1' } repositories {