From 1818c44f17ef99775c5a29ba5b47d540bd90a038 Mon Sep 17 00:00:00 2001 From: nin0dev Date: Tue, 26 Mar 2024 07:21:56 -0400 Subject: [PATCH] Added working fix for crash issue Ignore all null headers. --- .../com/nin0dev/vendroid/VWebviewClient.kt | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/nin0dev/vendroid/VWebviewClient.kt b/app/src/main/java/com/nin0dev/vendroid/VWebviewClient.kt index 7bff9c5..7dc8566 100644 --- a/app/src/main/java/com/nin0dev/vendroid/VWebviewClient.kt +++ b/app/src/main/java/com/nin0dev/vendroid/VWebviewClient.kt @@ -2,11 +2,13 @@ package com.nin0dev.vendroid import android.content.Intent import android.graphics.Bitmap +import android.os.Build import android.view.View import android.webkit.WebResourceRequest import android.webkit.WebResourceResponse import android.webkit.WebView import android.webkit.WebViewClient +import androidx.annotation.RequiresApi import com.nin0dev.vendroid.Logger.e import java.io.IOException import java.net.HttpURLConnection @@ -33,11 +35,12 @@ class VWebviewClient : WebViewClient() { super.onPageFinished(view, url) } + @RequiresApi(Build.VERSION_CODES.N) override fun shouldInterceptRequest(view: WebView, req: WebResourceRequest): WebResourceResponse? { val uri = req.url if (req.isForMainFrame || req.url.path!!.endsWith(".css")) { try { - return null + return doFetch(req) } catch (ex: IOException) { //e("Error during shouldInterceptRequest", ex) } @@ -45,24 +48,31 @@ class VWebviewClient : WebViewClient() { return null } - @Throws(IOException::class) - private fun doFetch(req: WebResourceRequest): WebResourceResponse { - val url = req.url.toString() - val conn = URL(url).openConnection() as HttpURLConnection - conn.setRequestMethod(req.method) - for ((key, value) in req.requestHeaders) { - conn.setRequestProperty(key, value) - } - val code = conn.getResponseCode() - val msg = conn.getResponseMessage() - val headers = conn.headerFields - val modifiedHeaders = HashMap(headers.size) - for ((key, value) in headers) { - if (!"Content-Security-Policy".equals(key, ignoreCase = true)) { - modifiedHeaders[key] = value[0] + @RequiresApi(Build.VERSION_CODES.N) + private fun doFetch(req: WebResourceRequest): WebResourceResponse { + val url = req.url.toString() + val conn = URL(url).openConnection() as HttpURLConnection + conn.setRequestMethod(req.method) + for ((key, value) in req.requestHeaders) { + conn.setRequestProperty(key, value) } + val code = conn.getResponseCode() + val msg = conn.getResponseMessage() + val headers = conn.headerFields + val modifiedHeaders = HashMap(headers.size) + for ((key, valueList) in headers) { + if (key == null) { + continue + } + if (!"Content-Security-Policy".equals(key, ignoreCase = true)) { + if (valueList != null && valueList.isNotEmpty()) { + val value = valueList[0] + modifiedHeaders[key] = value + } + } + } + if (url.endsWith(".css")) modifiedHeaders["Content-Type"] = "text/css" + val wong = modifiedHeaders.getOrDefault("Content-Type", "application/octet-stream") + return WebResourceResponse(wong, "utf-8", code, msg, modifiedHeaders, conn.inputStream) } - if (url.endsWith(".css")) modifiedHeaders["Content-Type"] = "text/css" - return WebResourceResponse(modifiedHeaders.getOrDefault("Content-Type", "application/octet-stream"), "utf-8", code, msg, modifiedHeaders, conn.inputStream) - } }