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

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

Fix bug 2908822 - open/closePanel should do the right thing with ActionBars

Change-Id: Ic77f9dee864d17046f69c78a1e6d96a49b5c6180
parent f0cfe343
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.LinearLayout;

import java.lang.ref.WeakReference;
import java.util.ArrayList;

/**
@@ -39,6 +40,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
    private int mMaxItems;
    private boolean mReserveOverflow;
    private OverflowMenuButton mOverflowButton;
    private WeakReference<MenuPopupHelper> mOverflowPopup;
    
    public ActionMenuView(Context context) {
        this(context, null);
@@ -145,6 +147,16 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
        if (mOverflowButton != null) {
            MenuPopupHelper popup = new MenuPopupHelper(getContext(), mMenu, mOverflowButton, true);
            popup.show();
            mOverflowPopup = new WeakReference<MenuPopupHelper>(popup);
            return true;
        }
        return false;
    }

    public boolean hideOverflowMenu() {
        MenuPopupHelper popup = mOverflowPopup != null ? mOverflowPopup.get() : null;
        if (popup != null) {
            popup.dismiss();
            return true;
        }
        return false;
+7 −0
Original line number Diff line number Diff line
@@ -209,6 +209,13 @@ public class ActionBarView extends ViewGroup {
        return false;
    }

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

    public boolean isOverflowReserved() {
        return mMenuView != null && mMenuView.isOverflowReserved();
    }
+10 −2
Original line number Diff line number Diff line
@@ -406,8 +406,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {

    @Override
    public final void openPanel(int featureId, KeyEvent event) {
        if (featureId == FEATURE_OPTIONS_PANEL && mActionBar != null &&
                mActionBar.isOverflowReserved()) {
            mActionBar.showOverflowMenu();
        } else {
            openPanel(getPanelState(featureId, true), event);
        }
    }

    private void openPanel(PanelFeatureState st, KeyEvent event) {
        // System.out.println("Open panel: isOpen=" + st.isOpen);
@@ -497,7 +502,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {

    @Override
    public final void closePanel(int featureId) {
        if (featureId == FEATURE_CONTEXT_MENU) {
        if (featureId == FEATURE_OPTIONS_PANEL && mActionBar != null &&
                mActionBar.isOverflowReserved()) {
            mActionBar.hideOverflowMenu();
        } else if (featureId == FEATURE_CONTEXT_MENU) {
            closeContextMenu();
        } else {
            closePanel(getPanelState(featureId, true), true);