From 861c05db44a314ce9c5a87f41794ded2088e0ca6 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sun, 2 Jul 2023 17:58:29 +0800 Subject: [PATCH] Add option for QUIC support --- .../java/com/hippo/ehviewer/EhApplication.kt | 22 ++++++++++--------- .../main/java/com/hippo/ehviewer/Settings.kt | 1 + .../com/hippo/ehviewer/spider/SpiderDen.kt | 3 ++- .../ehviewer/ui/settings/AdvancedScreen.kt | 5 +++++ app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt index df0414665..455284374 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.kt +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.kt @@ -162,17 +162,19 @@ class EhApplication : Application(), ImageLoaderFactory { if (Settings.bypassCloudflare) addInterceptor(CloudflareInterceptor(appCtx)) // TODO: Rewrite CronetInterceptor to use android.net.http.HttpEngine and make it Android 14 only when released - addInterceptor { chain -> - val request = chain.request() - val url = request.url - val newRequest = request.newBuilder() - .addHeader("Cookie", EhCookieStore.getCookieHeader(url)) - .build() - val response = chain.proceed(newRequest) - EhCookieStore.saveFromResponse(url, Cookie.parseAll(url, response.headers)) - response + if (Settings.enableQuic) { + addInterceptor { chain -> + val request = chain.request() + val url = request.url + val newRequest = request.newBuilder() + .addHeader("Cookie", EhCookieStore.getCookieHeader(url)) + .build() + val response = chain.proceed(newRequest) + EhCookieStore.saveFromResponse(url, Cookie.parseAll(url, response.headers)) + response + } + addInterceptor(CronetInterceptor.newBuilder(cronetHttpClient).build()) } - addInterceptor(CronetInterceptor.newBuilder(cronetHttpClient).build()) } } diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.kt b/app/src/main/java/com/hippo/ehviewer/Settings.kt index 0c9127255..0c582d0fd 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/java/com/hippo/ehviewer/Settings.kt @@ -53,6 +53,7 @@ object Settings : DataStorePreferences(null) { var blackDarkTheme by boolPref("black_dark_theme", false).observed { updateWhenAmoledModeChanges() } var preloadThumbAggressively by boolPref("preload_thumb_aggressively", false) var downloadOriginImage by boolPref("download_origin_image", false) + var enableQuic by boolPref("enable_quic", true) var bypassCloudflare by boolPref("bypass_cloudflare", false) var thumbSizeDp by intPref("thumb_size_", 120) var favLocalCount by intPref("fav_local", 0) diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt index a0f3abddc..cb6a4e157 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt @@ -20,6 +20,7 @@ import android.os.Build import android.os.ParcelFileDescriptor import android.os.ParcelFileDescriptor.MODE_READ_WRITE import com.hippo.ehviewer.EhDB +import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUtils.getSuitableTitle import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.ehRequest @@ -129,7 +130,7 @@ class SpiderDen(private val mGalleryInfo: GalleryInfo) { referer: String?, notifyProgress: (Long, Long, Int) -> Unit, ): Boolean { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && Settings.enableQuic) { cronetRequest(url, referer) { disableCache() }.execute { info -> diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt index 0756a8cc4..80076d21d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt @@ -125,6 +125,11 @@ fun AdvancedScreen() { entryValueRes = R.array.app_language_entry_values, value = Settings::language, ) + SwitchPreference( + title = stringResource(id = R.string.settings_advanced_enable_quic), + summary = stringResource(id = R.string.settings_advanced_enable_quic_summary), + value = Settings::enableQuic, + ) SwitchPreference( title = stringResource(id = R.string.settings_advanced_bypass_cloudflare), summary = stringResource(id = R.string.settings_advanced_bypass_cloudflare_summary), diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index fdd03415a..edaf7c41f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -371,6 +371,8 @@ 已保存日志至 %s 阅读缓存大小 App 界面语言 + [实验性] QUIC 支持 + 启用 QUIC 协议支持(需要重启应用) [实验性] 绕过 Cloudflare 若持续遇到 403 错误可尝试此项(需要重启应用) 导出数据 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 70b9bf38d..e0293248a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -415,6 +415,8 @@ Logcat dumped to %s Read cache size App language + [Experimental] QUIC support + Enable QUIC protocol support (App restart required) [Experimental] Bypass Cloudflare Try this if you keep getting 403 error (App restart required) Export data