diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt
index 0463083b9..ecb2c9e22 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt
@@ -98,14 +98,19 @@ import com.hippo.ehviewer.ui.scene.GalleryListScene.Companion.toStartArgs
import com.hippo.ehviewer.ui.scene.ProgressFragment
import com.hippo.ehviewer.ui.scene.navAnimated
import com.hippo.ehviewer.ui.scene.navWithUrl
+import com.hippo.ehviewer.ui.settings.showNewVersion
+import com.hippo.ehviewer.ui.tools.LocalDialogState
import com.hippo.ehviewer.ui.tools.LocalTouchSlopProvider
+import com.hippo.ehviewer.updater.AppUpdater
import com.hippo.ehviewer.util.AppConfig
+import com.hippo.ehviewer.util.ExceptionUtils
import com.hippo.ehviewer.util.addTextToClipboard
import com.hippo.ehviewer.util.buildWindowInsets
import com.hippo.ehviewer.util.getParcelableExtraCompat
import com.hippo.ehviewer.util.getUrlFromClipboard
import com.hippo.ehviewer.util.set
import eu.kanade.tachiyomi.util.lang.launchUI
+import eu.kanade.tachiyomi.util.lang.withIOContext
import eu.kanade.tachiyomi.util.lang.withUIContext
import java.io.File
import java.io.FileOutputStream
@@ -115,6 +120,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
+import moe.tarsin.coroutines.runSuspendCatching
import splitties.systemservices.clipboardManager
import splitties.systemservices.connectivityManager
@@ -226,11 +232,23 @@ class MainActivity : EhActivity() {
WindowCompat.setDecorFitsSystemWindows(window, false)
setMD3Content {
val configuration = LocalConfiguration.current
+ val dialogState = LocalDialogState.current
val drawerState = rememberDrawerState(DrawerValue.Closed)
val scope = rememberCoroutineScope()
val recomposeScope = currentRecomposeScope
fun isSelected(id: Int) = ::navController.isInitialized && id == navController.currentDestination?.id
fun closeDrawer() = scope.launch { drawerState.close() }
+ LaunchedEffect(Unit) {
+ runSuspendCatching {
+ withIOContext {
+ AppUpdater.checkForUpdate()?.let {
+ dialogState.showNewVersion(this@MainActivity, it)
+ }
+ }
+ }.onFailure {
+ showTip(getString(R.string.update_failed, ExceptionUtils.getReadableString(it)), BaseScene.LENGTH_LONG)
+ }
+ }
LaunchedEffect(Unit) {
openDrawerFlow.collectLatest {
drawerState.open()
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/GalleryListScene.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/GalleryListScene.kt
index ddbe72884..cdd79d717 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/GalleryListScene.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/GalleryListScene.kt
@@ -92,9 +92,7 @@ import com.hippo.ehviewer.ui.legacy.HandlerDrawable
import com.hippo.ehviewer.ui.legacy.LayoutManagerUtils.firstVisibleItemPosition
import com.hippo.ehviewer.ui.legacy.ViewTransition
import com.hippo.ehviewer.ui.legacy.WindowInsetsAnimationHelper
-import com.hippo.ehviewer.ui.settings.showNewVersion
import com.hippo.ehviewer.ui.tools.DialogState
-import com.hippo.ehviewer.updater.AppUpdater
import com.hippo.ehviewer.util.AnimationUtils
import com.hippo.ehviewer.util.ExceptionUtils
import com.hippo.ehviewer.util.SimpleAnimatorListener
@@ -297,17 +295,6 @@ class GalleryListScene : SearchBarScene() {
private val dialogState = DialogState()
- // TODO: Move this out
- private fun checkForUpdates() {
- lifecycleScope.launchIO {
- runSuspendCatching {
- AppUpdater.checkForUpdate()?.let {
- dialogState.showNewVersion(requireContext(), it)
- }
- }
- }
- }
-
private val SceneGalleryListBinding.fastScroller get() = contentLayout.fastScroller
private val SceneGalleryListBinding.refreshLayout get() = contentLayout.refreshLayout
private val SceneGalleryListBinding.recyclerView get() = contentLayout.recyclerView
@@ -321,7 +308,6 @@ class GalleryListScene : SearchBarScene() {
): View {
_binding = SceneGalleryListBinding.inflate(inflater, container!!)
container.addView(ComposeWithMD3 { dialogState.Intercept() })
- checkForUpdates()
requireActivity().onBackPressedDispatcher.addCallback(stateBackPressedCallback)
mHideActionFabSlop = ViewConfiguration.get(requireContext()).scaledTouchSlop
mShowActionFab = true
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AboutScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AboutScreen.kt
index 95cb6e351..791abb7d3 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AboutScreen.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AboutScreen.kt
@@ -123,7 +123,7 @@ fun AboutScreen(navigator: DestinationsNavigator) {
dialogState.showNewVersion(context, it)
} ?: launchSnackBar(context.getString(R.string.already_latest_version))
}.onFailure {
- launchSnackBar(ExceptionUtils.getReadableString(it))
+ launchSnackBar(context.getString(R.string.update_failed, ExceptionUtils.getReadableString(it)))
}
}
}
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index a1192aa4d..3ae21d081 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -531,6 +531,7 @@
每周
每两周
每月
+ 更新失败:%s
有新版本!
已是最新版本
权限被拒
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c1ae475ac..21f7f6794 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -595,6 +595,7 @@
Weekly
Biweekly
Monthly
+ Update failed: %s
New version available!
Already the latest version
Permission denied