Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4612504 authored by Adam Powell's avatar Adam Powell
Browse files

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
parent 46edee09
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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);
            }
        }
    }

+5 −3
Original line number Diff line number Diff line
@@ -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;
    }

    /**
+21 −1
Original line number Diff line number Diff line
@@ -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);
                }
            }
        }
    }
}