From ca0518c747e7f4a742356e0a1cb1bd7533e1daa0 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Tue, 13 Dec 2022 09:00:56 +0800 Subject: [PATCH] Verify cookies through getProfile (#523) Verify cookies through getProfile, Resolve? #283 --- .../java/com/hippo/ehviewer/Settings.java | 318 ++---------------- .../com/hippo/ehviewer/client/EhUtils.java | 46 +-- .../ehviewer/preference/AccountPreference.kt | 2 +- .../com/hippo/ehviewer/ui/MainActivity.java | 4 +- .../ehviewer/ui/scene/CookieSignInScene.java | 69 ++-- .../hippo/ehviewer/ui/scene/SignInScene.java | 24 +- .../ehviewer/ui/scene/WebViewSignInScene.java | 8 +- 7 files changed, 82 insertions(+), 389 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index dac0ad294..581d8eca6 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -32,13 +32,9 @@ import com.hippo.ehviewer.ui.CommonOperations; import com.hippo.ehviewer.ui.scene.GalleryListScene; import com.hippo.glgallery.GalleryView; import com.hippo.unifile.UniFile; -import com.hippo.util.ExceptionUtils; import com.hippo.yorozuya.AssertUtils; -import com.hippo.yorozuya.FileUtils; -import com.hippo.yorozuya.MathUtils; import com.hippo.yorozuya.NumberUtils; -import java.io.File; import java.util.Locale; import java.util.Set; @@ -52,10 +48,7 @@ public class Settings { public static final String KEY_ACCOUNT = "account"; public static final String KEY_BLACK_DARK_THEME = "black_dark_theme"; - public static final int THEME_LIGHT = 1; public static final int THEME_SYSTEM = -1; - public static final int THEME_BLACK = 2; - public static final String KEY_APPLY_NAV_BAR_THEME_COLOR = "apply_nav_bar_theme_color"; public static final String KEY_GALLERY_SITE = "gallery_site"; public static final String KEY_LIST_MODE = "list_mode"; public static final String KEY_DETAIL_SIZE = "detail_size"; @@ -84,15 +77,12 @@ public class Settings { public static final String KEY_IMAGE_RESOLUTION = "image_size"; public static final String DEFAULT_IMAGE_RESOLUTION = EhConfig.IMAGE_SIZE_AUTO; public static final int INVALID_DEFAULT_FAV_SLOT = -2; - public static final String KEY_ENABLE_ANALYTICS = "enable_analytics"; /******************** ****** Advanced ********************/ public static final String KEY_SAVE_PARSE_ERROR_BODY = "save_parse_error_body"; public static final String KEY_SECURITY = "require_unlock"; public static final String KEY_SECURITY_DELAY = "require_unlock_delay"; - public static final String DEFAULT_SECURITY = ""; - public static final String KEY_ENABLE_FINGERPRINT = "enable_fingerprint"; public static final String KEY_READ_CACHE_SIZE = "read_cache_size"; public static final int DEFAULT_READ_CACHE_SIZE = 320; public static final String KEY_BUILT_IN_HOSTS = "built_in_hosts_2"; @@ -106,25 +96,17 @@ public class Settings { private static final String KEY_PREVIEW_NUM = "preview_num"; private static final int DEFAULT_PREVIEW_NUM = 60; private static final String TAG = Settings.class.getSimpleName(); - private static final String KEY_VERSION_CODE = "version_code"; - private static final int DEFAULT_VERSION_CODE = 0; private static final String KEY_DISPLAY_NAME = "display_name"; private static final String DEFAULT_DISPLAY_NAME = null; private static final int DEFAULT_LIST_THUMB_SIZE = 40; private static final String KEY_AVATAR = "avatar"; - private static final String DEFAULT_AVATAR = null; - private static final String KEY_SHOW_WARNING = "show_warning"; - private static final boolean DEFAULT_SHOW_WARNING = true; private static final String KEY_REMOVE_IMAGE_FILES = "include_pic"; private static final boolean DEFAULT_REMOVE_IMAGE_FILES = true; private static final String KEY_NEED_SIGN_IN = "need_sign_in"; private static final boolean DEFAULT_NEED_SIGN_IN = true; private static final String KEY_SELECT_SITE = "select_site"; private static final boolean DEFAULT_SELECT_SITE = true; - private static final String KEY_QUICK_SEARCH_TIP = "quick_search_tip"; - private static final boolean DEFAULT_QUICK_SEARCH_TIP = true; private static final int DEFAULT_THEME = THEME_SYSTEM; - private static final boolean DEFAULT_APPLY_NAV_BAR_THEME_COLOR = true; private static final int DEFAULT_GALLERY_SITE = 1; private static final String KEY_LAUNCH_PAGE = "launch_page"; private static final int DEFAULT_LAUNCH_PAGE = 0; @@ -143,10 +125,6 @@ public class Settings { private static final boolean DEFAULT_METERED_NETWORK_WARNING = false; private static final String KEY_APP_LINK_VERIFY_TIP = "app_link_verify_tip"; private static final boolean DEFAULT_APP_LINK_VERIFY_TIP = false; - private static final String KEY_NIGHT_MODE = "night_mode"; - private static final String DEFAULT_NIGHT_MODE = "-1"; - private static final String KEY_E_INK_MODE = "e_ink_mode_2"; - private static final boolean DEFAULT_E_INK_MODE = false; /******************** ****** Read ********************/ @@ -234,21 +212,6 @@ public class Settings { // -1 for local, 0 - 9 for cloud favorite, other for no default fav slot private static final String KEY_DEFAULT_FAV_SLOT = "default_favorite_2"; private static final int DEFAULT_DEFAULT_FAV_SLOT = INVALID_DEFAULT_FAV_SLOT; - /******************** - ****** Analytics - ********************/ - private static final String KEY_ASK_ANALYTICS = "ask_analytics"; - private static final boolean DEFAULT_ASK_ANALYTICS = true; - private static final boolean DEFAULT_ENABLE_ANALYTICS = false; - private static final String KEY_USER_ID = "user_id"; - private static final String FILENAME_USER_ID = ".user_id"; - private static final int LENGTH_USER_ID = 32; - /******************** - ****** Update - ********************/ - private static final String KEY_BETA_UPDATE_CHANNEL = "beta_update_channel"; - private static final String KEY_SKIP_UPDATE_VERSION = "skip_update_version"; - private static final int DEFAULT_SKIP_UPDATE_VERSION = 0; private static final boolean DEFAULT_SAVE_PARSE_ERROR_BODY = true; private static final String KEY_SAVE_CRASH_LOG = "save_crash_log"; private static final boolean DEFAULT_SAVE_CRASH_LOG = true; @@ -261,17 +224,6 @@ public class Settings { private static final String DEFAULT_PROXY_IP = null; private static final String KEY_PROXY_PORT = "proxy_port"; private static final int DEFAULT_PROXY_PORT = -1; - /******************** - ****** Guide - ********************/ - private static final String KEY_GUIDE_QUICK_SEARCH = "guide_quick_search"; - private static final boolean DEFAULT_GUIDE_QUICK_SEARCH = true; - private static final String KEY_GUIDE_COLLECTIONS = "guide_collections"; - private static final boolean DEFAULT_GUIDE_COLLECTIONS = true; - private static final String KEY_GUIDE_DOWNLOAD_THUMB = "guide_download_thumb"; - private static final boolean DEFAULT_GUIDE_DOWNLOAD_THUMB = true; - private static final String KEY_GUIDE_DOWNLOAD_LABELS = "guide_download_labels"; - private static final boolean DEFAULT_GUIDE_DOWNLOAD_LABELS = true; private static final String KEY_GUIDE_GALLERY = "guide_gallery"; private static final boolean DEFAULT_GUIDE_GALLERY = true; private static final String KEY_CLIPBOARD_TEXT_HASH_CODE = "clipboard_text_hash_code"; @@ -291,10 +243,10 @@ public class Settings { sContext = context.getApplicationContext(); sSettingsPre = PreferenceManager.getDefaultSharedPreferences(sContext); sEhConfig = loadEhConfig(); - fixDefaultValue(context); + fixDefaultValue(); } - private static void fixDefaultValue(Context context) { + private static void fixDefaultValue() { if ("CN".equals(Locale.getDefault().getCountry())) { // Enable domain fronting if the country is CN if (!sSettingsPre.contains(KEY_BUILT_IN_HOSTS)) { @@ -312,7 +264,6 @@ public class Settings { } public static Locale getLocale() { - Locale locale = null; String language = Settings.getAppLanguage(); if (language != null && !language.equals("system")) { return Locale.forLanguageTag(language); @@ -357,32 +308,6 @@ public class Settings { sSettingsPre.edit().putInt(key, value).apply(); } - public static long getLong(String key, long defValue) { - try { - return sSettingsPre.getLong(key, defValue); - } catch (ClassCastException e) { - Log.d(TAG, "Get ClassCastException when get " + key + " value", e); - return defValue; - } - } - - public static void putLong(String key, long value) { - sSettingsPre.edit().putLong(key, value).apply(); - } - - public static float getFloat(String key, float defValue) { - try { - return sSettingsPre.getFloat(key, defValue); - } catch (ClassCastException e) { - Log.d(TAG, "Get ClassCastException when get " + key + " value", e); - return defValue; - } - } - - public static void putFloat(String key, float value) { - sSettingsPre.edit().putFloat(key, value).apply(); - } - public static String getString(String key, String defValue) { try { return sSettingsPre.getString(key, defValue); @@ -433,22 +358,10 @@ public class Settings { putString(KEY_DISPLAY_NAME, value); } - public static String getAvatar() { - return getString(KEY_AVATAR, DEFAULT_AVATAR); - } - public static void putAvatar(String value) { putString(KEY_AVATAR, value); } - public static boolean getShowWarning() { - return getBoolean(KEY_SHOW_WARNING, DEFAULT_SHOW_WARNING); - } - - public static void putShowWarning(boolean value) { - putBoolean(KEY_SHOW_WARNING, value); - } - public static boolean getRemoveImageFiles() { return getBoolean(KEY_REMOVE_IMAGE_FILES, DEFAULT_REMOVE_IMAGE_FILES); } @@ -481,14 +394,6 @@ public class Settings { return getIntFromStr(KEY_THEME, DEFAULT_THEME); } - public static void putTheme(int theme) { - putIntToStr(KEY_THEME, theme); - } - - public static boolean getApplyNavBarThemeColor() { - return getBoolean(KEY_APPLY_NAV_BAR_THEME_COLOR, DEFAULT_APPLY_NAV_BAR_THEME_COLOR); - } - public static int getGallerySite() { return getIntFromStr(KEY_GALLERY_SITE, DEFAULT_GALLERY_SITE); } @@ -499,17 +404,13 @@ public class Settings { public static String getLaunchPageGalleryListSceneAction() { int value = getIntFromStr(KEY_LAUNCH_PAGE, DEFAULT_LAUNCH_PAGE); - switch (value) { - default: - case 0: - return GalleryListScene.ACTION_HOMEPAGE; - case 1: - return GalleryListScene.ACTION_SUBSCRIPTION; - case 2: - return GalleryListScene.ACTION_WHATS_HOT; - case 3: - return GalleryListScene.ACTION_TOP_LIST; - } + return switch (value) { + case 0 -> GalleryListScene.ACTION_HOMEPAGE; + case 1 -> GalleryListScene.ACTION_SUBSCRIPTION; + case 2 -> GalleryListScene.ACTION_WHATS_HOT; + case 3 -> GalleryListScene.ACTION_TOP_LIST; + default -> throw new IllegalStateException("Unexpected value: " + value); + }; } public static int getListMode() { @@ -522,13 +423,11 @@ public class Settings { @DimenRes public static int getDetailSizeResId() { - switch (getDetailSize()) { - default: - case 0: - return R.dimen.gallery_list_column_width_long; - case 1: - return R.dimen.gallery_list_column_width_short; - } + return switch (getDetailSize()) { + case 0 -> R.dimen.gallery_list_column_width_long; + case 1 -> R.dimen.gallery_list_column_width_short; + default -> throw new IllegalStateException("Unexpected value: " + getDetailSize()); + }; } public static int getThumbSize() { @@ -580,32 +479,14 @@ public class Settings { return getInt(KEY_DEFAULT_CATEGORIES, DEFAULT_DEFAULT_CATEGORIES); } - public static void putDefaultCategories(int value) { - sEhConfig.defaultCategories = value; - sEhConfig.setDirty(); - putInt(KEY_DEFAULT_CATEGORIES, value); - } - public static int getExcludedTagNamespaces() { return getInt(KEY_EXCLUDED_TAG_NAMESPACES, DEFAULT_EXCLUDED_TAG_NAMESPACES); } - public static void putExcludedTagNamespaces(int value) { - sEhConfig.excludedNamespaces = value; - sEhConfig.setDirty(); - putInt(KEY_EXCLUDED_TAG_NAMESPACES, value); - } - public static String getExcludedLanguages() { return getString(KEY_EXCLUDED_LANGUAGES, DEFAULT_EXCLUDED_LANGUAGES); } - public static void putExcludedLanguages(String value) { - sEhConfig.excludedLanguages = value; - sEhConfig.setDirty(); - putString(KEY_EXCLUDED_LANGUAGES, value); - } - public static boolean getMeteredNetworkWarning() { return getBoolean(KEY_METERED_NETWORK_WARNING, DEFAULT_METERED_NETWORK_WARNING); } @@ -745,25 +626,16 @@ public class Settings { return getBoolean(KEY_SEC_SECURITY, VALUE_SEC_SECURITY); } - public static void putEnabledSecurity(boolean value) { - putBoolean(KEY_READING_FULLSCREEN, value); - } - @Nullable public static UniFile getDownloadLocation() { - UniFile dir = null; - try { - Uri.Builder builder = new Uri.Builder(); - builder.scheme(getString(KEY_DOWNLOAD_SAVE_SCHEME, null)); - builder.encodedAuthority(getString(KEY_DOWNLOAD_SAVE_AUTHORITY, null)); - builder.encodedPath(getString(KEY_DOWNLOAD_SAVE_PATH, null)); - builder.encodedQuery(getString(KEY_DOWNLOAD_SAVE_QUERY, null)); - builder.encodedFragment(getString(KEY_DOWNLOAD_SAVE_FRAGMENT, null)); - dir = UniFile.fromUri(sContext, builder.build()); - } catch (Throwable e) { - ExceptionUtils.throwIfFatal(e); - // Ignore - } + UniFile dir; + Uri.Builder builder = new Uri.Builder(); + builder.scheme(getString(KEY_DOWNLOAD_SAVE_SCHEME, null)); + builder.encodedAuthority(getString(KEY_DOWNLOAD_SAVE_AUTHORITY, null)); + builder.encodedPath(getString(KEY_DOWNLOAD_SAVE_PATH, null)); + builder.encodedQuery(getString(KEY_DOWNLOAD_SAVE_QUERY, null)); + builder.encodedFragment(getString(KEY_DOWNLOAD_SAVE_FRAGMENT, null)); + dir = UniFile.fromUri(sContext, builder.build()); return dir != null ? dir : UniFile.fromFile(AppConfig.getDefaultDownloadDir()); } @@ -814,26 +686,14 @@ public class Settings { return getIntFromStr(KEY_MULTI_THREAD_DOWNLOAD, DEFAULT_MULTI_THREAD_DOWNLOAD); } - public static void putMultiThreadDownload(int value) { - putIntToStr(KEY_MULTI_THREAD_DOWNLOAD, value); - } - public static int getDownloadDelay() { return getIntFromStr(KEY_DOWNLOAD_DELAY, DEFAULT_DOWNLOAD_DELAY); } - public static void putDownloadDelay(int value) { - putIntToStr(KEY_DOWNLOAD_DELAY, value); - } - public static int getPreloadImage() { return getIntFromStr(KEY_PRELOAD_IMAGE, DEFAULT_PRELOAD_IMAGE); } - public static void putPreloadImage(int value) { - putIntToStr(KEY_PRELOAD_IMAGE, value); - } - public static String getImageResolution() { return getString(KEY_IMAGE_RESOLUTION, DEFAULT_IMAGE_RESOLUTION); } @@ -848,10 +708,6 @@ public class Settings { return getBoolean(KEY_DOWNLOAD_ORIGIN_IMAGE, DEFAULT_DOWNLOAD_ORIGIN_IMAGE); } - public static void putDownloadOriginImage(boolean value) { - putBoolean(KEY_DOWNLOAD_ORIGIN_IMAGE, value); - } - public static String[] getFavCat() { String[] favCat = new String[10]; favCat[0] = sSettingsPre.getString(KEY_FAV_CAT_0, DEFAULT_FAV_CAT_0); @@ -946,100 +802,10 @@ public class Settings { putInt(KEY_DEFAULT_FAV_SLOT, value); } - public static boolean getAskAnalytics() { - return getBoolean(KEY_ASK_ANALYTICS, DEFAULT_ASK_ANALYTICS); - } - - public static void putAskAnalytics(boolean value) { - putBoolean(KEY_ASK_ANALYTICS, value); - } - - public static boolean getEnableAnalytics() { - return getBoolean(KEY_ENABLE_ANALYTICS, DEFAULT_ENABLE_ANALYTICS); - } - - public static void putEnableAnalytics(boolean value) { - putBoolean(KEY_ENABLE_ANALYTICS, value); - } - - public static String getUserID() { - boolean writeXml = false; - boolean writeFile = false; - String userID = getString(KEY_USER_ID, null); - File file = AppConfig.getFileInExternalAppDir(FILENAME_USER_ID); - if (!isValidUserID(userID)) { - writeXml = true; - // Get use ID from out sd card file - userID = FileUtils.read(file); - if (!isValidUserID(userID)) { - writeFile = true; - userID = generateUserID(); - } - } else { - writeFile = true; - } - - if (writeXml) { - putString(KEY_USER_ID, userID); - } - if (writeFile) { - FileUtils.write(file, userID); - } - - return userID; - } - - @NonNull - private static String generateUserID() { - int length = LENGTH_USER_ID; - StringBuilder sb = new StringBuilder(length); - - for (int i = 0; i < length; i++) { - if (MathUtils.random(0, ('9' - '0' + 1) + ('z' - 'a' + 1)) <= '9' - '0') { - sb.append((char) MathUtils.random('0', '9' + 1)); - } else { - sb.append((char) MathUtils.random('a', 'z' + 1)); - } - } - - return sb.toString(); - } - - private static boolean isValidUserID(@Nullable String userID) { - if (null == userID || LENGTH_USER_ID != userID.length()) { - return false; - } - - for (int i = 0; i < LENGTH_USER_ID; i++) { - char ch = userID.charAt(i); - if (!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'z')) { - return false; - } - } - - return true; - } - - public static void putBetaUpdateChannel(boolean value) { - putBoolean(KEY_BETA_UPDATE_CHANNEL, value); - } - - public static int getSkipUpdateVersion() { - return getInt(KEY_SKIP_UPDATE_VERSION, DEFAULT_SKIP_UPDATE_VERSION); - } - - public static void putSkipUpdateVersion(int value) { - putInt(KEY_SKIP_UPDATE_VERSION, value); - } - public static boolean getSaveParseErrorBody() { return getBoolean(KEY_SAVE_PARSE_ERROR_BODY, DEFAULT_SAVE_PARSE_ERROR_BODY); } - public static void putSaveParseErrorBody(boolean value) { - putBoolean(KEY_SAVE_PARSE_ERROR_BODY, value); - } - public static boolean getSaveCrashLog() { return getBoolean(KEY_SAVE_CRASH_LOG, DEFAULT_SAVE_CRASH_LOG); } @@ -1056,10 +822,6 @@ public class Settings { return getInt(KEY_SECURITY_DELAY, 0); } - public static boolean getEnableFingerprint() { - return getBoolean(KEY_ENABLE_FINGERPRINT, true); - } - public static int getReadCacheSize() { return getIntFromStr(KEY_READ_CACHE_SIZE, DEFAULT_READ_CACHE_SIZE); } @@ -1084,10 +846,6 @@ public class Settings { return getString(KEY_APP_LANGUAGE, DEFAULT_APP_LANGUAGE); } - public static void putAppLanguage(String value) { - putString(KEY_APP_LANGUAGE, value); - } - public static int getProxyType() { return getInt(KEY_PROXY_TYPE, DEFAULT_PROXY_TYPE); } @@ -1112,38 +870,6 @@ public class Settings { putInt(KEY_PROXY_PORT, value); } - public static boolean getGuideQuickSearch() { - return getBoolean(KEY_GUIDE_QUICK_SEARCH, DEFAULT_GUIDE_QUICK_SEARCH); - } - - public static void putGuideQuickSearch(boolean value) { - putBoolean(KEY_GUIDE_QUICK_SEARCH, value); - } - - public static boolean getGuideCollections() { - return getBoolean(KEY_GUIDE_COLLECTIONS, DEFAULT_GUIDE_COLLECTIONS); - } - - public static void putGuideCollections(boolean value) { - putBoolean(KEY_GUIDE_COLLECTIONS, value); - } - - public static boolean getGuideDownloadThumb() { - return getBoolean(KEY_GUIDE_DOWNLOAD_THUMB, DEFAULT_GUIDE_DOWNLOAD_THUMB); - } - - public static void putGuideDownloadThumb(boolean value) { - putBoolean(KEY_GUIDE_DOWNLOAD_THUMB, value); - } - - public static boolean getGuideDownloadLabels() { - return getBoolean(KEY_GUIDE_DOWNLOAD_LABELS, DEFAULT_GUIDE_DOWNLOAD_LABELS); - } - - public static void puttGuideDownloadLabels(boolean value) { - putBoolean(KEY_GUIDE_DOWNLOAD_LABELS, value); - } - public static boolean getGuideGallery() { return getBoolean(KEY_GUIDE_GALLERY, DEFAULT_GUIDE_GALLERY); } diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java index 4439c01c3..80a5a2e76 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.java @@ -16,7 +16,6 @@ package com.hippo.ehviewer.client; -import android.content.Context; import android.graphics.Color; import android.text.TextUtils; @@ -49,10 +48,10 @@ public class EhUtils { // Remove [XXX], (XXX), {XXX}, ~XXX~ stuff public static final Pattern PATTERN_TITLE_PREFIX = Pattern.compile( - "^(?:(?:\\([^\\)]*\\))|(?:\\[[^\\]]*\\])|(?:\\{[^\\}]*\\})|(?:~[^~]*~)|\\s+)*"); + "^(?:\\([^)]*\\)|\\[[^]]*]|\\{[^}]*\\}|~[^~]*~|\\s+)*"); // Remove [XXX], (XXX), {XXX}, ~XXX~ stuff and something like ch. 1-23 public static final Pattern PATTERN_TITLE_SUFFIX = Pattern.compile( - "(?:\\s+ch.[\\s\\d-]+)?(?:(?:\\([^\\)]*\\))|(?:\\[[^\\]]*\\])|(?:\\{[^\\}]*\\})|(?:~[^~]*~)|\\s+)*$", + "(?:\\s+ch.[\\s\\d-]+)?(?:\\([^)]*\\)|\\[[^]]*]|\\{[^}]*\\}|~[^~]*~|\\s+)*$", Pattern.CASE_INSENSITIVE); private static final int[] CATEGORY_VALUES = { @@ -106,40 +105,29 @@ public class EhUtils { } public static int getCategoryColor(int category) { - switch (category) { - case EhConfig.DOUJINSHI: - return BG_COLOR_DOUJINSHI; - case EhConfig.MANGA: - return BG_COLOR_MANGA; - case EhConfig.ARTIST_CG: - return BG_COLOR_ARTIST_CG; - case EhConfig.GAME_CG: - return BG_COLOR_GAME_CG; - case EhConfig.WESTERN: - return BG_COLOR_WESTERN; - case EhConfig.NON_H: - return BG_COLOR_NON_H; - case EhConfig.IMAGE_SET: - return BG_COLOR_IMAGE_SET; - case EhConfig.COSPLAY: - return BG_COLOR_COSPLAY; - case EhConfig.ASIAN_PORN: - return BG_COLOR_ASIAN_PORN; - case EhConfig.MISC: - return BG_COLOR_MISC; - default: - return BG_COLOR_UNKNOWN; - } + return switch (category) { + case EhConfig.DOUJINSHI -> BG_COLOR_DOUJINSHI; + case EhConfig.MANGA -> BG_COLOR_MANGA; + case EhConfig.ARTIST_CG -> BG_COLOR_ARTIST_CG; + case EhConfig.GAME_CG -> BG_COLOR_GAME_CG; + case EhConfig.WESTERN -> BG_COLOR_WESTERN; + case EhConfig.NON_H -> BG_COLOR_NON_H; + case EhConfig.IMAGE_SET -> BG_COLOR_IMAGE_SET; + case EhConfig.COSPLAY -> BG_COLOR_COSPLAY; + case EhConfig.ASIAN_PORN -> BG_COLOR_ASIAN_PORN; + case EhConfig.MISC -> BG_COLOR_MISC; + default -> BG_COLOR_UNKNOWN; + }; } - public static void signOut(Context context) { + public static void signOut() { EhApplication.getEhCookieStore().signOut(); Settings.putAvatar(null); Settings.putDisplayName(null); Settings.putNeedSignIn(true); } - public static boolean needSignedIn(Context context) { + public static boolean needSignedIn() { return Settings.getNeedSignIn() && !EhApplication.getEhCookieStore().hasSignedIn(); } diff --git a/app/src/main/java/com/hippo/ehviewer/preference/AccountPreference.kt b/app/src/main/java/com/hippo/ehviewer/preference/AccountPreference.kt index 4af135b44..fbd157c2c 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/AccountPreference.kt +++ b/app/src/main/java/com/hippo/ehviewer/preference/AccountPreference.kt @@ -86,7 +86,7 @@ class AccountPreference @JvmOverloads constructor( } } builder.setPositiveButton(R.string.settings_eh_sign_out) { _: DialogInterface?, _: Int -> - EhUtils.signOut(context) + EhUtils.signOut() mActivity.showTip(R.string.settings_eh_sign_out_tip, BaseScene.LENGTH_SHORT) } } 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 8b220235e..c13371074 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -136,7 +136,7 @@ public final class MainActivity extends StageActivity @NonNull @Override protected Announcer getLaunchAnnouncer() { - if (EhUtils.needSignedIn(this)) { + if (EhUtils.needSignedIn()) { return new Announcer(SignInScene.class); } else if (Settings.getSelectSite()) { return new Announcer(SelectSiteScene.class); @@ -150,7 +150,7 @@ public final class MainActivity extends StageActivity // Sometimes scene can't show directly private Announcer processAnnouncer(Announcer announcer) { if (0 == getSceneCount()) { - if (EhUtils.needSignedIn(this)) { + if (EhUtils.needSignedIn()) { Bundle newArgs = new Bundle(); newArgs.putString(SignInScene.KEY_TARGET_SCENE, announcer.getClazz().getName()); newArgs.putBundle(SignInScene.KEY_TARGET_ARGS, announcer.getArgs()); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java index 85c8f3ec5..1830c37a9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java @@ -35,7 +35,9 @@ import com.google.android.material.textfield.TextInputLayout; import com.hippo.app.BaseDialogBuilder; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; +import com.hippo.ehviewer.client.EhClient; import com.hippo.ehviewer.client.EhCookieStore; +import com.hippo.ehviewer.client.EhRequest; import com.hippo.ehviewer.client.EhUrl; import com.hippo.ehviewer.client.EhUtils; import com.hippo.util.ClipboardUtilKt; @@ -68,31 +70,6 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc @Nullable private TextView mFromClipboard; - // false for error - private static boolean checkIpbMemberId(String id) { - for (int i = 0, n = id.length(); i < n; i++) { - char ch = id.charAt(i); - if (!(ch >= '0' && ch <= '9')) { - return false; - } - } - return true; - } - - private static boolean checkIpbPassHash(String hash) { - if (32 != hash.length()) { - return false; - } - - for (int i = 0, n = hash.length(); i < n; i++) { - char ch = hash.charAt(i); - if (!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'z')) { - return false; - } - } - return true; - } - private static Cookie newCookie(String name, String value, String domain) { return new Cookie.Builder().name(name).value(value) .domain(domain).expiresAt(Long.MAX_VALUE).build(); @@ -216,20 +193,33 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc hideSoftInput(); - if (!checkIpbMemberId(ipbMemberId) || !(checkIpbPassHash(ipbPassHash))) { - new BaseDialogBuilder(context).setTitle(R.string.waring) - .setMessage(R.string.wrong_cookie_warning) - .setPositiveButton(R.string.i_will_check_it, null) - .setNegativeButton(R.string.i_dont_think_so, (dialog, which) -> { - storeCookie(ipbMemberId, ipbPassHash, igneous); - setResult(RESULT_OK, null); - finish(); - }).show(); - } else { - storeCookie(ipbMemberId, ipbPassHash, igneous); + storeCookie(ipbMemberId, ipbPassHash, igneous); + + EhRequest request = new EhRequest() + .setMethod(EhClient.METHOD_GET_PROFILE) + .setCallback(new CookieSignInListener()); + EhApplication.getEhClient().execute(request); + } + + private class CookieSignInListener implements EhClient.Callback { + @Override + public void onSuccess(Object result) { setResult(RESULT_OK, null); finish(); } + + @Override + public void onFailure(Exception e) { + EhApplication.getEhCookieStore().signOut(); + new BaseDialogBuilder(requireContext()).setTitle(R.string.sign_in_failed) + .setMessage(ExceptionUtils.getReadableString(e) + "\n\n" + getString(R.string.wrong_cookie_warning)) + .setPositiveButton(R.string.get_it, null).show(); + } + + @Override + public void onCancel() { + EhApplication.getEhCookieStore().signOut(); + } } private void storeCookie(String id, String hash, String igneous) { @@ -238,7 +228,7 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc return; } - EhUtils.signOut(context); + EhUtils.signOut(); EhCookieStore store = EhApplication.getEhCookieStore(); store.addCookie(newCookie(EhCookieStore.KEY_IPD_MEMBER_ID, id, EhUrl.DOMAIN_E)); @@ -252,8 +242,11 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc } private void fillCookiesFromClipboard() { + Context context = requireContext(); + hideSoftInput(); - String text = ClipboardUtilKt.getTextFromClipboard(ClipboardUtilKt.getClipboardManager(getContext()), getContext()); + String text = ClipboardUtilKt.getTextFromClipboard( + ClipboardUtilKt.getClipboardManager(context), context); if (text == null) { showTip(R.string.from_clipboard_error, LENGTH_SHORT); return; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java index c50117d3a..d70afbbf9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java @@ -207,7 +207,6 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc if (REQUEST_CODE_WEBVIEW == requestCode) { if (RESULT_OK == resultCode) { getProfile(); - getUConfig(); } } else { super.onSceneResult(requestCode, resultCode, data); @@ -281,9 +280,9 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc showProgress(true); // Clean up for sign in - EhUtils.signOut(context); + EhUtils.signOut(); - EhCallback callback = new SignInListener(context, + EhCallback callback = new SignInListener(context, activity.getStageId(), getTag()); mRequestId = ((EhApplication) context.getApplicationContext()).putGlobalStuff(callback); EhRequest request = new EhRequest() @@ -305,28 +304,16 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc hideSoftInput(); showProgress(true); - EhCallback callback = new GetProfileListener(context, + EhCallback callback = new GetProfileListener(context, activity.getStageId(), getTag()); mRequestId = ((EhApplication) context.getApplicationContext()).putGlobalStuff(callback); EhRequest request = new EhRequest() .setMethod(EhClient.METHOD_GET_PROFILE) .setCallback(callback); EhApplication.getEhClient().execute(request); - } - private void getUConfig() { - Context context = getContext(); - MainActivity activity = getMainActivity(); - if (null == context || null == activity) { - return; - } - - hideSoftInput(); - showProgress(true); - - EhRequest request = new EhRequest() - .setMethod(EhClient.METHOD_GET_UCONFIG); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(new EhRequest() + .setMethod(EhClient.METHOD_GET_UCONFIG)); } private void redirectTo() { @@ -359,7 +346,6 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc if (EhApplication.getEhCookieStore().hasSignedIn()) { getProfile(); - getUConfig(); } else { mSigningIn = false; hideProgress(); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/WebViewSignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/WebViewSignInScene.java index f141b9ef6..fc60d33d6 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/WebViewSignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/WebViewSignInScene.java @@ -65,7 +65,7 @@ public class WebViewSignInScene extends SolidScene { Context context = getContext(); AssertUtils.assertNotNull(context); - EhUtils.signOut(context); + EhUtils.signOut(); // http://stackoverflow.com/questions/32284642/how-to-handle-an-uncatched-exception CookieManager cookieManager = CookieManager.getInstance(); @@ -117,7 +117,7 @@ public class WebViewSignInScene extends SolidScene { return cookies != null ? cookies : Collections.emptyList(); } - private void addCookie(Context context, String domain, Cookie cookie) { + private void addCookie(String domain, Cookie cookie) { EhApplication.getEhCookieStore().addCookie(EhCookieStore.newCookie(cookie, domain, true, true, true)); } @@ -142,8 +142,8 @@ public class WebViewSignInScene extends SolidScene { } else if (EhCookieStore.KEY_IPD_PASS_HASH.equals(cookie.name())) { getHash = true; } - addCookie(context, EhUrl.DOMAIN_EX, cookie); - addCookie(context, EhUrl.DOMAIN_E, cookie); + addCookie(EhUrl.DOMAIN_EX, cookie); + addCookie(EhUrl.DOMAIN_E, cookie); } if (getId && getHash) {