diff --git a/core/java/android/widget/ActionMenuView.java b/core/java/android/widget/ActionMenuView.java index 9b65232cf8770..6ca4a9e10db2f 100644 --- a/core/java/android/widget/ActionMenuView.java +++ b/core/java/android/widget/ActionMenuView.java @@ -55,6 +55,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo private boolean mReserveOverflow; private ActionMenuPresenter mPresenter; private MenuPresenter.Callback mActionMenuPresenterCallback; + private MenuBuilder.Callback mMenuBuilderCallback; private boolean mFormatItems; private int mFormatItemsWidth; private int mMinCellSize; @@ -623,8 +624,9 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo * Must be called before the first call to getMenu() * @hide */ - public void setActionMenuPresenterCallback(MenuPresenter.Callback cb) { - mActionMenuPresenterCallback = cb; + public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) { + mActionMenuPresenterCallback = pcb; + mMenuBuilderCallback = mcb; } /** @@ -730,6 +732,9 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo @Override public void onMenuModeChange(MenuBuilder menu) { + if (mMenuBuilderCallback != null) { + mMenuBuilderCallback.onMenuModeChange(menu); + } } } diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java index 80309f7eb4e33..be28199b3636a 100644 --- a/core/java/android/widget/Toolbar.java +++ b/core/java/android/widget/Toolbar.java @@ -155,6 +155,7 @@ public class Toolbar extends ViewGroup { private ActionMenuPresenter mOuterActionMenuPresenter; private ExpandedActionViewMenuPresenter mExpandedMenuPresenter; private MenuPresenter.Callback mActionMenuPresenterCallback; + private MenuBuilder.Callback mMenuBuilderCallback; private boolean mCollapsible; @@ -827,7 +828,7 @@ public class Toolbar extends ViewGroup { mMenuView = new ActionMenuView(getContext()); mMenuView.setPopupTheme(mPopupTheme); mMenuView.setOnMenuItemClickListener(mMenuViewItemClickListener); - mMenuView.setActionMenuPresenterCallback(mActionMenuPresenterCallback); + mMenuView.setMenuCallbacks(mActionMenuPresenterCallback, mMenuBuilderCallback); final LayoutParams lp = generateDefaultLayoutParams(); lp.gravity = Gravity.END | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK); mMenuView.setLayoutParams(lp); @@ -1684,8 +1685,9 @@ public class Toolbar extends ViewGroup { * Must be called before the menu is accessed * @hide */ - public void setActionMenuPresenterCallback(MenuPresenter.Callback cb) { - mActionMenuPresenterCallback = cb; + public void setMenuCallbacks(MenuPresenter.Callback pcb, MenuBuilder.Callback mcb) { + mActionMenuPresenterCallback = pcb; + mMenuBuilderCallback = mcb; } /** diff --git a/core/java/com/android/internal/app/ToolbarActionBar.java b/core/java/com/android/internal/app/ToolbarActionBar.java index 3b024e92bf3e6..99c87eabf5a03 100644 --- a/core/java/com/android/internal/app/ToolbarActionBar.java +++ b/core/java/com/android/internal/app/ToolbarActionBar.java @@ -456,7 +456,7 @@ public class ToolbarActionBar extends ActionBar { void populateOptionsMenu() { if (!mMenuCallbackSet) { - mToolbar.setActionMenuPresenterCallback(new ActionMenuPresenterCallback()); + mToolbar.setMenuCallbacks(new ActionMenuPresenterCallback(), new MenuBuilderCallback()); mMenuCallbackSet = true; } final Menu menu = mToolbar.getMenu(); @@ -547,4 +547,24 @@ public class ToolbarActionBar extends ActionBar { mClosingActionMenu = false; } } + + private final class MenuBuilderCallback implements MenuBuilder.Callback { + + @Override + public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { + return false; + } + + @Override + public void onMenuModeChange(MenuBuilder menu) { + if (mWindowCallback != null) { + if (mToolbar.isOverflowMenuShowing()) { + mWindowCallback.onPanelClosed(Window.FEATURE_ACTION_BAR, menu); + } else if (mWindowCallback.onPreparePanel(Window.FEATURE_OPTIONS_PANEL, + null, menu)) { + mWindowCallback.onMenuOpened(Window.FEATURE_ACTION_BAR, menu); + } + } + } + } }