From e7ff3b707c64ed3daf5de470c9bd671aee450ce8 Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Thu, 1 May 2025 11:45:04 +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 --- .../legado/app/ui/file/HandleFileActivity.kt | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/file/HandleFileActivity.kt b/app/src/main/java/io/legado/app/ui/file/HandleFileActivity.kt index 0c9022e1d..e6802f14e 100644 --- a/app/src/main/java/io/legado/app/ui/file/HandleFileActivity.kt +++ b/app/src/main/java/io/legado/app/ui/file/HandleFileActivity.kt @@ -3,6 +3,7 @@ package io.legado.app.ui.file import android.content.Intent import android.net.Uri import android.os.Bundle +import android.os.Environment import android.webkit.MimeTypeMap import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels @@ -17,6 +18,7 @@ import io.legado.app.lib.dialogs.SelectItem import io.legado.app.lib.dialogs.alert import io.legado.app.lib.permission.Permissions import io.legado.app.lib.permission.PermissionsCompat +import io.legado.app.utils.checkWrite import io.legado.app.utils.getJsonArray import io.legado.app.utils.isContentScheme import io.legado.app.utils.launch @@ -141,7 +143,7 @@ class HandleFileActivity : } } - 112 -> { // 手动输入目录路径 + 112 -> checkPermissions { // 手动输入目录路径 showInputDirectoryDialog() } @@ -171,21 +173,44 @@ class HandleFileActivity : customView { alertBinding.root } okButton { val inputPath = alertBinding.editView.text.toString() - if (inputPath.isNotBlank()) { - val file = File(inputPath) - if (file.exists() && file.isDirectory && file.canRead()) { - onResult(Intent().setData(Uri.fromFile(file))) - } else { - toastOnUi(getString(R.string.invalid_directory)) - } - } else { + if (inputPath.isBlank()) { toastOnUi(getString(R.string.empty_directory_input)) + return@okButton } + val file = File(inputPath) + if (file.exists() && + file.isDirectory && + isExternalStorage(file) && + file.checkWrite() + ) { + onResult(Intent().setData(Uri.fromFile(file))) + } else { + toastOnUi(getString(R.string.invalid_directory)) + } + } + onDismiss { + finish() } cancelButton() } } + private fun isExternalStorage(path: File): Boolean { + try { + if (Environment.isExternalStorageEmulated(path)) { + return true + } + } catch (_: IllegalArgumentException) { + } + try { + if (Environment.isExternalStorageRemovable(path)) { + return true + } + } catch (_: IllegalArgumentException) { + } + return false + } + private fun getFileData(): Triple? { val fileName = intent.getStringExtra("fileName") val file = intent.getStringExtra("fileKey")?.let {