morristech
5/1/2018 - 11:02 AM

Android WebView: resource interception and replacement by local resource

Android WebView: resource interception and replacement by local resource

mWebView.setWebViewClient(new WebViewClient() {

    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
        if (url.contains("creditcard_cvc.jpg")) {
            Log.v("WebView", "Replacing [" + url + "] with [R.raw.tmp_replacement]");
            ContentResolver contentResolver = getActivity().getContentResolver();
            return new WebResourceResponse(contentResolver.getType(Uri.parse(url)), "UTF-8", getResources().openRawResource(R.raw.tmp_replacement));
        }
        return super.shouldInterceptRequest(view, url);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        if (request.getUrl().getEncodedPath().contains("creditcard_cvc.jpg")) {
            Log.v("WebView", "Replacing [" + request.getUrl() + "] with [R.raw.tmp_replacement]");
            ContentResolver contentResolver = getActivity().getContentResolver();
            return new WebResourceResponse(contentResolver.getType(request.getUrl()), "UTF-8", getResources().openRawResource(R.raw.tmp_replacement));
        }
        return super.shouldInterceptRequest(view, request);
    }
});