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

Commit d8404b23 authored by Adam Powell's avatar Adam Powell
Browse files

Allow icon+text action buttons

Change-Id: I96d1f3958de3ac13cadbab108b87d6bae96e9473
parent 79c92540
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -198458,6 +198458,17 @@
 visibility="public"
>
</field>
<field name="SHOW_AS_ACTION_WITH_TEXT"
 type="int"
 transient="false"
 volatile="false"
 value="4"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
</interface>
<interface name="MenuItem.OnMenuItemClickListener"
 abstract="true"
+6 −0
Original line number Diff line number Diff line
@@ -46,6 +46,12 @@ public interface MenuItem {
     */
    public static final int SHOW_AS_ACTION_ALWAYS = 2;

    /**
     * When this item is in the action bar, always show it with a text label even if
     * it also has an icon specified.
     */
    public static final int SHOW_AS_ACTION_WITH_TEXT = 4;
    
    /**
     * Interface definition for a callback to be invoked when a menu item is
     * clicked.
+12 −4
Original line number Diff line number Diff line
@@ -7708,28 +7708,36 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            if (canSelectText()) {
                menu.add(0, ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll).
                    setIcon(com.android.internal.R.drawable.ic_menu_select_all).
                    setAlphabeticShortcut('a');
                    setAlphabeticShortcut('a').
                    setShowAsAction(
                            MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
                atLeastOne = true;
            }

            if (canCut()) {
                menu.add(0, ID_CUT, 0, com.android.internal.R.string.cut).
                    setIcon(styledAttributes.getResourceId(R.styleable.Theme_actionModeCutDrawable, 0)).
                    setAlphabeticShortcut('x');
                    setAlphabeticShortcut('x').
                    setShowAsAction(
                            MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
                atLeastOne = true;
            }

            if (canCopy()) {
                menu.add(0, ID_COPY, 0, com.android.internal.R.string.copy).
                    setIcon(styledAttributes.getResourceId(R.styleable.Theme_actionModeCopyDrawable, 0)).
                    setAlphabeticShortcut('c');
                    setAlphabeticShortcut('c').
                    setShowAsAction(
                            MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
                atLeastOne = true;
            }

            if (canPaste()) {
                menu.add(0, ID_PASTE, 0, com.android.internal.R.string.paste).
                        setIcon(styledAttributes.getResourceId(R.styleable.Theme_actionModePasteDrawable, 0)).
                        setAlphabeticShortcut('v');
                        setAlphabeticShortcut('v').
                        setShowAsAction(
                                MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
                atLeastOne = true;
            }

+3 −5
Original line number Diff line number Diff line
@@ -21,13 +21,13 @@ import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.LinearLayout;

/**
 * @hide
 */
public class ActionMenuItemView extends FrameLayout
public class ActionMenuItemView extends LinearLayout
        implements MenuView.ItemView, View.OnClickListener {
    private static final String TAG = "ActionMenuItemView";

@@ -65,8 +65,6 @@ public class ActionMenuItemView extends FrameLayout
    public void initialize(MenuItemImpl itemData, int menuType) {
        mItemData = itemData;

        setClickable(true);
        setFocusable(true);
        setIcon(itemData.getIcon());
        setTitle(itemData.getTitle()); // Title only takes effect if there is no icon
        setId(itemData.getItemId());
@@ -128,7 +126,7 @@ public class ActionMenuItemView extends FrameLayout
        // populate accessibility description with title
        setContentDescription(title);

        if (mImageButton.getDrawable() == null) {
        if (mImageButton.getDrawable() == null || mItemData.showsTextAsAction()) {
            mTextButton.setText(mTitle);
            mTextButton.setVisibility(VISIBLE);
        }
+22 −2
Original line number Diff line number Diff line
@@ -38,6 +38,10 @@ import com.android.internal.view.menu.MenuView.ItemView;
public final class MenuItemImpl implements MenuItem {
    private static final String TAG = "MenuItemImpl";
    
    private static final int SHOW_AS_ACTION_MASK = SHOW_AS_ACTION_NEVER |
            SHOW_AS_ACTION_IF_ROOM |
            SHOW_AS_ACTION_ALWAYS;

    private final int mId;
    private final int mGroup;
    private final int mCategoryOrder;
@@ -649,11 +653,11 @@ public final class MenuItemImpl implements MenuItem {
    }
    
    public boolean requestsActionButton() {
        return mShowAsAction == SHOW_AS_ACTION_IF_ROOM;
        return (mShowAsAction & SHOW_AS_ACTION_IF_ROOM) == SHOW_AS_ACTION_IF_ROOM;
    }
    
    public boolean requiresActionButton() {
        return mShowAsAction == SHOW_AS_ACTION_ALWAYS;
        return (mShowAsAction & SHOW_AS_ACTION_ALWAYS) == SHOW_AS_ACTION_ALWAYS;
    }

    public void setIsActionButton(boolean isActionButton) {
@@ -664,7 +668,23 @@ public final class MenuItemImpl implements MenuItem {
        }
    }

    public boolean showsTextAsAction() {
        return (mShowAsAction & SHOW_AS_ACTION_WITH_TEXT) == SHOW_AS_ACTION_WITH_TEXT;
    }

    public void setShowAsAction(int actionEnum) {
        switch (actionEnum & SHOW_AS_ACTION_MASK) {
            case SHOW_AS_ACTION_ALWAYS:
            case SHOW_AS_ACTION_IF_ROOM:
            case SHOW_AS_ACTION_NEVER:
                // Looks good!
                break;

            default:
                // Mutually exclusive options selected!
                throw new IllegalArgumentException("SHOW_AS_ACTION_ALWAYS, SHOW_AS_ACTION_IF_ROOM,"
                        + " and SHOW_AS_ACTION_NEVER are mutually exclusive.");
        }
        mShowAsAction = actionEnum;
        mMenu.onItemActionRequestChanged(this);
    }
Loading