Просмотр исходного кода

[修复] 某些情况下的阅读崩溃问题

HapeLee 11 месяцев назад
Родитель
Сommit
32fe45319b

+ 8 - 3
app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt

@@ -607,7 +607,10 @@ class ReadBookActivity : BaseReadBookActivity(),
             R.id.menu_download -> showDownloadDialog()
             R.id.menu_add_bookmark -> addBookmark()
             R.id.menu_simulated_reading -> showSimulatedReading()
-            R.id.menu_edit_content -> showDialogFragment(ContentEditDialog())
+            R.id.menu_edit_content -> {
+                binding.readMenu.runMenuOut()
+                showDialogFragment(ContentEditDialog())
+            }
             R.id.menu_update_toc -> ReadBook.book?.let {
                 if (it.isEpub) {
                     BookHelp.clearCache(it)
@@ -618,8 +621,10 @@ class ReadBookActivity : BaseReadBookActivity(),
                 }
                 loadChapterList(it)
             }
-
-            R.id.menu_enable_replace -> changeReplaceRuleState()
+            R.id.menu_enable_replace -> {
+                binding.readMenu.runMenuOut()
+                changeReplaceRuleState()
+            }
             R.id.menu_re_segment -> ReadBook.book?.let {
                 it.setReSegment(!it.getReSegment())
                 item.isChecked = it.getReSegment()

+ 34 - 30
app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt

@@ -813,44 +813,48 @@ class ReadMenu @JvmOverloads constructor(
     }
 
 
-    fun upSeekBar() {
-        //孩子们 土方法丑陋但有效
-        binding.seekReadPage.apply {
-            when (AppConfig.progressBarBehavior) {
-                "page" -> {
-                    ReadBook.curTextChapter?.let { chapter ->
-                        if (chapter.pageSize >= 0 && ReadBook.durPageIndex >= 0) {
-                            valueFrom = 1f
-                            valueTo = chapter.pageSize.toFloat().coerceAtLeast(2f)
-                            stepSize = 1f
-                            value = (ReadBook.durPageIndex).coerceIn(1, chapter.pageSize).toFloat()
-                        } else {
-                            valueFrom = 0f
-                            valueTo = 100000f
-                            stepSize = 0f
-                            value = 0f
-                        }
+    fun upSeekBar() = binding.seekReadPage.apply {
+
+        fun safeSet(rangeFrom: Float, rangeTo: Float, step: Float, rawValue: Float) {
+            valueFrom = rangeFrom
+            valueTo = rangeTo
+            stepSize = step
+            val safeValue = rawValue.coerceIn(rangeFrom, rangeTo)
+            if (value != safeValue) value = safeValue
+        }
+
+        when (AppConfig.progressBarBehavior) {
+            "page" -> {
+                ReadBook.curTextChapter?.let { chapter ->
+                    if (chapter.pageSize > 0 && ReadBook.durPageIndex >= 0) {
+                        safeSet(
+                            rangeFrom = 1f,
+                            rangeTo = chapter.pageSize.toFloat().coerceAtLeast(2f),
+                            step = 1f,
+                            rawValue = ReadBook.durPageIndex.toFloat()
+                        )
+                    } else {
+                        safeSet(0f, 100000f, 0f, 0f)
                     }
                 }
+            }
 
-                "chapter" -> {
-                    if (ReadBook.simulatedChapterSize > 0)
-                    {
-                        valueFrom = 1f
-                        valueTo = ReadBook.simulatedChapterSize.toFloat().coerceAtLeast(2f)
-                        stepSize = 1f
-                        value = (ReadBook.durChapterIndex).coerceIn(1, ReadBook.simulatedChapterSize).toFloat()
-                    } else {
-                        valueFrom = 0f
-                        valueTo = 100000f
-                        stepSize = 0f
-                        value = 0f
-                    }
+            "chapter" -> {
+                if (ReadBook.simulatedChapterSize > 0) {
+                    safeSet(
+                        rangeFrom = 1f,
+                        rangeTo = ReadBook.simulatedChapterSize.toFloat().coerceAtLeast(2f),
+                        step = 1f,
+                        rawValue = ReadBook.durChapterIndex.toFloat()
+                    )
+                } else {
+                    safeSet(0f, 100000f, 0f, 0f)
                 }
             }
         }
     }
 
+
 //    fun upSeekBar() {
 //        binding.seekReadPage.apply {
 //            when (AppConfig.progressBarBehavior) {