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" />