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