More edits to the add bookmark page.

Bug:2953515

BreadCrumbView:
Make sure the height is at least as tall as the separator,
so the height will not change when a separator is added or
removed.

Override getBaseline() to return the baseline of the
crumbs.

AddBookmarkPage:
Move the Add new folder button to the top.

Update the divider between the title and the rest of the
dialog.

Change-Id: I60d329626bd4ec2975cbf6ef00081338beeb7553
diff --git a/res/layout/browser_add_bookmark.xml b/res/layout/browser_add_bookmark.xml
index e5f164f..aa8e1a2 100644
--- a/res/layout/browser_add_bookmark.xml
+++ b/res/layout/browser_add_bookmark.xml
@@ -19,38 +19,52 @@
     android:layout_height="wrap_content"
     android:orientation="vertical"
     >
-
-    <com.android.browser.BreadCrumbView android:id="@+id/crumbs"
+    <RelativeLayout android:id="@+id/crumb_holder"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:visibility="gone"
-        />
-    <LinearLayout android:id="@+id/fake_title_bar"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="horizontal"
         >
-        <ImageView
+        <com.android.browser.BreadCrumbView android:id="@+id/crumbs"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:src="@drawable/ic_list_bookmark"
+            android:layout_alignParentLeft="true"
+            android:layout_toLeftOf="@+id/add_divider"
             />
-        <TextView android:id="@+id/fake_title"
+        <!-- FIXME: The drawable does not line up properly. We may also want a
+            different asset in the final version. -->
+        <TextView
+            android:id="@+id/add_new_folder"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="@string/bookmark_this_page"
-            android:layout_gravity="center_horizontal"
+            android:layout_alignParentRight="true"
+            android:layout_alignBaseline="@+id/crumbs"
+            android:drawableLeft="@drawable/ic_add_string"
+            android:text="@string/add_new_folder"
+            android:visibility="gone"
             android:textAppearance="?android:attr/textAppearanceMedium" />
-    </LinearLayout>
+        <ImageView android:id="@+id/add_divider"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_toLeftOf="@+id/add_new_folder"
+            android:src="@drawable/crumb_divider"
+            />
+    </RelativeLayout>
+    <!-- FIXME: The drawable does not line up properly. We may also want a
+        different asset in the final version. -->
+    <TextView android:id="@+id/fake_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:drawableLeft="@drawable/ic_list_bookmark"
+        android:text="@string/bookmark_this_page"
+        android:layout_gravity="left"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
 
-    <ImageView android:id="@+id/titleDivider"
+    <View android:id="@+id/titleDivider"
         android:layout_width="match_parent"
         android:layout_height="1dip"
-        android:scaleType="fitXY"
         android:gravity="fill_horizontal"
-        android:src="@drawable/dialog_divider_horizontal_light"
-        android:layout_marginLeft="10dip"
-        android:layout_marginRight="10dip"/>
+        android:background="?android:attr/colorForeground"
+        />
 
     <!-- XXX Use a TableLayout instead -->
     <RelativeLayout android:id="@+id/default_view"
@@ -158,14 +172,6 @@
             android:layout_height="wrap_content"
             android:visibility="gone"
             />
-        <Button
-            android:id="@+id/add_new_folder"
-            android_marginTop="16dip"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_horizontal"
-            android:text="@string/add_new_folder"
-            android:textAppearance="?android:attr/textAppearanceMedium" />
     </LinearLayout>
 
     <LinearLayout 
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 1f14629..c230858 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -91,10 +91,12 @@
     private View mFolderSelector;
     private EditText mFolderNamer;
     private View mAddNewFolder;
+    private View mAddSeparator;
     private long mCurrentFolder = 0;
     private FolderAdapter mAdapter;
     private BreadCrumbView mCrumbs;
-    private View mFakeTitleBar;
+    private TextView mFakeTitle;
+    private View mCrumbHolder;
 
     private static class Folder {
         String Name;
@@ -187,8 +189,8 @@
                     // User has selected a folder.  Go back to the opening page
                     mFolderSelector.setVisibility(View.GONE);
                     mDefaultView.setVisibility(View.VISIBLE);
-                    mCrumbs.setVisibility(View.GONE);
-                    mFakeTitleBar.setVisibility(View.VISIBLE);
+                    mCrumbHolder.setVisibility(View.GONE);
+                    mFakeTitle.setVisibility(View.VISIBLE);
                 }
             } else if (save()) {
                 finish();
@@ -197,6 +199,7 @@
             if (mFolderNamer.getVisibility() == View.VISIBLE) {
                 mFolderNamer.setVisibility(View.GONE);
                 mAddNewFolder.setVisibility(View.VISIBLE);
+                mAddSeparator.setVisibility(View.VISIBLE);
             } else {
                 finish();
             }
@@ -207,6 +210,7 @@
             mFolderNamer.setText(R.string.new_folder);
             mFolderNamer.requestFocus();
             mAddNewFolder.setVisibility(View.GONE);
+            mAddSeparator.setVisibility(View.GONE);
             getInputMethodManager().showSoftInput(mFolderNamer,
                     InputMethodManager.SHOW_IMPLICIT);
         }
@@ -219,6 +223,7 @@
             descendInto(name, id);
             mFolderNamer.setVisibility(View.GONE);
             mAddNewFolder.setVisibility(View.VISIBLE);
+            mAddSeparator.setVisibility(View.VISIBLE);
             getInputMethodManager().hideSoftInputFromWindow(
                     mFolderNamer.getWindowToken(), 0);
         }
@@ -244,8 +249,10 @@
     private void switchToFolderSelector() {
         mDefaultView.setVisibility(View.GONE);
         mFolderSelector.setVisibility(View.VISIBLE);
-        mCrumbs.setVisibility(View.VISIBLE);
-        mFakeTitleBar.setVisibility(View.GONE);
+        mCrumbHolder.setVisibility(View.VISIBLE);
+        mFakeTitle.setVisibility(View.GONE);
+        mAddNewFolder.setVisibility(View.VISIBLE);
+        mAddSeparator.setVisibility(View.VISIBLE);
     }
 
     private void descendInto(String foldername, long id) {
@@ -396,8 +403,7 @@
             if (b != null) {
                 mMap = b;
                 mEditingExisting = true;
-                TextView fakeTitle = (TextView) findViewById(R.id.fake_title);
-                fakeTitle.setText(R.string.edit_bookmark);
+                mFakeTitle.setText(R.string.edit_bookmark);
                 if (!DEBUG_CRASH) {
                     setTitle(R.string.bookmark_this_page);
                 }
@@ -442,14 +448,16 @@
 
         mAddNewFolder = findViewById(R.id.add_new_folder);
         mAddNewFolder.setOnClickListener(this);
+        mAddSeparator = findViewById(R.id.add_divider);
 
         mCrumbs = (BreadCrumbView) findViewById(R.id.crumbs);
         mCrumbs.setUseBackButton(true);
         mCrumbs.setController(this);
         mCrumbs.pushView(getString(R.string.bookmarks), false,
                 BrowserProvider2.FIXED_ID_ROOT);
+        mCrumbHolder = findViewById(R.id.crumb_holder);
 
-        mFakeTitleBar = findViewById(R.id.fake_title_bar);
+        mFakeTitle = (TextView) findViewById(R.id.fake_title);
 
         mAdapter = new FolderAdapter(this);
         ListView list = (ListView) findViewById(R.id.list);
diff --git a/src/com/android/browser/BreadCrumbView.java b/src/com/android/browser/BreadCrumbView.java
index e501703..4939b48 100644
--- a/src/com/android/browser/BreadCrumbView.java
+++ b/src/com/android/browser/BreadCrumbView.java
@@ -17,6 +17,7 @@
 package com.android.browser;
 
 import android.content.Context;
+import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.Gravity;
@@ -45,6 +46,7 @@
     private Controller mController;
     private List<Crumb> mCrumbs;
     private boolean mUseBackButton;
+    private Drawable mSeparatorDrawable;
 
     /**
      * @param context
@@ -76,6 +78,8 @@
     private void init(Context ctx) {
         mUseBackButton = false;
         mCrumbs = new ArrayList<Crumb>();
+        mSeparatorDrawable = ctx.getResources().getDrawable(
+                R.drawable.crumb_divider);
     }
 
     public void setUseBackButton(boolean useflag) {
@@ -164,7 +168,7 @@
 
     private void addSeparator() {
         ImageView sep = new ImageView(mContext);
-        sep.setImageResource(R.drawable.crumb_divider);
+        sep.setImageDrawable(mSeparatorDrawable);
         sep.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                 LayoutParams.MATCH_PARENT));
         addView(sep);
@@ -221,6 +225,39 @@
             notifyController();
         }
     }
+    @Override
+    public int getBaseline() {
+        int ix = getChildCount();
+        if (ix > 0) {
+            // If there is at least one crumb, the baseline will be its
+            // baseline.
+            return getChildAt(ix-1).getBaseline();
+        }
+        return super.getBaseline();
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        int height = mSeparatorDrawable.getIntrinsicHeight();
+        if (mMeasuredHeight < height) {
+            // This should only be an issue if there are currently no separators
+            // showing; i.e. if there is one crumb and no back button.
+            int mode = View.MeasureSpec.getMode(heightMeasureSpec);
+            switch(mode) {
+                case View.MeasureSpec.AT_MOST:
+                    if (View.MeasureSpec.getSize(heightMeasureSpec) < height) {
+                        return;
+                    }
+                    break;
+                case View.MeasureSpec.EXACTLY:
+                    return;
+                default:
+                    break;
+            }
+            setMeasuredDimension(mMeasuredWidth, height);
+        }
+    }
 
     class Crumb {