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 763d34541..bdf55e39a 100644 --- a/app/src/main/java/io/legado/app/model/ReadBook.kt +++ b/app/src/main/java/io/legado/app/model/ReadBook.kt @@ -35,6 +35,7 @@ object ReadBook : CoroutineScope by MainScope() { var durChapterIndex = 0 var durChapterPos = 0 var isLocalBook = true + var chapterChanged = false var prevTextChapter: TextChapter? = null var curTextChapter: TextChapter? = null var nextTextChapter: TextChapter? = null diff --git a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt index 5927b0327..254ff88c8 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/BookInfoActivity.kt @@ -66,6 +66,7 @@ class BookInfoActivity : withContext(IO) { book.durChapterIndex = it.first book.durChapterPos = it.second + chapterChanged = it.third appDb.bookDao.update(book) } viewModel.chapterListData.value?.let { chapterList -> @@ -103,6 +104,7 @@ class BookInfoActivity : } } private var tocChanged = false + private var chapterChanged = false private val waitDialog by lazy { WaitDialog(this) } private var editMenuItem: MenuItem? = null @@ -620,6 +622,7 @@ class BookInfoActivity : .putExtra("bookUrl", book.bookUrl) .putExtra("inBookshelf", viewModel.inBookshelf) .putExtra("tocChanged", tocChanged) + .putExtra("chapterChanged", chapterChanged) ) } tocChanged = false diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt index 540d035d9..8f951719b 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt @@ -60,6 +60,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { execute { ReadBook.inBookshelf = intent.getBooleanExtra("inBookshelf", true) ReadBook.tocChanged = intent.getBooleanExtra("tocChanged", false) + ReadBook.chapterChanged = intent.getBooleanExtra("chapterChanged", false) val bookUrl = intent.getStringExtra("bookUrl") val book = when { bookUrl.isNullOrEmpty() -> appDb.bookDao.lastReadBook @@ -104,7 +105,10 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) { } ReadBook.loadContent(resetPageOffset = false) } - if (!isSameBook || !BaseReadAloudService.isRun) { + if (ReadBook.chapterChanged) { + // 有章节跳转不同步阅读进度 + ReadBook.chapterChanged = false + } else if (!isSameBook || !BaseReadAloudService.isRun) { syncBookProgress(book) } if (!book.isLocal && ReadBook.bookSource == null) { diff --git a/app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt b/app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt index 53ef33135..d3f735664 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/ChapterListFragment.kt @@ -162,7 +162,10 @@ class ChapterListFragment : VMBaseFragment(R.layout.fragment_chapt override fun openChapter(bookChapter: BookChapter) { activity?.run { - setResult(RESULT_OK, Intent().putExtra("index", bookChapter.index)) + setResult(RESULT_OK, Intent() + .putExtra("index", bookChapter.index) + .putExtra("chapterChanged", bookChapter.index != durChapterIndex) + ) finish() } } diff --git a/app/src/main/java/io/legado/app/ui/book/toc/TocActivityResult.kt b/app/src/main/java/io/legado/app/ui/book/toc/TocActivityResult.kt index 4cdd2ad4c..8cd5d47b0 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/TocActivityResult.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/TocActivityResult.kt @@ -5,19 +5,20 @@ import android.content.Context import android.content.Intent import androidx.activity.result.contract.ActivityResultContract -class TocActivityResult : ActivityResultContract?>() { +class TocActivityResult : ActivityResultContract?>() { override fun createIntent(context: Context, input: String): Intent { return Intent(context, TocActivity::class.java) .putExtra("bookUrl", input) } - override fun parseResult(resultCode: Int, intent: Intent?): Pair? { + override fun parseResult(resultCode: Int, intent: Intent?): Triple? { if (resultCode == RESULT_OK) { intent?.let { - return Pair( + return Triple( it.getIntExtra("index", 0), - it.getIntExtra("chapterPos", 0) + it.getIntExtra("chapterPos", 0), + it.getBooleanExtra("chapterChanged", false) ) } }