Refactor Context.decodeBitmap to non-blocking
This commit is contained in:
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
|
||||
|
||||
Reference in new issue
Block a user