summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2013-12-04 03:18:34 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-12-04 03:18:34 +0000
commitc3c4d36df01631883a79163da841ca222497c9d3 (patch)
treebeef745f018ced3802e8a09c53a851c718f144d5
parent78c66c747ba0cf75406885e53f95ce63cae15e77 (diff)
parentc0cc68053e5013c207be6f64ffd2ad9e8c467def (diff)
downloadframeworks_base-c3c4d36df01631883a79163da841ca222497c9d3.zip
frameworks_base-c3c4d36df01631883a79163da841ca222497c9d3.tar.gz
frameworks_base-c3c4d36df01631883a79163da841ca222497c9d3.tar.bz2
Merge "Fix a bug in submenu presenter priority handling"
-rw-r--r--core/java/com/android/internal/view/menu/ListMenuPresenter.java2
-rw-r--r--core/java/com/android/internal/view/menu/MenuBuilder.java14
2 files changed, 13 insertions, 3 deletions
diff --git a/core/java/com/android/internal/view/menu/ListMenuPresenter.java b/core/java/com/android/internal/view/menu/ListMenuPresenter.java
index c6ed636..c476354 100644
--- a/core/java/com/android/internal/view/menu/ListMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ListMenuPresenter.java
@@ -162,7 +162,7 @@ public class ListMenuPresenter implements MenuPresenter, AdapterView.OnItemClick
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- mMenu.performItemAction(mAdapter.getItem(position), 0);
+ mMenu.performItemAction(mAdapter.getItem(position), this, 0);
}
@Override
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index aff697a..195a00d 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -247,11 +247,17 @@ public class MenuBuilder implements Menu {
startDispatchingItemsChanged();
}
- private boolean dispatchSubMenuSelected(SubMenuBuilder subMenu) {
+ private boolean dispatchSubMenuSelected(SubMenuBuilder subMenu,
+ MenuPresenter preferredPresenter) {
if (mPresenters.isEmpty()) return false;
boolean result = false;
+ // Try the preferred presenter first.
+ if (preferredPresenter != null) {
+ result = preferredPresenter.onSubMenuSelected(subMenu);
+ }
+
for (WeakReference<MenuPresenter> ref : mPresenters) {
final MenuPresenter presenter = ref.get();
if (presenter == null) {
@@ -865,6 +871,10 @@ public class MenuBuilder implements Menu {
}
public boolean performItemAction(MenuItem item, int flags) {
+ return performItemAction(item, null, flags);
+ }
+
+ public boolean performItemAction(MenuItem item, MenuPresenter preferredPresenter, int flags) {
MenuItemImpl itemImpl = (MenuItemImpl) item;
if (itemImpl == null || !itemImpl.isEnabled()) {
@@ -889,7 +899,7 @@ public class MenuBuilder implements Menu {
if (providerHasSubMenu) {
provider.onPrepareSubMenu(subMenu);
}
- invoked |= dispatchSubMenuSelected(subMenu);
+ invoked |= dispatchSubMenuSelected(subMenu, preferredPresenter);
if (!invoked) close(true);
} else {
if ((flags & FLAG_PERFORM_NO_CLOSE) == 0) {