diff --git a/app/src/main/java/io/legado/app/model/ReadBook.kt b/app/src/main/java/io/legado/app/model/ReadBook.kt index 96adb6e3e..a2508eeea 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -42,6 +42,31 @@ object ReadBook : CoroutineScope by MainScope() { private val loadingChapters = arrayListOf() private val readRecord = ReadRecord() var readStartTime: Long = System.currentTimeMillis() + /* 跳转历史记录 */ + var bookProgressHistory: List? = null + /* 跳转进度前进度记录 */ + var lastBookPress: BookProgress? = null + + //暂时保存跳转前进度 + fun saveCurrentBookProcess() { + if (lastBookPress != null) return //避免进度条连续跳转不能覆盖最初的进度记录 + lastBookPress = book?.let { BookProgress(it) } + } + //恢复跳转前进度 + fun restoreLastBookProcess() { + lastBookPress?.let { + durChapterPos = it.durChapterPos + if (durChapterIndex != it.durChapterIndex) { + clearTextChapter() + durChapterIndex = it.durChapterIndex + } + callBack?.upContent() + saveRead() + loadContent(resetPageOffset = true) { + lastBookPress = null + } + } + } fun resetData(book: Book) { ReadBook.book = book @@ -55,6 +80,7 @@ object ReadBook : CoroutineScope by MainScope() { callBack?.upMenuView() callBack?.upPageAnim() upWebBook(book) + lastBookPress = null synchronized(this) { loadingChapters.clear() } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index f0039099a..e346568bf 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -125,6 +125,7 @@ class ReadBookActivity : BaseReadBookActivity(), viewModel.searchResultIndex = index binding.searchMenu.updateSearchResultIndex(index) binding.searchMenu.selectedSearchResult?.let { currentResult -> + ReadBook.saveCurrentBookProcess() //退出全文搜索恢复此时进度 skipToSearch(currentResult) showActionMenu() } @@ -493,6 +494,11 @@ class ReadBookActivity : BaseReadBookActivity(), keyCode == KeyEvent.KEYCODE_BACK -> { if (isShowingSearchResult) { exitSearchMenu() + restoreLastBookProcess() + return true + } + if (ReadBook.lastBookPress != null) { + restoreLastBookProcess() return true } } @@ -926,13 +932,6 @@ class ReadBookActivity : BaseReadBookActivity(), } } - /** - * 跳转到指定章节 - */ - override fun skipToChapter(index: Int) { - viewModel.openChapter(index) - } - /** * 打开搜索界面 */ @@ -984,6 +983,7 @@ class ReadBookActivity : BaseReadBookActivity(), upNavigationBarColor() } + // 退出全文搜索 override fun exitSearchMenu() { if (isShowingSearchResult) { isShowingSearchResult = false @@ -994,6 +994,20 @@ class ReadBookActivity : BaseReadBookActivity(), } } + /* 恢复到 全文搜索/进度条跳转前的位置 */ + private fun restoreLastBookProcess() { + // 默认提示恢复 + alert(R.string.draw) { + setMessage(R.string.restore_last_book_process) + yesButton { + ReadBook.restoreLastBookProcess() //恢复启动全文搜索前的进度 + } + noButton { + ReadBook.lastBookPress = null + } + } + } + override fun showLogin() { ReadBook.bookSource?.let { startActivity { @@ -1141,11 +1155,18 @@ class ReadBookActivity : BaseReadBookActivity(), } } + /* 进度条跳转到指定章节 */ + override fun skipToChapter(index: Int) { + viewModel.openChapter(index) + } + + /* 全文搜索跳转 */ override fun navigateToSearch(searchResult: SearchResult, index: Int) { viewModel.searchResultIndex = index skipToSearch(searchResult) } + /* 全文搜索跳转 */ private fun skipToSearch(searchResult: SearchResult) { val previousResult = binding.searchMenu.previousSearchResult diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt index 0de1c6fb2..96a51445d 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt @@ -375,11 +375,13 @@ class ReadMenu @JvmOverloads constructor( "page" -> ReadBook.skipToPage(seekBar.progress) "chapter" -> { if (confirmSkipToChapter) { + ReadBook.saveCurrentBookProcess() callBack.skipToChapter(seekBar.progress) } else { context.alert("章节跳转确认", "确定要跳转章节吗?") { yesButton { confirmSkipToChapter = true + ReadBook.saveCurrentBookProcess() callBack.skipToChapter(seekBar.progress) } noButton { diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 2c8b223e8..0734a0c1b 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1039,4 +1039,5 @@ 进度条行为 源编辑框最大行数 %s,设置行数小于屏幕可显示的最大行数可以更方便的滑动到其他的字段进行编辑 + 是否恢复到跳转前的阅读进度? diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 75fd4a999..469df7678 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -1042,4 +1042,5 @@ 进度条行为 源编辑框最大行数 %s,设置行数小于屏幕可显示的最大行数可以更方便的滑动到其他的字段进行编辑 + 是否恢复到跳转前的阅读进度? diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 65de2d1fb..ac354405a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1042,4 +1042,5 @@ 进度条行为 源编辑框最大行数 %s,设置行数小于屏幕可显示的最大行数可以更方便的滑动到其他的字段进行编辑 + 是否恢复到跳转前的阅读进度? diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index bad47a622..f4bd21a45 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -1039,4 +1039,5 @@ 进度条行为 源编辑框最大行数 %s,设置行数小于屏幕可显示的最大行数可以更方便的滑动到其他的字段进行编辑 + 是否恢复到跳转前的阅读进度? diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 20d2fe194..c06f9cdbb 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1041,4 +1041,5 @@ 进度条行为 源编辑框最大行数 %s,设置行数小于屏幕可显示的最大行数可以更方便的滑动到其他的字段进行编辑 + 是否恢复到跳转前的阅读进度? diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index c9026dc78..e40f77f8b 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1041,4 +1041,5 @@ 进度条行为 源编辑框最大行数 %s,设置行数小于屏幕可显示的最大行数可以更方便的滑动到其他的字段进行编辑 + 是否恢复到跳转前的阅读进度? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a7ec3881..1682f1312 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1042,4 +1042,5 @@ 进度条行为 源编辑框最大行数 %s,设置行数小于屏幕可显示的最大行数可以更方便的滑动到其他的字段进行编辑 + 是否恢复到跳转前的阅读进度?