Selaa lähdekoodia

feat: 阅读电量不刷新之问题

HapeLee 1 kuukausi sitten
vanhempi
commit
cef92e41ff

+ 1 - 5
app/src/main/java/io/legado/app/ui/book/read/ReadBookContract.kt

@@ -1010,11 +1010,7 @@ sealed interface ReadBookEffect {
     // Download chapters — Activity calls CacheBook.start()
     data class DownloadChapters(val start: Int, val end: Int) : ReadBookEffect
 
-    // Lifecycle — route-level Activity operations
-    data object RegisterTimeBatteryReceiver : ReadBookEffect
-    data object UnregisterTimeBatteryReceiver : ReadBookEffect
-    data object RegisterNetworkListener : ReadBookEffect
-    data object UnregisterNetworkListener : ReadBookEffect
+    // Other route-level Activity operations
     data object SetOrientation : ReadBookEffect
     data object OpenBooksDirPicker : ReadBookEffect
     data object BackupNow : ReadBookEffect

+ 13 - 28
app/src/main/java/io/legado/app/ui/book/read/ReadBookController.kt

@@ -20,6 +20,7 @@ import androidx.core.content.ContextCompat
 import androidx.core.net.toUri
 import androidx.lifecycle.lifecycleScope
 import com.script.rhino.runScriptWithContext
+import io.legado.app.BuildConfig
 import io.legado.app.R
 import io.legado.app.constant.AppLog
 import io.legado.app.constant.BookType
@@ -1620,20 +1621,24 @@ class ReadBookController(
         upScreenTimeOut()
     }
 
-    /**
-     * View/Window-only resume — business logic handled by ViewModel via OnResume intent.
-     */
+    /** View/Window lifecycle work; business session work stays in the ViewModel. */
     fun onResume() {
         setOrientation()
         upSystemUiVisibility()
-        screenOffTimerStart()
+        upScreenTimeOut()
+        handleEffect(ReadBookEffect.UpTime)
+        registerTimeBatteryReceiver()
+        networkChangedListener.onNetworkChanged = viewModel::onNetworkChanged
+        networkChangedListener.register()
     }
 
-    /**
-     * View/Window-only pause — business logic handled by ViewModel via OnPause intent.
-     */
+    /** Release listeners even if the route's effect collector has already stopped. */
     fun onPause() {
+        stopAutoPage()
+        unregisterTimeBatteryReceiver()
+        networkChangedListener.unRegister()
         upSystemUiVisibility()
+        if (!BuildConfig.DEBUG) Backup.autoBack(activity)
     }
 
     override val isInMultiWindowModeCompat: Boolean
@@ -2313,30 +2318,10 @@ class ReadBookController(
                 }
             }
 
-            // ── Lifecycle — route/bridge Activity operations ──
-            is ReadBookEffect.RegisterTimeBatteryReceiver -> {
-                registerTimeBatteryReceiver()
-            }
-
-            is ReadBookEffect.UnregisterTimeBatteryReceiver -> {
-                unregisterTimeBatteryReceiver()
-            }
-
-            is ReadBookEffect.RegisterNetworkListener -> {
-                networkChangedListener.register()
-                networkChangedListener.onNetworkChanged = {
-                    viewModel.onNetworkChanged()
-                }
-            }
-
-            is ReadBookEffect.UnregisterNetworkListener -> {
-                networkChangedListener.unRegister()
-            }
-
+            // ── Other Activity operations ──
             is ReadBookEffect.SetOrientation -> {
                 setOrientation()
             }
-
             is ReadBookEffect.BackupNow -> {
                 Backup.autoBack(activity)
             }

+ 1 - 17
app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt

@@ -1598,21 +1598,13 @@ class ReadBookViewModel(
             ReadBook.webBookProgress = null
         }
 
-        // View-layer operations via effects
-        _effects.tryEmit(ReadBookEffect.UpSystemUiVisibility)
-        _effects.tryEmit(ReadBookEffect.UpTime)
-        _effects.tryEmit(ReadBookEffect.UpScreenTimeOut)
-
-        // Activity-level operations
-        _effects.tryEmit(ReadBookEffect.RegisterTimeBatteryReceiver)
-        _effects.tryEmit(ReadBookEffect.RegisterNetworkListener)
+        // Reader window and listener lifecycle is handled synchronously by the route controller.
     }
 
     private var justInitData = false
 
     private fun handleOnPause() {
         backupJob?.cancel()
-        _effects.tryEmit(ReadBookEffect.StopAutoPage)
 
         // Read time tracking
         ReadBook.isUiActive = false
@@ -1623,20 +1615,12 @@ class ReadBookViewModel(
         }
         ReadBook.cancelPreDownloadTask()
 
-        // View-layer
-        _effects.tryEmit(ReadBookEffect.UpSystemUiVisibility)
-
-        // Activity-level operations
-        _effects.tryEmit(ReadBookEffect.UnregisterTimeBatteryReceiver)
-        _effects.tryEmit(ReadBookEffect.UnregisterNetworkListener)
-
         if (!BuildConfig.DEBUG) {
             if (backupSettingsGateway.currentSettings.syncBookProgressPlus) {
                 ReadBook.syncProgress()
             } else {
                 ReadBook.uploadProgress()
             }
-            _effects.tryEmit(ReadBookEffect.BackupNow)
         }
         justInitData = false
     }

+ 1 - 1
app/src/main/java/io/legado/app/ui/main/MainNavGraph.kt

@@ -817,8 +817,8 @@ fun MainActivity.mainEntryProvider(
             fun pauseReader() {
                 if (!readerResumeState[0]) return
                 readerResumeState[0] = false
-                controller.onPause()
                 readBookViewModel.onIntent(ReadBookIntent.OnPause)
+                controller.onPause()
             }
 
             ReadBookRouteScreen(