Add menu items for copy, paste, and share URL.
authorSoren Stoutner <soren@stoutner.com>
Thu, 19 Nov 2015 20:57:47 +0000 (13:57 -0700)
committerSoren Stoutner <soren@stoutner.com>
Thu, 19 Nov 2015 20:57:47 +0000 (13:57 -0700)
app/src/main/java/com/stoutner/privacybrowser/Webview.java
app/src/main/res/layout/app_bar.xml
app/src/main/res/menu/menu_webview.xml
app/src/main/res/values/strings.xml

index 99a27344fd6e8651ceab2fb381f0f25950de7cc8..7d5b63fda042f7577743acfb58cc74c183b36ff9 100644 (file)
@@ -1,14 +1,17 @@
 package com.stoutner.privacybrowser;
 
 import android.annotation.SuppressLint;
+import android.annotation.TargetApi;
 import android.app.Activity;
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AppCompatActivity;
-import android.support.v7.app.AppCompatDelegate;
 import android.util.Patterns;
 import android.view.KeyEvent;
 import android.view.Menu;
@@ -162,9 +165,12 @@ public class Webview extends AppCompatActivity {
         return true;
     }
 
+    // @TargetApi(11) turns off the errors regarding copy and paste, which are removied from view in menu_webview.xml for lower version of Android.
     @Override
+    @TargetApi(11)
     public boolean onOptionsItemSelected(MenuItem menuItem) {
         int menuItemId = menuItem.getItemId();
+        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
 
         // Sets the commands that relate to the menu entries.
         switch (menuItemId) {
@@ -183,6 +189,28 @@ public class Webview extends AppCompatActivity {
             case R.id.forward:
                 mainWebView.goForward();
                 break;
+
+            case R.id.copyURL:
+                clipboard.setPrimaryClip(ClipData.newPlainText("URL", urlTextBox.getText()));
+                break;
+
+            case R.id.pasteURL:
+                ClipData.Item clipboardData = clipboard.getPrimaryClip().getItemAt(0);
+                urlTextBox.setText(clipboardData.coerceToText(this));
+                try {
+                    loadUrlFromTextBox(mainWebView);
+                } catch (UnsupportedEncodingException e) {
+                    e.printStackTrace();
+                }
+                break;
+
+            case R.id.shareURL:
+                Intent shareIntent = new Intent();
+                shareIntent.setAction(Intent.ACTION_SEND);
+                shareIntent.putExtra(Intent.EXTRA_TEXT, urlTextBox.getText().toString());
+                shareIntent.setType("text/plain");
+                startActivity(Intent.createChooser(shareIntent, "Share URL"));
+                break;
         }
 
         return super.onOptionsItemSelected(menuItem);
@@ -219,7 +247,7 @@ public class Webview extends AppCompatActivity {
                 e.printStackTrace();
             }
 
-            // The ternary operator (? :) makes sure that unformattedUrl.get() does not cause a null pointer exception.
+            // The ternary operator (? :) makes sure that a null pointer exception is not thrown, which would happen if .get was called on a null value.
             final String scheme = unformattedUrl != null ? unformattedUrl.getProtocol() : null;
             final String authority = unformattedUrl != null ? unformattedUrl.getAuthority() : null;
             final String path = unformattedUrl != null ? unformattedUrl.getPath() : null;
index ece3f5d9efbb85bb5c981c0d7b759c8f5b22c384..80cdb814a97c0181357aa99f4358bc3f06b492f5 100644 (file)
@@ -5,13 +5,13 @@
     android:id="@+id/addressBarFrameLayout"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
+    android:layout_height="wrap_content" >
 
     <LinearLayout
         android:id="@+id/addressBarLinearLayout"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="horizontal">
+        android:orientation="horizontal" >
 
         <ImageView
             android:id="@+id/favoriteIcon"
index a2feb8733d6ec5cdca358875046b8279d7e44e05..57346e849d41ebcb3b508ad72e5a669888a901dd 100644 (file)
         android:orderInCategory="300"
         android:icon="@drawable/ic_forward"
         app:showAsAction="never" />
+
+    <!-- tools:targetApi="11" is required because copy and paste was not available on earlier version of Android. -->
+    <item
+        android:id="@+id/copyURL"
+        android:title="@string/copyURL"
+        android:orderInCategory="400"
+        tools:targetApi="11"
+        app:showAsAction="never" />
+
+    <!-- tools:targetApi="11" is required because copy and paste was not available on earlier version of Android. -->
+    <item
+        android:id="@+id/pasteURL"
+        android:title="@string/pasteURL"
+        android:orderInCategory="500"
+        tools:targetApi="11"
+        app:showAsAction="never" />
+
+    <item
+        android:id="@+id/shareURL"
+        android:title="@string/shareURL"
+        android:orderInCategory="600"
+        app:showAsAction="never" />
 </menu>
index 71142ba84e239b21caa0bb884a01ef714902d9d8..2e838ee365fa0c5cdf691533f3e384eea8a3b692 100644 (file)
@@ -10,5 +10,7 @@
     <string name="refresh">Refresh</string>
     <string name="back">Back</string>
     <string name="forward">Forward</string>
-
+    <string name="copyURL">Copy URL</string>
+    <string name="pasteURL">Paste URL</string>
+    <string name="shareURL">Share URL</string>
 </resources>