From d7b2599285cf0affd6013a58497ff5fabdf41125 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Tue, 19 Apr 2016 15:21:54 -0400 Subject: [PATCH] Don't overwrite vertical and horizontal offsets unless explicit Bug: 28194522 Change-Id: I14c8b719a0fca03da6d9834d07948a5513241b26 --- .../view/menu/CascadingMenuPopup.java | 36 +++++++++++-------- .../internal/view/menu/StandardMenuPopup.java | 12 +++---- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/core/java/com/android/internal/view/menu/CascadingMenuPopup.java b/core/java/com/android/internal/view/menu/CascadingMenuPopup.java index 5cb307fec6974..72ed9d0cc60b0 100644 --- a/core/java/com/android/internal/view/menu/CascadingMenuPopup.java +++ b/core/java/com/android/internal/view/menu/CascadingMenuPopup.java @@ -181,8 +181,10 @@ final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, OnKey private View mAnchorView; private View mShownAnchorView; private int mLastPosition; - private int mInitXOffset; - private int mInitYOffset; + private boolean mHasXOffset; + private boolean mHasYOffset; + private int mXOffset; + private int mYOffset; private boolean mForceShowIcon; private boolean mShowTitle; private Callback mPresenterCallback; @@ -379,9 +381,6 @@ final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, OnKey parentView = null; } - final int x; - final int y; - final Rect epicenterBounds; if (parentView != null) { // This menu is a cascading submenu anchored to a parent view. popupWindow.setTouchModal(false); @@ -401,6 +400,7 @@ final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, OnKey // By now, mDropDownGravity is the resolved absolute gravity, so // this should work in both LTR and RTL. + final int x; if ((mDropDownGravity & Gravity.RIGHT) == Gravity.RIGHT) { if (showOnRight) { x = parentOffsetLeft + menuWidth; @@ -415,17 +415,21 @@ final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, OnKey } } - y = parentOffsetTop; - epicenterBounds = null; + popupWindow.setHorizontalOffset(x); + + final int y = parentOffsetTop; + popupWindow.setVerticalOffset(y); } else { - x = mInitXOffset; - y = mInitYOffset; - epicenterBounds = getEpicenterBounds(); + if (mHasXOffset) { + popupWindow.setHorizontalOffset(mXOffset); + } + if (mHasYOffset) { + popupWindow.setVerticalOffset(mYOffset); + } + final Rect epicenterBounds = getEpicenterBounds(); + popupWindow.setEpicenterBounds(epicenterBounds); } - popupWindow.setHorizontalOffset(x); - popupWindow.setVerticalOffset(y); - popupWindow.setEpicenterBounds(epicenterBounds); final CascadingMenuInfo menuInfo = new CascadingMenuInfo(popupWindow, menu, mLastPosition); mShowingMenus.add(menuInfo); @@ -712,12 +716,14 @@ final class CascadingMenuPopup extends MenuPopup implements MenuPresenter, OnKey @Override public void setHorizontalOffset(int x) { - mInitXOffset = x; + mHasXOffset = true; + mXOffset = x; } @Override public void setVerticalOffset(int y) { - mInitYOffset = y; + mHasYOffset = true; + mYOffset = y; } @Override diff --git a/core/java/com/android/internal/view/menu/StandardMenuPopup.java b/core/java/com/android/internal/view/menu/StandardMenuPopup.java index 339c2bf798926..169caa585b0e8 100644 --- a/core/java/com/android/internal/view/menu/StandardMenuPopup.java +++ b/core/java/com/android/internal/view/menu/StandardMenuPopup.java @@ -108,8 +108,6 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On private int mDropDownGravity = Gravity.NO_GRAVITY; - private int mXOffset; - private int mYOffset; private boolean mShowTitle; public StandardMenuPopup(Context context, MenuBuilder menu, View anchorView, int popupStyleAttr, @@ -177,8 +175,6 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On mPopup.setContentWidth(mContentWidth); mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); - mPopup.setHorizontalOffset(mXOffset); - mPopup.setVerticalOffset(mYOffset); mPopup.setEpicenterBounds(getEpicenterBounds()); mPopup.show(); @@ -276,7 +272,9 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On mMenu.close(false /* closeAllMenus */); // Show the new sub-menu popup at the same location as this popup. - if (subPopup.tryShow(mXOffset, mYOffset)) { + final int horizontalOffset = mPopup.getHorizontalOffset(); + final int verticalOffset = mPopup.getVerticalOffset(); + if (subPopup.tryShow(horizontalOffset, verticalOffset)) { if (mPresenterCallback != null) { mPresenterCallback.onOpenSubMenu(subMenu); } @@ -338,12 +336,12 @@ final class StandardMenuPopup extends MenuPopup implements OnDismissListener, On @Override public void setHorizontalOffset(int x) { - mXOffset = x; + mPopup.setHorizontalOffset(x); } @Override public void setVerticalOffset(int y) { - mYOffset = y; + mPopup.setVerticalOffset(y); } @Override