mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
使用本地书籍导入和webDav书籍时请求设置书籍保存位置 (#2386)
* refactor: remove storage setting request * refactor: request storage setting when needed
This commit is contained in:
@@ -201,7 +201,7 @@
|
||||
android:screenOrientation="behind" />
|
||||
<!-- txt目录规则管理 -->
|
||||
<activity
|
||||
android:name=".ui.book.local.rule.TxtTocRuleActivity"
|
||||
android:name=".ui.book.import.local.rule.TxtTocRuleActivity"
|
||||
android:launchMode="singleTop"
|
||||
android:screenOrientation="behind" />
|
||||
<!-- 替换规则界面 -->
|
||||
@@ -241,11 +241,11 @@
|
||||
android:launchMode="singleTop" />
|
||||
<!-- 导入书籍 -->
|
||||
<activity
|
||||
android:name=".ui.book.local.ImportBookActivity"
|
||||
android:name=".ui.book.import.local.ImportBookActivity"
|
||||
android:launchMode="singleTop" />
|
||||
<!-- 添加远程 -->
|
||||
<activity
|
||||
android:name=".ui.book.remote.RemoteBookActivity"
|
||||
android:name=".ui.book.import.remote.RemoteBookActivity"
|
||||
android:launchMode="singleTop" />
|
||||
<!-- 发现界面 -->
|
||||
<activity
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
* 由于安卓的存储访问限制,阅读需要设置**公共目录下的子目录**来实现书籍拷贝、下载
|
||||
* 如不设置,可能影响本地书籍、webDav书籍的正常阅读
|
||||
* 由于安卓的存储访问限制,阅读需要设置**公共目录下的子目录**来实现书籍拷贝、下载,例如Documents/Books、Download/Books
|
||||
* 如不设置,将无法正常使用本地书籍、webDav书籍的相关功能
|
||||
@@ -42,7 +42,7 @@ object LocalBook {
|
||||
@Throws(FileNotFoundException::class, SecurityException::class)
|
||||
fun getBookInputStream(book: Book): InputStream {
|
||||
val uri = book.getLocalUri()
|
||||
//文件不存在 尝试下载webDav文件 book.remoteUrl
|
||||
//文件不存在 尝试下载webDav文件
|
||||
val inputStream = uri.inputStream(appCtx) ?: downloadRemoteBook(book)
|
||||
if (inputStream != null) return inputStream
|
||||
throw FileNotFoundException("${uri.path} 文件不存在")
|
||||
@@ -303,7 +303,7 @@ object LocalBook {
|
||||
return localBook
|
||||
}
|
||||
|
||||
//下载book.remoteUrl对应的远程文件并更新bookUrl 返回inputStream
|
||||
//下载book对应的远程文件并更新bookUrl 返回inputStream
|
||||
private fun downloadRemoteBook(localBook: Book): InputStream? {
|
||||
val webDavUrl = localBook.getRemoteUrl()
|
||||
if (webDavUrl.isNullOrBlank()) return null
|
||||
|
||||
@@ -172,7 +172,7 @@ class FileAssociationActivity :
|
||||
}.onFailure {
|
||||
when (it) {
|
||||
is SecurityException -> localBookTreeSelect.launch {
|
||||
title = "选择保存书籍的文件夹"
|
||||
title = getString(R.string.select_book_folder)
|
||||
mode = HandleFileContract.DIR_SYS
|
||||
}
|
||||
else -> {
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.local
|
||||
package io.legado.app.ui.book.import.local
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.net.Uri
|
||||
@@ -11,7 +11,6 @@ import androidx.appcompat.widget.PopupMenu
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.VMBaseActivity
|
||||
import io.legado.app.constant.PreferKey
|
||||
import io.legado.app.data.appDb
|
||||
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.PermissionsCompat
|
||||
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.widget.SelectActionBar
|
||||
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,
|
||||
ImportBookAdapter.CallBack,
|
||||
SelectActionBar.CallBack {
|
||||
@@ -61,6 +61,7 @@ class ImportBookActivity : VMBaseActivity<ActivityImportBookBinding, ImportBookV
|
||||
initView()
|
||||
initEvent()
|
||||
initData()
|
||||
setBookStorage()
|
||||
}
|
||||
|
||||
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.local
|
||||
package io.legado.app.ui.book.import.local
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.local
|
||||
package io.legado.app.ui.book.import.local
|
||||
|
||||
import android.app.Application
|
||||
import android.net.Uri
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.local.rule
|
||||
package io.legado.app.ui.book.import.local.rule
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.local.rule
|
||||
package io.legado.app.ui.book.import.local.rule
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.local.rule
|
||||
package io.legado.app.ui.book.import.local.rule
|
||||
|
||||
import android.app.Application
|
||||
import io.legado.app.base.BaseViewModel
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.remote
|
||||
package io.legado.app.ui.book.import.remote
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.os.Bundle
|
||||
@@ -9,11 +9,11 @@ import androidx.activity.viewModels
|
||||
import androidx.core.view.isGone
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import io.legado.app.R
|
||||
import io.legado.app.base.VMBaseActivity
|
||||
import io.legado.app.databinding.ActivityImportBookBinding
|
||||
import io.legado.app.lib.theme.backgroundColor
|
||||
import io.legado.app.model.remote.RemoteBook
|
||||
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.dialog.WaitDialog
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
@@ -28,7 +28,7 @@ import java.io.File
|
||||
* @author qianfanguojin
|
||||
* @time 2022/05/12
|
||||
*/
|
||||
class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookViewModel>(),
|
||||
class RemoteBookActivity : BaseImportBookActivity<ActivityImportBookBinding, RemoteBookViewModel>(),
|
||||
RemoteBookAdapter.CallBack,
|
||||
SelectActionBar.CallBack {
|
||||
override val binding by viewBinding(ActivityImportBookBinding::inflate)
|
||||
@@ -41,6 +41,7 @@ class RemoteBookActivity : VMBaseActivity<ActivityImportBookBinding, RemoteBookV
|
||||
initView()
|
||||
initData()
|
||||
initEvent()
|
||||
setBookStorage()
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.remote
|
||||
package io.legado.app.ui.book.import.remote
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.remote
|
||||
package io.legado.app.ui.book.import.remote
|
||||
|
||||
enum class RemoteBookSort {
|
||||
Default, Name
|
||||
@@ -1,4 +1,4 @@
|
||||
package io.legado.app.ui.book.remote
|
||||
package io.legado.app.ui.book.import.remote
|
||||
|
||||
import android.app.Application
|
||||
import io.legado.app.base.BaseViewModel
|
||||
@@ -28,7 +28,7 @@ import io.legado.app.lib.theme.primaryTextColor
|
||||
import io.legado.app.model.CheckSource
|
||||
import io.legado.app.model.Debug
|
||||
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.edit.BookSourceEditActivity
|
||||
import io.legado.app.ui.config.CheckSourceConfig
|
||||
|
||||
@@ -31,7 +31,6 @@ import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.lib.theme.elevation
|
||||
import io.legado.app.lib.theme.primaryColor
|
||||
import io.legado.app.service.BaseReadAloudService
|
||||
import io.legado.app.ui.document.HandleFileContract
|
||||
import io.legado.app.ui.main.bookshelf.BaseBookshelfFragment
|
||||
import io.legado.app.ui.main.bookshelf.style1.BookshelfFragment1
|
||||
import io.legado.app.ui.main.bookshelf.style2.BookshelfFragment2
|
||||
@@ -73,12 +72,6 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
private var bottomMenuCount = 4
|
||||
private val realPositions = arrayOf(idBookshelf, idExplore, idRss, idMy)
|
||||
|
||||
private val localBookTreeSelect = registerForActivityResult(HandleFileContract()) {
|
||||
it.uri?.let { treeUri ->
|
||||
AppConfig.defaultBookTreeUri = treeUri.toString()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
upBottomMenu()
|
||||
binding.run {
|
||||
@@ -99,8 +92,6 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
if (!privacyPolicy()) return@launch
|
||||
//版本更新
|
||||
upVersion()
|
||||
//请求设置书籍保存位置
|
||||
setBookStorage()
|
||||
//自动更新书籍
|
||||
val isAutoRefreshedBook = savedInstanceState?.getBoolean("isAutoRefreshedBook") ?: false
|
||||
if (AppConfig.autoRefreshBook && !isAutoRefreshedBook) {
|
||||
@@ -219,28 +210,6 @@ class MainActivity : VMBaseActivity<ActivityMainBinding, MainViewModel>(),
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置书籍保存位置
|
||||
*/
|
||||
private fun setBookStorage() {
|
||||
//测试书籍保存位置是否设置
|
||||
if (!AppConfig.defaultBookTreeUri.isNullOrBlank()) return
|
||||
//测试读写??
|
||||
val storageHelp = String(assets.open("storageHelp.md").readBytes())
|
||||
alert("设置书籍保存位置", storageHelp) {
|
||||
yesButton {
|
||||
localBookTreeSelect.launch {
|
||||
title = getString(R.string.select_book_folder)
|
||||
mode = HandleFileContract.DIR_SYS
|
||||
}
|
||||
}
|
||||
neutralButton("不想设置") {
|
||||
AppConfig.defaultBookTreeUri = "null"
|
||||
}
|
||||
noButton()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
|
||||
event?.let {
|
||||
when (keyCode) {
|
||||
|
||||
@@ -21,9 +21,9 @@ import io.legado.app.lib.dialogs.alert
|
||||
import io.legado.app.ui.about.AppLogDialog
|
||||
import io.legado.app.ui.book.cache.CacheActivity
|
||||
import io.legado.app.ui.book.group.GroupManageDialog
|
||||
import io.legado.app.ui.book.local.ImportBookActivity
|
||||
import io.legado.app.ui.book.import.local.ImportBookActivity
|
||||
import io.legado.app.ui.book.import.remote.RemoteBookActivity
|
||||
import io.legado.app.ui.book.manage.BookshelfManageActivity
|
||||
import io.legado.app.ui.book.remote.RemoteBookActivity
|
||||
import io.legado.app.ui.book.search.SearchActivity
|
||||
import io.legado.app.ui.document.HandleFileContract
|
||||
import io.legado.app.ui.main.MainViewModel
|
||||
|
||||
Reference in New Issue
Block a user