From 71bd11a941b1d7912b85ee389206754f1b46e8e3 Mon Sep 17 00:00:00 2001 From: tarsin Date: Wed, 3 May 2023 19:21:40 +0800 Subject: [PATCH] Cleanup code --- .../ehviewer/ui/GalleryInfoBottomSheet.kt | 4 +- .../com/hippo/ehviewer/ui/MainActivity.kt | 2 +- .../java/com/hippo/ehviewer/ui/UrlOpener.kt | 60 +++++++++---------- .../hippo/ehviewer/ui/login/SignInScreen.kt | 2 - .../ehviewer/ui/scene/GalleryCommentsScene.kt | 10 +++- .../ehviewer/ui/scene/GalleryDetailScene.kt | 11 +++- .../com/hippo/preference/UrlPreference.kt | 2 +- 7 files changed, 48 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt b/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt index 3cd7266c6..2530f315f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt @@ -39,6 +39,7 @@ import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryDetail +import com.hippo.ehviewer.ui.login.LocalNavController import com.hippo.util.tellClipboardWithToast private const val INDEX_URL = 2 @@ -104,6 +105,7 @@ fun GalleryInfoBottomSheet( ModalBottomSheet(onDismissRequest) { check(data.size == keys.size) val context = LocalContext.current + val navController = LocalNavController.current Box( modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center, @@ -116,7 +118,7 @@ fun GalleryInfoBottomSheet( Row( modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.keyline_margin)).clickable { if (index == INDEX_PARENT) { - UrlOpener.openUrl(context, data[index], true) + data[index]?.let { navController.navWithUrl(it) } } else { context tellClipboardWithToast data[index] if (index == INDEX_URL) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt index 008bc8fd9..96e2fafcc 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt @@ -158,7 +158,7 @@ class MainActivity : EhActivity() { val action = intent.action if (Intent.ACTION_VIEW == action) { val uri = intent.data ?: return false - navController.jumpWithUrl(uri.toString()) + navController.navWithUrl(uri.toString()) } else if (Intent.ACTION_SEND == action) { val type = intent.type if ("text/plain" == type) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/UrlOpener.kt b/app/src/main/java/com/hippo/ehviewer/ui/UrlOpener.kt index fe56dd245..e4d223549 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/UrlOpener.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/UrlOpener.kt @@ -35,42 +35,11 @@ import com.hippo.ehviewer.ui.scene.ProgressScene import eu.kanade.tachiyomi.ui.reader.ReaderActivity object UrlOpener { - fun openUrl( - context: Context, - url: String?, - ehUrl: Boolean, - galleryDetail: GalleryDetail? = null, - ) { + fun openUrl(context: Context, url: String?) { if (url.isNullOrEmpty()) { return } - val intent: Intent val uri = Uri.parse(url) - if (ehUrl) { - if (galleryDetail != null) { - val result = GalleryPageUrlParser.parse(url) - if (result != null) { - if (result.gid == galleryDetail.gid) { - intent = Intent(context, ReaderActivity::class.java) - intent.action = ReaderActivity.ACTION_EH - intent.putExtra(ReaderActivity.KEY_GALLERY_INFO, galleryDetail) - intent.putExtra(ReaderActivity.KEY_PAGE, result.page) - context.startActivity(intent) - return - } - } else if (url.startsWith("#c")) { - try { - intent = Intent(context, ReaderActivity::class.java) - intent.action = ReaderActivity.ACTION_EH - intent.putExtra(ReaderActivity.KEY_GALLERY_INFO, galleryDetail) - intent.putExtra(ReaderActivity.KEY_PAGE, url.replace("#c", "").toInt() - 1) - context.startActivity(intent) - return - } catch (_: NumberFormatException) { - } - } - } - } val customTabsIntent = CustomTabsIntent.Builder() customTabsIntent.setShowTitle(true) try { @@ -82,7 +51,32 @@ object UrlOpener { } @MainThread -fun NavController.jumpWithUrl(url: String): Boolean { +fun Context.jumpToReaderByPage(url: String, detail: GalleryDetail): Boolean { + fun jump(page: Int) { + Intent(this, ReaderActivity::class.java).apply { + action = ReaderActivity.ACTION_EH + putExtra(ReaderActivity.KEY_GALLERY_INFO, detail) + putExtra(ReaderActivity.KEY_PAGE, page) + startActivity(this) + } + } + GalleryPageUrlParser.parse(url)?.let { + if (it.gid == detail.gid) { + jump(it.page) + return true + } + } + if (url.startsWith("#c")) { + runCatching { + jump(url.replace("#c", "").toInt() - 1) + return true + } + } + return false +} + +@MainThread +fun NavController.navWithUrl(url: String): Boolean { if (url.isEmpty()) return false GalleryListUrlParser.parse(url)?.let { lub -> Bundle().apply { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt index d2287bd27..4e0ec1ae6 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt @@ -210,7 +210,6 @@ fun SignInScreen(windowSizeClass: WindowSizeClass) { UrlOpener.openUrl( requireActivity(context), EhUrl.URL_REGISTER, - false, ) }, Modifier @@ -407,7 +406,6 @@ fun SignInScreen(windowSizeClass: WindowSizeClass) { UrlOpener.openUrl( requireActivity(context), EhUrl.URL_REGISTER, - false, ) }, Modifier diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.kt index b44634484..8c74e1fbd 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.kt @@ -75,7 +75,8 @@ import com.hippo.ehviewer.client.data.ListUrlBuilder import com.hippo.ehviewer.client.parser.VoteCommentParser import com.hippo.ehviewer.dao.Filter import com.hippo.ehviewer.ui.UrlOpener -import com.hippo.ehviewer.ui.jumpWithUrl +import com.hippo.ehviewer.ui.jumpToReaderByPage +import com.hippo.ehviewer.ui.navWithUrl import com.hippo.ehviewer.ui.scene.GalleryListScene.Companion.toStartArgs import com.hippo.text.URLImageGetter import com.hippo.util.ExceptionUtils @@ -485,8 +486,13 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh if (holder is ActualCommentHolder) { val span = holder.comment.currentSpan holder.comment.clearCurrentSpan() + val detail = mGalleryDetail ?: return false if (span is URLSpan) { - if (!findNavController().jumpWithUrl(span.url)) UrlOpener.openUrl(activity, span.url, true, mGalleryDetail) + if (!activity.jumpToReaderByPage(span.url, detail)) { + if (!findNavController().navWithUrl(span.url)) { + UrlOpener.openUrl(activity, span.url) + } + } } else { showCommentDialog(position, holder.sp) } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt index ba0db1cb0..c1a6744d3 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt @@ -90,6 +90,7 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -155,6 +156,7 @@ import com.hippo.ehviewer.ui.GalleryInfoBottomSheet import com.hippo.ehviewer.ui.MainActivity import com.hippo.ehviewer.ui.UrlOpener import com.hippo.ehviewer.ui.addToFavorites +import com.hippo.ehviewer.ui.login.LocalNavController import com.hippo.ehviewer.ui.removeFromFavorites import com.hippo.ehviewer.ui.scene.GalleryListScene.Companion.toStartArgs import com.hippo.ehviewer.ui.widget.CrystalCard @@ -349,7 +351,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener { val url = galleryDetailUrl val activity: Activity? = mainActivity if (null != url && null != activity) { - UrlOpener.openUrl(activity, url, false) + UrlOpener.openUrl(activity, url) } } @@ -524,7 +526,10 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener { fun onGalleryInfoCardClick() { showSheet = true } - composeBindingGD?.let { if (showSheet) GalleryInfoBottomSheet(galleryDetail = it) { showSheet = false } } + val navController = remember { findNavController() } + CompositionLocalProvider(LocalNavController provides navController) { + composeBindingGD?.let { if (showSheet) GalleryInfoBottomSheet(galleryDetail = it) { showSheet = false } } + } val windowSizeClass = calculateWindowSizeClass(requireActivity()) // Padding is not subtracted here to have the same column count as gallery list and preview val totalSpace = LocalConfiguration.current.screenWidthDp @@ -1372,7 +1377,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener { } R.id.show_definition -> { - UrlOpener.openUrl(context, EhUrl.getTagDefinitionUrl(temp), false) + UrlOpener.openUrl(context, EhUrl.getTagDefinitionUrl(temp)) } R.id.add_filter -> { diff --git a/app/src/main/java/com/hippo/preference/UrlPreference.kt b/app/src/main/java/com/hippo/preference/UrlPreference.kt index ad321248c..eddd56774 100644 --- a/app/src/main/java/com/hippo/preference/UrlPreference.kt +++ b/app/src/main/java/com/hippo/preference/UrlPreference.kt @@ -36,6 +36,6 @@ class UrlPreference @JvmOverloads constructor(context: Context, attrs: Attribute } override fun onClick() { - UrlOpener.openUrl(context, mUrl, true) + UrlOpener.openUrl(context, mUrl) } }