Skip to content

Commit

Permalink
Using custom WebClient (doesn't work without)
Browse files Browse the repository at this point in the history
  • Loading branch information
devgianlu committed Jan 28, 2019
1 parent 68eda39 commit ecf4d08
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions app/src/main/java/com/gianlu/aria2app/WebViewActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, String> entry : req.getRequestHeaders().entrySet())
builder.addHeader(entry.getKey(), entry.getValue());

return builder.build();
}

@NonNull
private static WebResourceResponse buildResponse(@NonNull Response resp) {
Map<String, String> 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) {
Expand All @@ -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);
}

Expand Down

0 comments on commit ecf4d08

Please sign in to comment.