This commit is contained in:
Horis
2025-05-01 11:45:04 +08:00
parent 525ee3a702
commit e7ff3b707c

View File

@@ -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<String, Any, String>? {
val fileName = intent.getStringExtra("fileName")
val file = intent.getStringExtra("fileKey")?.let {