Merge "Fix ActionProviders that have submenus" into jb-dev
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index 9fbca82..458ea2f 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -873,15 +873,20 @@
boolean invoked = itemImpl.invoke();
+ final ActionProvider provider = item.getActionProvider();
+ final boolean providerHasSubMenu = provider != null && provider.hasSubMenu();
if (itemImpl.hasCollapsibleActionView()) {
invoked |= itemImpl.expandActionView();
if (invoked) close(true);
- } else if (item.hasSubMenu()) {
+ } else if (itemImpl.hasSubMenu() || providerHasSubMenu) {
close(false);
- final SubMenuBuilder subMenu = (SubMenuBuilder) item.getSubMenu();
- final ActionProvider provider = item.getActionProvider();
- if (provider != null && provider.hasSubMenu()) {
+ if (!itemImpl.hasSubMenu()) {
+ itemImpl.setSubMenu(new SubMenuBuilder(getContext(), this, itemImpl));
+ }
+
+ final SubMenuBuilder subMenu = (SubMenuBuilder) itemImpl.getSubMenu();
+ if (providerHasSubMenu) {
provider.onPrepareSubMenu(subMenu);
}
invoked |= dispatchSubMenuSelected(subMenu);