diff options
author | Deepanshu Gupta <deepanshu@google.com> | 2014-05-01 16:18:34 -0700 |
---|---|---|
committer | Deepanshu Gupta <deepanshu@google.com> | 2014-05-07 18:09:48 -0700 |
commit | 2d3fa7ba782238afb891db38e29ef7ec755bfdf6 (patch) | |
tree | 08b4086a4b25353f6b4a97268d4075beb5d597b2 /tools | |
parent | 7bc363ba72d4cdd9a0b3b1601e432acfc09c0dc0 (diff) | |
download | frameworks_base-2d3fa7ba782238afb891db38e29ef7ec755bfdf6.zip frameworks_base-2d3fa7ba782238afb891db38e29ef7ec755bfdf6.tar.gz frameworks_base-2d3fa7ba782238afb891db38e29ef7ec755bfdf6.tar.bz2 |
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 099f40a950a14b66005b17657d967ef080569a15)
Diffstat (limited to 'tools')
-rw-r--r-- | tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java | 23 | ||||
-rw-r--r-- | tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java | 6 |
2 files changed, 26 insertions, 3 deletions
diff --git a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java index 4bef424..cdb839a 100644 --- a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java +++ b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java @@ -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; } } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java index 997fca1..97b07c7 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java @@ -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; |