Remove Okhttp networking from WebView Screen (#2020)
(cherry picked from commit df2b4c754bab9dd96fe2199b9f6df62d87b7175e) # Conflicts: # CHANGELOG.md
This commit is contained in:
parent
5e20e54649
commit
273f73e9a2
@ -3,7 +3,6 @@ package eu.kanade.presentation.webview
|
|||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.webkit.WebResourceRequest
|
import android.webkit.WebResourceRequest
|
||||||
import android.webkit.WebResourceResponse
|
|
||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
@ -27,7 +26,6 @@ import androidx.compose.runtime.setValue
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.platform.LocalUriHandler
|
import androidx.compose.ui.platform.LocalUriHandler
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.kevinnzou.web.AccompanistWebViewClient
|
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.AppBarActions
|
||||||
import eu.kanade.presentation.components.WarningBanner
|
import eu.kanade.presentation.components.WarningBanner
|
||||||
import eu.kanade.tachiyomi.BuildConfig
|
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.getHtml
|
||||||
import eu.kanade.tachiyomi.util.system.setDefaultSettings
|
import eu.kanade.tachiyomi.util.system.setDefaultSettings
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import logcat.LogPriority
|
|
||||||
import okhttp3.Request
|
|
||||||
import tachiyomi.core.common.util.system.logcat
|
|
||||||
import tachiyomi.i18n.MR
|
import tachiyomi.i18n.MR
|
||||||
import tachiyomi.presentation.core.components.material.Scaffold
|
import tachiyomi.presentation.core.components.material.Scaffold
|
||||||
import tachiyomi.presentation.core.i18n.stringResource
|
import tachiyomi.presentation.core.i18n.stringResource
|
||||||
import uy.kohesive.injekt.Injekt
|
|
||||||
import uy.kohesive.injekt.api.get
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun WebViewScreenContent(
|
fun WebViewScreenContent(
|
||||||
onNavigateUp: () -> Unit,
|
onNavigateUp: () -> Unit,
|
||||||
@ -67,11 +57,8 @@ fun WebViewScreenContent(
|
|||||||
) {
|
) {
|
||||||
val state = rememberWebViewState(url = url, additionalHttpHeaders = headers)
|
val state = rememberWebViewState(url = url, additionalHttpHeaders = headers)
|
||||||
val navigator = rememberWebViewNavigator()
|
val navigator = rememberWebViewNavigator()
|
||||||
val context = LocalContext.current
|
|
||||||
val uriHandler = LocalUriHandler.current
|
val uriHandler = LocalUriHandler.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val network = remember { Injekt.get<NetworkHelper>() }
|
|
||||||
val spoofedPackageName = remember { WebViewUtil.spoofedPackageName(context) }
|
|
||||||
|
|
||||||
var currentUrl by remember { mutableStateOf(url) }
|
var currentUrl by remember { mutableStateOf(url) }
|
||||||
var showCloudflareHelp by remember { mutableStateOf(false) }
|
var showCloudflareHelp by remember { mutableStateOf(false) }
|
||||||
@ -126,42 +113,6 @@ fun WebViewScreenContent(
|
|||||||
}
|
}
|
||||||
return super.shouldOverrideUrlLoading(view, request)
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,75 +69,6 @@ object WebViewUtil {
|
|||||||
SYSTEM_SETTINGS_PACKAGE
|
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 {
|
fun WebView.isOutdated(): Boolean {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user