From 273f73e9a29bbde686789f74eb88128583c0b38e Mon Sep 17 00:00:00 2001 From: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> Date: Sat, 19 Apr 2025 10:04:52 +0500 Subject: [PATCH] Remove Okhttp networking from WebView Screen (#2020) (cherry picked from commit df2b4c754bab9dd96fe2199b9f6df62d87b7175e) # Conflicts: # CHANGELOG.md --- .../webview/WebViewScreenContent.kt | 49 ------------- .../tachiyomi/util/system/WebViewUtil.kt | 69 ------------------- 2 files changed, 118 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt index 9cd9e4eb6..529dc1d2d 100644 --- a/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt +++ b/app/src/main/java/eu/kanade/presentation/webview/WebViewScreenContent.kt @@ -3,7 +3,6 @@ package eu.kanade.presentation.webview import android.content.pm.ApplicationInfo import android.graphics.Bitmap import android.webkit.WebResourceRequest -import android.webkit.WebResourceResponse import android.webkit.WebView import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box @@ -27,7 +26,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalUriHandler import androidx.compose.ui.unit.dp import com.kevinnzou.web.AccompanistWebViewClient @@ -39,21 +37,13 @@ import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.WarningBanner import eu.kanade.tachiyomi.BuildConfig -import eu.kanade.tachiyomi.network.NetworkHelper -import eu.kanade.tachiyomi.util.system.WebViewUtil import eu.kanade.tachiyomi.util.system.getHtml import eu.kanade.tachiyomi.util.system.setDefaultSettings import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.launch -import logcat.LogPriority -import okhttp3.Request -import tachiyomi.core.common.util.system.logcat import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.i18n.stringResource -import uy.kohesive.injekt.Injekt -import uy.kohesive.injekt.api.get - @Composable fun WebViewScreenContent( onNavigateUp: () -> Unit, @@ -67,11 +57,8 @@ fun WebViewScreenContent( ) { val state = rememberWebViewState(url = url, additionalHttpHeaders = headers) val navigator = rememberWebViewNavigator() - val context = LocalContext.current val uriHandler = LocalUriHandler.current val scope = rememberCoroutineScope() - val network = remember { Injekt.get() } - val spoofedPackageName = remember { WebViewUtil.spoofedPackageName(context) } var currentUrl by remember { mutableStateOf(url) } var showCloudflareHelp by remember { mutableStateOf(false) } @@ -126,42 +113,6 @@ fun WebViewScreenContent( } return super.shouldOverrideUrlLoading(view, request) } - - override fun shouldInterceptRequest( - view: WebView?, - request: WebResourceRequest?, - ): WebResourceResponse? { - return try { - val internalRequest = Request.Builder().apply { - url(request!!.url.toString()) - request.requestHeaders.forEach { (key, value) -> - if (key == "X-Requested-With" && value in setOf(context.packageName, spoofedPackageName)) { - return@forEach - } - addHeader(key, value) - } - method(request.method, null) - }.build() - - val response = network.nonCloudflareClient.newCall(internalRequest).execute() - - val contentType = response.body.contentType()?.let { "${it.type}/${it.subtype}" } ?: "text/html" - val contentEncoding = response.body.contentType()?.charset()?.name() ?: "utf-8" - val message = response.message.ifBlank { WebViewUtil.getMessageFromHttpStatusCode(response.code) } - - WebResourceResponse( - contentType, - contentEncoding, - response.code, - message, - response.headers.associate { it.first to it.second }, - response.body.byteStream(), - ) - } catch (e: Throwable) { - logcat(priority = LogPriority.ERROR, throwable = e) - super.shouldInterceptRequest(view, request) - } - } } } diff --git a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt index 363b8a7c0..ed9adac0c 100644 --- a/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt +++ b/core/common/src/main/kotlin/eu/kanade/tachiyomi/util/system/WebViewUtil.kt @@ -69,75 +69,6 @@ object WebViewUtil { SYSTEM_SETTINGS_PACKAGE } } - - fun getMessageFromHttpStatusCode(code: Int): String { - return when (code) { - 100 -> "Continue" - 101 -> "Switching Protocols" - 102 -> "Processing" - 103 -> "Early Hints" - 200 -> "OK" - 201 -> "Created" - 202 -> "Accepted" - 203 -> "Non-Authoritative Information" - 204 -> "No Content" - 205 -> "Reset Content" - 206 -> "Partial Content" - 207 -> "Multi-Status" - 208 -> "Already Reported" - 226 -> "IM Used" - 300 -> "Multiple Choices" - 301 -> "Moved Permanently" - 302 -> "Found" - 303 -> "See Other" - 304 -> "Not Modified" - 305 -> "Use Proxy" - 306 -> "unused" - 307 -> "Temporary Redirect" - 308 -> "Permanent Redirect" - 400 -> "Bad Request" - 401 -> "Unauthorized" - 402 -> "Payment Required" - 403 -> "Forbidden" - 404 -> "Not Found" - 405 -> "Method Not Allowed" - 406 -> "Not Acceptable" - 407 -> "Proxy Authentication Required" - 408 -> "Request Timeout" - 409 -> "Conflict" - 410 -> "Gone" - 411 -> "Length Required" - 412 -> "Precondition Failed" - 413 -> "Content Too Large" - 414 -> "URI Too Long" - 415 -> "Unsupported Media Type" - 416 -> "Range Not Satisfiable" - 417 -> "Expectation Failed" - 418 -> "I'm a teapot" - 421 -> "Misdirected Request" - 422 -> "Unprocessable Content" - 423 -> "Locked" - 424 -> "Failed Dependency" - 425 -> "Too Early" - 426 -> "Upgrade Required" - 428 -> "Precondition Required" - 429 -> "Too Many Requests" - 431 -> "Request Header Fields Too Large" - 451 -> "Unavailable For Legal Reasons" - 500 -> "Internal Server Error" - 501 -> "Not Implemented" - 502 -> "Bad Gateway" - 503 -> "Service Unavailable" - 504 -> "Gateway Timeout" - 505 -> "HTTP Version Not Supported" - 506 -> "Variant Also Negotiates" - 507 -> "Insufficient Storage" - 508 -> "Loop Detected" - 510 -> "Not Extended" - 511 -> "Network Authentication Required" - else -> "Unknown" - } - } } fun WebView.isOutdated(): Boolean {