Improve the visibility and discoverability of the "add shortcut
to home" functionality in the Browser.

When the user selects the bookmark button adjacent to the URL bar
they will be prompted to either add a new bookmark for the current
page or add a shortcut to the current page to their homescreen,
rather than being taken to the bookmark management activity. The
bookmarks button on the options menu will still take the user
directly to the bookmark management activity.

Bug: b/2794945

Change-Id: I07190250379f1d6e2fe6b8ea280317949cd58b15
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 1104d5e..104a495 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -51,6 +51,7 @@
     private String      mTouchIconUrl;
     private Bitmap      mThumbnail;
     private String      mOriginalUrl;
+    private boolean     mIsUrlEditable = true;
 
     // Message IDs
     private static final int SAVE_BOOKMARK = 100;
@@ -74,13 +75,24 @@
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         requestWindowFeature(Window.FEATURE_LEFT_ICON);
-        setContentView(R.layout.browser_add_bookmark);
+
+        mMap = getIntent().getExtras();
+        if (mMap != null) {
+            mIsUrlEditable = mMap.getBoolean("url_editable", true);
+        }
+
+        if (mIsUrlEditable) {
+            setContentView(R.layout.browser_add_bookmark);
+        } else {
+            setContentView(R.layout.browser_add_bookmark_const_url);
+        }
+
         setTitle(R.string.save_to_bookmarks);
         getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.ic_list_bookmark);
         
         String title = null;
         String url = null;
-        mMap = getIntent().getExtras();
+
         if (mMap != null) {
             Bundle b = mMap.getBundle("bookmark");
             if (b != null) {
@@ -96,8 +108,11 @@
 
         mTitle = (EditText) findViewById(R.id.title);
         mTitle.setText(title);
-        mAddress = (EditText) findViewById(R.id.address);
-        mAddress.setText(url);
+
+        if (mIsUrlEditable) {
+            mAddress = (EditText) findViewById(R.id.address);
+            mAddress.setText(url);
+        }
 
         View.OnClickListener accept = mSaveBookmark;
         mButton = (TextView) findViewById(R.id.OK);
@@ -173,8 +188,14 @@
         createHandler();
 
         String title = mTitle.getText().toString().trim();
-        String unfilteredUrl = 
-                BrowserActivity.fixUrl(mAddress.getText().toString());
+        String unfilteredUrl;
+        if (mIsUrlEditable) {
+            unfilteredUrl =
+                    BrowserActivity.fixUrl(mAddress.getText().toString());
+        } else {
+            unfilteredUrl = mOriginalUrl;
+        }
+
         boolean emptyTitle = title.length() == 0;
         boolean emptyUrl = unfilteredUrl.trim().length() == 0;
         Resources r = getResources();
@@ -183,9 +204,15 @@
                 mTitle.setError(r.getText(R.string.bookmark_needs_title));
             }
             if (emptyUrl) {
-                mAddress.setError(r.getText(R.string.bookmark_needs_url));
+                if (mIsUrlEditable) {
+                    mAddress.setError(r.getText(R.string.bookmark_needs_url));
+                } else {
+                    Toast.makeText(AddBookmarkPage.this, R.string.bookmark_needs_url,
+                            Toast.LENGTH_LONG).show();
+                }
+                return false;
             }
-            return false;
+
         }
         String url = unfilteredUrl.trim();
         try {
@@ -200,7 +227,12 @@
                     // can't save their bookmark. If it was null, we'll assume
                     // they meant http when we parse it in the WebAddress class.
                     if (scheme != null) {
-                        mAddress.setError(r.getText(R.string.bookmark_cannot_save_url));
+                        if (mIsUrlEditable) {
+                            mAddress.setError(r.getText(R.string.bookmark_cannot_save_url));
+                        } else {
+                            Toast.makeText(AddBookmarkPage.this, R.string.bookmark_cannot_save_url,
+                                    Toast.LENGTH_LONG).show();
+                        }
                         return false;
                     }
                     WebAddress address;
@@ -216,7 +248,12 @@
                 }
             }
         } catch (URISyntaxException e) {
-            mAddress.setError(r.getText(R.string.bookmark_url_not_valid));
+            if (mIsUrlEditable) {
+                mAddress.setError(r.getText(R.string.bookmark_url_not_valid));
+            } else {
+                Toast.makeText(AddBookmarkPage.this, R.string.bookmark_url_not_valid,
+                        Toast.LENGTH_LONG).show();
+            }
             return false;
         }