diff options
author | Vincas Dargis <vindrg@gmail.com> | 2016-06-01 11:02:59 +0300 |
---|---|---|
committer | Vincas Dargis <vindrg@gmail.com> | 2016-06-03 11:51:07 +0000 |
commit | 70cc791481204708df6a926a0a65155be2afaf7a (patch) | |
tree | efb3d6200838b721c378c6cfca06d5de8ec49ae4 | |
parent | a92d964417bf1b4d5de720bae1157f2c9a870173 (diff) |
Android: add support for various url schemes.
Android WebView does not handle schemes by default, such
as mailto:, geo:, and others, but will instead show an
"ERR_UNKNOWN_URL_SCHEME" error. This patch fixes it by
starting ACTION_VIEW Intent for specified scheme, meanwhile
showing the same "ERR_UNKNOWN_URL_SCHEME" error page for
invalid cases as before.
[ChangeLog][Android] Added support for various url schemes.
Taks-number: QTBUG-53736
Change-Id: Ib569ec1598f76f823b2293446ea4e513764ef1fa
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
-rw-r--r-- | src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java b/src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java index 1c46847..0f4b424 100644 --- a/src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java +++ b/src/jar/src/org/qtproject/qt5/android/view/QtAndroidWebViewController.java @@ -39,12 +39,15 @@ package org.qtproject.qt5.android.view; import android.content.pm.PackageManager; import android.view.View; import android.webkit.GeolocationPermissions; +import android.webkit.URLUtil; import android.webkit.ValueCallback; import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.WebChromeClient; import java.lang.Runnable; import android.app.Activity; +import android.content.Intent; +import android.net.Uri; import java.lang.String; import android.webkit.WebSettings; import android.util.Log; @@ -106,6 +109,25 @@ public class QtAndroidWebViewController QtAndroidWebViewClient() { super(); } @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) + { + // handle http: and http:, etc., as usual + if (URLUtil.isValidUrl(url)) + return false; + + // try to handle geo:, tel:, mailto: and other schemes + try { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + view.getContext().startActivity(intent); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + + return false; + } + + @Override public void onLoadResource(WebView view, String url) { super.onLoadResource(view, url); |