summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuPresenter.java3
-rw-r--r--core/java/com/android/internal/view/menu/BaseMenuPresenter.java26
-rw-r--r--core/java/com/android/internal/widget/ActionBarView.java33
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java6
4 files changed, 46 insertions, 22 deletions
diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
index aaae691667b9..5c4257964403 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
@@ -173,7 +173,8 @@ public class ActionMenuPresenter extends BaseMenuPresenter {
public void updateMenuView(boolean cleared) {
super.updateMenuView(cleared);
- final boolean hasOverflow = mReserveOverflow && mMenu.getNonActionItems().size() > 0;
+ final boolean hasOverflow = mReserveOverflow && mMenu != null &&
+ mMenu.getNonActionItems().size() > 0;
if (hasOverflow) {
if (mOverflowButton == null) {
mOverflowButton = new OverflowMenuButton(mContext);
diff --git a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
index ed9d34a25a90..bec437a744d6 100644
--- a/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/BaseMenuPresenter.java
@@ -74,20 +74,24 @@ public abstract class BaseMenuPresenter implements MenuPresenter {
* Reuses item views when it can
*/
public void updateMenuView(boolean cleared) {
- mMenu.flagActionItems();
- ArrayList<MenuItemImpl> visibleItems = mMenu.getVisibleItems();
- final int itemCount = visibleItems.size();
final ViewGroup parent = (ViewGroup) mMenuView;
+ if (parent == null) return;
+
int childIndex = 0;
- for (int i = 0; i < itemCount; i++) {
- MenuItemImpl item = visibleItems.get(i);
- if (shouldIncludeItem(childIndex, item)) {
- final View convertView = parent.getChildAt(childIndex);
- final View itemView = getItemView(item, convertView, parent);
- if (itemView != convertView) {
- addItemView(itemView, childIndex);
+ if (mMenu != null) {
+ mMenu.flagActionItems();
+ ArrayList<MenuItemImpl> visibleItems = mMenu.getVisibleItems();
+ final int itemCount = visibleItems.size();
+ for (int i = 0; i < itemCount; i++) {
+ MenuItemImpl item = visibleItems.get(i);
+ if (shouldIncludeItem(childIndex, item)) {
+ final View convertView = parent.getChildAt(childIndex);
+ final View itemView = getItemView(item, convertView, parent);
+ if (itemView != convertView) {
+ addItemView(itemView, childIndex);
+ }
+ childIndex++;
}
- childIndex++;
}
}
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 6b5ea607aaae..78c9ee4bbea2 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -373,8 +373,7 @@ public class ActionBarView extends AbsActionBarView {
mActionMenuPresenter.setExpandedActionViewsExclusive(
getResources().getBoolean(
com.android.internal.R.bool.action_bar_expanded_action_views_exclusive));
- builder.addMenuPresenter(mActionMenuPresenter);
- builder.addMenuPresenter(mExpandedMenuPresenter);
+ configPresenters(builder);
menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
final ViewGroup oldParent = (ViewGroup) menuView.getParent();
if (oldParent != null && oldParent != this) {
@@ -390,8 +389,7 @@ public class ActionBarView extends AbsActionBarView {
mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE);
// Span the whole width
layoutParams.width = LayoutParams.MATCH_PARENT;
- builder.addMenuPresenter(mActionMenuPresenter);
- builder.addMenuPresenter(mExpandedMenuPresenter);
+ configPresenters(builder);
menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
if (mSplitView != null) {
final ViewGroup oldParent = (ViewGroup) menuView.getParent();
@@ -407,6 +405,18 @@ public class ActionBarView extends AbsActionBarView {
mMenuView = menuView;
}
+ private void configPresenters(MenuBuilder builder) {
+ if (builder != null) {
+ builder.addMenuPresenter(mActionMenuPresenter);
+ builder.addMenuPresenter(mExpandedMenuPresenter);
+ } else {
+ mActionMenuPresenter.initForMenu(mContext, null);
+ mExpandedMenuPresenter.initForMenu(mContext, null);
+ mActionMenuPresenter.updateMenuView(true);
+ mExpandedMenuPresenter.updateMenuView(true);
+ }
+ }
+
public boolean hasExpandedActionView() {
return mExpandedMenuPresenter != null &&
mExpandedMenuPresenter.mCurrentExpandedItem != null;
@@ -1263,12 +1273,15 @@ public class ActionBarView extends AbsActionBarView {
// Make sure the expanded item we have is still there.
if (mCurrentExpandedItem != null) {
boolean found = false;
- final int count = mMenu.size();
- for (int i = 0; i < count; i++) {
- final MenuItem item = mMenu.getItem(i);
- if (item == mCurrentExpandedItem) {
- found = true;
- break;
+
+ if (mMenu != null) {
+ final int count = mMenu.size();
+ for (int i = 0; i < count; i++) {
+ final MenuItem item = mMenu.getItem(i);
+ if (item == mCurrentExpandedItem) {
+ found = true;
+ break;
+ }
}
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 0ee6488c1816..34fa47999efc 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -386,6 +386,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
// Ditch the menu created above
st.menu = null;
+ // Don't show it in the action bar either
+ mActionBar.setMenu(null, mActionMenuPresenterCallback);
+
return false;
}
@@ -406,6 +409,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
if (!cb.onPreparePanel(st.featureId, st.createdPanelView, st.menu)) {
+ // The app didn't want to show the menu for now but it still exists.
+ // Clear it out of the action bar.
+ mActionBar.setMenu(null, mActionMenuPresenterCallback);
st.menu.startDispatchingItemsChanged();
return false;
}