Commit cfa95de0 authored by dtrainor@chromium.org's avatar dtrainor@chromium.org

Update menu look and feel on Android

- Change the overflow menu to have an updated layout.

BUG=375379

Review URL: https://codereview.chromium.org/377083002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@282563 0039d316-1c4b-4281-b951-d872f2087c98
parent 48c35b8b
...@@ -6,54 +6,41 @@ ...@@ -6,54 +6,41 @@
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:layout_gravity="top|start" android:layout_gravity="top|start"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageButton <ImageButton
android:id="@+id/button_one" android:id="@+id/button_one"
android:layout_width="wrap_content" android:layout_width="56dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:paddingEnd="8dp"
android:background="?android:attr/listChoiceBackgroundIndicator" android:background="?android:attr/listChoiceBackgroundIndicator"
android:scaleType="center" /> android:scaleType="center" />
<View
android:layout_width="1dp"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:background="?android:attr/listDivider" />
<ImageButton <ImageButton
android:id="@+id/button_two" android:id="@+id/button_two"
android:layout_width="wrap_content" android:layout_width="64dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:paddingStart="8dp"
android:paddingEnd="8dp"
android:background="?android:attr/listChoiceBackgroundIndicator" android:background="?android:attr/listChoiceBackgroundIndicator"
android:scaleType="center" /> android:scaleType="center" />
<View
android:layout_width="1dp"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:background="?android:attr/listDivider" />
<ImageButton <ImageButton
android:id="@+id/button_three" android:id="@+id/button_three"
android:layout_width="wrap_content" android:layout_width="64dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:paddingStart="8dp"
android:paddingEnd="8dp"
android:background="?android:attr/listChoiceBackgroundIndicator" android:background="?android:attr/listChoiceBackgroundIndicator"
android:scaleType="center" /> android:scaleType="center" />
<View
android:layout_width="1dp"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:background="?android:attr/listDivider" />
<ImageButton <ImageButton
android:id="@+id/button_four" android:id="@+id/button_four"
android:layout_width="wrap_content" android:layout_width="56dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:paddingStart="8dp"
android:background="?android:attr/listChoiceBackgroundIndicator" android:background="?android:attr/listChoiceBackgroundIndicator"
android:scaleType="center" /> android:scaleType="center" />
......
...@@ -7,26 +7,26 @@ ...@@ -7,26 +7,26 @@
<!-- Layout for each item in the menu popup --> <!-- Layout for each item in the menu popup -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:background="?android:attr/listChoiceBackgroundIndicator"> android:background="?android:attr/listChoiceBackgroundIndicator">
<TextView <TextView
android:id="@+id/menu_item_text" android:id="@+id/menu_item_text"
android:textAppearance="?android:attr/textAppearanceLargePopupMenu" android:textAppearance="?android:attr/textAppearanceLargePopupMenu"
android:layout_weight="1" android:layout_weight="1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeightSmall" android:layout_height="match_parent"
android:layout_gravity="start" android:layout_gravity="start"
android:gravity="center_vertical" android:gravity="center_vertical"
android:singleLine="true" android:singleLine="true"
android:paddingStart="9dp"
android:paddingEnd="9dp" /> android:paddingEnd="9dp" />
<view <view
class="org.chromium.chrome.browser.appmenu.AppMenuItemIcon" class="org.chromium.chrome.browser.appmenu.AppMenuItemIcon"
android:id="@+id/menu_item_icon" android:id="@+id/menu_item_icon"
android:layout_weight="0" android:layout_weight="0"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeightSmall" android:layout_height="match_parent"
android:layout_gravity="end" android:layout_gravity="end"
android:gravity="center_vertical" android:gravity="center_vertical" />
android:paddingEnd="8dp" />
</LinearLayout> </LinearLayout>
...@@ -6,42 +6,31 @@ ...@@ -6,42 +6,31 @@
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:layout_gravity="top|start" android:layout_gravity="top|start"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageButton <ImageButton
android:id="@+id/button_one" android:id="@+id/button_one"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="?android:attr/listChoiceBackgroundIndicator" android:background="?android:attr/listChoiceBackgroundIndicator"
android:scaleType="center" /> android:scaleType="center" />
<View
android:layout_width="1dp"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:background="?android:attr/listDivider" />
<ImageButton <ImageButton
android:id="@+id/button_two" android:id="@+id/button_two"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="?android:attr/listChoiceBackgroundIndicator" android:background="?android:attr/listChoiceBackgroundIndicator"
android:scaleType="center" /> android:scaleType="center" />
<View
android:layout_width="1dp"
android:layout_height="?android:attr/listPreferredItemHeightSmall"
android:background="?android:attr/listDivider" />
<ImageButton <ImageButton
android:id="@+id/button_three" android:id="@+id/button_three"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="?android:attr/listChoiceBackgroundIndicator" android:background="?android:attr/listChoiceBackgroundIndicator"
android:scaleType="center" /> android:scaleType="center" />
</LinearLayout> </LinearLayout>
\ No newline at end of file
...@@ -7,30 +7,23 @@ ...@@ -7,30 +7,23 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeightSmall"> android:layout_height="?android:attr/listPreferredItemHeightSmall">
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="?android:attr/listPreferredItemHeightSmall" android:layout_height="match_parent"
android:layout_gravity="start" android:layout_gravity="start"
android:layout_weight="1" android:layout_weight="1"
android:background="?android:attr/listChoiceBackgroundIndicator" android:background="?android:attr/listChoiceBackgroundIndicator"
android:gravity="center_vertical" android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="9dp" android:paddingEnd="9dp"
android:paddingStart="9dp"
android:singleLine="true" android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceLargePopupMenu" /> android:textAppearance="?android:attr/textAppearanceLargePopupMenu" />
<View
android:id="@+id/divider"
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="?android:attr/listDivider" />
<ImageButton <ImageButton
android:id="@+id/button" android:id="@+id/button"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="match_parent"
android:background="?android:attr/listChoiceBackgroundIndicator" android:background="?android:attr/listChoiceBackgroundIndicator"
android:padding="10dp" android:padding="10dp"
android:scaleType="fitCenter" /> android:scaleType="fitCenter" />
......
...@@ -16,4 +16,12 @@ ...@@ -16,4 +16,12 @@
<item name="android:fontFamily">sans-serif</item> <item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item> <item name="android:textStyle">bold</item>
</style> </style>
<style name="OverflowMenuTheme" parent="Theme.AppCompat.Light">
<item name="android:popupBackground">@null</item>
<item name="android:listDivider">@null</item>
<item name="android:listPreferredItemHeightSmall">48dp</item>
<item name="android:listPreferredItemPaddingStart">16dp</item>
<item name="android:listPreferredItemPaddingEnd">16dp</item>
<item name="android:textSize">16sp</item>
</style>
</resources> </resources>
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<dimen name="swipe_commit_distance">120dp</dimen> <dimen name="swipe_commit_distance">120dp</dimen>
<!-- Custom Menu dimensions --> <!-- Custom Menu dimensions -->
<dimen name="menu_width">257dp</dimen> <dimen name="menu_width">260dp</dimen>
<dimen name="menu_vertical_offset">0dp</dimen> <dimen name="menu_vertical_offset">0dp</dimen>
<!-- The amount to fade the edges of the menu to indicate more content is available <!-- The amount to fade the edges of the menu to indicate more content is available
via scrolling. --> via scrolling. -->
......
...@@ -65,7 +65,7 @@ public class AppMenu implements OnItemClickListener, OnKeyListener { ...@@ -65,7 +65,7 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
mHandler = handler; mHandler = handler;
mItemDividerHeight = itemDividerHeight; mItemDividerHeight = itemDividerHeight;
assert mItemDividerHeight > 0; assert mItemDividerHeight >= 0;
mAdditionalVerticalOffset = res.getDimensionPixelSize(R.dimen.menu_vertical_offset); mAdditionalVerticalOffset = res.getDimensionPixelSize(R.dimen.menu_vertical_offset);
mVerticalFadeDistance = res.getDimensionPixelSize(R.dimen.menu_vertical_fade_distance); mVerticalFadeDistance = res.getDimensionPixelSize(R.dimen.menu_vertical_fade_distance);
...@@ -99,6 +99,10 @@ public class AppMenu implements OnItemClickListener, OnKeyListener { ...@@ -99,6 +99,10 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
}); });
mPopup.setWidth(context.getResources().getDimensionPixelSize(R.dimen.menu_width)); mPopup.setWidth(context.getResources().getDimensionPixelSize(R.dimen.menu_width));
// Need to explicitly set the background here. Relying on it being set in the style caused
// an incorrectly drawn background.
mPopup.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.menu_bg));
mCurrentScreenRotation = screenRotation; mCurrentScreenRotation = screenRotation;
mIsByHardwareButton = isByHardwareButton; mIsByHardwareButton = isByHardwareButton;
......
...@@ -100,7 +100,7 @@ class AppMenuAdapter extends BaseAdapter { ...@@ -100,7 +100,7 @@ class AppMenuAdapter extends BaseAdapter {
StandardMenuItemViewHolder holder = null; StandardMenuItemViewHolder holder = null;
if (convertView == null) { if (convertView == null) {
holder = new StandardMenuItemViewHolder(); holder = new StandardMenuItemViewHolder();
convertView = mInflater.inflate(R.layout.menu_item, null); convertView = mInflater.inflate(R.layout.menu_item, parent, false);
holder.text = (TextView) convertView.findViewById(R.id.menu_item_text); holder.text = (TextView) convertView.findViewById(R.id.menu_item_text);
holder.image = (AppMenuItemIcon) convertView.findViewById(R.id.menu_item_icon); holder.image = (AppMenuItemIcon) convertView.findViewById(R.id.menu_item_icon);
convertView.setTag(holder); convertView.setTag(holder);
...@@ -132,7 +132,7 @@ class AppMenuAdapter extends BaseAdapter { ...@@ -132,7 +132,7 @@ class AppMenuAdapter extends BaseAdapter {
ThreeButtonMenuItemViewHolder holder = null; ThreeButtonMenuItemViewHolder holder = null;
if (convertView == null) { if (convertView == null) {
holder = new ThreeButtonMenuItemViewHolder(); holder = new ThreeButtonMenuItemViewHolder();
convertView = mInflater.inflate(R.layout.three_button_menu_item, null); convertView = mInflater.inflate(R.layout.three_button_menu_item, parent, false);
holder.buttonOne = (ImageButton) convertView.findViewById(R.id.button_one); holder.buttonOne = (ImageButton) convertView.findViewById(R.id.button_one);
holder.buttonTwo = (ImageButton) convertView.findViewById(R.id.button_two); holder.buttonTwo = (ImageButton) convertView.findViewById(R.id.button_two);
holder.buttonThree = (ImageButton) convertView.findViewById(R.id.button_three); holder.buttonThree = (ImageButton) convertView.findViewById(R.id.button_three);
...@@ -151,7 +151,7 @@ class AppMenuAdapter extends BaseAdapter { ...@@ -151,7 +151,7 @@ class AppMenuAdapter extends BaseAdapter {
FourButtonMenuItemViewHolder holder = null; FourButtonMenuItemViewHolder holder = null;
if (convertView == null) { if (convertView == null) {
holder = new FourButtonMenuItemViewHolder(); holder = new FourButtonMenuItemViewHolder();
convertView = mInflater.inflate(R.layout.four_button_menu_item, null); convertView = mInflater.inflate(R.layout.four_button_menu_item, parent, false);
holder.buttonOne = (ImageButton) convertView.findViewById(R.id.button_one); holder.buttonOne = (ImageButton) convertView.findViewById(R.id.button_one);
holder.buttonTwo = (ImageButton) convertView.findViewById(R.id.button_two); holder.buttonTwo = (ImageButton) convertView.findViewById(R.id.button_two);
holder.buttonThree = (ImageButton) convertView.findViewById(R.id.button_three); holder.buttonThree = (ImageButton) convertView.findViewById(R.id.button_three);
...@@ -172,9 +172,8 @@ class AppMenuAdapter extends BaseAdapter { ...@@ -172,9 +172,8 @@ class AppMenuAdapter extends BaseAdapter {
TitleButtonMenuItemViewHolder holder = null; TitleButtonMenuItemViewHolder holder = null;
if (convertView == null) { if (convertView == null) {
holder = new TitleButtonMenuItemViewHolder(); holder = new TitleButtonMenuItemViewHolder();
convertView = mInflater.inflate(R.layout.title_button_menu_item, null); convertView = mInflater.inflate(R.layout.title_button_menu_item, parent, false);
holder.title = (TextView) convertView.findViewById(R.id.title); holder.title = (TextView) convertView.findViewById(R.id.title);
holder.divider = convertView.findViewById(R.id.divider);
holder.button = (ImageButton) convertView.findViewById(R.id.button); holder.button = (ImageButton) convertView.findViewById(R.id.button);
convertView.setTag(holder); convertView.setTag(holder);
} else { } else {
...@@ -192,11 +191,9 @@ class AppMenuAdapter extends BaseAdapter { ...@@ -192,11 +191,9 @@ class AppMenuAdapter extends BaseAdapter {
}); });
if (item.getSubMenu().getItem(1).getIcon() != null) { if (item.getSubMenu().getItem(1).getIcon() != null) {
holder.button.setVisibility(View.VISIBLE); holder.button.setVisibility(View.VISIBLE);
holder.divider.setVisibility(View.VISIBLE);
setupImageButton(holder.button, item.getSubMenu().getItem(1)); setupImageButton(holder.button, item.getSubMenu().getItem(1));
} else { } else {
holder.button.setVisibility(View.GONE); holder.button.setVisibility(View.GONE);
holder.divider.setVisibility(View.GONE);
} }
convertView.setFocusable(false); convertView.setFocusable(false);
convertView.setEnabled(false); convertView.setEnabled(false);
...@@ -245,7 +242,6 @@ class AppMenuAdapter extends BaseAdapter { ...@@ -245,7 +242,6 @@ class AppMenuAdapter extends BaseAdapter {
static class TitleButtonMenuItemViewHolder { static class TitleButtonMenuItemViewHolder {
public TextView title; public TextView title;
public View divider;
public ImageButton button; public ImageButton button;
} }
} }
\ No newline at end of file
...@@ -76,20 +76,21 @@ public class AppMenuHandler { ...@@ -76,20 +76,21 @@ public class AppMenuHandler {
} }
mDelegate.prepareMenu(mMenu); mDelegate.prepareMenu(mMenu);
ContextThemeWrapper wrapper = new ContextThemeWrapper(mActivity,
mDelegate.getMenuThemeResourceId());
if (mAppMenu == null) { if (mAppMenu == null) {
TypedArray a = mActivity.obtainStyledAttributes(new int[] TypedArray a = wrapper.obtainStyledAttributes(new int[]
{android.R.attr.listPreferredItemHeightSmall, android.R.attr.listDivider}); {android.R.attr.listPreferredItemHeightSmall, android.R.attr.listDivider});
int itemRowHeight = a.getDimensionPixelSize(0, 0); int itemRowHeight = a.getDimensionPixelSize(0, 0);
Drawable itemDivider = a.getDrawable(1); Drawable itemDivider = a.getDrawable(1);
int itemDividerHeight = itemDivider.getIntrinsicHeight(); int itemDividerHeight = itemDivider != null ? itemDivider.getIntrinsicHeight() : 0;
a.recycle(); a.recycle();
mAppMenu = new AppMenu(mMenu, itemRowHeight, itemDividerHeight, this, mAppMenu = new AppMenu(mMenu, itemRowHeight, itemDividerHeight, this,
mActivity.getResources()); mActivity.getResources());
mAppMenuDragHelper = new AppMenuDragHelper(mActivity, mAppMenu, itemRowHeight); mAppMenuDragHelper = new AppMenuDragHelper(mActivity, mAppMenu, itemRowHeight);
} }
ContextThemeWrapper wrapper = new ContextThemeWrapper(mActivity,
mDelegate.getMenuThemeResourceId());
// Get the height and width of the display. // Get the height and width of the display.
Rect appRect = new Rect(); Rect appRect = new Rect();
mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(appRect); mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(appRect);
......
...@@ -391,7 +391,7 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe ...@@ -391,7 +391,7 @@ public class ChromeShellActivity extends Activity implements AppMenuPropertiesDe
@Override @Override
public int getMenuThemeResourceId() { public int getMenuThemeResourceId() {
return android.R.style.Theme_Holo_Light; return R.style.OverflowMenuTheme;
} }
@VisibleForTesting @VisibleForTesting
......
...@@ -649,6 +649,7 @@ ...@@ -649,6 +649,7 @@
'../content/content.gyp:content_java', '../content/content.gyp:content_java',
'../printing/printing.gyp:printing_java', '../printing/printing.gyp:printing_java',
'../sync/sync.gyp:sync_java', '../sync/sync.gyp:sync_java',
'../third_party/android_tools/android_tools.gyp:android_support_v7_appcompat_javalib',
'../third_party/guava/guava.gyp:guava_javalib', '../third_party/guava/guava.gyp:guava_javalib',
'../ui/android/ui_android.gyp:ui_java', '../ui/android/ui_android.gyp:ui_java',
], ],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment