Merge "Don't move non-modal popups in response to global layout"
diff --git a/core/java/com/android/internal/view/menu/CascadingMenuPopup.java b/core/java/com/android/internal/view/menu/CascadingMenuPopup.java
index a502fcc..29a9c8e 100644
--- a/core/java/com/android/internal/view/menu/CascadingMenuPopup.java
+++ b/core/java/com/android/internal/view/menu/CascadingMenuPopup.java
@@ -80,11 +80,15 @@
private final OnGlobalLayoutListener mGlobalLayoutListener = new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
- if (isShowing()) {
+ // Only move the popup if it's showing and non-modal. We don't want
+ // to be moving around the only interactive window, since there's a
+ // good chance the user is interacting with it.
+ if (isShowing() && mShowingMenus.size() > 0
+ && !mShowingMenus.get(0).window.isModal()) {
final View anchor = mShownAnchorView;
if (anchor == null || !anchor.isShown()) {
dismiss();
- } else if (isShowing()) {
+ } else {
// Recompute window sizes and positions.
for (CascadingMenuInfo info : mShowingMenus) {
info.window.show();
diff --git a/core/java/com/android/internal/view/menu/StandardMenuPopup.java b/core/java/com/android/internal/view/menu/StandardMenuPopup.java
index 2d4baa2..2cb224e 100644
--- a/core/java/com/android/internal/view/menu/StandardMenuPopup.java
+++ b/core/java/com/android/internal/view/menu/StandardMenuPopup.java
@@ -59,11 +59,14 @@
private final OnGlobalLayoutListener mGlobalLayoutListener = new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
- if (isShowing()) {
+ // Only move the popup if it's showing and non-modal. We don't want
+ // to be moving around the only interactive window, since there's a
+ // good chance the user is interacting with it.
+ if (isShowing() && !mPopup.isModal()) {
final View anchor = mShownAnchorView;
if (anchor == null || !anchor.isShown()) {
dismiss();
- } else if (isShowing()) {
+ } else {
// Recompute window size and position
mPopup.show();
}