From f77f480800a84ceb377e47cc200baf2bae4f5d9a Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Mon, 14 May 2012 16:44:43 -0700 Subject: [PATCH] Fix ActionProviders that have submenus Automatically create a submenu for items with ActionProviders that provide a submenu when the item was not initially configured to have one. Bug 6493376 Change-Id: I27218e2ab205e87534f235eb04042b185d99d143 --- .../com/android/internal/view/menu/MenuBuilder.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java index 9fbca824f2020..458ea2f8d785f 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 @@ public class MenuBuilder implements Menu { 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);