diff --git a/issues/AndroidManifest.xml b/issues/AndroidManifest.xml
index 81abe168..d976d06e 100644
--- a/issues/AndroidManifest.xml
+++ b/issues/AndroidManifest.xml
@@ -38,6 +38,15 @@
+
+
+
+
+
+
+
@@ -101,6 +110,15 @@
+
+
+
+
+
+
+
diff --git a/issues/res/menu/i655_menu.xml b/issues/res/menu/i655_menu.xml
new file mode 100644
index 00000000..54b0a75a
--- /dev/null
+++ b/issues/res/menu/i655_menu.xml
@@ -0,0 +1,26 @@
+
+
diff --git a/issues/src/org/holoeverywhere/issues/i655/MainActivity.java b/issues/src/org/holoeverywhere/issues/i655/MainActivity.java
new file mode 100644
index 00000000..5dadf17d
--- /dev/null
+++ b/issues/src/org/holoeverywhere/issues/i655/MainActivity.java
@@ -0,0 +1,15 @@
+package org.holoeverywhere.issues.i655;
+
+import android.view.Menu;
+
+import org.holoeverywhere.app.Activity;
+import org.holoeverywhere.issues.R;
+
+
+public class MainActivity extends Activity {
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.i655_menu, menu);
+ return true;
+ }
+}
diff --git a/library/src/android/support/v7/internal/view/menu/ActionMenuPresenter.java b/library/src/android/support/v7/internal/view/menu/ActionMenuPresenter.java
index dc239c34..f6182e80 100644
--- a/library/src/android/support/v7/internal/view/menu/ActionMenuPresenter.java
+++ b/library/src/android/support/v7/internal/view/menu/ActionMenuPresenter.java
@@ -17,14 +17,12 @@
package android.support.v7.internal.view.menu;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Parcel;
import android.os.Parcelable;
-import org.holoeverywhere.R;
-import android.support.v7.internal.view.ActionBarPolicy;
import android.support.v4.view.ActionProvider;
+import android.support.v7.internal.view.ActionBarPolicy;
import android.support.v7.internal.view.menu.ActionMenuView.ActionMenuChildView;
import android.util.SparseBooleanArray;
import android.view.MenuItem;
@@ -34,6 +32,8 @@
import android.view.ViewGroup;
import android.widget.ImageButton;
+import org.holoeverywhere.R;
+
import java.util.ArrayList;
/**
@@ -45,7 +45,10 @@ public class ActionMenuPresenter extends BaseMenuPresenter
implements ActionProvider.SubUiVisibilityListener {
private static final String TAG = "ActionMenuPresenter";
-
+ final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback();
+ // Group IDs that have been added as actions - used temporarily, allocated here for reuse.
+ private final SparseBooleanArray mActionButtonGroups = new SparseBooleanArray();
+ int mOpenSubMenuId;
private View mOverflowButton;
private boolean mReserveOverflow;
private boolean mReserveOverflowSet;
@@ -56,22 +59,12 @@ public class ActionMenuPresenter extends BaseMenuPresenter
private boolean mStrictWidthLimit;
private boolean mWidthLimitSet;
private boolean mExpandedActionViewsExclusive;
-
private int mMinCellSize;
-
- // Group IDs that have been added as actions - used temporarily, allocated here for reuse.
- private final SparseBooleanArray mActionButtonGroups = new SparseBooleanArray();
-
private View mScrapActionButtonView;
-
private OverflowPopup mOverflowPopup;
private ActionButtonSubmenu mActionButtonPopup;
-
private OpenOverflowRunnable mPostedOpenRunnable;
- final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback();
- int mOpenSubMenuId;
-
public ActionMenuPresenter(Context context) {
super(context, R.layout.abc_action_menu_layout, R.layout.abc_action_menu_item_layout);
}
@@ -263,8 +256,9 @@ public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
}
mOpenSubMenuId = subMenu.getItem().getItemId();
- mActionButtonPopup = new ActionButtonSubmenu(subMenu);
- mActionButtonPopup.show(null);
+ mActionButtonPopup = new ActionButtonSubmenu(mContext, subMenu);
+ mActionButtonPopup.setAnchorView(anchor);
+ mActionButtonPopup.show();
super.onSubMenuSelected(subMenu);
return true;
}
@@ -538,6 +532,16 @@ public void onSubUiVisibilityChanged(boolean isVisible) {
private static class SavedState implements Parcelable {
+ public static final Parcelable.Creator CREATOR
+ = new Parcelable.Creator() {
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
public int openSubMenuId;
SavedState() {
@@ -556,17 +560,6 @@ public int describeContents() {
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(openSubMenuId);
}
-
- public static final Parcelable.Creator CREATOR
- = new Parcelable.Creator() {
- public SavedState createFromParcel(Parcel in) {
- return new SavedState(in);
- }
-
- public SavedState[] newArray(int size) {
- return new SavedState[size];
- }
- };
}
private class OverflowMenuButton extends ImageButton implements ActionMenuChildView {
@@ -603,7 +596,7 @@ public boolean needsDividerAfter() {
private class OverflowPopup extends MenuPopupHelper {
public OverflowPopup(Context context, MenuBuilder menu, View anchorView,
- boolean overflowOnly) {
+ boolean overflowOnly) {
super(context, menu, anchorView, overflowOnly);
setCallback(mPopupPresenterCallback);
}
@@ -616,16 +609,36 @@ public void onDismiss() {
}
}
- private class ActionButtonSubmenu extends MenuDialogHelper {
+ private class ActionButtonSubmenu extends MenuPopupHelper {
+ private SubMenuBuilder mSubMenu;
+
+ public ActionButtonSubmenu(Context context, SubMenuBuilder subMenu) {
+ super(context, subMenu);
+ mSubMenu = subMenu;
+
+ MenuItemImpl item = (MenuItemImpl) subMenu.getItem();
+ if (!item.isActionButton()) {
+ // Give a reasonable anchor to nested submenus.
+ setAnchorView(mOverflowButton == null ? (View) mMenuView : mOverflowButton);
+ }
- public ActionButtonSubmenu(SubMenuBuilder subMenu) {
- super(subMenu);
setCallback(mPopupPresenterCallback);
+
+ boolean preserveIconSpacing = false;
+ final int count = subMenu.size();
+ for (int i = 0; i < count; i++) {
+ MenuItem childItem = subMenu.getItem(i);
+ if (childItem.isVisible() && childItem.getIcon() != null) {
+ preserveIconSpacing = true;
+ break;
+ }
+ }
+ setForceShowIcon(preserveIconSpacing);
}
@Override
- public void onDismiss(DialogInterface dialog) {
- super.onDismiss(dialog);
+ public void onDismiss() {
+ super.onDismiss();
mActionButtonPopup = null;
mOpenSubMenuId = 0;
}