From 7f462ae619855942617b31c55446fb6df4eb41b1 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Wed, 26 Feb 2025 22:47:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/utils/ActivityResultContracts.kt | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/legado/app/utils/ActivityResultContracts.kt b/app/src/main/java/io/legado/app/utils/ActivityResultContracts.kt index 78dd8b8cc..ffb925c53 100644 --- a/app/src/main/java/io/legado/app/utils/ActivityResultContracts.kt +++ b/app/src/main/java/io/legado/app/utils/ActivityResultContracts.kt @@ -1,5 +1,6 @@ package io.legado.app.utils +import android.app.Activity.RESULT_OK import android.content.Context import android.content.Intent import android.net.Uri @@ -8,6 +9,7 @@ import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContract import androidx.activity.result.contract.ActivityResultContracts +import splitties.init.appCtx fun ActivityResultLauncher.launch() { launch(null) @@ -16,16 +18,31 @@ fun ActivityResultLauncher.launch() { class SelectImageContract : ActivityResultContract() { private val delegate = ActivityResultContracts.PickVisualMedia() - var requestCode: Int? = null + private var requestCode: Int? = null + private var useFallback = false override fun createIntent(context: Context, input: Int?): Intent { requestCode = input - val request = PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly) - return delegate.createIntent(context, request) + val intent = Intent(Intent.ACTION_GET_CONTENT) + .addCategory(Intent.CATEGORY_OPENABLE) + .setType("image/*") + if (intent.resolveActivity(appCtx.packageManager) == null) { + useFallback = true + val request = PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly) + return delegate.createIntent(context, request) + } + return intent } override fun parseResult(resultCode: Int, intent: Intent?): Result { - return Result(requestCode, delegate.parseResult(resultCode, intent)) + val uri = if (useFallback) { + delegate.parseResult(resultCode, intent) + } else if (resultCode == RESULT_OK) { + intent?.data + } else { + null + } + return Result(requestCode, uri) } data class Result(