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

Commit e50a26f3 authored by Adam Powell's avatar Adam Powell Committed by Android (Google) Code Review
Browse files

Merge "Dispatch more menu events to window callbacks from ToolbarActionBar" into lmp-dev

parents 1e7b1818 04c0d460
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.view.accessibility.AccessibilityEvent;
import com.android.internal.view.menu.ActionMenuItemView;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuItemImpl;
import com.android.internal.view.menu.MenuPresenter;
import com.android.internal.view.menu.MenuView;

/**
@@ -53,6 +54,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo

    private boolean mReserveOverflow;
    private ActionMenuPresenter mPresenter;
    private MenuPresenter.Callback mActionMenuPresenterCallback;
    private boolean mFormatItems;
    private int mFormatItemsWidth;
    private int mMinCellSize;
@@ -608,7 +610,8 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
            mMenu = new MenuBuilder(context);
            mMenu.setCallback(new MenuBuilderCallback());
            mPresenter = new ActionMenuPresenter(context);
            mPresenter.setCallback(new ActionMenuPresenterCallback());
            mPresenter.setCallback(mActionMenuPresenterCallback != null
                    ? mActionMenuPresenterCallback : new ActionMenuPresenterCallback());
            mMenu.addMenuPresenter(mPresenter, mPopupContext);
            mPresenter.setMenuView(this);
        }
@@ -616,6 +619,14 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
        return mMenu;
    }

    /**
     * Must be called before the first call to getMenu()
     * @hide
     */
    public void setActionMenuPresenterCallback(MenuPresenter.Callback cb) {
        mActionMenuPresenterCallback = cb;
    }

    /**
     * Returns the current menu or null if one has not yet been configured.
     * @hide Internal use only for action bar integration
+11 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.view.View;
import android.view.ViewGroup;

import com.android.internal.R;
import com.android.internal.app.ToolbarActionBar;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuItemImpl;
import com.android.internal.view.menu.MenuPresenter;
@@ -153,6 +154,7 @@ public class Toolbar extends ViewGroup {
    private ToolbarWidgetWrapper mWrapper;
    private ActionMenuPresenter mOuterActionMenuPresenter;
    private ExpandedActionViewMenuPresenter mExpandedMenuPresenter;
    private MenuPresenter.Callback mActionMenuPresenterCallback;

    private boolean mCollapsible;

@@ -825,6 +827,7 @@ public class Toolbar extends ViewGroup {
            mMenuView = new ActionMenuView(getContext());
            mMenuView.setPopupTheme(mPopupTheme);
            mMenuView.setOnMenuItemClickListener(mMenuViewItemClickListener);
            mMenuView.setActionMenuPresenterCallback(mActionMenuPresenterCallback);
            final LayoutParams lp = generateDefaultLayoutParams();
            lp.gravity = Gravity.END | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK);
            mMenuView.setLayoutParams(lp);
@@ -1677,6 +1680,14 @@ public class Toolbar extends ViewGroup {
        requestLayout();
    }

    /**
     * Must be called before the menu is accessed
     * @hide
     */
    public void setActionMenuPresenterCallback(MenuPresenter.Callback cb) {
        mActionMenuPresenterCallback = cb;
    }

    /**
     * Interface responsible for receiving menu item click events if the items themselves
     * do not have individual item click listeners.
+33 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.widget.SpinnerAdapter;
import android.widget.Toolbar;
import com.android.internal.R;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuPresenter;
import com.android.internal.widget.DecorToolbar;
import com.android.internal.widget.ToolbarWidgetWrapper;

@@ -45,6 +46,7 @@ public class ToolbarActionBar extends ActionBar {
    private DecorToolbar mDecorToolbar;
    private boolean mToolbarMenuPrepared;
    private Window.Callback mWindowCallback;
    private boolean mMenuCallbackSet;

    private CharSequence mHomeDescription;

@@ -453,6 +455,10 @@ public class ToolbarActionBar extends ActionBar {
    }

    void populateOptionsMenu() {
        if (!mMenuCallbackSet) {
            mToolbar.setActionMenuPresenterCallback(new ActionMenuPresenterCallback());
            mMenuCallbackSet = true;
        }
        final Menu menu = mToolbar.getMenu();
        final MenuBuilder mb = menu instanceof MenuBuilder ? (MenuBuilder) menu : null;
        if (mb != null) {
@@ -514,4 +520,31 @@ public class ToolbarActionBar extends ActionBar {
            return result;
        }
    }

    private final class ActionMenuPresenterCallback implements MenuPresenter.Callback {
        private boolean mClosingActionMenu;

        @Override
        public boolean onOpenSubMenu(MenuBuilder subMenu) {
            if (mWindowCallback != null) {
                mWindowCallback.onMenuOpened(Window.FEATURE_ACTION_BAR, subMenu);
                return true;
            }
            return false;
        }

        @Override
        public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
            if (mClosingActionMenu) {
                return;
            }

            mClosingActionMenu = true;
            mToolbar.dismissPopupMenus();
            if (mWindowCallback != null) {
                mWindowCallback.onPanelClosed(Window.FEATURE_ACTION_BAR, menu);
            }
            mClosingActionMenu = false;
        }
    }
}