导入背景失败问题 #81

This commit is contained in:
HapeLee
2025-10-12 13:14:00 +08:00
parent bfc843d410
commit 16558242d8
2 changed files with 21 additions and 13 deletions
@@ -41,15 +41,20 @@ class HandleFileContract :
} }
override fun parseResult(resultCode: Int, intent: Intent?): Result { override fun parseResult(resultCode: Int, intent: Intent?): Result {
val uri = if (resultCode != RESULT_OK || intent?.data == null || if (resultCode != RESULT_OK || intent == null) {
RealPathUtil.getTreePath(intent.data!!) return Result(null, requestCode, null)
?.startsWith(appCtx.externalFiles.parent!!) == true }
val dataUri = intent.data
val uri = if (dataUri == null ||
RealPathUtil.getTreePath(dataUri)?.startsWith(appCtx.externalFiles.parent!!) == true
) { ) {
null null
} else { } else {
intent.data dataUri
} }
return Result(uri, requestCode, intent?.getStringExtra("value"))
return Result(uri, requestCode, intent.getStringExtra("value"))
} }
companion object { companion object {
@@ -26,22 +26,25 @@ class SelectImageContract : ActivityResultContract<Int?, SelectImageContract.Res
val intent = Intent(Intent.ACTION_GET_CONTENT) val intent = Intent(Intent.ACTION_GET_CONTENT)
.addCategory(Intent.CATEGORY_OPENABLE) .addCategory(Intent.CATEGORY_OPENABLE)
.setType("image/*") .setType("image/*")
if (intent.resolveActivity(appCtx.packageManager) == null) { useFallback = intent.resolveActivity(appCtx.packageManager) == null
useFallback = true return if (useFallback) {
val request = PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly) 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 { 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) delegate.parseResult(resultCode, intent)
} else if (resultCode == RESULT_OK) { } else if (resultCode == RESULT_OK) {
intent?.data intent?.data
} else { } else null
null
}
return Result(requestCode, uri) return Result(requestCode, uri)
} }