mirror of
https://github.com/gedoor/legado.git
synced 2024-07-06 23:47:49 +08:00
优化
This commit is contained in:
parent
c18b170351
commit
2dc6766f43
@ -2,11 +2,9 @@ package io.legado.app.ui.filepicker
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.constant.Permissions
|
|
||||||
import io.legado.app.lib.dialogs.alert
|
import io.legado.app.lib.dialogs.alert
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
@ -34,25 +32,21 @@ object FilePicker {
|
|||||||
val intent = createSelectDirIntent()
|
val intent = createSelectDirIntent()
|
||||||
activity.startActivityForResult(intent, requestCode)
|
activity.startActivityForResult(intent, requestCode)
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
checkPermissions(activity) {
|
FilePickerDialog.show(
|
||||||
FilePickerDialog.show(
|
activity.supportFragmentManager,
|
||||||
activity.supportFragmentManager,
|
requestCode,
|
||||||
requestCode,
|
mode = FilePickerDialog.DIRECTORY
|
||||||
mode = FilePickerDialog.DIRECTORY
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
val selectText = selectList[index]
|
val selectText = selectList[index]
|
||||||
if (selectText == activity.getString(R.string.app_folder_picker)) {
|
if (selectText == activity.getString(R.string.app_folder_picker)) {
|
||||||
checkPermissions(activity) {
|
FilePickerDialog.show(
|
||||||
FilePickerDialog.show(
|
activity.supportFragmentManager,
|
||||||
activity.supportFragmentManager,
|
requestCode,
|
||||||
requestCode,
|
mode = FilePickerDialog.DIRECTORY
|
||||||
mode = FilePickerDialog.DIRECTORY
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
otherFun?.invoke(selectText)
|
otherFun?.invoke(selectText)
|
||||||
}
|
}
|
||||||
@ -84,25 +78,21 @@ object FilePicker {
|
|||||||
val intent = createSelectDirIntent()
|
val intent = createSelectDirIntent()
|
||||||
fragment.startActivityForResult(intent, requestCode)
|
fragment.startActivityForResult(intent, requestCode)
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
checkPermissions(fragment) {
|
FilePickerDialog.show(
|
||||||
FilePickerDialog.show(
|
fragment.childFragmentManager,
|
||||||
fragment.childFragmentManager,
|
requestCode,
|
||||||
requestCode,
|
mode = FilePickerDialog.DIRECTORY
|
||||||
mode = FilePickerDialog.DIRECTORY
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
val selectText = selectList[index]
|
val selectText = selectList[index]
|
||||||
if (selectText == fragment.getString(R.string.app_folder_picker)) {
|
if (selectText == fragment.getString(R.string.app_folder_picker)) {
|
||||||
checkPermissions(fragment) {
|
FilePickerDialog.show(
|
||||||
FilePickerDialog.show(
|
fragment.childFragmentManager,
|
||||||
fragment.childFragmentManager,
|
requestCode,
|
||||||
requestCode,
|
mode = FilePickerDialog.DIRECTORY
|
||||||
mode = FilePickerDialog.DIRECTORY
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
otherFun?.invoke(selectText)
|
otherFun?.invoke(selectText)
|
||||||
}
|
}
|
||||||
@ -139,27 +129,23 @@ object FilePicker {
|
|||||||
)
|
)
|
||||||
activity.startActivityForResult(intent, requestCode)
|
activity.startActivityForResult(intent, requestCode)
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
checkPermissions(activity) {
|
FilePickerDialog.show(
|
||||||
FilePickerDialog.show(
|
activity.supportFragmentManager,
|
||||||
activity.supportFragmentManager,
|
requestCode,
|
||||||
requestCode,
|
mode = FilePickerDialog.FILE,
|
||||||
mode = FilePickerDialog.FILE,
|
allowExtensions = allowExtensions
|
||||||
allowExtensions = allowExtensions
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
val selectText = selectList[index]
|
val selectText = selectList[index]
|
||||||
if (selectText == activity.getString(R.string.app_file_picker)) {
|
if (selectText == activity.getString(R.string.app_file_picker)) {
|
||||||
checkPermissions(activity) {
|
FilePickerDialog.show(
|
||||||
FilePickerDialog.show(
|
activity.supportFragmentManager,
|
||||||
activity.supportFragmentManager,
|
requestCode,
|
||||||
requestCode,
|
mode = FilePickerDialog.FILE,
|
||||||
mode = FilePickerDialog.FILE,
|
allowExtensions = allowExtensions
|
||||||
allowExtensions = allowExtensions
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
otherFun?.invoke(selectText)
|
otherFun?.invoke(selectText)
|
||||||
}
|
}
|
||||||
@ -196,27 +182,23 @@ object FilePicker {
|
|||||||
)
|
)
|
||||||
fragment.startActivityForResult(intent, requestCode)
|
fragment.startActivityForResult(intent, requestCode)
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
checkPermissions(fragment) {
|
FilePickerDialog.show(
|
||||||
FilePickerDialog.show(
|
fragment.childFragmentManager,
|
||||||
fragment.childFragmentManager,
|
requestCode,
|
||||||
requestCode,
|
mode = FilePickerDialog.FILE,
|
||||||
mode = FilePickerDialog.FILE,
|
allowExtensions = allowExtensions
|
||||||
allowExtensions = allowExtensions
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
val selectText = selectList[index]
|
val selectText = selectList[index]
|
||||||
if (selectText == fragment.getString(R.string.app_file_picker)) {
|
if (selectText == fragment.getString(R.string.app_file_picker)) {
|
||||||
checkPermissions(fragment) {
|
FilePickerDialog.show(
|
||||||
FilePickerDialog.show(
|
fragment.childFragmentManager,
|
||||||
fragment.childFragmentManager,
|
requestCode,
|
||||||
requestCode,
|
mode = FilePickerDialog.FILE,
|
||||||
mode = FilePickerDialog.FILE,
|
allowExtensions = allowExtensions
|
||||||
allowExtensions = allowExtensions
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
otherFun?.invoke(selectText)
|
otherFun?.invoke(selectText)
|
||||||
}
|
}
|
||||||
@ -246,18 +228,6 @@ object FilePicker {
|
|||||||
return intent
|
return intent
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun checkPermissions(fragment: Fragment, success: (() -> Unit)? = null) {
|
|
||||||
fragment.registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
|
|
||||||
success?.invoke()
|
|
||||||
}.launch(Permissions.Group.STORAGE)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun checkPermissions(activity: AppCompatActivity, success: (() -> Unit)? = null) {
|
|
||||||
activity.registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
|
|
||||||
success?.invoke()
|
|
||||||
}.launch(Permissions.Group.STORAGE)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun typesOfExtensions(allowExtensions: Array<String>): Array<String> {
|
private fun typesOfExtensions(allowExtensions: Array<String>): Array<String> {
|
||||||
val types = hashSetOf<String>()
|
val types = hashSetOf<String>()
|
||||||
if (allowExtensions.isNullOrEmpty()) {
|
if (allowExtensions.isNullOrEmpty()) {
|
||||||
|
@ -8,12 +8,14 @@ import android.view.LayoutInflater
|
|||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.FragmentManager
|
import androidx.fragment.app.FragmentManager
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
|
import io.legado.app.constant.Permissions
|
||||||
import io.legado.app.databinding.DialogFileChooserBinding
|
import io.legado.app.databinding.DialogFileChooserBinding
|
||||||
import io.legado.app.lib.theme.primaryColor
|
import io.legado.app.lib.theme.primaryColor
|
||||||
import io.legado.app.ui.filepicker.adapter.FileAdapter
|
import io.legado.app.ui.filepicker.adapter.FileAdapter
|
||||||
@ -69,7 +71,19 @@ class FilePickerDialog : DialogFragment(),
|
|||||||
override var isShowHomeDir: Boolean = false
|
override var isShowHomeDir: Boolean = false
|
||||||
override var isShowUpDir: Boolean = true
|
override var isShowUpDir: Boolean = true
|
||||||
override var isShowHideDir: Boolean = false
|
override var isShowHideDir: Boolean = false
|
||||||
|
private val queryPermission =
|
||||||
|
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
|
||||||
|
var hasPermission = true
|
||||||
|
it.forEach { (t, u) ->
|
||||||
|
if (!u) {
|
||||||
|
hasPermission = false
|
||||||
|
toastOnUi(t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hasPermission) {
|
||||||
|
refreshCurrentDirPath(initPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
private var requestCode: Int = 0
|
private var requestCode: Int = 0
|
||||||
var title: String? = null
|
var title: String? = null
|
||||||
private var initPath = FileUtils.getSdCardPath()
|
private var initPath = FileUtils.getSdCardPath()
|
||||||
@ -118,7 +132,7 @@ class FilePickerDialog : DialogFragment(),
|
|||||||
}
|
}
|
||||||
initMenu()
|
initMenu()
|
||||||
initContentView()
|
initContentView()
|
||||||
refreshCurrentDirPath(initPath)
|
queryPermission.launch(Permissions.Group.STORAGE)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initMenu() {
|
private fun initMenu() {
|
||||||
|
Loading…
Reference in New Issue
Block a user