From 7b5de0ee0ff015ccda394a23d244cd666700789d Mon Sep 17 00:00:00 2001 From: septs Date: Sat, 8 Mar 2025 17:23:58 +0800 Subject: [PATCH] feat: improve QR code decoding from gallery with better resource management --- .../DownloadWizardMethodSelectFragment.kt | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardMethodSelectFragment.kt b/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardMethodSelectFragment.kt index 8ebc7ee..b2177d2 100644 --- a/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardMethodSelectFragment.kt +++ b/app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardMethodSelectFragment.kt @@ -54,16 +54,23 @@ class DownloadWizardMethodSelectFragment : DownloadWizardActivity.DownloadWizard } private suspend fun onGalleryResult(result: Uri?) { - var bmp: Bitmap? = null - try { - bmp = requireContext().contentResolver.openInputStream(result ?: return) + fun Bitmap.use(block: Bitmap.() -> T): T = try { + block() + } finally { + recycle() + } + + val decoded = try { + requireContext().contentResolver.openInputStream(result ?: return) .use(BitmapFactory::decodeStream) - val decoded = decodeQrFromBitmap(bmp) - withContext(Dispatchers.Main) { processLpaString(decoded) } + .use(::decodeQrFromBitmap) } catch (e: Exception) { Log.e(TAG, "Failed to decode QR code from gallery", e) - } finally { - bmp?.recycle() + return + } + + withContext(Dispatchers.Main) { + processLpaString(decoded) } }