Extract a fragmentless ProgressScreen

ProgressScene.KEY_ACTION is always ProgressScene.ACTION_GALLERY_TOKEN, thus remove it
This commit is contained in:
Lokesh Gidra authored and FooIbar committed 2023-11-02 16:03:03 +08:00
1 parent 9904e166d2
commit dcfaa361ec
6 files changed
+124 -119

No files matched your search

@@ -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 {
@@ -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,
)
}
@@ -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
@@ -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"
}
}
@@ -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"
}
}
+1 -1
View File
@@ -73,7 +73,7 @@
android:label="SettingsActivity" />
<fragment
android:id="@+id/progressScene"
android:name="com.hippo.ehviewer.ui.scene.ProgressScene"
android:name="com.hippo.ehviewer.ui.scene.ProgressFragment"
android:label="ProgressScene" />
<activity
android:id="@+id/webView"