android compat fix for old devices

This commit is contained in:
Thibault Deckers 2024-05-22 22:16:42 +02:00
parent ab92b883b6
commit c4a7969ed7
6 changed files with 39 additions and 15 deletions

View file

@ -56,13 +56,7 @@ fun Geocoder.getFromLocationCompat(
onError: (errorCode: String, errorMessage: String?, errorDetails: Any?) -> Unit, onError: (errorCode: String, errorMessage: String?, errorDetails: Any?) -> Unit,
) { ) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
getFromLocation(latitude, longitude, maxResults, object : Geocoder.GeocodeListener { Compat33.geocoderGetFromLocation(this, latitude, longitude, maxResults, processAddresses, onError)
override fun onGeocode(addresses: List<Address?>) = processAddresses(addresses.filterNotNull())
override fun onError(errorMessage: String?) {
onError("getAddress-asyncerror", "failed to get address", errorMessage)
}
})
} else { } else {
try { try {
@Suppress("deprecation") @Suppress("deprecation")

View file

@ -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<Address>) -> Unit,
onError: (errorCode: String, errorMessage: String?, errorDetails: Any?) -> Unit,
) {
geocoder.getFromLocation(latitude, longitude, maxResults, object : Geocoder.GeocodeListener {
override fun onGeocode(addresses: List<Address?>) = processAddresses(addresses.filterNotNull())
override fun onError(errorMessage: String?) {
onError("getAddress-asyncerror", "failed to get address", errorMessage)
}
})
}
}

View file

@ -1,6 +1,6 @@
buildscript { buildscript {
ext { 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' glide_version = '4.16.0'
// AppGallery Connect plugin versions: https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agc-sdk-changenotes-0000001058732550 // 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' huawei_agconnect_version = '1.9.1.300'

View file

@ -8,9 +8,9 @@ pluginManagement {
} }
settings.ext.flutterSdkPath = flutterSdkPath() settings.ext.flutterSdkPath = flutterSdkPath()
settings.ext.kotlin_version = '1.9.21' settings.ext.kotlin_version = '1.9.24'
settings.ext.ksp_version = "$kotlin_version-1.0.15" settings.ext.ksp_version = "$kotlin_version-1.0.20"
settings.ext.agp_version = '8.4.0' settings.ext.agp_version = '8.4.1'
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")

View file

@ -3,8 +3,8 @@ version '1.0-SNAPSHOT'
buildscript { buildscript {
ext { ext {
kotlin_version = '1.8.21' kotlin_version = '1.9.24'
agp_version = '8.3.1' agp_version = '8.4.1'
} }
repositories { repositories {

View file

@ -3,8 +3,8 @@ version '1.0-SNAPSHOT'
buildscript { buildscript {
ext { ext {
kotlin_version = '1.9.22' kotlin_version = '1.9.24'
agp_version = '8.4.0' agp_version = '8.4.1'
} }
repositories { repositories {