Merge "Fix bug 3333015 - Overflow menu item submenus do not open" into honeycomb
This commit is contained in:
@ -139,6 +139,10 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
|
|||||||
mReserveOverflow = reserveOverflow;
|
mReserveOverflow = reserveOverflow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public View getOverflowButton() {
|
||||||
|
return mOverflowButton;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected LayoutParams generateDefaultLayoutParams() {
|
protected LayoutParams generateDefaultLayoutParams() {
|
||||||
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
|
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
|
||||||
|
@ -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() {
|
public void show() {
|
||||||
if (!tryShow()) {
|
if (!tryShow()) {
|
||||||
throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor");
|
throw new IllegalStateException("MenuPopupHelper cannot be used without an anchor");
|
||||||
|
@ -26,9 +26,11 @@ import static android.view.WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
|
|||||||
import com.android.internal.view.BaseSurfaceHolder;
|
import com.android.internal.view.BaseSurfaceHolder;
|
||||||
import com.android.internal.view.RootViewSurfaceTaker;
|
import com.android.internal.view.RootViewSurfaceTaker;
|
||||||
import com.android.internal.view.StandaloneActionMode;
|
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.ContextMenuBuilder;
|
||||||
import com.android.internal.view.menu.MenuBuilder;
|
import com.android.internal.view.menu.MenuBuilder;
|
||||||
import com.android.internal.view.menu.MenuDialogHelper;
|
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.MenuPopupHelper;
|
||||||
import com.android.internal.view.menu.MenuView;
|
import com.android.internal.view.menu.MenuView;
|
||||||
import com.android.internal.view.menu.SubMenuBuilder;
|
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
|
// The window manager will give us a valid window token
|
||||||
new MenuDialogHelper(subMenu).show(null);
|
new MenuDialogHelper(subMenu).show(null);
|
||||||
} else if (hasFeature(FEATURE_ACTION_BAR)) {
|
} else if (hasFeature(FEATURE_ACTION_BAR)) {
|
||||||
|
mDecor.post(new Runnable() {
|
||||||
|
public void run() {
|
||||||
mActionButtonPopup = new ActionButtonSubmenu(getContext(), subMenu);
|
mActionButtonPopup = new ActionButtonSubmenu(getContext(), subMenu);
|
||||||
mActionButtonPopup.show();
|
mActionButtonPopup.show();
|
||||||
Callback cb = getCallback();
|
Callback cb = getCallback();
|
||||||
@ -888,6 +892,8 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
|
|||||||
cb.onMenuOpened(FEATURE_ACTION_BAR, subMenu);
|
cb.onMenuOpened(FEATURE_ACTION_BAR, subMenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -3009,6 +3015,20 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
|
|||||||
public ActionButtonSubmenu(Context context, SubMenuBuilder subMenu) {
|
public ActionButtonSubmenu(Context context, SubMenuBuilder subMenu) {
|
||||||
super(context, subMenu);
|
super(context, subMenu);
|
||||||
mSubMenu = 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
|
@Override
|
||||||
|
Reference in New Issue
Block a user