Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2719)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java

Issue 419673002: Update Android menu to overlap anchor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
index 985669d20428c4e7b5ffdd73ff49713159128e25..189c478c2658e1a229b5381c1bb8fb8bb1dd3ab0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuAdapter.java
@@ -17,10 +17,13 @@ import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
import android.widget.ListView;
import android.widget.TextView;
+import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.R;
+import org.chromium.ui.base.LocalizationUtils;
import org.chromium.ui.interpolators.BakedBezierInterpolator;
import java.util.List;
@@ -29,7 +32,7 @@ import java.util.List;
* ListAdapter to customize the view of items in the list.
*/
class AppMenuAdapter extends BaseAdapter {
- private static final int VIEW_TYPE_COUNT = 4;
+ private static final int VIEW_TYPE_COUNT = 5;
/**
* Regular Android menu item that contains a title and an icon if icon is specified.
@@ -48,6 +51,11 @@ class AppMenuAdapter extends BaseAdapter {
* Menu item that has four buttons. Every one of these buttons is displayed as an icon.
*/
private static final int FOUR_BUTTON_MENU_ITEM = 3;
+ /**
+ * Menu item that has two buttons, the first one is a title and the second is a menu icon.
+ * This is similar to {@link #TITLE_BUTTON_MENU_ITEM} but has some slight layout differences.
+ */
+ private static final int MENU_BUTTON_MENU_ITEM = 4;
/** MenuItem Animation Constants */
private static final int ENTER_ITEM_DURATION_MS = 350;
@@ -56,6 +64,10 @@ class AppMenuAdapter extends BaseAdapter {
private static final float ENTER_STANDARD_ITEM_OFFSET_Y_DP = -10.f;
private static final float ENTER_STANDARD_ITEM_OFFSET_X_DP = 10.f;
+ /** Menu Button Layout Constants */
+ private static final float MENU_BUTTON_WIDTH_DP = 59.f;
+ private static final float MENU_BUTTON_START_PADDING_DP = 19.f;
+
private final AppMenu mAppMenu;
private final LayoutInflater mInflater;
private final List<MenuItem> mMenuItems;
@@ -86,15 +98,16 @@ class AppMenuAdapter extends BaseAdapter {
@Override
public int getItemViewType(int position) {
MenuItem item = getItem(position);
+ boolean hasMenuButton = mShowMenuButton && position == 0;
int viewCount = item.hasSubMenu() ? item.getSubMenu().size() : 1;
- if (mShowMenuButton && position == 0) viewCount++;
+ if (hasMenuButton) viewCount++;
if (viewCount == 4) {
return FOUR_BUTTON_MENU_ITEM;
} else if (viewCount == 3) {
return THREE_BUTTON_MENU_ITEM;
} else if (viewCount == 2) {
- return TITLE_BUTTON_MENU_ITEM;
+ return hasMenuButton ? MENU_BUTTON_MENU_ITEM : TITLE_BUTTON_MENU_ITEM;
}
return STANDARD_MENU_ITEM;
}
@@ -204,16 +217,21 @@ class AppMenuAdapter extends BaseAdapter {
convertView.setEnabled(false);
break;
}
- case TITLE_BUTTON_MENU_ITEM: {
+ case TITLE_BUTTON_MENU_ITEM:
+ // Fall through.
+ case MENU_BUTTON_MENU_ITEM: {
TitleButtonMenuItemViewHolder holder = null;
if (convertView == null) {
holder = new TitleButtonMenuItemViewHolder();
convertView = mInflater.inflate(R.layout.title_button_menu_item, parent, false);
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.button = (ImageButton) convertView.findViewById(R.id.button);
+
+ View animatedView = hasMenuButton ? holder.title : convertView;
+
convertView.setTag(holder);
convertView.setTag(R.id.menu_item_enter_anim_id,
- buildStandardItemEnterAnimator(convertView, position));
+ buildStandardItemEnterAnimator(animatedView, position));
} else {
holder = (TitleButtonMenuItemViewHolder) convertView.getTag();
}
@@ -275,6 +293,12 @@ class AppMenuAdapter extends BaseAdapter {
mAppMenu.dismiss();
}
});
+
+ // Set the button layout to make it properly line up with any underlying menu button
+ ApiCompatibilityUtils.setPaddingRelative(
+ button, (int) (MENU_BUTTON_START_PADDING_DP * mDpToPx), 0, 0, 0);
+ button.getLayoutParams().width = (int) (MENU_BUTTON_WIDTH_DP * mDpToPx);
+ button.setScaleType(ScaleType.CENTER);
}
/**
@@ -315,7 +339,8 @@ class AppMenuAdapter extends BaseAdapter {
* @return The {@link Animator}.
*/
private Animator buildIconItemEnterAnimator(final ImageView[] views, boolean skipLastItem) {
- final float offsetXPx = ENTER_STANDARD_ITEM_OFFSET_X_DP * mDpToPx;
+ final boolean rtl = LocalizationUtils.isLayoutRtl();
+ final float offsetXPx = ENTER_STANDARD_ITEM_OFFSET_X_DP * mDpToPx * (rtl ? -1.f : 1.f);
final int maxViewsToAnimate = views.length - (skipLastItem ? 1 : 0);
AnimatorSet animation = new AnimatorSet();
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698