summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adam Powell <adamp@google.com> 2010-08-10 15:59:40 -0700
committer Adam Powell <adamp@google.com> 2010-08-10 15:59:40 -0700
commitf75eeb28def26798682748aa5dedabebac86bb6a (patch)
tree6f5be9ba47e90cf9bf775edc9ba024b58074fa7f
parentf0cfe3438aea77b5193d94fb9fa0c8d37972b194 (diff)
Fix bug 2908822 - open/closePanel should do the right thing with ActionBars
Change-Id: Ic77f9dee864d17046f69c78a1e6d96a49b5c6180
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuView.java12
-rw-r--r--core/java/com/android/internal/widget/ActionBarView.java7
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java12
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);