Menu callbacks for ToolbarActionBars, part 2
Pass through the menu mode change events and make sure Activities get
prepare/open/close events properly.
Bug 17326424
Change-Id: I0ac2f56e4d0054ef01720b2ff1c41ded053750c7
diff --git a/core/java/android/widget/ActionMenuView.java b/core/java/android/widget/ActionMenuView.java
index 9b65232..6ca4a9e 100644
--- a/core/java/android/widget/ActionMenuView.java
+++ b/core/java/android/widget/ActionMenuView.java
@@ -55,6 +55,7 @@
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 @@
* 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 @@
@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 80309f7..be28199 100644
--- a/core/java/android/widget/Toolbar.java
+++ b/core/java/android/widget/Toolbar.java
@@ -155,6 +155,7 @@
private ActionMenuPresenter mOuterActionMenuPresenter;
private ExpandedActionViewMenuPresenter mExpandedMenuPresenter;
private MenuPresenter.Callback mActionMenuPresenterCallback;
+ private MenuBuilder.Callback mMenuBuilderCallback;
private boolean mCollapsible;
@@ -827,7 +828,7 @@
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 @@
* 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 3b024e9..99c87ea 100644
--- a/core/java/com/android/internal/app/ToolbarActionBar.java
+++ b/core/java/com/android/internal/app/ToolbarActionBar.java
@@ -456,7 +456,7 @@
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 @@
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);
+ }
+ }
+ }
+ }
}