Răsfoiți Sursa

导入背景失败问题 #81

HapeLee 1 an în urmă
părinte
comite
16558242d8

+ 10 - 5
app/src/main/java/io/legato/kazusa/ui/file/HandleFileContract.kt

@@ -41,15 +41,20 @@ class HandleFileContract :
     }
 
     override fun parseResult(resultCode: Int, intent: Intent?): Result {
-        val uri = if (resultCode != RESULT_OK || intent?.data == null ||
-            RealPathUtil.getTreePath(intent.data!!)
-                ?.startsWith(appCtx.externalFiles.parent!!) == true
+        if (resultCode != RESULT_OK || intent == null) {
+            return Result(null, requestCode, null)
+        }
+
+        val dataUri = intent.data
+        val uri = if (dataUri == null ||
+            RealPathUtil.getTreePath(dataUri)?.startsWith(appCtx.externalFiles.parent!!) == true
         ) {
             null
         } else {
-            intent.data
+            dataUri
         }
-        return Result(uri, requestCode, intent?.getStringExtra("value"))
+
+        return Result(uri, requestCode, intent.getStringExtra("value"))
     }
 
     companion object {

+ 11 - 8
app/src/main/java/io/legato/kazusa/utils/ActivityResultContracts.kt

@@ -26,22 +26,25 @@ class SelectImageContract : ActivityResultContract<Int?, SelectImageContract.Res
         val intent = Intent(Intent.ACTION_GET_CONTENT)
             .addCategory(Intent.CATEGORY_OPENABLE)
             .setType("image/*")
-        if (intent.resolveActivity(appCtx.packageManager) == null) {
-            useFallback = true
+        useFallback = intent.resolveActivity(appCtx.packageManager) == null
+        return if (useFallback) {
             val request = PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)
-            return delegate.createIntent(context, request)
+            delegate.createIntent(context, request)
+        } else {
+            intent
         }
-        return intent
     }
 
     override fun parseResult(resultCode: Int, intent: Intent?): Result {
-        val uri = if (useFallback) {
+        val isFallback = useFallback
+        useFallback = false
+
+        val uri = if (isFallback) {
             delegate.parseResult(resultCode, intent)
         } else if (resultCode == RESULT_OK) {
             intent?.data
-        } else {
-            null
-        }
+        } else null
+
         return Result(requestCode, uri)
     }