Browser: change the bookmark UI spec in Browser

Change to just show current directory name, if
there are parent directories, show parent label
before current directory name. Change back button
icon and make it right-align.

CRs-Fixed: 546256

Change-Id: I632d0f6045797bc6032da84870a0570974872bc6
diff --git a/src/com/android/browser/AddBookmarkFolder.java b/src/com/android/browser/AddBookmarkFolder.java
index 7fae373..e67d84c 100644
--- a/src/com/android/browser/AddBookmarkFolder.java
+++ b/src/com/android/browser/AddBookmarkFolder.java
@@ -75,7 +75,7 @@
 
     /* package */static final String EXTRA_IS_FOLDER = "is_folder";
 
-    private static final int MAX_CRUMBS_SHOWN = 2;
+    private static final int MAX_CRUMBS_SHOWN = 1;
 
     private long mOriginalFolder = -1;
 
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 580723c..a7ded1e 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -85,7 +85,7 @@
     /* package */ static final String EXTRA_EDIT_BOOKMARK = "bookmark";
     /* package */ static final String EXTRA_IS_FOLDER = "is_folder";
 
-    private static final int MAX_CRUMBS_SHOWN = 2;
+    private static final int MAX_CRUMBS_SHOWN = 1;
 
     private final String LOGTAG = "Bookmarks";
 
diff --git a/src/com/android/browser/BreadCrumbView.java b/src/com/android/browser/BreadCrumbView.java
index d331b53..c3bff59 100644
--- a/src/com/android/browser/BreadCrumbView.java
+++ b/src/com/android/browser/BreadCrumbView.java
@@ -28,6 +28,7 @@
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import java.util.ArrayList;
@@ -38,7 +39,7 @@
  * Use setController to receive callbacks from user interactions
  * Use pushView, popView, clear, and getTopData to change/access the view stack
  */
-public class BreadCrumbView extends LinearLayout implements OnClickListener {
+public class BreadCrumbView extends RelativeLayout implements OnClickListener {
     private static final int DIVIDER_PADDING = 12; // dips
     private static final int CRUMB_PADDING = 8; // dips
 
@@ -47,6 +48,8 @@
     }
 
     private ImageButton mBackButton;
+    private LinearLayout mCrumbLayout;
+    private LinearLayout mBackLayout;
     private Controller mController;
     private List<Crumb> mCrumbs;
     private boolean mUseBackButton;
@@ -86,6 +89,7 @@
     private void init(Context ctx) {
         mContext = ctx;
         setFocusable(true);
+        setGravity(Gravity.CENTER_VERTICAL);
         mUseBackButton = false;
         mCrumbs = new ArrayList<Crumb>();
         TypedArray a = mContext.obtainStyledAttributes(com.android.internal.R.styleable.Theme);
@@ -94,7 +98,8 @@
         float density = mContext.getResources().getDisplayMetrics().density;
         mDividerPadding = DIVIDER_PADDING * density;
         mCrumbPadding = (int) (CRUMB_PADDING * density);
-        addBackButton();
+        addCrumbLayout();
+        addBackLayout();
     }
 
     public void setUseBackButton(boolean useflag) {
@@ -169,27 +174,61 @@
 
     private void addBackButton() {
         mBackButton = new ImageButton(mContext);
-        mBackButton.setImageResource(R.drawable.ic_back_hierarchy_holo_dark);
+        mBackButton.setImageResource(R.drawable.icon_up);
         TypedValue outValue = new TypedValue();
         getContext().getTheme().resolveAttribute(
                 android.R.attr.selectableItemBackground, outValue, true);
         int resid = outValue.resourceId;
         mBackButton.setBackgroundResource(resid);
+        mBackButton.setPadding(mCrumbPadding, 0, mCrumbPadding, 0);
         mBackButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                 LayoutParams.MATCH_PARENT));
         mBackButton.setOnClickListener(this);
-        mBackButton.setVisibility(View.GONE);
         mBackButton.setContentDescription(mContext.getText(
                 R.string.accessibility_button_bookmarks_folder_up));
-        addView(mBackButton, 0);
+        mBackLayout.addView(mBackButton);
+    }
+
+    private void addParentLabel() {
+        TextView tv = new TextView(mContext);
+        tv.setTextAppearance(mContext, android.R.style.TextAppearance_Medium);
+        tv.setPadding(mCrumbPadding, 0, 0, 0);
+        tv.setGravity(Gravity.CENTER_VERTICAL);
+        tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.WRAP_CONTENT));
+        tv.setText("/ .../");
+        tv.setSingleLine();
+        tv.setVisibility(View.GONE);
+        mCrumbLayout.addView(tv);
+    }
+
+    private void addCrumbLayout() {
+        mCrumbLayout = new LinearLayout(mContext);
+        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.WRAP_CONTENT);
+        params.addRule(ALIGN_PARENT_LEFT, TRUE);
+        params.setMargins(0, 0, 4 * mCrumbPadding, 0);
+        mCrumbLayout.setLayoutParams(params);
+        mCrumbLayout.setVisibility(View.VISIBLE);
+        addParentLabel();
+        addView(mCrumbLayout);
+    }
+
+    private void addBackLayout() {
+        mBackLayout= new LinearLayout(mContext);
+        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.WRAP_CONTENT);
+        params.addRule(ALIGN_PARENT_RIGHT, TRUE);
+        mBackLayout.setLayoutParams(params);
+        mBackLayout.setVisibility(View.GONE);
+        addSeparator();
+        addBackButton();
+        addView(mBackLayout);
     }
 
     private void pushCrumb(Crumb crumb) {
-        if (mCrumbs.size() > 0) {
-            addSeparator();
-        }
         mCrumbs.add(crumb);
-        addView(crumb.crumbView);
+        mCrumbLayout.addView(crumb.crumbView);
         updateVisible();
         crumb.crumbView.setOnClickListener(this);
     }
@@ -197,7 +236,7 @@
     private void addSeparator() {
         View sep = makeDividerView();
         sep.setLayoutParams(makeDividerLayoutParams());
-        addView(sep);
+        mBackLayout.addView(sep);
     }
 
     private ImageView makeDividerView() {
@@ -207,11 +246,9 @@
         return result;
     }
 
-    private LayoutParams makeDividerLayoutParams() {
-        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
-                LayoutParams.MATCH_PARENT);
-        params.topMargin = (int) mDividerPadding;
-        params.bottomMargin = (int) mDividerPadding;
+    private LinearLayout.LayoutParams makeDividerLayoutParams() {
+        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
+                LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
         return params;
     }
 
@@ -219,17 +256,13 @@
         int n = mCrumbs.size();
         if (n > 0) {
             removeLastView();
-            if (!mUseBackButton || (n > 1)) {
-                // remove separator
-                removeLastView();
-            }
             mCrumbs.remove(n - 1);
             if (mUseBackButton) {
                 Crumb top = getTopCrumb();
                 if (top != null && top.canGoBack) {
-                    mBackButton.setVisibility(View.VISIBLE);
+                    mBackLayout.setVisibility(View.VISIBLE);
                 } else {
-                    mBackButton.setVisibility(View.GONE);
+                    mBackLayout.setVisibility(View.GONE);
                 }
             }
             updateVisible();
@@ -240,7 +273,7 @@
     }
 
     private void updateVisible() {
-        // start at index 1 (0 == back button)
+        // start at index 1 (0 == parent label)
         int childIndex = 1;
         if (mMaxVisible >= 0) {
             int invisibleCrumbs = size() - mMaxVisible;
@@ -248,22 +281,16 @@
                 int crumbIndex = 0;
                 while (crumbIndex < invisibleCrumbs) {
                     // Set the crumb to GONE.
-                    getChildAt(childIndex).setVisibility(View.GONE);
-                    childIndex++;
-                    // Each crumb is followed by a separator (except the last
-                    // one).  Also make it GONE
-                    if (getChildAt(childIndex) != null) {
-                        getChildAt(childIndex).setVisibility(View.GONE);
-                    }
+                    mCrumbLayout.getChildAt(childIndex).setVisibility(View.GONE);
                     childIndex++;
                     // Move to the next crumb.
                     crumbIndex++;
                 }
             }
-            // Make sure the last two are visible.
-            int childCount = getChildCount();
+            // Make sure the last is visible.
+            int childCount = mCrumbLayout.getChildCount();
             while (childIndex < childCount) {
-                getChildAt(childIndex).setVisibility(View.VISIBLE);
+                mCrumbLayout.getChildAt(childIndex).setVisibility(View.VISIBLE);
                 childIndex++;
             }
         } else {
@@ -274,16 +301,21 @@
         }
         if (mUseBackButton) {
             boolean canGoBack = getTopCrumb() != null ? getTopCrumb().canGoBack : false;
-            mBackButton.setVisibility(canGoBack ? View.VISIBLE : View.GONE);
+            mBackLayout.setVisibility(canGoBack ? View.VISIBLE : View.GONE);
+            if (canGoBack) {
+                mCrumbLayout.getChildAt(0).setVisibility(VISIBLE);
+            } else {
+                mCrumbLayout.getChildAt(0).setVisibility(GONE);
+            }
         } else {
-            mBackButton.setVisibility(View.GONE);
+            mBackLayout.setVisibility(View.GONE);
         }
     }
 
     private void removeLastView() {
-        int ix = getChildCount();
+        int ix = mCrumbLayout.getChildCount();
         if (ix > 0) {
-            removeViewAt(ix-1);
+            mCrumbLayout.removeViewAt(ix-1);
         }
     }
 
diff --git a/src/com/android/browser/view/BookmarkExpandableView.java b/src/com/android/browser/view/BookmarkExpandableView.java
index 7badaf5..5c0f030 100644
--- a/src/com/android/browser/view/BookmarkExpandableView.java
+++ b/src/com/android/browser/view/BookmarkExpandableView.java
@@ -417,7 +417,7 @@
                         mInflater.inflate(R.layout.bookmarks_header, null);
                 crumbs.setController(BookmarkExpandableView.this);
                 crumbs.setUseBackButton(true);
-                crumbs.setMaxVisible(2);
+                crumbs.setMaxVisible(1);
                 String bookmarks = mContext.getString(R.string.bookmarks);
                 crumbs.pushView(bookmarks, false,
                         BrowserContract.Bookmarks.CONTENT_URI_DEFAULT_FOLDER);