diff options
| author | 2010-08-10 15:59:40 -0700 | |
|---|---|---|
| committer | 2010-08-10 15:59:40 -0700 | |
| commit | f75eeb28def26798682748aa5dedabebac86bb6a (patch) | |
| tree | 6f5be9ba47e90cf9bf775edc9ba024b58074fa7f | |
| parent | f0cfe3438aea77b5193d94fb9fa0c8d37972b194 (diff) | |
Fix bug 2908822 - open/closePanel should do the right thing with ActionBars
Change-Id: Ic77f9dee864d17046f69c78a1e6d96a49b5c6180
3 files changed, 29 insertions, 2 deletions
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java index e2815368ecba..13572510b0f2 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuView.java +++ b/core/java/com/android/internal/view/menu/ActionMenuView.java @@ -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; diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index d703a2f7f730..c6414417bed5 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -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(); } diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index 73fa93c345a3..8a6428ba5d36 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -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); |