From bbb64009df80acab3dde67cc0209fa6d76afd67c Mon Sep 17 00:00:00 2001 From: Dmitry Novotochinov Date: Thu, 12 Apr 2018 12:52:20 +0300 Subject: [PATCH] Fix Android web3 injection on pages with redirects It still doesn't work on Androids version < 7 though. --- .../WebViewBridgeManager.java | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/android/src/main/java/com/github/alinz/reactnativewebviewbridge/WebViewBridgeManager.java b/android/src/main/java/com/github/alinz/reactnativewebviewbridge/WebViewBridgeManager.java index 46b0585..7958ee5 100644 --- a/android/src/main/java/com/github/alinz/reactnativewebviewbridge/WebViewBridgeManager.java +++ b/android/src/main/java/com/github/alinz/reactnativewebviewbridge/WebViewBridgeManager.java @@ -466,20 +466,29 @@ public class WebViewBridgeManager extends ReactWebViewManager { } @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (url.startsWith("http://") || url.startsWith("https://") || - url.startsWith("file://")) { + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + if (request == null || view == null) { return false; - } else { - try { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - view.getContext().startActivity(intent); - } catch (android.content.ActivityNotFoundException e) { - Log.d(TAG, "Ignoring " + url + ": " + e.toString()); - } - return true; } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + + /* + * In order to follow redirects properly, we return null in interceptRequest(). + * Doing this breaks the web3 injection on the resulting page, so we have to reload to + * make sure web3 is available. + * */ + + if (request.isForMainFrame() && request.isRedirect()) { + view.loadUrl(request.getUrl().toString()); + return true; + } + } + + /* + * API < 24: TODO: implement based on https://github.com/toshiapp/toshi-android-client/blob/f4840d3d24ff60223662eddddceca8586a1be8bb/app/src/main/java/com/toshi/view/activity/webView/ToshiWebClient.kt#L99 + * */ + return super.shouldOverrideUrlLoading(view, request); } @Override @@ -536,6 +545,11 @@ public class WebViewBridgeManager extends ReactWebViewManager { return event; } + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, String url) { + return null; + } + @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { String urlStr = request.getUrl().toString();