Extract a fragmentless ProgressScreen
ProgressScene.KEY_ACTION is always ProgressScene.ACTION_GALLERY_TOKEN, thus remove it
This commit is contained in:
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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
Reference in new issue
Block a user