Refactor Context.decodeBitmap to non-blocking

This commit is contained in:
FooIbar committed 2024-02-13 22:07:36 +08:00
1 parent 07345f90e6
commit b86eebf0a7
3 files changed
+8 -11

No files matched your search

@@ -32,7 +32,6 @@ import coil3.BitmapImage
import coil3.DrawableImage
import coil3.Image as CoilImage
import coil3.asCoilImage
import coil3.executeBlocking
import coil3.imageLoader
import coil3.request.CachePolicy
import coil3.request.ErrorResult
@@ -168,14 +167,14 @@ class Image private constructor(image: CoilImage, private val src: AutoCloseable
}.getOrNull()
}
fun Context.decodeBitmap(uri: Uri): Bitmap {
suspend fun Context.decodeBitmap(uri: Uri): Bitmap {
val req = imageRequest {
memoryCachePolicy(CachePolicy.DISABLED)
data(uri)
size(imageSearchMaxSize)
scale(Scale.FILL)
}
val image = when (val result = appCtx.imageLoader.executeBlocking(req)) {
val image = when (val result = appCtx.imageLoader.execute(req)) {
is SuccessResult -> result.image
is ErrorResult -> throw result.throwable
}
@@ -185,12 +185,10 @@ class MainActivity : EhActivity() {
}
}
private fun saveImageToTempFile(uri: Uri): File? {
val bitmap = runCatching {
decodeBitmap(uri)
}.getOrNull() ?: return null
val temp = AppConfig.createTempFile() ?: return null
return runCatching {
private suspend fun saveImageToTempFile(uri: Uri): File? {
return runSuspendCatching {
val bitmap = decodeBitmap(uri)
val temp = AppConfig.createTempFile()
FileOutputStream(temp).use { bitmap.compress(Bitmap.CompressFormat.JPEG, 90, it) }
temp
}.getOrElse {
@@ -274,7 +272,7 @@ class MainActivity : EhActivity() {
} else if (type != null && type.startsWith("image/")) {
val uri = intent.getParcelableExtraCompat<Uri>(Intent.EXTRA_STREAM)
if (null != uri) {
val temp = saveImageToTempFile(uri)
val temp = withIOContext { saveImageToTempFile(uri) }
if (null != temp) {
navController.navigate(
ListUrlBuilder(
@@ -552,7 +552,7 @@ fun GalleryListScreen(lub: ListUrlBuilder, navigator: DestinationsNavigator) {
}
val uri = Uri.parse(imagePath)
val temp = AppConfig.createTempFile() ?: return@SearchBarScreen
val bitmap = context.decodeBitmap(uri) ?: return@SearchBarScreen
val bitmap = context.decodeBitmap(uri)
temp.outputStream().use { bitmap.compress(Bitmap.CompressFormat.JPEG, 90, it) }
builder.imagePath = temp.path
builder.isUseSimilarityScan = useSimilarityScan