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