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 8cbabf086..082acdbd6 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt
@@ -95,7 +95,7 @@ import com.hippo.ehviewer.ui.legacy.EditTextDialogBuilder
import com.hippo.ehviewer.ui.scene.BaseScene
import com.hippo.ehviewer.ui.scene.GalleryDetailScene
import com.hippo.ehviewer.ui.scene.GalleryListScene.Companion.toStartArgs
-import com.hippo.ehviewer.ui.scene.ProgressScene
+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.tools.LocalTouchSlopProvider
@@ -429,10 +429,9 @@ class MainActivity : EhActivity() {
val result2 = GalleryPageUrlParser.parse(text, false)
if (result2 != null) {
val args = Bundle()
- args.putString(ProgressScene.KEY_ACTION, ProgressScene.ACTION_GALLERY_TOKEN)
- args.putLong(ProgressScene.KEY_GID, result2.gid)
- args.putString(ProgressScene.KEY_PTOKEN, result2.pToken)
- args.putInt(ProgressScene.KEY_PAGE, result2.page)
+ args.putLong(ProgressFragment.KEY_GID, result2.gid)
+ args.putString(ProgressFragment.KEY_PTOKEN, result2.pToken)
+ args.putInt(ProgressFragment.KEY_PAGE, result2.page)
launch = { navController.navAnimated(R.id.progressScene, args) }
}
launch?.let {
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 a949664af..84895f632 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
@@ -996,10 +996,9 @@ class GalleryListScene : SearchBarScene() {
) : UrlSuggestion() {
override val destination = R.id.progressScene
override val args = bundleOf(
- ProgressScene.KEY_ACTION to ProgressScene.ACTION_GALLERY_TOKEN,
- ProgressScene.KEY_GID to gid,
- ProgressScene.KEY_PTOKEN to pToken,
- ProgressScene.KEY_PAGE to page,
+ ProgressFragment.KEY_GID to gid,
+ ProgressFragment.KEY_PTOKEN to pToken,
+ ProgressFragment.KEY_PAGE to page,
)
}
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/MainNav.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/MainNav.kt
index 06ec0a8ae..0dbf3a005 100644
--- a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/MainNav.kt
+++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/MainNav.kt
@@ -55,10 +55,9 @@ fun NavController.navWithUrl(url: String): Boolean {
navAnimated(
R.id.progressScene,
bundleOf(
- ProgressScene.KEY_ACTION to ProgressScene.ACTION_GALLERY_TOKEN,
- ProgressScene.KEY_GID to gid,
- ProgressScene.KEY_PTOKEN to pToken,
- ProgressScene.KEY_PAGE to page,
+ ProgressFragment.KEY_GID to gid,
+ ProgressFragment.KEY_PTOKEN to pToken,
+ ProgressFragment.KEY_PAGE to page,
),
)
return true
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/ProgressFragment.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/ProgressFragment.kt
new file mode 100644
index 000000000..6390b643d
--- /dev/null
+++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/ProgressFragment.kt
@@ -0,0 +1,113 @@
+package com.hippo.ehviewer.ui.scene
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import androidx.core.os.bundleOf
+import androidx.navigation.NavController
+import androidx.navigation.findNavController
+import com.hippo.ehviewer.R
+import com.hippo.ehviewer.client.EhEngine
+import com.hippo.ehviewer.icons.EhIcons
+import com.hippo.ehviewer.icons.big.SadAndroid
+import com.hippo.ehviewer.ui.setMD3Content
+import com.hippo.ehviewer.util.ExceptionUtils
+import com.ramcosta.composedestinations.annotation.Destination
+import eu.kanade.tachiyomi.util.lang.withUIContext
+import moe.tarsin.coroutines.runSuspendCatching
+
+@Destination
+@Composable
+fun ProgressScreen(gid: Long, token: String, page: Int, navigator: NavController) {
+ val wrong = stringResource(id = R.string.error_something_wrong_happened)
+ var error by rememberSaveable { mutableStateOf("") }
+ LaunchedEffect(error) {
+ if (error.isEmpty()) {
+ if (gid == -1L || token == ProgressFragment.INVALID || page == -1) {
+ error = wrong
+ } else {
+ runSuspendCatching {
+ EhEngine.getGalleryToken(gid, token, page)
+ }.onSuccess {
+ withUIContext {
+ navigator.popBackStack()
+ navigator.navAnimated(
+ R.id.galleryDetailScene,
+ bundleOf(
+ GalleryDetailScene.KEY_ACTION to GalleryDetailScene.ACTION_GID_TOKEN,
+ GalleryDetailScene.KEY_GID to gid,
+ GalleryDetailScene.KEY_TOKEN to it,
+ GalleryDetailScene.KEY_PAGE to page,
+ ),
+ )
+ }
+ }.onFailure {
+ error = ExceptionUtils.getReadableString(it)
+ }
+ }
+ }
+ }
+ Box(contentAlignment = Alignment.Center) {
+ if (error.isNotBlank()) {
+ Column(
+ modifier = Modifier.clickable { error = "" },
+ verticalArrangement = Arrangement.Center,
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Image(
+ imageVector = EhIcons.Big.Default.SadAndroid,
+ contentDescription = null,
+ modifier = Modifier.padding(16.dp),
+ )
+ Text(
+ text = wrong,
+ style = MaterialTheme.typography.headlineMedium,
+ )
+ }
+ } else {
+ CircularProgressIndicator()
+ }
+ }
+}
+
+class ProgressFragment : BaseScene() {
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
+ return ComposeWithViewLifecycle().apply {
+ setMD3Content {
+ val gid = remember { requireArguments().getLong(KEY_GID, -1) }
+ val token = remember { requireArguments().getString(KEY_PTOKEN, INVALID) }
+ val page = remember { requireArguments().getInt(KEY_PAGE, -1) }
+ val navController = remember { findNavController() }
+ ProgressScreen(gid, token, page, navController)
+ }
+ }
+ }
+
+ companion object {
+ const val KEY_GID = "gid"
+ const val KEY_PTOKEN = "ptoken"
+ const val KEY_PAGE = "page"
+ const val INVALID = "invalid"
+ }
+}
diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/ProgressScene.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/ProgressScene.kt
deleted file mode 100644
index 74c100c07..000000000
--- a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/ProgressScene.kt
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.hippo.ehviewer.ui.scene
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.compose.foundation.Image
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.CircularProgressIndicator
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Text
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.unit.dp
-import androidx.core.os.bundleOf
-import androidx.navigation.fragment.findNavController
-import com.hippo.ehviewer.R
-import com.hippo.ehviewer.client.EhEngine
-import com.hippo.ehviewer.icons.EhIcons
-import com.hippo.ehviewer.icons.big.SadAndroid
-import com.hippo.ehviewer.ui.setMD3Content
-import com.hippo.ehviewer.util.ExceptionUtils
-import eu.kanade.tachiyomi.util.lang.withUIContext
-import moe.tarsin.coroutines.runSuspendCatching
-
-class ProgressScene : BaseScene() {
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
- return ComposeWithViewLifecycle().apply {
- setMD3Content {
- val action = rememberSaveable { requireArguments().getString(KEY_ACTION, INVALID) }
- val gid = rememberSaveable { requireArguments().getLong(KEY_GID, -1) }
- val token = rememberSaveable { requireArguments().getString(KEY_PTOKEN, INVALID) }
- val page = rememberSaveable { requireArguments().getInt(KEY_PAGE, -1) }
- val wrong = stringResource(id = R.string.error_something_wrong_happened)
- var error by rememberSaveable { mutableStateOf("") }
- LaunchedEffect(error) {
- if (error.isEmpty()) {
- if (action != ACTION_GALLERY_TOKEN || gid == -1L || token == INVALID || page == -1) {
- error = wrong
- } else {
- runSuspendCatching {
- EhEngine.getGalleryToken(gid, token, page)
- }.onSuccess {
- withUIContext {
- findNavController().popBackStack()
- navAnimated(
- R.id.galleryDetailScene,
- bundleOf(
- GalleryDetailScene.KEY_ACTION to GalleryDetailScene.ACTION_GID_TOKEN,
- GalleryDetailScene.KEY_GID to gid,
- GalleryDetailScene.KEY_TOKEN to it,
- GalleryDetailScene.KEY_PAGE to page,
- ),
- )
- }
- }.onFailure {
- error = ExceptionUtils.getReadableString(it)
- }
- }
- }
- }
- Box(contentAlignment = Alignment.Center) {
- if (error.isNotBlank()) {
- Column(
- modifier = Modifier.clickable { error = "" },
- verticalArrangement = Arrangement.Center,
- horizontalAlignment = Alignment.CenterHorizontally,
- ) {
- Image(
- imageVector = EhIcons.Big.Default.SadAndroid,
- contentDescription = null,
- modifier = Modifier.padding(16.dp),
- )
- Text(
- text = wrong,
- style = MaterialTheme.typography.headlineMedium,
- )
- }
- } else {
- CircularProgressIndicator()
- }
- }
- }
- }
- }
-
- companion object {
- const val KEY_ACTION = "action"
- const val ACTION_GALLERY_TOKEN = "gallery_token"
- const val KEY_GID = "gid"
- const val KEY_PTOKEN = "ptoken"
- const val KEY_PAGE = "page"
- const val INVALID = "invalid"
- }
-}
diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml
index d6513b9d9..b825feb05 100644
--- a/app/src/main/res/navigation/nav_graph.xml
+++ b/app/src/main/res/navigation/nav_graph.xml
@@ -73,7 +73,7 @@
android:label="SettingsActivity" />