Support actionProviderClass attribute for menus [DO NOT MERGE]
The change adds support for view cookies for actionProviderClasses (for
example, ShareActionProvider) in the action bar menus.
This also provides a more robust search for the overflowMenuButton.
Change-Id: I316c8b9a69e2e337b41ba0fe4e61af9fe850f750
(cherry picked from commit 099f40a950)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user