Allow to add readonly manga directories

master
Koitharu 2 years ago
parent 1905482b06
commit 227fe86cf9
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

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

Loading…
Cancel
Save