| Index: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
|
| index b3d1cfe44567eaf3fb9303e27e480dbbf149d943..3f3ac689cda0846324cf548e23c7011a2667e960 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
|
| @@ -9,6 +9,7 @@ import android.animation.AnimatorSet;
|
| import android.content.Context;
|
| import android.content.res.Resources;
|
| import android.graphics.Rect;
|
| +import android.graphics.drawable.Drawable;
|
| import android.view.KeyEvent;
|
| import android.view.LayoutInflater;
|
| import android.view.Menu;
|
| @@ -106,6 +107,11 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
|
| }
|
| });
|
|
|
| + // Some OEMs don't actually let us change the background... but they still return the
|
| + // padding of the new background, which breaks the menu height. If we still have a
|
| + // drawable here even though our style says @null we should use this padding instead...
|
| + Drawable originalBgDrawable = mPopup.getBackground();
|
| +
|
| // Need to explicitly set the background here. Relying on it being set in the style caused
|
| // an incorrectly drawn background.
|
| if (isByHardwareButton) {
|
| @@ -140,6 +146,14 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
|
| }
|
| }
|
|
|
| + Rect sizingPadding = new Rect(bgPadding);
|
| + if (isByHardwareButton && originalBgDrawable != null) {
|
| + Rect originalPadding = new Rect();
|
| + originalBgDrawable.getPadding(originalPadding);
|
| + sizingPadding.top = originalPadding.top;
|
| + sizingPadding.bottom = originalPadding.bottom;
|
| + }
|
| +
|
| boolean showMenuButton = !mIsByHardwareButton;
|
| if (!SHOW_SW_MENU_BUTTON) showMenuButton = false;
|
| // A List adapter for visible items in the Menu. The first row is added as a header to the
|
| @@ -148,8 +162,8 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
|
| this, menuItems, LayoutInflater.from(context), showMenuButton);
|
| mPopup.setAdapter(mAdapter);
|
|
|
| - setMenuHeight(menuItems.size(), visibleDisplayFrame, screenHeight);
|
| - setPopupOffset(mPopup, mCurrentScreenRotation, visibleDisplayFrame);
|
| + setMenuHeight(menuItems.size(), visibleDisplayFrame, screenHeight, sizingPadding);
|
| + setPopupOffset(mPopup, mCurrentScreenRotation, visibleDisplayFrame, sizingPadding);
|
| mPopup.setOnItemClickListener(this);
|
| mPopup.show();
|
| mPopup.getListView().setItemsCanFocus(true);
|
| @@ -175,9 +189,8 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
|
| }
|
| }
|
|
|
| - private void setPopupOffset(ListPopupWindow popup, int screenRotation, Rect appRect) {
|
| - Rect paddingRect = new Rect();
|
| - popup.getBackground().getPadding(paddingRect);
|
| + private void setPopupOffset(
|
| + ListPopupWindow popup, int screenRotation, Rect appRect, Rect padding) {
|
| int[] anchorLocation = new int[2];
|
| popup.getAnchorView().getLocationInWindow(anchorLocation);
|
| int anchorHeight = popup.getAnchorView().getHeight();
|
| @@ -201,9 +214,9 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
|
| break;
|
| }
|
| popup.setHorizontalOffset(horizontalOffset);
|
| - // The menu is displayed above the anchored view, so shift the menu up by the top
|
| + // The menu is displayed above the anchored view, so shift the menu up by the bottom
|
| // padding of the background.
|
| - popup.setVerticalOffset(-paddingRect.bottom);
|
| + popup.setVerticalOffset(-padding.bottom);
|
| } else {
|
| // The menu is displayed over and below the anchored view, so shift the menu up by the
|
| // height of the anchor view.
|
| @@ -274,7 +287,8 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
|
| return mPopup;
|
| }
|
|
|
| - private void setMenuHeight(int numMenuItems, Rect appDimensions, int screenHeight) {
|
| + private void setMenuHeight(
|
| + int numMenuItems, Rect appDimensions, int screenHeight, Rect padding) {
|
| assert mPopup.getAnchorView() != null;
|
| View anchorView = mPopup.getAnchorView();
|
| int[] anchorViewLocation = new int[2];
|
| @@ -289,9 +303,8 @@ public class AppMenu implements OnItemClickListener, OnKeyListener {
|
| int availableScreenSpace = Math.max(anchorViewLocation[1],
|
| appDimensions.height() - anchorViewLocation[1] - anchorViewImpactHeight);
|
|
|
| - Rect padding = new Rect();
|
| - mPopup.getBackground().getPadding(padding);
|
| - availableScreenSpace -= mIsByHardwareButton ? padding.top : padding.bottom;
|
| + availableScreenSpace -= padding.bottom;
|
| + if (mIsByHardwareButton) availableScreenSpace -= padding.top;
|
|
|
| int numCanFit = availableScreenSpace / (mItemRowHeight + mItemDividerHeight);
|
|
|
|
|