From 9899552e4bdaaafba7f06cd2ce8b242886f5e0e7 Mon Sep 17 00:00:00 2001 From: seven332 Date: Tue, 4 Dec 2018 21:45:22 +0800 Subject: [PATCH] Close #488, detect gallery page url in clipboard --- .../com/hippo/ehviewer/ui/MainActivity.java | 65 +++++++++++-------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index f642a0cc9..f0fcaf62f 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -36,7 +36,6 @@ import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.text.TextUtils; -import android.util.Pair; import android.view.Gravity; import android.view.MenuItem; import android.view.View; @@ -50,10 +49,11 @@ import com.hippo.ehviewer.Crash; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; -import com.hippo.ehviewer.client.EhUrl; import com.hippo.ehviewer.client.EhUrlOpener; import com.hippo.ehviewer.client.EhUtils; import com.hippo.ehviewer.client.data.ListUrlBuilder; +import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser; +import com.hippo.ehviewer.client.parser.GalleryPageUrlParser; import com.hippo.ehviewer.ui.scene.AnalyticsScene; import com.hippo.ehviewer.ui.scene.BaseScene; import com.hippo.ehviewer.ui.scene.CookieSignInScene; @@ -122,8 +122,6 @@ public final class MainActivity extends StageActivity private int mNavCheckedItem = 0; - private int mClipTextHashCode = 0; - static { registerLaunchMode(SecurityScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK); registerLaunchMode(WarningScene.class, SceneFragment.LAUNCH_MODE_SINGLE_TASK); @@ -426,20 +424,16 @@ public final class MainActivity extends StageActivity // Check permission PermissionRequester.request(this, Manifest.permission.WRITE_EXTERNAL_STORAGE, getString(R.string.write_rationale), PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); - - mClipTextHashCode = Settings.getClipboardTextHashCode(); } private void onRestore(Bundle savedInstanceState) { mNavCheckedItem = savedInstanceState.getInt(KEY_NAV_CHECKED_ITEM); - mClipTextHashCode = savedInstanceState.getInt(KEY_CLIP_TEXT_HASH_CODE); } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); outState.putInt(KEY_NAV_CHECKED_ITEM, mNavCheckedItem); - outState.putInt(KEY_CLIP_TEXT_HASH_CODE, mClipTextHashCode); } @Override @@ -493,34 +487,49 @@ public final class MainActivity extends StageActivity return null; } + @Nullable + private Announcer createAnnouncerFromClipboardUrl(String url) { + GalleryDetailUrlParser.Result result1 = GalleryDetailUrlParser.parse(url, false); + if (result1 != null) { + Bundle args = new Bundle(); + args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN); + args.putLong(GalleryDetailScene.KEY_GID, result1.gid); + args.putString(GalleryDetailScene.KEY_TOKEN, result1.token); + return new Announcer(GalleryDetailScene.class).setArgs(args); + } + + GalleryPageUrlParser.Result result2 = GalleryPageUrlParser.parse(url, false); + if (result2 != null) { + Bundle args = new 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); + return new Announcer(ProgressScene.class).setArgs(args); + } + + return null; + } + private void checkClipboardUrlInternal() { String text = getTextFromClipboard(); int hashCode = text != null ? text.hashCode() : 0; - if (text != null && hashCode != 0 && mClipTextHashCode != hashCode && Settings.getClipboardTextHashCode() != hashCode) { - Pair pair = EhUrl.parseGalleryDetailUrl(text); - if (pair != null) { - long gid = pair.first; - String token = pair.second; + if (text != null && hashCode != 0 && Settings.getClipboardTextHashCode() != hashCode) { + Announcer announcer = createAnnouncerFromClipboardUrl(text); + if (announcer != null) { new AlertDialog.Builder(this) - .setTitle(R.string.clipboard_gallery_url_dialog_title) - .setMessage(R.string.clipboard_gallery_url_dialog_message) - .setNegativeButton(android.R.string.cancel, null) - .setPositiveButton(android.R.string.ok, (dialog, which) -> { - Bundle args = new Bundle(); - args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN); - args.putLong(GalleryDetailScene.KEY_GID, gid); - args.putString(GalleryDetailScene.KEY_TOKEN, token); - startScene(new Announcer(GalleryDetailScene.class).setArgs(args)); - }) - .show(); + .setTitle(R.string.clipboard_gallery_url_dialog_title) + .setMessage(R.string.clipboard_gallery_url_dialog_message) + .setNegativeButton(android.R.string.cancel, null) + .setPositiveButton(android.R.string.ok, (dialog, which) -> { + startScene(announcer); + }) + .show(); } } - if (mClipTextHashCode != hashCode) { - mClipTextHashCode = hashCode; - Settings.putClipboardTextHashCode(hashCode); - } + Settings.putClipboardTextHashCode(hashCode); } @Override