From ecf4d0832c2bf398fcd57c02baa32fe855282dc9 Mon Sep 17 00:00:00 2001 From: Gianlu Date: Mon, 28 Jan 2019 15:11:45 +0100 Subject: [PATCH] Using custom WebClient (doesn't work without) --- .../com/gianlu/aria2app/WebViewActivity.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/app/src/main/java/com/gianlu/aria2app/WebViewActivity.java b/app/src/main/java/com/gianlu/aria2app/WebViewActivity.java index ca8ed4209..29c8a150b 100644 --- a/app/src/main/java/com/gianlu/aria2app/WebViewActivity.java +++ b/app/src/main/java/com/gianlu/aria2app/WebViewActivity.java @@ -3,16 +3,62 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; import android.webkit.WebSettings; import android.webkit.WebView; +import android.webkit.WebViewClient; import com.gianlu.aria2app.Main.MainActivity; import com.gianlu.commonutils.Dialogs.ActivityWithDialog; +import com.gianlu.commonutils.Logging; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; public class WebViewActivity extends ActivityWithDialog { + private OkHttpClient client; + + @NonNull + private static Request buildRequest(@NonNull WebResourceRequest req) { + Request.Builder builder = new Request.Builder().url(req.getUrl().toString()); + builder.method(req.getMethod(), null); + + for (Map.Entry entry : req.getRequestHeaders().entrySet()) + builder.addHeader(entry.getKey(), entry.getValue()); + + return builder.build(); + } + + @NonNull + private static WebResourceResponse buildResponse(@NonNull Response resp) { + Map headers = new HashMap<>(); + for (int i = 0; i < resp.headers().size(); i++) + headers.put(resp.headers().name(i), resp.headers().value(i)); + + String contentType = resp.header("Content-Type"); + String mimeType = null; + if (contentType != null) + mimeType = contentType.split(";")[0]; + + int code = resp.code(); + String message = resp.message(); + if (message == null || message.isEmpty()) { + if (code == 200) message = "OK"; + else message = "UNKNOWN"; + } + + return new WebResourceResponse(mimeType, resp.header("Content-Encoding"), + code, message, headers, resp.body() == null ? null : resp.body().byteStream()); + } @Override protected void onCreate(Bundle savedInstanceState) { @@ -28,8 +74,23 @@ protected void onCreate(Bundle savedInstanceState) { WebSettings settings = web.getSettings(); settings.setJavaScriptEnabled(true); + client = new OkHttpClient(); web.setDownloadListener((url, userAgent, contentDisposition, mimetype, contentLength) -> interceptedPage(Uri.parse(url))); + web.setWebViewClient(new WebViewClient() { + @Nullable + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { + try { + Response resp = client.newCall(buildRequest(request)).execute(); + return buildResponse(resp); + } catch (IOException ex) { + Logging.log(ex); + return null; + } + } + }); + web.loadUrl(loadUrl); }