Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea40aeeb authored by Danesh M's avatar Danesh M Committed by Gerrit Code Review
Browse files

WebView : Add openUrl menu item

If the selected text is a valid url, then allow user to launch it via browser.

Change-Id: I865d58d69ada2af751af1619c4cc03a732504481
parent 2002f0d1
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -21,7 +21,9 @@ import android.app.SearchManager;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.Browser;
import android.util.Patterns;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
@@ -30,6 +32,7 @@ class SelectActionModeCallback implements ActionMode.Callback {
    private WebViewClassic mWebView;
    private ActionMode mActionMode;
    private boolean mIsTextSelected = true;
    private Menu mMenu;

    void setWebView(WebViewClassic webView) {
        mWebView = webView;
@@ -52,7 +55,7 @@ class SelectActionModeCallback implements ActionMode.Callback {
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        mode.getMenuInflater().inflate(com.android.internal.R.menu.webview_copy, menu);

        mMenu = menu;
        final Context context = mWebView.getContext();
        mode.setTitle(context.getString(com.android.internal.R.string.textSelectionCABTitle));
        mode.setTitleOptionalHint(true);
@@ -76,10 +79,16 @@ class SelectActionModeCallback implements ActionMode.Callback {
        setMenuVisibility(menu, canCut, com.android.internal.R.id.cut);
        setMenuVisibility(menu, canCopy, com.android.internal.R.id.copy);
        setMenuVisibility(menu, canWebSearch, com.android.internal.R.id.websearch);
        setOpenUrlVisibility();
        mActionMode = mode;
        return true;
    }

    protected void setOpenUrlVisibility() {
        boolean isUrl = Patterns.WEB_URL.matcher(mWebView.getSelection()).matches();
        setMenuVisibility(mMenu, isUrl, com.android.internal.R.id.openurl);
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return true;
@@ -128,7 +137,13 @@ class SelectActionModeCallback implements ActionMode.Callback {
                }
                mWebView.getContext().startActivity(i);
                break;

            case com.android.internal.R.id.openurl:
                String url = mWebView.getSelection();
                if (!url.startsWith("https://") && !url.startsWith("http://")){
                    url = "http://" + url;
                }
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                mWebView.getContext().startActivity(browserIntent);
            default:
                return false;
        }
+1 −0
Original line number Diff line number Diff line
@@ -7915,6 +7915,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                    syncSelectionCursors();
                } else {
                    adjustSelectionCursors();
                    mSelectCallback.setOpenUrlVisibility();
                }
                if (mIsCaretSelection) {
                    resetCaretTimer();
+5 −0
Original line number Diff line number Diff line
@@ -49,5 +49,10 @@
        android:title="@string/websearch"
        android:showAsAction="ifRoom|withText"
        />
    <item android:id="@+id/openurl"
        android:icon="?android:attr/actionModeWebSearchDrawable"
        android:title="@string/openurl"
        android:showAsAction="ifRoom|withText"
        />
</menu>
+1 −0
Original line number Diff line number Diff line
@@ -214,6 +214,7 @@
  <java-symbol type="id" name="status_bar_latest_event_content" />
  <java-symbol type="id" name="action_divider" />
  <java-symbol type="id" name="overflow_divider" />
  <java-symbol type="id" name="openurl" />

  <java-symbol type="attr" name="actionModeShareDrawable" />
  <java-symbol type="attr" name="alertDialogCenterButtons" />
+2 −0
Original line number Diff line number Diff line
@@ -3359,6 +3359,8 @@
    <string name="find">Find</string>
    <!-- ActionBar action to use the current selection to perform a web search [CHAR-LIMIT=16] -->
    <string name="websearch">Web Search</string>
    <!-- ActionBar action to open the current selection as a url in the browser [CHAR-LIMIT=16] -->
    <string name="openurl">Open Url</string>

    <!-- Network positioning notification ticker. The name of the user (e.g. John Doe) who sent
         the request is shown as a dynamic string. -->