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 {