diff --git a/app/build.gradle b/app/build.gradle index e983fbfa..9c0bf571 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -139,6 +139,7 @@ dependencies { implementation 'pub.devrel:easypermissions:3.0.0' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation "androidx.biometric:biometric:1.1.0" + implementation "androidx.browser:browser:1.4.0" kapt "com.android.databinding:compiler:3.1.4" diff --git a/app/src/main/java/com/cylonid/nativealpha/WebViewActivity.java b/app/src/main/java/com/cylonid/nativealpha/WebViewActivity.java index 2cebcece..7fda65b9 100644 --- a/app/src/main/java/com/cylonid/nativealpha/WebViewActivity.java +++ b/app/src/main/java/com/cylonid/nativealpha/WebViewActivity.java @@ -51,6 +51,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import androidx.browser.customtabs.CustomTabsIntent; import androidx.core.app.ActivityCompat; import androidx.core.app.ShareCompat; import androidx.core.content.ContextCompat; @@ -186,6 +187,7 @@ private void setupWebView() { wv.getSettings().setDomStorageEnabled(true); wv.getSettings().setAllowFileAccess(true); wv.getSettings().setBlockNetworkLoads(false); + wv.getSettings().setSupportMultipleWindows(true); // wv.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); this.setDarkModeIfNeeded(); @@ -724,6 +726,27 @@ public void onShowCustomView(View pView, WebChromeClient.CustomViewCallback pVie hideSystemBars(); } + @Override + public boolean onCreateWindow(WebView view, boolean isDialog, + boolean isUserGesture, android.os.Message resultMsg) { + + WebView newWebView = new WebView(WebViewActivity.this); + view.addView(newWebView); + WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; + transport.setWebView(newWebView); + resultMsg.sendToTarget(); + + newWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); + CustomTabsIntent customTabsIntent = builder.build(); + customTabsIntent.launchUrl(WebViewActivity.this, Uri.parse(url)); + return true; + } + }); + return true; + } @Override public void onPermissionRequest(PermissionRequest request) { List permissionsToGrant = new ArrayList<>();