am 9359dc2e: am 2d3fa7ba: Support actionProviderClass attribute for menus [DO NOT MERGE]

* commit '9359dc2e7d6bc671af3fee0c1dc540dd3685365c':
  Support actionProviderClass attribute for menus [DO NOT MERGE]
This commit is contained in:
Deepanshu Gupta
2014-05-13 17:40:55 +00:00
committed by Android Git Automerger
2 changed files with 26 additions and 3 deletions

View File

@@ -16,6 +16,12 @@
package com.android.internal.view.menu;
import com.android.layoutlib.bridge.android.BridgeContext;
import android.content.Context;
import android.view.ContextThemeWrapper;
import android.view.View;
/**
* An extension of the {@link MenuItemImpl} to store the view cookie also.
*/
@@ -27,6 +33,7 @@ public class BridgeMenuItemImpl extends MenuItemImpl {
* at the time of rendering.
*/
private Object viewCookie;
private BridgeContext mContext;
/**
* Instantiates this menu item.
@@ -34,14 +41,28 @@ public class BridgeMenuItemImpl extends MenuItemImpl {
BridgeMenuItemImpl(MenuBuilder menu, int group, int id, int categoryOrder, int ordering,
CharSequence title, int showAsAction) {
super(menu, group, id, categoryOrder, ordering, title, showAsAction);
Context context = menu.getContext();
if (context instanceof ContextThemeWrapper) {
context = ((ContextThemeWrapper) context).getBaseContext();
}
if (context instanceof BridgeContext) {
mContext = ((BridgeContext) context);
}
}
public Object getViewCookie() {
return viewCookie;
}
public void setViewCookie(Object viewCookie) {
// If the menu item has an associated action provider view,
// directly set the cookie in the view to cookie map stored in BridgeContext.
View actionView = getActionView();
if (actionView != null && mContext != null) {
mContext.addViewKey(actionView, viewCookie);
// We don't need to add the view cookie to the this item now. But there's no harm in
// storing it, in case we need it in the future.
}
this.viewCookie = viewCookie;
}
}

View File

@@ -26,6 +26,7 @@ import com.android.ide.common.rendering.api.SystemViewCookie;
import com.android.internal.R;
import com.android.internal.app.ActionBarImpl;
import com.android.internal.util.Predicate;
import com.android.internal.view.menu.ActionMenuView;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuBuilderAccessor;
import com.android.internal.view.menu.MenuItemImpl;
@@ -180,8 +181,9 @@ public class ActionBarLayout extends LinearLayout {
Predicate<View> overflowMenuButtonTest = new Predicate<View>() {
@Override
public boolean apply(View view) {
return view.getClass().getName()
.equals("android.widget.ActionMenuPresenter$OverflowMenuButton");
ViewGroup.LayoutParams lp = view.getLayoutParams();
return lp instanceof ActionMenuView.LayoutParams &&
((ActionMenuView.LayoutParams) lp).isOverflowButton;
}
};
View overflowMenu = null;