refactor: request storage setting when needed

pull/2386/head
Xwite 3 years ago
parent 9cf0be1031
commit 11d13b6b84
  1. 6
      app/src/main/AndroidManifest.xml
  2. 4
      app/src/main/assets/storageHelp.md
  3. 4
      app/src/main/java/io/legado/app/model/localBook/LocalBook.kt
  4. 45
      app/src/main/java/io/legado/app/ui/book/import/BaseImportBookActivity.kt
  5. 5
      app/src/main/java/io/legado/app/ui/book/import/local/ImportBookActivity.kt
  6. 0
      app/src/main/java/io/legado/app/ui/book/import/local/ImportBookAdapter.kt
  7. 0
      app/src/main/java/io/legado/app/ui/book/import/local/ImportBookViewModel.kt
  8. 0
      app/src/main/java/io/legado/app/ui/book/import/local/rule/TxtTocRuleActivity.kt
  9. 0
      app/src/main/java/io/legado/app/ui/book/import/local/rule/TxtTocRuleAdapter.kt
  10. 0
      app/src/main/java/io/legado/app/ui/book/import/local/rule/TxtTocRuleViewModel.kt
  11. 5
      app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookActivity.kt
  12. 0
      app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookAdapter.kt
  13. 0
      app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookSort.kt
  14. 0
      app/src/main/java/io/legado/app/ui/book/import/remote/RemoteBookViewModel.kt
  15. 2
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt

@ -201,7 +201,7 @@
android:screenOrientation="behind" /> android:screenOrientation="behind" />
<!-- txt目录规则管理 --> <!-- txt目录规则管理 -->
<activity <activity
android:name=".ui.book.local.rule.TxtTocRuleActivity" android:name=".ui.book.import.local.rule.TxtTocRuleActivity"
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="behind" /> android:screenOrientation="behind" />
<!-- 替换规则界面 --> <!-- 替换规则界面 -->
@ -241,11 +241,11 @@
android:launchMode="singleTop" /> android:launchMode="singleTop" />
<!-- 导入书籍 --> <!-- 导入书籍 -->
<activity <activity
android:name=".ui.book.local.ImportBookActivity" android:name=".ui.book.import.local.ImportBookActivity"
android:launchMode="singleTop" /> android:launchMode="singleTop" />
<!-- 添加远程 --> <!-- 添加远程 -->
<activity <activity
android:name=".ui.book.remote.RemoteBookActivity" android:name=".ui.book.import.remote.RemoteBookActivity"
android:launchMode="singleTop" /> android:launchMode="singleTop" />
<!-- 发现界面 --> <!-- 发现界面 -->
<activity <activity

@ -1,2 +1,2 @@
* 由于安卓的存储访问限制,阅读需要设置**公共目录下的子目录**来实现书籍拷贝、下载 * 由于安卓的存储访问限制,阅读需要设置**公共目录下的子目录**来实现书籍拷贝、下载,例如Documents/Books、Download/Books
* 如不设置,可能影响本地书籍、webDav书籍的正常阅读 * 如不设置,将无法正常使用本地书籍、webDav书籍的相关功能

@ -42,7 +42,7 @@ object LocalBook {
@Throws(FileNotFoundException::class, SecurityException::class) @Throws(FileNotFoundException::class, SecurityException::class)
fun getBookInputStream(book: Book): InputStream { fun getBookInputStream(book: Book): InputStream {
val uri = book.getLocalUri() val uri = book.getLocalUri()
//文件不存在 尝试下载webDav文件 book.remoteUrl //文件不存在 尝试下载webDav文件
val inputStream = uri.inputStream(appCtx) ?: downloadRemoteBook(book) val inputStream = uri.inputStream(appCtx) ?: downloadRemoteBook(book)
if (inputStream != null) return inputStream if (inputStream != null) return inputStream
throw FileNotFoundException("${uri.path} 文件不存在") throw FileNotFoundException("${uri.path} 文件不存在")
@ -303,7 +303,7 @@ object LocalBook {
return localBook return localBook
} }
//下载book.remoteUrl对应的远程文件并更新bookUrl 返回inputStream //下载book对应的远程文件并更新bookUrl 返回inputStream
private fun downloadRemoteBook(localBook: Book): InputStream? { private fun downloadRemoteBook(localBook: Book): InputStream? {
val webDavUrl = localBook.getRemoteUrl() val webDavUrl = localBook.getRemoteUrl()
if (webDavUrl.isNullOrBlank()) return null if (webDavUrl.isNullOrBlank()) return null

@ -0,0 +1,45 @@
package io.legado.app.ui.book.import
import androidx.lifecycle.ViewModel
import androidx.viewbinding.ViewBinding
import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert
import io.legado.app.ui.document.HandleFileContract
abstract class BaseImportBookActivity<VB : ViewBinding, VM : ViewModel>(): VMBaseActivity<VB, VM>() {
private val localBookTreeSelect = registerForActivityResult(HandleFileContract()) {
it.uri?.let { treeUri ->
AppConfig.defaultBookTreeUri = treeUri.toString()
}
}
/**
* 设置书籍保存位置
*/
protected fun setBookStorage() {
//测试书籍保存位置是否设置
if (!AppConfig.defaultBookTreeUri.isNullOrBlank()) return
//测试读写??
val storageHelp = String(assets.open("storageHelp.md").readBytes())
val hint = getString(R.string.select_book_folder)
alert(hint, storageHelp) {
yesButton {
localBookTreeSelect.launch {
title = hint
mode = HandleFileContract.DIR_SYS
}
}
noButton {
finish()
}
onCancelled {
finish()
}
}
}
}

@ -11,7 +11,6 @@ import androidx.appcompat.widget.PopupMenu
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.databinding.ActivityImportBookBinding import io.legado.app.databinding.ActivityImportBookBinding
@ -21,6 +20,7 @@ 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.lib.theme.backgroundColor import io.legado.app.lib.theme.backgroundColor
import io.legado.app.ui.book.import.BaseImportBookActivity
import io.legado.app.ui.document.HandleFileContract import io.legado.app.ui.document.HandleFileContract
import io.legado.app.ui.widget.SelectActionBar import io.legado.app.ui.widget.SelectActionBar
import io.legado.app.utils.* import io.legado.app.utils.*
@ -34,7 +34,7 @@ import java.io.File
/** /**
* 导入本地书籍界面 * 导入本地书籍界面
*/ */
class ImportBookActivity : VMBaseActivity<ActivityImportBookBinding, ImportBookViewModel>(), class ImportBookActivity : BaseImportBookActivity<ActivityImportBookBinding, ImportBookViewModel>(),
PopupMenu.OnMenuItemClickListener, PopupMenu.OnMenuItemClickListener,
ImportBookAdapter.CallBack, ImportBookAdapter.CallBack,
SelectActionBar.CallBack { SelectActionBar.CallBack {
@ -61,6 +61,7 @@ class ImportBookActivity : VMBaseActivity<ActivityImportBookBinding, ImportBookV
initView() initView()
initEvent() initEvent()
initData() initData()
setBookStorage()
} }
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {

@ -9,11 +9,11 @@ import androidx.activity.viewModels
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.databinding.ActivityImportBookBinding import io.legado.app.databinding.ActivityImportBookBinding
import io.legado.app.lib.theme.backgroundColor import io.legado.app.lib.theme.backgroundColor
import io.legado.app.model.remote.RemoteBook import io.legado.app.model.remote.RemoteBook
import io.legado.app.ui.about.AppLogDialog import io.legado.app.ui.about.AppLogDialog
import io.legado.app.ui.book.import.BaseImportBookActivity
import io.legado.app.ui.widget.SelectActionBar import io.legado.app.ui.widget.SelectActionBar
import io.legado.app.ui.widget.dialog.WaitDialog import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.showDialogFragment import io.legado.app.utils.showDialogFragment
@ -28,7 +28,7 @@ import java.io.File
* @author qianfanguojin * @author qianfanguojin
* @time 2022/05/12 * @time 2022/05/12
*/ */
class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookViewModel>(), class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, RemoteBookViewModel>(),
RemoteBookAdapter.CallBack, RemoteBookAdapter.CallBack,
SelectActionBar.CallBack { SelectActionBar.CallBack {
override val binding by viewBinding(ActivityImportBookBinding::inflate) override val binding by viewBinding(ActivityImportBookBinding::inflate)
@ -41,6 +41,7 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
initView() initView()
initData() initData()
initEvent() initEvent()
setBookStorage()
} }
private fun initView() { private fun initView() {

@ -28,7 +28,7 @@ import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.model.CheckSource import io.legado.app.model.CheckSource
import io.legado.app.model.Debug import io.legado.app.model.Debug
import io.legado.app.ui.association.ImportBookSourceDialog import io.legado.app.ui.association.ImportBookSourceDialog
import io.legado.app.ui.book.local.rule.TxtTocRuleActivity import io.legado.app.ui.book.import.local.rule.TxtTocRuleActivity
import io.legado.app.ui.book.source.debug.BookSourceDebugActivity import io.legado.app.ui.book.source.debug.BookSourceDebugActivity
import io.legado.app.ui.book.source.edit.BookSourceEditActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity
import io.legado.app.ui.config.CheckSourceConfig import io.legado.app.ui.config.CheckSourceConfig

Loading…
Cancel
Save