This commit is contained in:
Horis
2025-05-01 11:45:04 +08:00
parent b86d2cb6fe
commit 14fa8ee9ce
@@ -3,6 +3,7 @@ package io.legado.app.ui.file
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Environment
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels 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.dialogs.alert
import io.legado.app.lib.permission.Permissions import io.legado.app.lib.permission.Permissions
import io.legado.app.lib.permission.PermissionsCompat import io.legado.app.lib.permission.PermissionsCompat
import io.legado.app.utils.checkWrite
import io.legado.app.utils.getJsonArray import io.legado.app.utils.getJsonArray
import io.legado.app.utils.isContentScheme import io.legado.app.utils.isContentScheme
import io.legado.app.utils.launch import io.legado.app.utils.launch
@@ -141,7 +143,7 @@ class HandleFileActivity :
} }
} }
112 -> { // 手动输入目录路径 112 -> checkPermissions { // 手动输入目录路径
showInputDirectoryDialog() showInputDirectoryDialog()
} }
@@ -171,21 +173,44 @@ class HandleFileActivity :
customView { alertBinding.root } customView { alertBinding.root }
okButton { okButton {
val inputPath = alertBinding.editView.text.toString() val inputPath = alertBinding.editView.text.toString()
if (inputPath.isNotBlank()) { if (inputPath.isBlank()) {
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 {
toastOnUi(getString(R.string.empty_directory_input)) 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() 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>? { private fun getFileData(): Triple<String, Any, String>? {
val fileName = intent.getStringExtra("fileName") val fileName = intent.getStringExtra("fileName")
val file = intent.getStringExtra("fileKey")?.let { val file = intent.getStringExtra("fileKey")?.let {