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

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

Fix bug 2911311 and bug 2911700

Integrate the action bar overflow menu better with the options menu lifecycle.

Change-Id: I1e3fdba04b01718c3ee3367f92e5dabe7bc84b5c
parent 949dbf76
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -531,6 +531,8 @@ public class ActionBarImpl extends ActionBar {
        }
        }


        public void onMenuModeChange(MenuBuilder menu) {
        public void onMenuModeChange(MenuBuilder menu) {
            invalidate();
            mUpperContextView.showOverflowMenu();
        }
        }
    }
    }


+2 −0
Original line number Original line Diff line number Diff line
@@ -135,5 +135,7 @@ public class StandaloneActionMode extends ActionMode implements MenuBuilder.Call
    }
    }


    public void onMenuModeChange(MenuBuilder menu) {
    public void onMenuModeChange(MenuBuilder menu) {
        invalidate();
        mContextView.showOverflowMenu();
    }
    }
}
}
+19 −4
Original line number Original line Diff line number Diff line
@@ -148,14 +148,28 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo


    public boolean showOverflowMenu() {
    public boolean showOverflowMenu() {
        if (mOverflowButton != null) {
        if (mOverflowButton != null) {
            MenuPopupHelper popup = new MenuPopupHelper(getContext(), mMenu, mOverflowButton, true);
            final MenuPopupHelper popup =
                    new MenuPopupHelper(getContext(), mMenu, mOverflowButton, true);
            // Post this for later; we might still need a layout for the anchor to be right.
            post(new Runnable() {
                public void run() {
                    popup.show();
                    popup.show();
                }
            });
            mOverflowPopup = new WeakReference<MenuPopupHelper>(popup);
            mOverflowPopup = new WeakReference<MenuPopupHelper>(popup);
            return true;
            return true;
        }
        }
        return false;
        return false;
    }
    }


    public boolean isOverflowMenuShowing() {
        MenuPopupHelper popup = mOverflowPopup != null ? mOverflowPopup.get() : null;
        if (popup != null) {
            return popup.isShowing();
        }
        return false;
    }

    public boolean hideOverflowMenu() {
    public boolean hideOverflowMenu() {
        MenuPopupHelper popup = mOverflowPopup != null ? mOverflowPopup.get() : null;
        MenuPopupHelper popup = mOverflowPopup != null ? mOverflowPopup.get() : null;
        if (popup != null) {
        if (popup != null) {
@@ -177,7 +191,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
            final Resources res = context.getResources();
            final Resources res = context.getResources();
            setClickable(true);
            setClickable(true);
            setFocusable(true);
            setFocusable(true);
            // TODO setTitle() to a localized string for accessibility
            setContentDescription(res.getString(com.android.internal.R.string.more_item_label));
            setImageDrawable(res.getDrawable(com.android.internal.R.drawable.ic_menu_more));
            setImageDrawable(res.getDrawable(com.android.internal.R.drawable.ic_menu_more));
            setVisibility(VISIBLE);
            setVisibility(VISIBLE);
            setEnabled(true);
            setEnabled(true);
@@ -189,7 +203,8 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
                return true;
                return true;
            }
            }


            showOverflowMenu();
            // Change to overflow mode
            mMenu.getCallback().onMenuModeChange(mMenu);
            return true;
            return true;
        }
        }
    }
    }
+21 −0
Original line number Original line Diff line number Diff line
@@ -163,6 +163,27 @@ public class ActionBarContextView extends ViewGroup {
        mMenuView = null;
        mMenuView = null;
    }
    }


    public boolean showOverflowMenu() {
        if (mMenuView != null) {
            return mMenuView.showOverflowMenu();
        }
        return false;
    }

    public boolean hideOverflowMenu() {
        if (mMenuView != null) {
            return mMenuView.hideOverflowMenu();
        }
        return false;
    }

    public boolean isOverflowMenuShowing() {
        if (mMenuView != null) {
            return mMenuView.isOverflowMenuShowing();
        }
        return false;
    }

    @Override
    @Override
    protected LayoutParams generateDefaultLayoutParams() {
    protected LayoutParams generateDefaultLayoutParams() {
        // Used by custom views if they don't supply layout params. Everything else
        // Used by custom views if they don't supply layout params. Everything else
+7 −0
Original line number Original line Diff line number Diff line
@@ -219,6 +219,13 @@ public class ActionBarView extends ViewGroup {
        return false;
        return false;
    }
    }


    public boolean isOverflowMenuShowing() {
        if (mMenuView != null) {
            return mMenuView.isOverflowMenuShowing();
        }
        return false;
    }

    public boolean isOverflowReserved() {
    public boolean isOverflowReserved() {
        return mMenuView != null && mMenuView.isOverflowReserved();
        return mMenuView != null && mMenuView.isOverflowReserved();
    }
    }
Loading