refactor: request storage setting when needed

pull/2389/head
Xwite 3 years ago
parent 11d13b6b84
commit 5768bb9249
  1. 2
      app/src/main/assets/storageHelp.md
  2. 11
      app/src/main/java/io/legado/app/ui/book/import/BaseImportBookActivity.kt
  3. 6
      app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt
  4. 3
      app/src/main/java/io/legado/app/ui/book/info/BookInfoViewModel.kt
  5. 6
      app/src/main/java/io/legado/app/ui/book/read/BaseReadBookActivity.kt

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

@ -8,7 +8,16 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert import io.legado.app.lib.dialogs.alert
import io.legado.app.ui.document.HandleFileContract import io.legado.app.ui.document.HandleFileContract
abstract class BaseImportBookActivity<VB : ViewBinding, VM : ViewModel>(): VMBaseActivity<VB, VM>() { /**
* 涉及到文件类书源 webDav远程书籍 本地阅读文件
*/
abstract class BaseImportBookActivity<VB : ViewBinding, VM : ViewModel>(
fullScreen: Boolean = true,
theme: Theme = Theme.Auto,
toolBarTheme: Theme = Theme.Auto,
transparent: Boolean = false,
imageBg: Boolean = true
) : VMBaseActivity<VB, VM>(fullScreen, theme, toolBarTheme, transparent, imageBg) {
private val localBookTreeSelect = registerForActivityResult(HandleFileContract()) { private val localBookTreeSelect = registerForActivityResult(HandleFileContract()) {
it.uri?.let { treeUri -> it.uri?.let { treeUri ->

@ -11,7 +11,6 @@ import android.widget.LinearLayout
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels import androidx.activity.viewModels
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.EventBus import io.legado.app.constant.EventBus
import io.legado.app.constant.Theme import io.legado.app.constant.Theme
import io.legado.app.data.appDb import io.legado.app.data.appDb
@ -36,6 +35,7 @@ import io.legado.app.ui.book.audio.AudioPlayActivity
import io.legado.app.ui.book.changecover.ChangeCoverDialog import io.legado.app.ui.book.changecover.ChangeCoverDialog
import io.legado.app.ui.book.changesource.ChangeBookSourceDialog import io.legado.app.ui.book.changesource.ChangeBookSourceDialog
import io.legado.app.ui.book.group.GroupSelectDialog import io.legado.app.ui.book.group.GroupSelectDialog
import io.legado.app.ui.book.import.BaseImportBookActivity
import io.legado.app.ui.book.info.edit.BookInfoEditActivity import io.legado.app.ui.book.info.edit.BookInfoEditActivity
import io.legado.app.ui.book.read.ReadBookActivity import io.legado.app.ui.book.read.ReadBookActivity
import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.search.SearchActivity
@ -52,7 +52,7 @@ import kotlinx.coroutines.withContext
class BookInfoActivity : class BookInfoActivity :
VMBaseActivity<ActivityBookInfoBinding, BookInfoViewModel>(toolBarTheme = Theme.Dark), BaseImportBookActivity<ActivityBookInfoBinding, BookInfoViewModel>(toolBarTheme = Theme.Dark),
GroupSelectDialog.CallBack, GroupSelectDialog.CallBack,
ChangeBookSourceDialog.CallBack, ChangeBookSourceDialog.CallBack,
ChangeCoverDialog.CallBack { ChangeCoverDialog.CallBack {
@ -113,6 +113,8 @@ class BookInfoActivity :
viewModel.chapterListData.observe(this) { upLoading(false, it) } viewModel.chapterListData.observe(this) { upLoading(false, it) }
viewModel.initData(intent) viewModel.initData(intent)
initViewEvent() initViewEvent()
//当前书籍可从webDav同步书籍或者为文件类书源 需要设置书籍保存位置
if (viewModel.isImportBookOnLine || viewModel.isWebDavBook) setBookStorage()
} }
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {

@ -38,8 +38,11 @@ class BookInfoViewModel(application: Application) : BaseViewModel(application) {
var inBookshelf = false var inBookshelf = false
var bookSource: BookSource? = null var bookSource: BookSource? = null
private var changeSourceCoroutine: Coroutine<*>? = null private var changeSourceCoroutine: Coroutine<*>? = null
val isImportBookOnLine: Boolean val isImportBookOnLine: Boolean
get() = bookSource?.bookSourceType == BookSourceType.file get() = bookSource?.bookSourceType == BookSourceType.file
val isWebDavBook: Boolean
get() = bookData.value?.getRemoteUrl() != null
fun initData(intent: Intent) { fun initData(intent: Intent) {
execute { execute {

@ -13,7 +13,6 @@ import android.widget.FrameLayout
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.core.view.isVisible import androidx.core.view.isVisible
import io.legado.app.R import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.constant.AppConst.charsets import io.legado.app.constant.AppConst.charsets
import io.legado.app.constant.PreferKey import io.legado.app.constant.PreferKey
import io.legado.app.databinding.ActivityBookReadBinding import io.legado.app.databinding.ActivityBookReadBinding
@ -29,6 +28,7 @@ import io.legado.app.lib.theme.backgroundColor
import io.legado.app.lib.theme.bottomBackground import io.legado.app.lib.theme.bottomBackground
import io.legado.app.model.CacheBook import io.legado.app.model.CacheBook
import io.legado.app.model.ReadBook import io.legado.app.model.ReadBook
import io.legado.app.ui.book.import.BaseImportBookActivity
import io.legado.app.ui.book.read.config.BgTextConfigDialog import io.legado.app.ui.book.read.config.BgTextConfigDialog
import io.legado.app.ui.book.read.config.ClickActionConfigDialog import io.legado.app.ui.book.read.config.ClickActionConfigDialog
import io.legado.app.ui.book.read.config.PaddingConfigDialog import io.legado.app.ui.book.read.config.PaddingConfigDialog
@ -40,7 +40,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
* 阅读界面 * 阅读界面
*/ */
abstract class BaseReadBookActivity : abstract class BaseReadBookActivity :
VMBaseActivity<ActivityBookReadBinding, ReadBookViewModel>(imageBg = false) { BaseImportBookActivity<ActivityBookReadBinding, ReadBookViewModel>(imageBg = false) {
override val binding by viewBinding(ActivityBookReadBinding::inflate) override val binding by viewBinding(ActivityBookReadBinding::inflate)
override val viewModel by viewModels<ReadBookViewModel>() override val viewModel by viewModels<ReadBookViewModel>()
@ -71,6 +71,8 @@ abstract class BaseReadBookActivity :
if (!LocalConfig.readHelpVersionIsLast) { if (!LocalConfig.readHelpVersionIsLast) {
showClickRegionalConfig() showClickRegionalConfig()
} }
//当前阅读书籍可从webDav同步书籍 需要设置书籍保存位置
if (ReadBook.book?.getRemoteUrl() != null) setBookStorage()
} }
fun showPaddingConfig() { fun showPaddingConfig() {

Loading…
Cancel
Save