Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f5e678c authored by Deepanshu Gupta's avatar Deepanshu Gupta
Browse files

Support actionProviderClass attribute for menus.

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
parent aa2112f6
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -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;
    }
}
+4 −2
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ActionMenuView;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
@@ -179,8 +180,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;