Allow to add readonly manga directories
This commit is contained in:
@@ -98,6 +98,10 @@ abstract class BaseActivity<B : ViewBinding> :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onSupportNavigateUp(): Boolean {
|
override fun onSupportNavigateUp(): Boolean {
|
||||||
|
if (supportFragmentManager.backStackEntryCount > 0) {
|
||||||
|
supportFragmentManager.popBackStack()
|
||||||
|
return false
|
||||||
|
}
|
||||||
dispatchNavigateUp()
|
dispatchNavigateUp()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class MangaDirectorySelectDialog : AlertDialogFragment<DialogDirectorySelectBind
|
|||||||
OnListItemClickListener<DirectoryModel> {
|
OnListItemClickListener<DirectoryModel> {
|
||||||
|
|
||||||
private val viewModel: MangaDirectorySelectViewModel by viewModels()
|
private val viewModel: MangaDirectorySelectViewModel by viewModels()
|
||||||
private val pickFileTreeLauncher = registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) {
|
private val pickFileTreeLauncher = registerForActivityResult(PickDirectoryContract()) {
|
||||||
if (it != null) viewModel.onCustomDirectoryPicked(it)
|
if (it != null) viewModel.onCustomDirectoryPicked(it)
|
||||||
}
|
}
|
||||||
private val permissionRequestLauncher = registerForActivityResult(
|
private val permissionRequestLauncher = registerForActivityResult(
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package org.koitharu.kotatsu.settings.storage
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
|
||||||
|
class PickDirectoryContract : ActivityResultContracts.OpenDocumentTree() {
|
||||||
|
|
||||||
|
override fun createIntent(context: Context, input: Uri?): Intent {
|
||||||
|
val intent = super.createIntent(context, input)
|
||||||
|
intent.addFlags(
|
||||||
|
Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||||
|
or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
|
||||||
|
or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION,
|
||||||
|
)
|
||||||
|
return intent
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,6 +26,7 @@ import org.koitharu.kotatsu.core.util.ext.tryLaunch
|
|||||||
import org.koitharu.kotatsu.databinding.ActivityMangaDirectoriesBinding
|
import org.koitharu.kotatsu.databinding.ActivityMangaDirectoriesBinding
|
||||||
import org.koitharu.kotatsu.settings.storage.DirectoryDiffCallback
|
import org.koitharu.kotatsu.settings.storage.DirectoryDiffCallback
|
||||||
import org.koitharu.kotatsu.settings.storage.DirectoryModel
|
import org.koitharu.kotatsu.settings.storage.DirectoryModel
|
||||||
|
import org.koitharu.kotatsu.settings.storage.PickDirectoryContract
|
||||||
import org.koitharu.kotatsu.settings.storage.RequestStorageManagerPermissionContract
|
import org.koitharu.kotatsu.settings.storage.RequestStorageManagerPermissionContract
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
@@ -33,7 +34,7 @@ class MangaDirectoriesActivity : BaseActivity<ActivityMangaDirectoriesBinding>()
|
|||||||
OnListItemClickListener<DirectoryModel>, View.OnClickListener {
|
OnListItemClickListener<DirectoryModel>, View.OnClickListener {
|
||||||
|
|
||||||
private val viewModel: MangaDirectoriesViewModel by viewModels()
|
private val viewModel: MangaDirectoriesViewModel by viewModels()
|
||||||
private val pickFileTreeLauncher = registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) {
|
private val pickFileTreeLauncher = registerForActivityResult(PickDirectoryContract()) {
|
||||||
if (it != null) viewModel.onCustomDirectoryPicked(it)
|
if (it != null) viewModel.onCustomDirectoryPicked(it)
|
||||||
}
|
}
|
||||||
private val permissionRequestLauncher = registerForActivityResult(
|
private val permissionRequestLauncher = registerForActivityResult(
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class MangaDirectoriesViewModel @Inject constructor(
|
|||||||
val dir = requireNotNull(storageManager.resolveUri(uri)) {
|
val dir = requireNotNull(storageManager.resolveUri(uri)) {
|
||||||
"Cannot resolve file name of \"$uri\""
|
"Cannot resolve file name of \"$uri\""
|
||||||
}
|
}
|
||||||
if (!dir.canWrite()) {
|
if (!dir.canRead()) {
|
||||||
throw AccessDeniedException(dir)
|
throw AccessDeniedException(dir)
|
||||||
}
|
}
|
||||||
if (dir !in storageManager.getApplicationStorageDirs()) {
|
if (dir !in storageManager.getApplicationStorageDirs()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user