diff options
author | Adam Powell <adamp@google.com> | 2011-01-07 17:27:19 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-01-07 17:27:19 -0800 |
commit | b5e18555d61a3a1ed0715230b8e0084daec9eba8 (patch) | |
tree | ccca1ec69e57ea92865475521302724812bd52be | |
parent | e15ac3b97049b0f2e5d61e40910b0da9f810841a (diff) | |
parent | 5e3f284baa271cb0fbf90e504d19fdd2e385382e (diff) | |
download | frameworks_base-b5e18555d61a3a1ed0715230b8e0084daec9eba8.zip frameworks_base-b5e18555d61a3a1ed0715230b8e0084daec9eba8.tar.gz frameworks_base-b5e18555d61a3a1ed0715230b8e0084daec9eba8.tar.bz2 |
Merge "Fix bug 3200615 - "MenuPopupHelper cannot be used without an anchor"" into honeycomb
3 files changed, 17 insertions, 8 deletions
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java index 2c5baba..9381675 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuView.java +++ b/core/java/com/android/internal/view/menu/ActionMenuView.java @@ -66,9 +66,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo } public void run() { - mOverflowPopup = mPopup; - mPopup.show(); - mPostedOpenRunnable = null; + if (mPopup.tryShow()) { + mOverflowPopup = mPopup; + mPostedOpenRunnable = null; + } } } diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java index a070835..fe41f52 100644 --- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java +++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java @@ -69,6 +69,12 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On } public void show() { + if (!tryShow()) { + throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor"); + } + } + + public boolean tryShow() { mPopup = new ListPopupWindow(mContext, null, com.android.internal.R.attr.popupMenuStyle); mPopup.setOnItemClickListener(this); mPopup.setOnDismissListener(this); @@ -92,13 +98,14 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On mTreeObserver.addOnGlobalLayoutListener(this); mPopup.setAnchorView(anchor); } else { - throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor"); + return false; } mPopup.setContentWidth(Math.min(measureContentWidth(adapter), mPopupMaxWidth)); mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); mPopup.show(); mPopup.getListView().setOnKeyListener(this); + return true; } public void dismiss() { diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index 3b2aeaf..5098a98 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -3007,10 +3007,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { @Override public void run() { - show(); - Callback cb = getCallback(); - if (cb != null) { - cb.onMenuOpened(FEATURE_ACTION_BAR, mSubMenu); + if (tryShow()) { + Callback cb = getCallback(); + if (cb != null) { + cb.onMenuOpened(FEATURE_ACTION_BAR, mSubMenu); + } } } } |