android: cleanup
This commit is contained in:
parent
ef2d0eefb0
commit
3a5c19f7d6
5 changed files with 57 additions and 36 deletions
|
@ -1,6 +1,5 @@
|
||||||
package deckers.thibault.aves.channel.calls
|
package deckers.thibault.aves.channel.calls
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
@ -32,7 +31,6 @@ class AnalysisHandler(private val activity: Activity, private val onAnalysisComp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("CommitPrefEdits")
|
|
||||||
private fun registerCallback(call: MethodCall, result: MethodChannel.Result) {
|
private fun registerCallback(call: MethodCall, result: MethodChannel.Result) {
|
||||||
val callbackHandle = call.argument<Number>("callbackHandle")?.toLong()
|
val callbackHandle = call.argument<Number>("callbackHandle")?.toLong()
|
||||||
if (callbackHandle == null) {
|
if (callbackHandle == null) {
|
||||||
|
|
|
@ -3,8 +3,8 @@ package deckers.thibault.aves.channel.calls
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.location.Address
|
import android.location.Address
|
||||||
import android.location.Geocoder
|
import android.location.Geocoder
|
||||||
import android.os.Build
|
|
||||||
import deckers.thibault.aves.channel.calls.Coresult.Companion.safe
|
import deckers.thibault.aves.channel.calls.Coresult.Companion.safe
|
||||||
|
import deckers.thibault.aves.utils.getFromLocationCompat
|
||||||
import io.flutter.plugin.common.MethodCall
|
import io.flutter.plugin.common.MethodCall
|
||||||
import io.flutter.plugin.common.MethodChannel
|
import io.flutter.plugin.common.MethodChannel
|
||||||
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
|
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
|
||||||
|
@ -12,8 +12,7 @@ import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.io.IOException
|
import java.util.Locale
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
// as of 2021/03/10, geocoding packages exist but:
|
// as of 2021/03/10, geocoding packages exist but:
|
||||||
// - `geocoder` is unmaintained
|
// - `geocoder` is unmaintained
|
||||||
|
@ -76,26 +75,9 @@ class GeocodingHandler(private val context: Context) : MethodCallHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
geocoder!!.getFromLocationCompat(
|
||||||
geocoder!!.getFromLocation(latitude, longitude, maxResults, object : Geocoder.GeocodeListener {
|
latitude, longitude, maxResults, ::processAddresses,
|
||||||
override fun onGeocode(addresses: List<Address?>) = processAddresses(addresses.filterNotNull())
|
) { code, message, details -> result.error(code, message, details) }
|
||||||
|
|
||||||
override fun onError(errorMessage: String?) {
|
|
||||||
result.error("getAddress-asyncerror", "failed to get address", errorMessage)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
@Suppress("deprecation")
|
|
||||||
val addresses = geocoder!!.getFromLocation(latitude, longitude, maxResults) ?: ArrayList()
|
|
||||||
processAddresses(addresses)
|
|
||||||
} catch (e: IOException) {
|
|
||||||
// `grpc failed`, etc.
|
|
||||||
result.error("getAddress-network", "failed to get address because of network issues", e.message)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
result.error("getAddress-exception", "failed to get address", e.message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
package deckers.thibault.aves.channel.calls
|
package deckers.thibault.aves.channel.calls
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import deckers.thibault.aves.SearchSuggestionsProvider
|
import deckers.thibault.aves.SearchSuggestionsProvider
|
||||||
import deckers.thibault.aves.channel.calls.Coresult.Companion.safe
|
import deckers.thibault.aves.channel.calls.Coresult.Companion.safe
|
||||||
import io.flutter.plugin.common.MethodCall
|
import io.flutter.plugin.common.MethodCall
|
||||||
import io.flutter.plugin.common.MethodChannel
|
import io.flutter.plugin.common.MethodChannel
|
||||||
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
|
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.SupervisorJob
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class GlobalSearchHandler(private val context: Context) : MethodCallHandler {
|
class GlobalSearchHandler(private val context: Context) : MethodCallHandler {
|
||||||
private val ioScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
private val ioScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
||||||
|
@ -19,7 +21,6 @@ class GlobalSearchHandler(private val context: Context) : MethodCallHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("CommitPrefEdits")
|
|
||||||
private fun registerCallback(call: MethodCall, result: MethodChannel.Result) {
|
private fun registerCallback(call: MethodCall, result: MethodChannel.Result) {
|
||||||
val callbackHandle = call.argument<Number>("callbackHandle")?.toLong()
|
val callbackHandle = call.argument<Number>("callbackHandle")?.toLong()
|
||||||
if (callbackHandle == null) {
|
if (callbackHandle == null) {
|
||||||
|
|
|
@ -6,12 +6,12 @@ import android.graphics.BitmapFactory
|
||||||
import android.graphics.BitmapRegionDecoder
|
import android.graphics.BitmapRegionDecoder
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.load.DecodeFormat
|
import com.bumptech.glide.load.DecodeFormat
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import deckers.thibault.aves.decoder.MultiTrackImage
|
import deckers.thibault.aves.decoder.MultiTrackImage
|
||||||
|
import deckers.thibault.aves.utils.BitmapRegionDecoderCompat
|
||||||
import deckers.thibault.aves.utils.BitmapUtils.getBytes
|
import deckers.thibault.aves.utils.BitmapUtils.getBytes
|
||||||
import deckers.thibault.aves.utils.MimeTypes
|
import deckers.thibault.aves.utils.MimeTypes
|
||||||
import deckers.thibault.aves.utils.StorageUtils
|
import deckers.thibault.aves.utils.StorageUtils
|
||||||
|
@ -68,13 +68,7 @@ class RegionFetcher internal constructor(
|
||||||
try {
|
try {
|
||||||
if (currentDecoderRef == null) {
|
if (currentDecoderRef == null) {
|
||||||
val newDecoder = StorageUtils.openInputStream(context, uri)?.use { input ->
|
val newDecoder = StorageUtils.openInputStream(context, uri)?.use { input ->
|
||||||
@Suppress("BlockingMethodInNonBlockingContext")
|
BitmapRegionDecoderCompat.newInstance(input)
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
||||||
BitmapRegionDecoder.newInstance(input)
|
|
||||||
} else {
|
|
||||||
@Suppress("deprecation")
|
|
||||||
BitmapRegionDecoder.newInstance(input, false)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (newDecoder == null) {
|
if (newDecoder == null) {
|
||||||
result.error("getRegion-read-null", "failed to open file for mimeType=$mimeType uri=$uri regionRect=$regionRect", null)
|
result.error("getRegion-read-null", "failed to open file for mimeType=$mimeType uri=$uri regionRect=$regionRect", null)
|
||||||
|
|
|
@ -5,9 +5,14 @@ import android.content.Intent
|
||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.content.pm.ResolveInfo
|
import android.content.pm.ResolveInfo
|
||||||
|
import android.graphics.BitmapRegionDecoder
|
||||||
|
import android.location.Address
|
||||||
|
import android.location.Geocoder
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import android.view.Display
|
import android.view.Display
|
||||||
|
import java.io.IOException
|
||||||
|
import java.io.InputStream
|
||||||
|
|
||||||
inline fun <reified T> Intent.getParcelableExtraCompat(name: String): T? {
|
inline fun <reified T> Intent.getParcelableExtraCompat(name: String): T? {
|
||||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||||
|
@ -44,3 +49,44 @@ fun PackageManager.queryIntentActivitiesCompat(intent: Intent, flags: Int): List
|
||||||
queryIntentActivities(intent, flags)
|
queryIntentActivities(intent, flags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Geocoder.getFromLocationCompat(
|
||||||
|
latitude: Double,
|
||||||
|
longitude: Double,
|
||||||
|
maxResults: Int,
|
||||||
|
processAddresses: (addresses: List<Address>) -> Unit,
|
||||||
|
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<Address?>) = processAddresses(addresses.filterNotNull())
|
||||||
|
|
||||||
|
override fun onError(errorMessage: String?) {
|
||||||
|
onError("getAddress-asyncerror", "failed to get address", errorMessage)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
@Suppress("deprecation")
|
||||||
|
val addresses = getFromLocation(latitude, longitude, maxResults) ?: ArrayList()
|
||||||
|
processAddresses(addresses)
|
||||||
|
} catch (e: IOException) {
|
||||||
|
// `grpc failed`, etc.
|
||||||
|
onError("getAddress-network", "failed to get address because of network issues", e.message)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
onError("getAddress-exception", "failed to get address", e.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object BitmapRegionDecoderCompat {
|
||||||
|
@Throws(IOException::class)
|
||||||
|
fun newInstance(input: InputStream): BitmapRegionDecoder? {
|
||||||
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
BitmapRegionDecoder.newInstance(input)
|
||||||
|
} else {
|
||||||
|
@Suppress("deprecation")
|
||||||
|
BitmapRegionDecoder.newInstance(input, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue