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

Change-Id: Ic77f9dee864d17046f69c78a1e6d96a49b5c6180
This commit is contained in:
Adam Powell
2010-08-10 15:59:40 -07:00
parent f0cfe3438a
commit f75eeb28de
3 changed files with 29 additions and 2 deletions

View File

@@ -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;

View File

@@ -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();
}

View File

@@ -406,7 +406,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
@Override
public final void openPanel(int featureId, KeyEvent event) {
openPanel(getPanelState(featureId, true), 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) {
@@ -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);