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 d4421fc13..3cd7266c6 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt @@ -36,7 +36,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.UrlOpener import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryDetail 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 b493ef0ac..008bc8fd9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.kt @@ -31,7 +31,6 @@ import android.net.NetworkRequest import android.net.Uri import android.os.Build import android.os.Bundle -import android.text.TextUtils import android.util.Log import android.view.View import android.widget.Toast @@ -60,7 +59,6 @@ import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.data.ListUrlBuilder import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser -import com.hippo.ehviewer.client.parser.GalleryListUrlParser import com.hippo.ehviewer.client.parser.GalleryPageUrlParser import com.hippo.ehviewer.databinding.ActivityMainBinding import com.hippo.ehviewer.download.DownloadService @@ -160,43 +158,7 @@ class MainActivity : EhActivity() { val action = intent.action if (Intent.ACTION_VIEW == action) { val uri = intent.data ?: return false - val url = uri.toString() - if (TextUtils.isEmpty(url)) { - return false - } - - val listUrlBuilder = GalleryListUrlParser.parse(url) - if (listUrlBuilder != null) { - val args = Bundle() - args.putString( - GalleryListScene.KEY_ACTION, - GalleryListScene.ACTION_LIST_URL_BUILDER, - ) - args.putParcelable(GalleryListScene.KEY_LIST_URL_BUILDER, listUrlBuilder) - navController.navigate(R.id.galleryListScene, args) - return true - } - - val result1 = GalleryDetailUrlParser.parse(url) - if (result1 != null) { - val args = Bundle() - args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN) - args.putLong(GalleryDetailScene.KEY_GID, result1.gid) - args.putString(GalleryDetailScene.KEY_TOKEN, result1.token) - navController.navigate(R.id.galleryDetailScene, args) - return true - } - - val result2 = GalleryPageUrlParser.parse(url) - 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) - navController.navigate(R.id.progressScene, args) - return true - } + navController.jumpWithUrl(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/UrlOpener.kt b/app/src/main/java/com/hippo/ehviewer/ui/UrlOpener.kt similarity index 59% rename from app/src/main/java/com/hippo/ehviewer/UrlOpener.kt rename to app/src/main/java/com/hippo/ehviewer/ui/UrlOpener.kt index b8b62a70c..4c5ed20bf 100644 --- a/app/src/main/java/com/hippo/ehviewer/UrlOpener.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/UrlOpener.kt @@ -13,16 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.hippo.ehviewer +package com.hippo.ehviewer.ui import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.net.Uri +import android.os.Bundle import android.widget.Toast import androidx.browser.customtabs.CustomTabsIntent +import androidx.navigation.NavController +import com.hippo.ehviewer.R import com.hippo.ehviewer.client.data.GalleryDetail -import com.hippo.ehviewer.client.parser.GalleryPageUrlParser.parse +import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser +import com.hippo.ehviewer.client.parser.GalleryListUrlParser +import com.hippo.ehviewer.client.parser.GalleryPageUrlParser +import com.hippo.ehviewer.ui.scene.GalleryDetailScene +import com.hippo.ehviewer.ui.scene.GalleryListScene +import com.hippo.ehviewer.ui.scene.ProgressScene import eu.kanade.tachiyomi.ui.reader.ReaderActivity object UrlOpener { @@ -39,7 +47,7 @@ object UrlOpener { val uri = Uri.parse(url) if (ehUrl) { if (galleryDetail != null) { - val result = parse(url) + val result = GalleryPageUrlParser.parse(url) if (result != null) { if (result.gid == galleryDetail.gid) { intent = Intent(context, ReaderActivity::class.java) @@ -71,3 +79,40 @@ object UrlOpener { } } } + +fun NavController.jumpWithUrl(url: String): Boolean { + if (url.isEmpty()) return false + val listUrlBuilder = GalleryListUrlParser.parse(url) + if (listUrlBuilder != null) { + val args = Bundle() + args.putString( + GalleryListScene.KEY_ACTION, + GalleryListScene.ACTION_LIST_URL_BUILDER, + ) + args.putParcelable(GalleryListScene.KEY_LIST_URL_BUILDER, listUrlBuilder) + navigate(R.id.galleryListScene, args) + return true + } + + val result1 = GalleryDetailUrlParser.parse(url) + if (result1 != null) { + val args = Bundle() + args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN) + args.putLong(GalleryDetailScene.KEY_GID, result1.gid) + args.putString(GalleryDetailScene.KEY_TOKEN, result1.token) + navigate(R.id.galleryDetailScene, args) + return true + } + + val result2 = GalleryPageUrlParser.parse(url) + 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) + navigate(R.id.progressScene, args) + return true + } + return false +} 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 3a45c508b..d2287bd27 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 @@ -58,10 +58,10 @@ import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.UrlOpener import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils +import com.hippo.ehviewer.ui.UrlOpener import com.hippo.util.ExceptionUtils import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.withNonCancellableContext 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 af7f5257f..b44634484 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 @@ -53,6 +53,7 @@ import androidx.core.text.set import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsAnimationCompat import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -63,7 +64,6 @@ import com.hippo.app.BaseDialogBuilder import com.hippo.app.EditTextDialogBuilder import com.hippo.easyrecyclerview.EasyRecyclerView import com.hippo.ehviewer.R -import com.hippo.ehviewer.UrlOpener import com.hippo.ehviewer.WindowInsetsAnimationHelper import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhFilter @@ -74,6 +74,8 @@ import com.hippo.ehviewer.client.data.GalleryDetail 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.scene.GalleryListScene.Companion.toStartArgs import com.hippo.text.URLImageGetter import com.hippo.util.ExceptionUtils @@ -484,7 +486,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh val span = holder.comment.currentSpan holder.comment.clearCurrentSpan() if (span is URLSpan) { - UrlOpener.openUrl(activity, span.url, true, mGalleryDetail) + if (!findNavController().jumpWithUrl(span.url)) UrlOpener.openUrl(activity, span.url, true, mGalleryDetail) } 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 78c3af939..ba0db1cb0 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 @@ -124,7 +124,6 @@ import com.hippo.ehviewer.EhApplication.Companion.galleryDetailCache import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings -import com.hippo.ehviewer.UrlOpener import com.hippo.ehviewer.client.EhCookieStore import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhFilter @@ -154,6 +153,7 @@ import com.hippo.ehviewer.spider.SpiderQueen.Companion.MODE_READ import com.hippo.ehviewer.ui.CommonOperations 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.removeFromFavorites import com.hippo.ehviewer.ui.scene.GalleryListScene.Companion.toStartArgs diff --git a/app/src/main/java/com/hippo/preference/UrlPreference.kt b/app/src/main/java/com/hippo/preference/UrlPreference.kt index 1c2db703b..ad321248c 100644 --- a/app/src/main/java/com/hippo/preference/UrlPreference.kt +++ b/app/src/main/java/com/hippo/preference/UrlPreference.kt @@ -19,7 +19,7 @@ import android.content.Context import android.util.AttributeSet import androidx.preference.Preference import com.hippo.ehviewer.R -import com.hippo.ehviewer.UrlOpener +import com.hippo.ehviewer.ui.UrlOpener class UrlPreference @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : Preference(context, attrs) {