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

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

Merge "Fix bug 3333015 - Overflow menu item submenus do not open" into honeycomb

parents 94d7eef3 f0ad6e6e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -139,6 +139,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
        mReserveOverflow = reserveOverflow;
    }
    
    public View getOverflowButton() {
        return mOverflowButton;
    }

    @Override
    protected LayoutParams generateDefaultLayoutParams() {
        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
+4 −0
Original line number Diff line number Diff line
@@ -68,6 +68,10 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On
        }
    }

    public void setAnchorView(View anchor) {
        mAnchorView = new WeakReference<View>(anchor);
    }

    public void show() {
        if (!tryShow()) {
            throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor");
+26 −6
Original line number Diff line number Diff line
@@ -26,9 +26,11 @@ import static android.view.WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
import com.android.internal.view.BaseSurfaceHolder;
import com.android.internal.view.RootViewSurfaceTaker;
import com.android.internal.view.StandaloneActionMode;
import com.android.internal.view.menu.ActionMenuView;
import com.android.internal.view.menu.ContextMenuBuilder;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuDialogHelper;
import com.android.internal.view.menu.MenuItemImpl;
import com.android.internal.view.menu.MenuPopupHelper;
import com.android.internal.view.menu.MenuView;
import com.android.internal.view.menu.SubMenuBuilder;
@@ -881,6 +883,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
            // The window manager will give us a valid window token
            new MenuDialogHelper(subMenu).show(null);
        } else if (hasFeature(FEATURE_ACTION_BAR)) {
            mDecor.post(new Runnable() {
                public void run() {
                    mActionButtonPopup = new ActionButtonSubmenu(getContext(), subMenu);
                    mActionButtonPopup.show();
                    Callback cb = getCallback();
@@ -888,6 +892,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
                        cb.onMenuOpened(FEATURE_ACTION_BAR, subMenu);
                    }
                }
            });
        }

        return true;
    }
@@ -3009,6 +3015,20 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
        public ActionButtonSubmenu(Context context, SubMenuBuilder subMenu) {
            super(context, subMenu);
            mSubMenu = subMenu;

            MenuBuilder parentMenu = subMenu.getRootMenu();
            MenuItemImpl item = (MenuItemImpl) subMenu.getItem();
            if (!item.isActionButton()) {
                // Give a reasonable anchor to nested submenus.
                ActionMenuView amv = (ActionMenuView) parentMenu.getMenuView(
                        MenuBuilder.TYPE_ACTION_BUTTON, null);

                View anchor = amv.getOverflowButton();
                if (anchor == null) {
                    anchor = amv;
                }
                setAnchorView(anchor);
            }
        }

        @Override