mirror of
https://github.com/gedoor/legado.git
synced 2025-08-10 00:52:30 +00:00
优化
This commit is contained in:
@@ -476,6 +476,7 @@ object ReadBookConfig {
|
||||
var tipFooterMiddle: Int = ReadTipConfig.none,
|
||||
var tipFooterRight: Int = ReadTipConfig.pageAndTotal,
|
||||
var tipColor: Int = 0,
|
||||
var tipDividerColor: Int = -1,
|
||||
var headerMode: Int = 0,
|
||||
var footerMode: Int = 0
|
||||
) {
|
||||
|
||||
@@ -78,6 +78,12 @@ object ReadTipConfig {
|
||||
ReadBookConfig.config.tipColor = value
|
||||
}
|
||||
|
||||
var tipDividerColor: Int
|
||||
get() = ReadBookConfig.config.tipDividerColor
|
||||
set(value) {
|
||||
ReadBookConfig.config.tipDividerColor = value
|
||||
}
|
||||
|
||||
fun getHeaderModes(context: Context): LinkedHashMap<Int, String> {
|
||||
return linkedMapOf(
|
||||
Pair(0, context.getString(R.string.hide_when_status_bar_show)),
|
||||
|
||||
@@ -62,7 +62,16 @@ object BackupConfig {
|
||||
PreferKey.shareLayout,
|
||||
PreferKey.hideStatusBar,
|
||||
PreferKey.hideNavigationBar,
|
||||
PreferKey.autoReadSpeed
|
||||
PreferKey.autoReadSpeed,
|
||||
PreferKey.clickActionTL,
|
||||
PreferKey.clickActionTC,
|
||||
PreferKey.clickActionTR,
|
||||
PreferKey.clickActionML,
|
||||
PreferKey.clickActionMC,
|
||||
PreferKey.clickActionMR,
|
||||
PreferKey.clickActionBL,
|
||||
PreferKey.clickActionBC,
|
||||
PreferKey.clickActionBR
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -42,10 +42,13 @@ object ReadBook : CoroutineScope by MainScope() {
|
||||
private val loadingChapters = arrayListOf<Int>()
|
||||
private val readRecord = ReadRecord()
|
||||
var readStartTime: Long = System.currentTimeMillis()
|
||||
|
||||
/* 跳转历史记录 */
|
||||
var bookProgressHistory: List<BookProgress>? = null
|
||||
|
||||
/* 跳转进度前进度记录 */
|
||||
var lastBookPress: BookProgress? = null
|
||||
|
||||
/* web端阅读进度记录 */
|
||||
var webBookProgress: BookProgress? = null
|
||||
|
||||
@@ -54,6 +57,7 @@ object ReadBook : CoroutineScope by MainScope() {
|
||||
if (lastBookPress != null) return //避免进度条连续跳转不能覆盖最初的进度记录
|
||||
lastBookPress = book?.let { BookProgress(it) }
|
||||
}
|
||||
|
||||
//恢复跳转前进度
|
||||
fun restoreLastBookProcess() {
|
||||
lastBookPress?.let {
|
||||
@@ -482,14 +486,10 @@ object ReadBook : CoroutineScope by MainScope() {
|
||||
}
|
||||
}
|
||||
|
||||
fun exit() {
|
||||
callBack?.exit()
|
||||
}
|
||||
|
||||
interface CallBack {
|
||||
fun upMenuView()
|
||||
|
||||
fun loadChapterList(book: Book)
|
||||
fun loadChapterList(book: Book, callback: (() -> Unit)? = null)
|
||||
|
||||
fun upContent(
|
||||
relativePosition: Int = 0,
|
||||
@@ -503,8 +503,6 @@ object ReadBook : CoroutineScope by MainScope() {
|
||||
|
||||
fun upPageAnim()
|
||||
|
||||
fun exit()
|
||||
|
||||
fun notifyBookChanged()
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ import io.legado.app.ui.book.read.config.*
|
||||
import io.legado.app.ui.book.read.config.BgTextConfigDialog.Companion.BG_COLOR
|
||||
import io.legado.app.ui.book.read.config.BgTextConfigDialog.Companion.TEXT_COLOR
|
||||
import io.legado.app.ui.book.read.config.TipConfigDialog.Companion.TIP_COLOR
|
||||
import io.legado.app.ui.book.read.config.TipConfigDialog.Companion.TIP_DIVIDER_COLOR
|
||||
import io.legado.app.ui.book.read.page.ContentTextView
|
||||
import io.legado.app.ui.book.read.page.ReadView
|
||||
import io.legado.app.ui.book.read.page.entities.PageDirection
|
||||
@@ -737,9 +738,9 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
}
|
||||
}
|
||||
|
||||
override fun loadChapterList(book: Book) {
|
||||
override fun loadChapterList(book: Book, callback: (() -> Unit)?) {
|
||||
ReadBook.upMsg(getString(R.string.toc_updateing))
|
||||
viewModel.loadChapterList(book)
|
||||
viewModel.loadChapterList(book, callback)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -776,16 +777,6 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
}
|
||||
}
|
||||
|
||||
override fun exit() {
|
||||
ReadBook.book?.let {
|
||||
if (!ReadBook.inBookshelf) {
|
||||
viewModel.removeFromBookshelf { super.finish() }
|
||||
} else {
|
||||
super.finish()
|
||||
}
|
||||
} ?: super.finish()
|
||||
}
|
||||
|
||||
override fun notifyBookChanged() {
|
||||
bookChanged = true
|
||||
}
|
||||
@@ -1154,6 +1145,11 @@ class ReadBookActivity : BaseReadBookActivity(),
|
||||
postEvent(EventBus.TIP_COLOR, "")
|
||||
postEvent(EventBus.UP_CONFIG, true)
|
||||
}
|
||||
TIP_DIVIDER_COLOR -> {
|
||||
ReadTipConfig.tipDividerColor = color
|
||||
postEvent(EventBus.TIP_COLOR, "")
|
||||
postEvent(EventBus.UP_CONFIG, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
/**
|
||||
* 加载目录
|
||||
*/
|
||||
fun loadChapterList(book: Book) {
|
||||
fun loadChapterList(book: Book, callback: (() -> Unit)? = null) {
|
||||
if (book.isLocal) {
|
||||
execute {
|
||||
LocalBook.getChapterList(book).let {
|
||||
@@ -157,28 +157,30 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
|
||||
ReadBook.upMsg("LoadTocError:${it.localizedMessage}")
|
||||
}
|
||||
}
|
||||
}.onFinally {
|
||||
callback?.invoke()
|
||||
}
|
||||
} else {
|
||||
ReadBook.bookSource?.let {
|
||||
viewModelScope.launch(IO) {
|
||||
val oldBook = book.copy()
|
||||
WebBook.getChapterList(viewModelScope, it, book, true)
|
||||
.onSuccess(IO) { cList ->
|
||||
if (oldBook.bookUrl == book.bookUrl) {
|
||||
appDb.bookDao.update(book)
|
||||
} else {
|
||||
appDb.bookDao.insert(book)
|
||||
BookHelp.updateCacheFolder(oldBook, book)
|
||||
}
|
||||
appDb.bookChapterDao.delByBook(oldBook.bookUrl)
|
||||
appDb.bookChapterDao.insert(*cList.toTypedArray())
|
||||
ReadBook.chapterSize = cList.size
|
||||
ReadBook.upMsg(null)
|
||||
ReadBook.loadContent(resetPageOffset = true)
|
||||
}.onError {
|
||||
ReadBook.upMsg(context.getString(R.string.error_load_toc))
|
||||
val oldBook = book.copy()
|
||||
WebBook.getChapterList(viewModelScope, it, book, true)
|
||||
.onSuccess(IO) { cList ->
|
||||
if (oldBook.bookUrl == book.bookUrl) {
|
||||
appDb.bookDao.update(book)
|
||||
} else {
|
||||
appDb.bookDao.insert(book)
|
||||
BookHelp.updateCacheFolder(oldBook, book)
|
||||
}
|
||||
}
|
||||
appDb.bookChapterDao.delByBook(oldBook.bookUrl)
|
||||
appDb.bookChapterDao.insert(*cList.toTypedArray())
|
||||
ReadBook.chapterSize = cList.size
|
||||
ReadBook.upMsg(null)
|
||||
ReadBook.loadContent(resetPageOffset = true)
|
||||
}.onError {
|
||||
ReadBook.upMsg(context.getString(R.string.error_load_toc))
|
||||
}.onFinally {
|
||||
callback?.invoke()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ class TipConfigDialog : BaseDialogFragment(R.layout.dialog_tip_config) {
|
||||
|
||||
companion object {
|
||||
const val TIP_COLOR = 7897
|
||||
const val TIP_DIVIDER_COLOR = 7898
|
||||
}
|
||||
|
||||
private val binding by viewBinding(DialogTipConfigBinding::bind)
|
||||
@@ -33,6 +34,7 @@ class TipConfigDialog : BaseDialogFragment(R.layout.dialog_tip_config) {
|
||||
initEvent()
|
||||
observeEvent<String>(EventBus.TIP_COLOR) {
|
||||
upTvTipColor()
|
||||
upTvTipDividerColor()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,6 +66,7 @@ class TipConfigDialog : BaseDialogFragment(R.layout.dialog_tip_config) {
|
||||
}
|
||||
}
|
||||
upTvTipColor()
|
||||
upTvTipDividerColor()
|
||||
}
|
||||
|
||||
private fun upTvTipColor() {
|
||||
@@ -75,6 +78,14 @@ class TipConfigDialog : BaseDialogFragment(R.layout.dialog_tip_config) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun upTvTipDividerColor() {
|
||||
binding.tvTipDividerColor.text = when (ReadTipConfig.tipDividerColor) {
|
||||
-1 -> "默认"
|
||||
0 -> "跟随文字颜色"
|
||||
else -> "#${ReadTipConfig.tipDividerColor.hexString}"
|
||||
}
|
||||
}
|
||||
|
||||
private fun initEvent() = binding.run {
|
||||
rgTitleMode.setOnCheckedChangeListener { _, checkedId ->
|
||||
ReadBookConfig.titleMode = rgTitleMode.getIndexById(checkedId)
|
||||
@@ -178,6 +189,22 @@ class TipConfigDialog : BaseDialogFragment(R.layout.dialog_tip_config) {
|
||||
}
|
||||
}
|
||||
}
|
||||
llTipDividerColor.setOnClickListener {
|
||||
context?.selector(items = arrayListOf("默认", "跟随文字颜色", "自定义")) { _, i ->
|
||||
when (i) {
|
||||
0, 1 -> {
|
||||
ReadTipConfig.tipDividerColor = i - 1
|
||||
upTvTipDividerColor()
|
||||
postEvent(EventBus.UP_CONFIG, true)
|
||||
}
|
||||
2 -> ColorPickerDialog.newBuilder()
|
||||
.setShowAlphaSlider(false)
|
||||
.setDialogType(ColorPickerDialog.TYPE_CUSTOM)
|
||||
.setDialogId(TIP_DIVIDER_COLOR)
|
||||
.show(requireActivity())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun clearRepeat(repeat: Int) = ReadTipConfig.apply {
|
||||
|
||||
@@ -2,6 +2,7 @@ package io.legado.app.ui.book.read.page
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.view.LayoutInflater
|
||||
import android.widget.FrameLayout
|
||||
import androidx.core.view.isGone
|
||||
@@ -70,12 +71,21 @@ class PageView(context: Context) : FrameLayout(context) {
|
||||
val tipColor = with(ReadTipConfig) {
|
||||
if (tipColor == 0) it.textColor else tipColor
|
||||
}
|
||||
val tipDividerColor = with(ReadTipConfig) {
|
||||
when (tipDividerColor) {
|
||||
-1 -> Color.parseColor("#66666666")
|
||||
0 -> tipColor
|
||||
else -> tipDividerColor
|
||||
}
|
||||
}
|
||||
tvHeaderLeft.setColor(tipColor)
|
||||
tvHeaderMiddle.setColor(tipColor)
|
||||
tvHeaderRight.setColor(tipColor)
|
||||
tvFooterLeft.setColor(tipColor)
|
||||
tvFooterMiddle.setColor(tipColor)
|
||||
tvFooterRight.setColor(tipColor)
|
||||
vwTopDivider.backgroundColor = tipDividerColor
|
||||
vwBottomDivider.backgroundColor = tipDividerColor
|
||||
upStatusBar()
|
||||
llHeader.setPadding(
|
||||
it.headerPaddingLeft.dpToPx(),
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import androidx.activity.viewModels
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.core.view.isGone
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentPagerAdapter
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
@@ -19,8 +18,10 @@ import io.legado.app.help.book.isLocalTxt
|
||||
import io.legado.app.help.config.AppConfig
|
||||
import io.legado.app.lib.theme.accentColor
|
||||
import io.legado.app.lib.theme.primaryTextColor
|
||||
import io.legado.app.model.ReadBook
|
||||
import io.legado.app.ui.about.AppLogDialog
|
||||
import io.legado.app.ui.book.toc.rule.TxtTocRuleDialog
|
||||
import io.legado.app.ui.widget.dialog.WaitDialog
|
||||
import io.legado.app.utils.applyTint
|
||||
import io.legado.app.utils.gone
|
||||
import io.legado.app.utils.showDialogFragment
|
||||
@@ -30,7 +31,8 @@ import io.legado.app.utils.visible
|
||||
/**
|
||||
* 目录
|
||||
*/
|
||||
class TocActivity : VMBaseActivity<ActivityChapterListBinding, TocViewModel>() {
|
||||
class TocActivity : VMBaseActivity<ActivityChapterListBinding, TocViewModel>(),
|
||||
TxtTocRuleDialog.CallBack {
|
||||
|
||||
override val binding by viewBinding(ActivityChapterListBinding::inflate)
|
||||
override val viewModel by viewModels<TocViewModel>()
|
||||
@@ -38,6 +40,7 @@ class TocActivity : VMBaseActivity<ActivityChapterListBinding, TocViewModel>() {
|
||||
private lateinit var tabLayout: TabLayout
|
||||
private var menu: Menu? = null
|
||||
private var searchView: SearchView? = null
|
||||
private val waitDialog by lazy { WaitDialog(this) }
|
||||
|
||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||
tabLayout = binding.titleBar.findViewById(R.id.tab_layout)
|
||||
@@ -122,6 +125,17 @@ class TocActivity : VMBaseActivity<ActivityChapterListBinding, TocViewModel>() {
|
||||
return super.onCompatOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
override fun onTocRegexDialogResult(tocRegex: String) {
|
||||
ReadBook.book?.let { book ->
|
||||
book.tocUrl = tocRegex
|
||||
waitDialog.show()
|
||||
ReadBook.callBack?.loadChapterList(book) {
|
||||
viewModel.initBook(book.bookUrl)
|
||||
waitDialog.dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
private inner class TabFragmentPageAdapter :
|
||||
FragmentPagerAdapter(supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
|
||||
|
||||
@@ -322,6 +322,32 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ll_tip_divider_color"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
tools:ignore="RtlHardcoded,RtlSymmetry">
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:padding="6dp"
|
||||
android:text="@string/tip_divider_color"
|
||||
android:textColor="@color/primaryText" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_tip_divider_color"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="6dp"
|
||||
android:textColor="@color/primaryText"
|
||||
tools:text="@string/tip_divider_color" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@@ -1059,4 +1059,5 @@
|
||||
<string name="replace_state_change">替换(启用/禁用)</string>
|
||||
<string name="show_last_update_time">显示上次更新时间</string>
|
||||
<string name="refresh_list">刷新列表</string>
|
||||
<string name="tip_divider_color">分隔线颜色</string>
|
||||
</resources>
|
||||
|
||||
@@ -1062,4 +1062,5 @@
|
||||
<string name="replace_state_change">替换(启用/禁用)</string>
|
||||
<string name="show_last_update_time">显示上次更新时间</string>
|
||||
<string name="refresh_list">刷新列表</string>
|
||||
<string name="tip_divider_color">分隔线颜色</string>
|
||||
</resources>
|
||||
|
||||
@@ -1062,4 +1062,5 @@
|
||||
<string name="replace_state_change">替换(启用/禁用)</string>
|
||||
<string name="show_last_update_time">显示上次更新时间</string>
|
||||
<string name="refresh_list">刷新列表</string>
|
||||
<string name="tip_divider_color">分隔线颜色</string>
|
||||
</resources>
|
||||
|
||||
@@ -1059,4 +1059,5 @@
|
||||
<string name="replace_state_change">替换(启用/禁用)</string>
|
||||
<string name="show_last_update_time">显示上次更新时间</string>
|
||||
<string name="refresh_list">刷新列表</string>
|
||||
<string name="tip_divider_color">分隔线颜色</string>
|
||||
</resources>
|
||||
|
||||
@@ -1061,4 +1061,5 @@
|
||||
<string name="replace_state_change">取代(啟用/禁用)</string>
|
||||
<string name="show_last_update_time">顯示上次更新時間</string>
|
||||
<string name="refresh_list">刷新列表</string>
|
||||
<string name="tip_divider_color">分隔线颜色</string>
|
||||
</resources>
|
||||
|
||||
@@ -1061,4 +1061,5 @@
|
||||
<string name="replace_state_change">替换(启用/禁用)</string>
|
||||
<string name="show_last_update_time">显示上次更新时间</string>
|
||||
<string name="refresh_list">刷新列表</string>
|
||||
<string name="tip_divider_color">分隔线颜色</string>
|
||||
</resources>
|
||||
|
||||
@@ -1062,4 +1062,5 @@
|
||||
<string name="replace_state_change">替换(启用/禁用)</string>
|
||||
<string name="show_last_update_time">显示上次更新时间</string>
|
||||
<string name="refresh_list">刷新列表</string>
|
||||
<string name="tip_divider_color">分隔线颜色</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user