From b890903886c7ce2c50aa89b53ad6edb0a1fa8399 Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 9 Jun 2015 03:07:23 +0200 Subject: [PATCH] Add K9WebViewClient to open links in (external) browser --- src/com/fsck/k9/view/K9WebViewClient.java | 52 +++++++++++++++++++++++ src/com/fsck/k9/view/MessageWebView.java | 2 + 2 files changed, 54 insertions(+) create mode 100644 src/com/fsck/k9/view/K9WebViewClient.java diff --git a/src/com/fsck/k9/view/K9WebViewClient.java b/src/com/fsck/k9/view/K9WebViewClient.java new file mode 100644 index 000000000..8ac247d77 --- /dev/null +++ b/src/com/fsck/k9/view/K9WebViewClient.java @@ -0,0 +1,52 @@ +package com.fsck.k9.view; + + +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.provider.Browser; +import android.webkit.WebView; +import android.webkit.WebViewClient; + + +public class K9WebViewClient extends WebViewClient { + public static WebViewClient newInstance() { + return new K9WebViewClient(); + } + + + private K9WebViewClient() {} + + @Override + public boolean shouldOverrideUrlLoading(WebView webView, String url) { + Uri uri = Uri.parse(url); + + Context context = webView.getContext(); + Intent intent = createBrowserViewIntent(uri, context); + addActivityFlags(intent); + + boolean overridingUrlLoading = false; + try { + context.startActivity(intent); + overridingUrlLoading = true; + } catch (ActivityNotFoundException ex) { + // If no application can handle the URL, assume that the WebView can handle it. + } + + return overridingUrlLoading; + } + + private Intent createBrowserViewIntent(Uri uri, Context context) { + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + intent.addCategory(Intent.CATEGORY_BROWSABLE); + intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); + intent.putExtra(Browser.EXTRA_CREATE_NEW_TAB, true); + return intent; + } + + protected void addActivityFlags(Intent intent) { + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); + } +} + diff --git a/src/com/fsck/k9/view/MessageWebView.java b/src/com/fsck/k9/view/MessageWebView.java index 3198d4723..3d1c60ccd 100644 --- a/src/com/fsck/k9/view/MessageWebView.java +++ b/src/com/fsck/k9/view/MessageWebView.java @@ -87,6 +87,8 @@ public class MessageWebView extends RigidWebView { // Disable network images by default. This is overridden by preferences. blockNetworkData(true); + + setWebViewClient(K9WebViewClient.newInstance()); } /**