Merge "Fix bug 3333015 - Overflow menu item submenus do not open" into honeycomb

This commit is contained in:
Adam Powell
2011-01-10 17:35:34 -08:00
committed by Android (Google) Code Review
3 changed files with 34 additions and 6 deletions

View File

@ -139,6 +139,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
mReserveOverflow = reserveOverflow;
}
public View getOverflowButton() {
return mOverflowButton;
}
@Override
protected LayoutParams generateDefaultLayoutParams() {
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,

View File

@ -68,6 +68,10 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On
}
}
public void setAnchorView(View anchor) {
mAnchorView = new WeakReference<View>(anchor);
}
public void show() {
if (!tryShow()) {
throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor");

View File

@ -26,9 +26,11 @@ import static android.view.WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
import com.android.internal.view.BaseSurfaceHolder;
import com.android.internal.view.RootViewSurfaceTaker;
import com.android.internal.view.StandaloneActionMode;
import com.android.internal.view.menu.ActionMenuView;
import com.android.internal.view.menu.ContextMenuBuilder;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuDialogHelper;
import com.android.internal.view.menu.MenuItemImpl;
import com.android.internal.view.menu.MenuPopupHelper;
import com.android.internal.view.menu.MenuView;
import com.android.internal.view.menu.SubMenuBuilder;
@ -881,6 +883,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
// The window manager will give us a valid window token
new MenuDialogHelper(subMenu).show(null);
} else if (hasFeature(FEATURE_ACTION_BAR)) {
mDecor.post(new Runnable() {
public void run() {
mActionButtonPopup = new ActionButtonSubmenu(getContext(), subMenu);
mActionButtonPopup.show();
Callback cb = getCallback();
@ -888,6 +892,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
cb.onMenuOpened(FEATURE_ACTION_BAR, subMenu);
}
}
});
}
return true;
}
@ -3009,6 +3015,20 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
public ActionButtonSubmenu(Context context, SubMenuBuilder subMenu) {
super(context, subMenu);
mSubMenu = subMenu;
MenuBuilder parentMenu = subMenu.getRootMenu();
MenuItemImpl item = (MenuItemImpl) subMenu.getItem();
if (!item.isActionButton()) {
// Give a reasonable anchor to nested submenus.
ActionMenuView amv = (ActionMenuView) parentMenu.getMenuView(
MenuBuilder.TYPE_ACTION_BUTTON, null);
View anchor = amv.getOverflowButton();
if (anchor == null) {
anchor = amv;
}
setAnchorView(anchor);
}
}
@Override