Merge "Update large screen translations." into honeycomb
diff --git a/res/layout/browser_add_bookmark.xml b/res/layout/browser_add_bookmark.xml
index e25f903..5eebc0b 100644
--- a/res/layout/browser_add_bookmark.xml
+++ b/res/layout/browser_add_bookmark.xml
@@ -25,6 +25,8 @@
         android:minHeight="?android:attr/listPreferredItemHeight"
         android:gravity="center_vertical"
         android:visibility="gone"
+        android:paddingLeft="5dip"
+        android:paddingRight="5dip"
         >
         <com.android.browser.BreadCrumbView android:id="@+id/crumbs"
             android:layout_width="wrap_content"
@@ -53,16 +55,41 @@
             android:layout_centerVertical="true"
             />
     </RelativeLayout>
-    <TextView android:id="@+id/fake_title"
-        android:layout_width="wrap_content"
+    <LinearLayout android:id="@+id/title_holder"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:orientation="horizontal"
         android:minHeight="?android:attr/listPreferredItemHeight"
-        android:drawableLeft="@drawable/ic_list_bookmark"
-        android:text="@string/bookmark_this_page"
-        android:layout_gravity="left"
-        android:gravity="center_vertical"
-        android:textAppearance="?android:attr/textAppearanceMedium" />
-
+        android:paddingLeft="5dip"
+        android:paddingRight="5dip"
+        >
+        <TextView android:id="@+id/fake_title"
+            android:layout_width="0dip"
+            android:layout_weight="1"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:gravity="center_vertical"
+            android:drawableLeft="@drawable/ic_list_bookmark"
+            android:text="@string/bookmark_this_page"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+        <ImageView android:id="@+id/remove_divider"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:src="@drawable/crumb_divider"
+            android:layout_centerVertical="true"
+            android:visibility="gone"
+            />
+        <TextView android:id="@+id/remove"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:gravity="center_vertical"
+            android:text="@string/remove"
+            android:drawableLeft="@*android:drawable/ic_menu_delete"
+            android:visibility="gone"
+            android:textAppearance="?android:attr/textAppearanceMedium" />
+    </LinearLayout>
     <View android:id="@+id/titleDivider"
         android:layout_width="match_parent"
         android:layout_height="1dip"
diff --git a/res/layout/tab_bar.xml b/res/layout/tab_bar.xml
index 0f636cd..d3683b1 100644
--- a/res/layout/tab_bar.xml
+++ b/res/layout/tab_bar.xml
@@ -16,10 +16,6 @@
     android:layout_width="match_parent"
     android:layout_height="56dip"
     android:orientation="horizontal"
-    android:paddingLeft="12dip"
-    android:paddingTop="12dip"
-    android:paddingRight="0dip"
-    android:paddingBottom="0dip"
     style="@style/ActionBarStyle"
     >
     <com.android.browser.TabScrollView
diff --git a/res/menu/browsercontext.xml b/res/menu/browsercontext.xml
index f5361d5..a8ae5c8 100644
--- a/res/menu/browsercontext.xml
+++ b/res/menu/browsercontext.xml
@@ -40,12 +40,8 @@
             android:title="@string/contextmenu_openlink"/>
         <item android:id="@+id/open_newtab_context_menu_id"
             android:title="@string/contextmenu_openlink_newwindow"/>
-        <item android:id="@+id/bookmark_context_menu_id"
-            android:title="@string/contextmenu_bookmark_thislink"/>
         <item android:id="@+id/save_link_context_menu_id"
             android:title="@string/contextmenu_savelink"/>
-        <item android:id="@+id/share_link_context_menu_id"
-            android:title="@string/contextmenu_sharelink"/>
         <item android:id="@+id/copy_link_context_menu_id"
             android:title="@string/contextmenu_copylink"/>
     </group>
diff --git a/res/values-xlarge/strings.xml b/res/values-xlarge/strings.xml
index 8dcabe2..ee20dfa 100644
--- a/res/values-xlarge/strings.xml
+++ b/res/values-xlarge/strings.xml
@@ -25,6 +25,9 @@
     <!-- Context Menu item to open the currently selected link in a new
          window. [CHAR LIMIT=30] -->
     <string name="contextmenu_openlink_newwindow">Open in new tab</string>
+    <!-- Context Menu item to open the currently selected link in a new
+         background window. [CHAR LIMIT=50] -->
+    <string name="contextmenu_openlink_newwindow_background">Open in new background tab</string>
     <!-- Context menu item to open every bookmark in a folder in new tabs [CHAR LIMIT=50] -->
     <string name="open_all_in_new_window">Open all in new tabs</string>
 </resources>
diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml
index d50ce13..b78b461 100644
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -38,4 +38,6 @@
     <dimen name="mv_item_width">96dp</dimen>
     <dimen name="mv_item_width_portrait">96dp</dimen>
     <dimen name="mv_border_width">3dp</dimen>
+    <dimen name="tab_padding_top">12dp</dimen>
+    <dimen name="tab_first_padding_left">12dp</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 00a2a46..5452b63 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -152,6 +152,8 @@
     <string name="save_to_bookmarks">Add to Bookmarks</string>
     <!-- Title of the dialog to bookmark a page -->
     <string name="bookmark_this_page">Bookmark this page</string>
+    <!-- Option on bookmark dialog to remove the bookmark [CHAR LIMIT=30] -->
+    <string name="remove">Remove</string>
     <!-- Menu item on the bookmarks page, to edit an existing bookmark -->
     <string name="edit_bookmark">Edit bookmark</string>
     <!-- Context menu item to create a shortcut to the bookmark on the desktop [CHAR LIMIT=50] -->
@@ -246,15 +248,12 @@
     <!-- Context Menu item to open the currently selected link in a new
             window. -->
     <string name="contextmenu_openlink_newwindow">Open in new window</string>
-    <!-- Context Menu item to create a bookmark for the url of the currently
-            selected link. -->
-    <string name="contextmenu_bookmark_thislink">Bookmark link</string>
+    <!-- Context Menu item to open the currently selected link in a new
+         background window. [CHAR LIMIT=50] -->
+    <string name="contextmenu_openlink_newwindow_background">Open in new background window</string>
     <!-- Context Menu item to save the webpage referred to by this link to the
             SD card (external storage) -->
     <string name="contextmenu_savelink">Save link</string>
-    <!-- Context Menu item to send the url of the selected link to someone else,
-            via Gmail or another app -->
-    <string name="contextmenu_sharelink">Share link</string>
     <!-- Context Menu item -->
     <string name="contextmenu_copy">Copy</string>
     <!-- Context Menu item to copy the url of the selected link to the
@@ -425,7 +424,7 @@
     <string name="autofill_setup_dialog_message">Browser can automatically complete web forms like this one. Would you like to set up your profile?</string>
     <!-- Toast message displayed when the user decides to not set up autofill at this time. We want to remind them that they can configure
          it through the Browser Settings menu. [CHAR-LIMIT=NONE] -->
-    <string name="autofill_setup_dialog_negative_toast">AutoFill can always be configured through Browser Settings -&gt; Personal Settings.</string>
+    <string name="autofill_setup_dialog_negative_toast">AutoFill can always be configured through Browser Settings.</string>
 
     <!-- Settings screen, section title [CHAR-LIMIT=50] -->
     <string name="pref_privacy_security_title">Privacy &amp; Security</string>
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 5a55f67..a93a518 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -115,6 +115,8 @@
     private long mRootFolder;
     private TextView mTopLevelLabel;
     private Drawable mHeaderIcon;
+    private View mRemoveLink;
+    private View mFakeTitleHolder;
     private static class Folder {
         String Name;
         long Id;
@@ -127,6 +129,7 @@
     // Message IDs
     private static final int SAVE_BOOKMARK = 100;
     private static final int TOUCH_ICON_DOWNLOADED = 101;
+    private static final int BOOKMARK_DELETED = 102;
 
     private Handler mHandler;
 
@@ -194,7 +197,7 @@
         mFolderSelector.setVisibility(View.GONE);
         mDefaultView.setVisibility(View.VISIBLE);
         mCrumbHolder.setVisibility(View.GONE);
-        mFakeTitle.setVisibility(View.VISIBLE);
+        mFakeTitleHolder.setVisibility(View.VISIBLE);
         if (changedFolder) {
             Object data = mCrumbs.getTopData();
             if (data != null) {
@@ -257,6 +260,16 @@
             // can transfer the focus to mFolderNamer.
             imm.focusIn(mListView);
             imm.showSoftInput(mFolderNamer, InputMethodManager.SHOW_IMPLICIT);
+        } else if (v == mRemoveLink) {
+            if (!mEditingExisting) {
+                throw new AssertionError("Remove button should not be shown for"
+                        + " new bookmarks");
+            }
+            long id = mMap.getLong(BrowserContract.Bookmarks._ID);
+            createHandler();
+            Message msg = Message.obtain(mHandler, BOOKMARK_DELETED);
+            BookmarkUtils.displayRemoveBookmarkDialog(id,
+                    mTitle.getText().toString(), this, msg);
         }
     }
 
@@ -334,7 +347,7 @@
         mDefaultView.setVisibility(View.GONE);
         mFolderSelector.setVisibility(View.VISIBLE);
         mCrumbHolder.setVisibility(View.VISIBLE);
-        mFakeTitle.setVisibility(View.GONE);
+        mFakeTitleHolder.setVisibility(View.GONE);
         mAddNewFolder.setVisibility(View.VISIBLE);
         mAddSeparator.setVisibility(View.VISIBLE);
     }
@@ -423,6 +436,7 @@
                 if (cursor != null && cursor.moveToFirst()) {
                     // Site is bookmarked.
                     mEditingExisting = true;
+                    showRemoveButton();
                     mFakeTitle.setText(R.string.edit_bookmark);
                     int index = cursor.getColumnIndexOrThrow(
                             BrowserContract.Bookmarks.PARENT);
@@ -603,6 +617,8 @@
                 mFakeTitle.setText(R.string.edit_bookmark);
                 if (mEditingFolder) {
                     findViewById(R.id.row_address).setVisibility(View.GONE);
+                } else {
+                    showRemoveButton();
                 }
             } else {
                 int gravity = mMap.getInt("gravity", -1);
@@ -662,6 +678,8 @@
         mListView.setOnItemClickListener(this);
         mListView.addEditText(mFolderNamer);
 
+        mFakeTitleHolder = findViewById(R.id.title_holder);
+
         if (!window.getDecorView().isInTouchMode()) {
             mButton.requestFocus();
         }
@@ -678,6 +696,13 @@
 
     }
 
+    private void showRemoveButton() {
+        findViewById(R.id.remove_divider).setVisibility(View.VISIBLE);
+        mRemoveLink = findViewById(R.id.remove);
+        mRemoveLink.setVisibility(View.VISIBLE);
+        mRemoveLink.setOnClickListener(this);
+    }
+
     // Called once we have determined which folder is the root folder
     private void onRootFolderFound(long root) {
         mRootFolder = root;
@@ -819,6 +844,9 @@
                                     (Bitmap) b.getParcelable(BrowserContract.Bookmarks.TOUCH_ICON),
                                     (Bitmap) b.getParcelable(BrowserContract.Bookmarks.FAVICON)));
                             break;
+                        case BOOKMARK_DELETED:
+                            finish();
+                            break;
                     }
                 }
             };
diff --git a/src/com/android/browser/BookmarkUtils.java b/src/com/android/browser/BookmarkUtils.java
index b548607..27d3310 100644
--- a/src/com/android/browser/BookmarkUtils.java
+++ b/src/com/android/browser/BookmarkUtils.java
@@ -16,7 +16,10 @@
 
 package com.android.browser;
 
+import android.app.AlertDialog;
+import android.content.ContentUris;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.graphics.Bitmap;
@@ -30,6 +33,7 @@
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.net.Uri;
+import android.os.Message;
 import android.preference.PreferenceManager;
 import android.provider.Browser;
 import android.provider.BrowserContract;
@@ -212,4 +216,42 @@
                 BrowserContract.Bookmarks.PARAM_ACCOUNT_TYPE, accountType);
         return ub;
     }
+
+    /**
+     * Show a confirmation dialog to remove a bookmark.
+     * @param id Id of the bookmark to remove
+     * @param title Title of the bookmark, to be displayed in the confirmation method.
+     * @param context Package Context for strings, dialog, ContentResolver
+     * @param msg Message to send if the bookmark is deleted.
+     */
+    static void displayRemoveBookmarkDialog( final long id, final String title,
+            final Context context, final Message msg) {
+
+        new AlertDialog.Builder(context)
+                .setTitle(R.string.delete_bookmark)
+                .setIcon(android.R.drawable.ic_dialog_alert)
+                .setMessage(context.getString(R.string.delete_bookmark_warning,
+                        title))
+                .setPositiveButton(R.string.ok,
+                        new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int whichButton) {
+                                if (msg != null) {
+                                    msg.sendToTarget();
+                                }
+                                Runnable runnable = new Runnable(){
+                                    @Override
+                                    public void run() {
+                                        Uri uri = ContentUris.withAppendedId(
+                                                BrowserContract.Bookmarks.CONTENT_URI,
+                                                id);
+                                        context.getContentResolver().delete(uri, null, null);
+                                    }
+                                };
+                                new Thread(runnable).start();
+                            }
+                        })
+                .setNegativeButton(R.string.cancel, null)
+                .show();
+    }
 }
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index ea97c29..d5a5182 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -630,25 +630,10 @@
         // Put up a dialog asking if the user really wants to
         // delete the bookmark
         Cursor cursor = mAdapter.getItem(position);
+        long id = cursor.getLong(BookmarksLoader.COLUMN_INDEX_ID);
+        String title = cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE);
         Context context = getActivity();
-        final ContentResolver resolver = context.getContentResolver();
-        final Uri uri = ContentUris.withAppendedId(BrowserContract.Bookmarks.CONTENT_URI,
-                cursor.getLong(BookmarksLoader.COLUMN_INDEX_ID));
-
-        new AlertDialog.Builder(context)
-                .setTitle(R.string.delete_bookmark)
-                .setIcon(android.R.drawable.ic_dialog_alert)
-                .setMessage(context.getString(R.string.delete_bookmark_warning,
-                        cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE)))
-                .setPositiveButton(R.string.ok,
-                        new DialogInterface.OnClickListener() {
-                            @Override
-                            public void onClick(DialogInterface dialog, int whichButton) {
-                                resolver.delete(uri, null, null);
-                            }
-                        })
-                .setNegativeButton(R.string.cancel, null)
-                .show();
+        BookmarkUtils.displayRemoveBookmarkDialog(id, title, context, null);
     }
 
     private String getUrl(int position) {
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index b79acab..fe19927 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -461,18 +461,6 @@
                                     parent.addChildTab(newTab);
                                 }
                                 break;
-                            case R.id.bookmark_context_menu_id:
-                                Intent intent = new Intent(mActivity,
-                                        AddBookmarkPage.class);
-                                intent.putExtra(BrowserContract.Bookmarks.URL, url);
-                                intent.putExtra(BrowserContract.Bookmarks.TITLE,
-                                        title);
-                                mActivity.startActivity(intent);
-                                break;
-                            case R.id.share_link_context_menu_id:
-                                sharePage(mActivity, title, url, null,
-                                        null);
-                                break;
                             case R.id.copy_link_context_menu_id:
                                 copy(url);
                                 break;
@@ -1309,6 +1297,10 @@
                 boolean showNewTab = mTabControl.canCreateNewTab();
                 MenuItem newTabItem
                         = menu.findItem(R.id.open_newtab_context_menu_id);
+                newTabItem.setTitle(
+                        BrowserSettings.getInstance().openInBackground()
+                        ? R.string.contextmenu_openlink_newwindow_background
+                        : R.string.contextmenu_openlink_newwindow);
                 newTabItem.setVisible(showNewTab);
                 if (showNewTab) {
                     if (WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE == type) {
@@ -1343,15 +1335,6 @@
                                 });
                     }
                 }
-                menu.findItem(R.id.bookmark_context_menu_id).setVisible(
-                        Bookmarks.urlHasAcceptableScheme(extra));
-                PackageManager pm = mActivity.getPackageManager();
-                Intent send = new Intent(Intent.ACTION_SEND);
-                send.setType("text/plain");
-                ResolveInfo ri = pm.resolveActivity(send,
-                        PackageManager.MATCH_DEFAULT_ONLY);
-                menu.findItem(R.id.share_link_context_menu_id)
-                        .setVisible(ri != null);
                 if (type == WebView.HitTestResult.SRC_ANCHOR_TYPE) {
                     break;
                 }
@@ -1650,9 +1633,7 @@
                 break;
             // -- Browser context menu
             case R.id.open_context_menu_id:
-            case R.id.bookmark_context_menu_id:
             case R.id.save_link_context_menu_id:
-            case R.id.share_link_context_menu_id:
             case R.id.copy_link_context_menu_id:
                 final WebView webView = getCurrentTopWebView();
                 if (null == webView) {
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java
index f1cdf2f..b872cad 100644
--- a/src/com/android/browser/TabBar.java
+++ b/src/com/android/browser/TabBar.java
@@ -111,15 +111,11 @@
         Resources resources = activity.getResources();
         LayoutInflater factory = LayoutInflater.from(activity);
         factory.inflate(R.layout.tab_bar, this);
-        setPadding(12, 12, 0, 0);
+        setPadding(0, (int) res.getDimension(R.dimen.tab_padding_top), 0, 0);
         mTabs = (TabScrollView) findViewById(R.id.tabs);
         mNewTab = (ImageButton) findViewById(R.id.newtab);
         mNewTab.setOnClickListener(this);
         mGenericFavicon = res.getDrawable(R.drawable.app_web_browser_sm);
-        setChildrenDrawingOrderEnabled(true);
-
-        // TODO: Change enabled states based on whether you can go
-        // back/forward.  Probably should be done inside onPageStarted.
 
         updateTabs(mUiController.getTabs());
 
@@ -277,12 +273,6 @@
         return tabview;
     }
 
-    @Override
-    protected int getChildDrawingOrder(int count, int i) {
-        // reverse
-        return count - 1 - i;
-    }
-
     private static Bitmap getDrawableAsBitmap(Drawable drawable, int width, int height) {
         Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
         Canvas c = new Canvas(b);
diff --git a/src/com/android/browser/TabScrollView.java b/src/com/android/browser/TabScrollView.java
index f501e64..09dddee 100644
--- a/src/com/android/browser/TabScrollView.java
+++ b/src/com/android/browser/TabScrollView.java
@@ -16,15 +16,10 @@
 
 package com.android.browser;
 
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
 import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.View;
-import android.view.animation.AccelerateInterpolator;
 import android.widget.HorizontalScrollView;
 import android.widget.LinearLayout;
 
@@ -36,8 +31,6 @@
     private Context mContext;
     private LinearLayout mContentView;
     private int mSelected;
-    private Drawable mArrowLeft;
-    private Drawable mArrowRight;
     private int mAnimationDuration;
     private int mTabOverlap;
 
@@ -79,10 +72,11 @@
         mContentView.setOrientation(LinearLayout.HORIZONTAL);
         mContentView.setLayoutParams(
                 new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
+        mContentView.setPadding(
+                (int) ctx.getResources().getDimension(R.dimen.tab_first_padding_left),
+                0, 0, 0);
         addView(mContentView);
         mSelected = -1;
-        mArrowLeft = ctx.getResources().getDrawable(R.drawable.ic_arrow_left);
-        mArrowRight = ctx.getResources().getDrawable(R.drawable.ic_arrow_right);
         // prevent ProGuard from removing the property methods
         setScroll(getScroll());
     }
@@ -153,24 +147,6 @@
         }
     }
 
-    @Override
-    protected void dispatchDraw(Canvas canvas) {
-        super.dispatchDraw(canvas);
-        int l = getScrollX();
-        int r = l + getWidth();
-        int dis = 8;
-        if (l > 0) {
-            int aw = mArrowLeft.getIntrinsicWidth();
-            mArrowLeft.setBounds(l + dis, 0, l + dis + aw, getHeight());
-            mArrowLeft.draw(canvas);
-        }
-        if (r < mContentView.getWidth()) {
-            int aw = mArrowRight.getIntrinsicWidth();
-            mArrowRight.setBounds(r - dis - aw, 0, r - dis, getHeight());
-            mArrowRight.draw(canvas);
-        }
-    }
-
 // TODO: These animations are broken and don't work correctly, removing for now
 //       as animateOut is actually causing issues
 //    private void animateIn(View tab) {