This commit is contained in:
gedoor 2021-03-25 15:47:49 +08:00
parent c18b170351
commit 2dc6766f43
4 changed files with 61 additions and 77 deletions

View File

@ -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()) {

View File

@ -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() {

1
avd.bat Normal file
View File

@ -0,0 +1 @@
emulator -avd %1 -dns-server 8.8.8.8 -no-snapshot-load

View File

@ -1 +0,0 @@
emulator -avd android11 -dns-server 8.8.8.8 -no-snapshot-load