diff options
author | Chris Banes <chrisbanes@google.com> | 2015-06-09 13:36:44 +0000 |
---|---|---|
committer | Chris Banes <chrisbanes@google.com> | 2015-06-10 11:39:01 +0100 |
commit | a41b78973db3dfde159f7d641f794f462ad323d3 (patch) | |
tree | 98701587be8e486b93ad9f8fa75ec82c50f71009 | |
parent | d9b0acd2eb8d844b9f901fc62e0de74c1a7d8430 (diff) | |
download | frameworks_base-a41b78973db3dfde159f7d641f794f462ad323d3.zip frameworks_base-a41b78973db3dfde159f7d641f794f462ad323d3.tar.gz frameworks_base-a41b78973db3dfde159f7d641f794f462ad323d3.tar.bz2 |
API council review feedback for ActionMenuView
Reverts "MenuItem, navigation and overflow icon tinting" CL,
and adds getter and setter for the overflow icon to ActionMenuView
and Toolbar.
BUG: 21571899
Change-Id: I591f43650356443fa3256e4d74e28b6ddd8c2b33
-rw-r--r-- | api/current.txt | 24 | ||||
-rw-r--r-- | api/system-current.txt | 24 | ||||
-rw-r--r-- | core/java/android/view/MenuInflater.java | 32 | ||||
-rw-r--r-- | core/java/android/view/MenuItem.java | 24 | ||||
-rw-r--r-- | core/java/android/widget/ActionMenuPresenter.java | 73 | ||||
-rw-r--r-- | core/java/android/widget/ActionMenuView.java | 50 | ||||
-rw-r--r-- | core/java/android/widget/Toolbar.java | 163 | ||||
-rw-r--r-- | core/java/com/android/internal/view/menu/ActionMenuItem.java | 49 | ||||
-rw-r--r-- | core/java/com/android/internal/view/menu/MenuItemImpl.java | 58 | ||||
-rw-r--r-- | core/res/res/values/attrs.xml | 73 | ||||
-rw-r--r-- | core/res/res/values/public.xml | 20 |
11 files changed, 103 insertions, 487 deletions
diff --git a/api/current.txt b/api/current.txt index fdcda1f..9b8404b 100644 --- a/api/current.txt +++ b/api/current.txt @@ -222,6 +222,12 @@ package android { ctor public R.attr(); field public static final int __reserved0 = 16844020; // 0x10104f4 field public static final int __reserved1 = 16844019; // 0x10104f3 + field public static final int __reserved2 = 16843999; // 0x10104df + field public static final int __reserved3 = 16844000; // 0x10104e0 + field public static final int __reserved4 = 16844001; // 0x10104e1 + field public static final int __reserved5 = 16844002; // 0x10104e2 + field public static final int __reserved6 = 16844003; // 0x10104e3 + field public static final int __reserved7 = 16844004; // 0x10104e4 field public static final int absListViewStyle = 16842858; // 0x101006a field public static final int accessibilityEventTypes = 16843648; // 0x1010380 field public static final int accessibilityFeedbackType = 16843650; // 0x1010382 @@ -661,8 +667,6 @@ package android { field public static final int hyphenationFrequency = 16844024; // 0x10104f8 field public static final int icon = 16842754; // 0x1010002 field public static final int iconPreview = 16843337; // 0x1010249 - field public static final int iconTint = 16843999; // 0x10104df - field public static final int iconTintMode = 16844000; // 0x10104e0 field public static final int iconifiedByDefault = 16843514; // 0x10102fa field public static final int id = 16842960; // 0x10100d0 field public static final int ignoreGravity = 16843263; // 0x10101ff @@ -874,8 +878,6 @@ package android { field public static final int navigationContentDescription = 16843969; // 0x10104c1 field public static final int navigationIcon = 16843968; // 0x10104c0 field public static final int navigationMode = 16843471; // 0x10102cf - field public static final int navigationTint = 16844003; // 0x10104e3 - field public static final int navigationTintMode = 16844004; // 0x10104e4 field public static final int negativeButtonText = 16843254; // 0x10101f6 field public static final int nestedScrollingEnabled = 16843830; // 0x1010436 field public static final int nextFocusDown = 16842980; // 0x10100e4 @@ -907,8 +909,6 @@ package android { field public static final int overScrollFooter = 16843459; // 0x10102c3 field public static final int overScrollHeader = 16843458; // 0x10102c2 field public static final int overScrollMode = 16843457; // 0x10102c1 - field public static final int overflowTint = 16844001; // 0x10104e1 - field public static final int overflowTintMode = 16844002; // 0x10104e2 field public static final int overlapAnchor = 16843874; // 0x1010462 field public static final int overridesImplicitlyEnabledSubtype = 16843682; // 0x10103a2 field public static final int packageNames = 16843649; // 0x1010381 @@ -35489,8 +35489,6 @@ package android.view { method public abstract android.view.MenuItem setEnabled(boolean); method public abstract android.view.MenuItem setIcon(android.graphics.drawable.Drawable); method public abstract android.view.MenuItem setIcon(int); - method public abstract android.view.MenuItem setIconTintList(android.content.res.ColorStateList); - method public abstract android.view.MenuItem setIconTintMode(android.graphics.PorterDuff.Mode); method public abstract android.view.MenuItem setIntent(android.content.Intent); method public abstract android.view.MenuItem setNumericShortcut(char); method public abstract android.view.MenuItem setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener); @@ -39551,14 +39549,14 @@ package android.widget { ctor public ActionMenuView(android.content.Context, android.util.AttributeSet); method public void dismissPopupMenus(); method public android.view.Menu getMenu(); + method public android.graphics.drawable.Drawable getOverflowIcon(); method public int getPopupTheme(); method public boolean hideOverflowMenu(); method public boolean isOverflowMenuShowing(); method public void onConfigurationChanged(android.content.res.Configuration); method public void onDetachedFromWindow(); method public void setOnMenuItemClickListener(android.widget.ActionMenuView.OnMenuItemClickListener); - method public void setOverflowTintList(android.content.res.ColorStateList); - method public void setOverflowTintMode(android.graphics.PorterDuff.Mode); + method public void setOverflowIcon(android.graphics.drawable.Drawable); method public void setPopupTheme(int); method public boolean showOverflowMenu(); } @@ -41848,6 +41846,7 @@ package android.widget { method public android.view.Menu getMenu(); method public java.lang.CharSequence getNavigationContentDescription(); method public android.graphics.drawable.Drawable getNavigationIcon(); + method public android.graphics.drawable.Drawable getOverflowIcon(); method public int getPopupTheme(); method public java.lang.CharSequence getSubtitle(); method public java.lang.CharSequence getTitle(); @@ -41867,11 +41866,8 @@ package android.widget { method public void setNavigationIcon(int); method public void setNavigationIcon(android.graphics.drawable.Drawable); method public void setNavigationOnClickListener(android.view.View.OnClickListener); - method public void setNavigationTintList(android.content.res.ColorStateList); - method public void setNavigationTintMode(android.graphics.PorterDuff.Mode); method public void setOnMenuItemClickListener(android.widget.Toolbar.OnMenuItemClickListener); - method public void setOverflowTintList(android.content.res.ColorStateList); - method public void setOverflowTintMode(android.graphics.PorterDuff.Mode); + method public void setOverflowIcon(android.graphics.drawable.Drawable); method public void setPopupTheme(int); method public void setSubtitle(int); method public void setSubtitle(java.lang.CharSequence); diff --git a/api/system-current.txt b/api/system-current.txt index 094e272..8e4f480 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -297,6 +297,12 @@ package android { ctor public R.attr(); field public static final int __reserved0 = 16844020; // 0x10104f4 field public static final int __reserved1 = 16844019; // 0x10104f3 + field public static final int __reserved2 = 16843999; // 0x10104df + field public static final int __reserved3 = 16844000; // 0x10104e0 + field public static final int __reserved4 = 16844001; // 0x10104e1 + field public static final int __reserved5 = 16844002; // 0x10104e2 + field public static final int __reserved6 = 16844003; // 0x10104e3 + field public static final int __reserved7 = 16844004; // 0x10104e4 field public static final int absListViewStyle = 16842858; // 0x101006a field public static final int accessibilityEventTypes = 16843648; // 0x1010380 field public static final int accessibilityFeedbackType = 16843650; // 0x1010382 @@ -736,8 +742,6 @@ package android { field public static final int hyphenationFrequency = 16844024; // 0x10104f8 field public static final int icon = 16842754; // 0x1010002 field public static final int iconPreview = 16843337; // 0x1010249 - field public static final int iconTint = 16843999; // 0x10104df - field public static final int iconTintMode = 16844000; // 0x10104e0 field public static final int iconifiedByDefault = 16843514; // 0x10102fa field public static final int id = 16842960; // 0x10100d0 field public static final int ignoreGravity = 16843263; // 0x10101ff @@ -949,8 +953,6 @@ package android { field public static final int navigationContentDescription = 16843969; // 0x10104c1 field public static final int navigationIcon = 16843968; // 0x10104c0 field public static final int navigationMode = 16843471; // 0x10102cf - field public static final int navigationTint = 16844003; // 0x10104e3 - field public static final int navigationTintMode = 16844004; // 0x10104e4 field public static final int negativeButtonText = 16843254; // 0x10101f6 field public static final int nestedScrollingEnabled = 16843830; // 0x1010436 field public static final int nextFocusDown = 16842980; // 0x10100e4 @@ -982,8 +984,6 @@ package android { field public static final int overScrollFooter = 16843459; // 0x10102c3 field public static final int overScrollHeader = 16843458; // 0x10102c2 field public static final int overScrollMode = 16843457; // 0x10102c1 - field public static final int overflowTint = 16844001; // 0x10104e1 - field public static final int overflowTintMode = 16844002; // 0x10104e2 field public static final int overlapAnchor = 16843874; // 0x1010462 field public static final int overridesImplicitlyEnabledSubtype = 16843682; // 0x10103a2 field public static final int packageNames = 16843649; // 0x1010381 @@ -37755,8 +37755,6 @@ package android.view { method public abstract android.view.MenuItem setEnabled(boolean); method public abstract android.view.MenuItem setIcon(android.graphics.drawable.Drawable); method public abstract android.view.MenuItem setIcon(int); - method public abstract android.view.MenuItem setIconTintList(android.content.res.ColorStateList); - method public abstract android.view.MenuItem setIconTintMode(android.graphics.PorterDuff.Mode); method public abstract android.view.MenuItem setIntent(android.content.Intent); method public abstract android.view.MenuItem setNumericShortcut(char); method public abstract android.view.MenuItem setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener); @@ -42131,14 +42129,14 @@ package android.widget { ctor public ActionMenuView(android.content.Context, android.util.AttributeSet); method public void dismissPopupMenus(); method public android.view.Menu getMenu(); + method public android.graphics.drawable.Drawable getOverflowIcon(); method public int getPopupTheme(); method public boolean hideOverflowMenu(); method public boolean isOverflowMenuShowing(); method public void onConfigurationChanged(android.content.res.Configuration); method public void onDetachedFromWindow(); method public void setOnMenuItemClickListener(android.widget.ActionMenuView.OnMenuItemClickListener); - method public void setOverflowTintList(android.content.res.ColorStateList); - method public void setOverflowTintMode(android.graphics.PorterDuff.Mode); + method public void setOverflowIcon(android.graphics.drawable.Drawable); method public void setPopupTheme(int); method public boolean showOverflowMenu(); } @@ -44428,6 +44426,7 @@ package android.widget { method public android.view.Menu getMenu(); method public java.lang.CharSequence getNavigationContentDescription(); method public android.graphics.drawable.Drawable getNavigationIcon(); + method public android.graphics.drawable.Drawable getOverflowIcon(); method public int getPopupTheme(); method public java.lang.CharSequence getSubtitle(); method public java.lang.CharSequence getTitle(); @@ -44447,11 +44446,8 @@ package android.widget { method public void setNavigationIcon(int); method public void setNavigationIcon(android.graphics.drawable.Drawable); method public void setNavigationOnClickListener(android.view.View.OnClickListener); - method public void setNavigationTintList(android.content.res.ColorStateList); - method public void setNavigationTintMode(android.graphics.PorterDuff.Mode); method public void setOnMenuItemClickListener(android.widget.Toolbar.OnMenuItemClickListener); - method public void setOverflowTintList(android.content.res.ColorStateList); - method public void setOverflowTintMode(android.graphics.PorterDuff.Mode); + method public void setOverflowIcon(android.graphics.drawable.Drawable); method public void setPopupTheme(int); method public void setSubtitle(int); method public void setSubtitle(java.lang.CharSequence); diff --git a/core/java/android/view/MenuInflater.java b/core/java/android/view/MenuInflater.java index dc8cadf..1c67ba7 100644 --- a/core/java/android/view/MenuInflater.java +++ b/core/java/android/view/MenuInflater.java @@ -25,11 +25,8 @@ import android.annotation.MenuRes; import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; -import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; import android.util.Xml; @@ -337,11 +334,6 @@ public class MenuInflater { private ActionProvider itemActionProvider; - private ColorStateList itemIconTintList; - private boolean itemIconTintListSet; - private PorterDuff.Mode itemIconTintMode; - private boolean itemIconTintModeSet; - private static final int defaultGroupId = NO_ID; private static final int defaultItemId = NO_ID; private static final int defaultItemCategory = 0; @@ -432,23 +424,6 @@ public class MenuInflater { itemActionProvider = null; } - if (a.hasValueOrEmpty(com.android.internal.R.styleable.MenuItem_iconTint)) { - itemIconTintList = a.getColorStateList( - com.android.internal.R.styleable.MenuItem_iconTint); - itemIconTintListSet = true; - } else { - itemIconTintList = null; - itemIconTintListSet = false; - } - if (a.hasValueOrEmpty(com.android.internal.R.styleable.MenuItem_iconTintMode)) { - itemIconTintMode = Drawable.parseTintMode( - a.getInt(com.android.internal.R.styleable.MenuItem_iconTintMode, -1), null); - itemIconTintModeSet = true; - } else { - itemIconTintMode = null; - itemIconTintModeSet = false; - } - a.recycle(); itemAdded = false; @@ -511,13 +486,6 @@ public class MenuInflater { if (itemActionProvider != null) { item.setActionProvider(itemActionProvider); } - - if (itemIconTintListSet) { - item.setIconTintList(itemIconTintList); - } - if (itemIconTintModeSet) { - item.setIconTintMode(itemIconTintMode); - } } public MenuItem addItem() { diff --git a/core/java/android/view/MenuItem.java b/core/java/android/view/MenuItem.java index 2948007..9e8b97e 100644 --- a/core/java/android/view/MenuItem.java +++ b/core/java/android/view/MenuItem.java @@ -21,8 +21,6 @@ import android.annotation.LayoutRes; import android.annotation.StringRes; import android.app.Activity; import android.content.Intent; -import android.content.res.ColorStateList; -import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnCreateContextMenuListener; @@ -601,26 +599,4 @@ public interface MenuItem { * @return This menu item instance for call chaining */ public MenuItem setOnActionExpandListener(OnActionExpandListener listener); - - /** - * Applies a tint to the icon drawable. Does not modify the current tint - * mode, which is {@link PorterDuff.Mode#SRC_IN} by default. - * <p> - * Subsequent calls to {@link android.view.MenuItem#setIcon(android.graphics.drawable.Drawable)} - * will automatically mutate the drawable and apply the specified tint and tint mode. - * - * @param tint the tint to apply, may be {@code null} to clear tint - * @return This menu item instance for call chaining - */ - public MenuItem setIconTintList(ColorStateList tint); - - /** - * Specifies the blending mode used to apply the tint specified by {@link - * #setIconTintList(ColorStateList)} to the icon drawable. The default mode is {@link - * PorterDuff.Mode#SRC_IN}. - * - * @param tintMode the blending mode used to apply the tint, may be {@code null} to clear tint - * @return This menu item instance for call chaining - */ - public MenuItem setIconTintMode(PorterDuff.Mode tintMode); } diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java index f08141c..a5696ee 100644 --- a/core/java/android/widget/ActionMenuPresenter.java +++ b/core/java/android/widget/ActionMenuPresenter.java @@ -21,10 +21,8 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.content.Context; -import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; -import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; @@ -64,6 +62,8 @@ public class ActionMenuPresenter extends BaseMenuPresenter private static final boolean ACTIONBAR_ANIMATIONS_ENABLED = false; private OverflowMenuButton mOverflowButton; + private Drawable mPendingOverflowIcon; + private boolean mPendingOverflowIconSet; private boolean mReserveOverflow; private boolean mReserveOverflowSet; private int mWidthLimit; @@ -85,8 +85,6 @@ public class ActionMenuPresenter extends BaseMenuPresenter private OpenOverflowRunnable mPostedOpenRunnable; private ActionMenuPopupCallback mPopupCallback; - private TintInfo mOverflowTintInfo; - final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback(); int mOpenSubMenuId; @@ -154,9 +152,13 @@ public class ActionMenuPresenter extends BaseMenuPresenter if (mReserveOverflow) { if (mOverflowButton == null) { mOverflowButton = new OverflowMenuButton(mSystemContext); + if (mPendingOverflowIconSet) { + mOverflowButton.setImageDrawable(mPendingOverflowIcon); + mPendingOverflowIcon = null; + mPendingOverflowIconSet = false; + } final int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); mOverflowButton.measure(spec, spec); - applyOverflowTint(); } width -= mOverflowButton.getMeasuredWidth(); } else { @@ -198,6 +200,24 @@ public class ActionMenuPresenter extends BaseMenuPresenter mExpandedActionViewsExclusive = isExclusive; } + public void setOverflowIcon(Drawable icon) { + if (mOverflowButton != null) { + mOverflowButton.setImageDrawable(icon); + } else { + mPendingOverflowIconSet = true; + mPendingOverflowIcon = icon; + } + } + + public Drawable getOverflowIcon() { + if (mOverflowButton != null) { + return mOverflowButton.getDrawable(); + } else if (mPendingOverflowIconSet) { + return mPendingOverflowIcon; + } + return null; + } + @Override public MenuView getMenuView(ViewGroup root) { MenuView oldMenuView = mMenuView; @@ -449,7 +469,6 @@ public class ActionMenuPresenter extends BaseMenuPresenter if (hasOverflow) { if (mOverflowButton == null) { mOverflowButton = new OverflowMenuButton(mSystemContext); - applyOverflowTint(); } ViewGroup parent = (ViewGroup) mOverflowButton.getParent(); if (parent != mMenuView) { @@ -764,40 +783,6 @@ public class ActionMenuPresenter extends BaseMenuPresenter } } - public void setOverflowTintList(ColorStateList tint) { - if (mOverflowTintInfo == null) { - mOverflowTintInfo = new TintInfo(); - } - mOverflowTintInfo.mTintList = tint; - mOverflowTintInfo.mHasTintList = true; - - applyOverflowTint(); - } - - public void setOverflowTintMode(PorterDuff.Mode tintMode) { - if (mOverflowTintInfo == null) { - mOverflowTintInfo = new TintInfo(); - } - mOverflowTintInfo.mTintMode = tintMode; - mOverflowTintInfo.mHasTintMode = true; - - applyOverflowTint(); - } - - private void applyOverflowTint() { - final TintInfo tintInfo = mOverflowTintInfo; - if (tintInfo != null && (tintInfo.mHasTintList || tintInfo.mHasTintMode)) { - if (mOverflowButton != null) { - if (tintInfo.mHasTintList) { - mOverflowButton.setImageTintList(tintInfo.mTintList); - } - if (tintInfo.mHasTintMode) { - mOverflowButton.setImageTintMode(tintInfo.mTintMode); - } - } - } - } - private static class SavedState implements Parcelable { public int openSubMenuId; @@ -1023,13 +1008,6 @@ public class ActionMenuPresenter extends BaseMenuPresenter } } - private static class TintInfo { - ColorStateList mTintList; - PorterDuff.Mode mTintMode; - boolean mHasTintMode; - boolean mHasTintList; - } - /** * This class holds layout information for a menu item. This is used to determine * pre- and post-layout information about menu items, which will then be used to @@ -1077,5 +1055,4 @@ public class ActionMenuPresenter extends BaseMenuPresenter this.animType = animType; } } - } diff --git a/core/java/android/widget/ActionMenuView.java b/core/java/android/widget/ActionMenuView.java index 278a8fb..1f02c3b 100644 --- a/core/java/android/widget/ActionMenuView.java +++ b/core/java/android/widget/ActionMenuView.java @@ -16,11 +16,11 @@ package android.widget; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.StyleRes; import android.content.Context; -import android.content.res.ColorStateList; import android.content.res.Configuration; -import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.ContextThemeWrapper; import android.view.Gravity; @@ -541,39 +541,35 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo dismissPopupMenus(); } - /** @hide */ - public boolean isOverflowReserved() { - return mReserveOverflow; - } - - /** @hide */ - public void setOverflowReserved(boolean reserveOverflow) { - mReserveOverflow = reserveOverflow; - } - /** - * Applies a tint to the overflow drawable. Does not modify the current tint - * mode, which is {@link PorterDuff.Mode#SRC_IN} by default. + * Set the icon to use for the overflow button. * - * @param tint the tint to apply, may be {@code null} to clear tint + * @param icon Drawable to set, may be null to clear the icon */ - public void setOverflowTintList(ColorStateList tint) { - if (mPresenter != null) { - mPresenter.setOverflowTintList(tint); - } + public void setOverflowIcon(@Nullable Drawable icon) { + getMenu(); + mPresenter.setOverflowIcon(icon); } /** - * Specifies the blending mode used to apply the tint specified by {@link - * #setOverflowTintList(ColorStateList)} to the overflow drawable. - * The default mode is {@link PorterDuff.Mode#SRC_IN}. + * Return the current drawable used as the overflow icon. * - * @param tintMode the blending mode used to apply the tint, may be {@code null} to clear tint + * @return The overflow icon drawable */ - public void setOverflowTintMode(PorterDuff.Mode tintMode) { - if (mPresenter != null) { - mPresenter.setOverflowTintMode(tintMode); - } + @Nullable + public Drawable getOverflowIcon() { + getMenu(); + return mPresenter.getOverflowIcon(); + } + + /** @hide */ + public boolean isOverflowReserved() { + return mReserveOverflow; + } + + /** @hide */ + public void setOverflowReserved(boolean reserveOverflow) { + mReserveOverflow = reserveOverflow; } @Override diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java index 62d948d..8ace0f3 100644 --- a/core/java/android/widget/Toolbar.java +++ b/core/java/android/widget/Toolbar.java @@ -25,9 +25,8 @@ import android.annotation.StringRes; import android.annotation.StyleRes; import android.app.ActionBar; import android.content.Context; -import android.content.res.ColorStateList; import android.content.res.TypedArray; -import android.graphics.PorterDuff; +import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; @@ -110,9 +109,6 @@ public class Toolbar extends ViewGroup { private ImageButton mNavButtonView; private ImageView mLogoView; - private TintInfo mOverflowTintInfo; - private TintInfo mNavTintInfo; - private Drawable mCollapseIcon; private CharSequence mCollapseDescription; private ImageButton mCollapseButtonView; @@ -275,21 +271,6 @@ public class Toolbar extends ViewGroup { if (!TextUtils.isEmpty(navDesc)) { setNavigationContentDescription(navDesc); } - - if (a.hasValue(R.styleable.Toolbar_overflowTint)) { - setOverflowTintList(a.getColorStateList(R.styleable.Toolbar_overflowTint)); - } - if (a.hasValue(R.styleable.Toolbar_overflowTintMode)) { - setOverflowTintMode(Drawable.parseTintMode( - a.getInt(R.styleable.Toolbar_overflowTintMode, -1), null)); - } - if (a.hasValue(R.styleable.Toolbar_navigationTint)) { - setNavigationTintList(a.getColorStateList(R.styleable.Toolbar_navigationTint)); - } - if (a.hasValue(R.styleable.Toolbar_navigationTintMode)) { - setNavigationTintMode(Drawable.parseTintMode( - a.getInt(R.styleable.Toolbar_navigationTintMode, -1), null)); - } a.recycle(); } @@ -830,101 +811,37 @@ public class Toolbar extends ViewGroup { } /** - * Applies a tint to the icon drawable. Does not modify the current tint - * mode, which is {@link PorterDuff.Mode#SRC_IN} by default. - * <p> - * Subsequent calls to {@link #setNavigationIcon(Drawable)} will automatically mutate - * the drawable and apply the specified tint and tint mode. - * - * @param tint the tint to apply, may be {@code null} to clear tint - * - * @attr ref android.R.styleable#Toolbar_navigationTint - */ - public void setNavigationTintList(ColorStateList tint) { - if (mNavTintInfo == null) { - mNavTintInfo = new TintInfo(); - } - mNavTintInfo.mTintList = tint; - mNavTintInfo.mHasTintList = true; - - applyNavigationTint(); - } - - /** - * Specifies the blending mode used to apply the tint specified by {@link - * #setNavigationTintList(ColorStateList)} to the navigation drawable. - * The default mode is {@link PorterDuff.Mode#SRC_IN}. - * - * @param tintMode the blending mode used to apply the tint, may be {@code null} to clear tint - * - * @attr ref android.R.styleable#Toolbar_navigationTintMode - */ - public void setNavigationTintMode(PorterDuff.Mode tintMode) { - if (mNavTintInfo == null) { - mNavTintInfo = new TintInfo(); - } - mNavTintInfo.mTintMode = tintMode; - mNavTintInfo.mHasTintMode = true; - - applyNavigationTint(); - } - - /** - * Applies a tint to the overflow drawable. Does not modify the current tint - * mode, which is {@link PorterDuff.Mode#SRC_IN} by default. + * Return the Menu shown in the toolbar. * - * @param tint the tint to apply, may be {@code null} to clear tint + * <p>Applications that wish to populate the toolbar's menu can do so from here. To use + * an XML menu resource, use {@link #inflateMenu(int)}.</p> * - * @attr ref android.R.styleable#Toolbar_overflowTint + * @return The toolbar's Menu */ - public void setOverflowTintList(ColorStateList tint) { - if (mMenuView != null) { - // If the menu view is available, directly set the tint - mMenuView.setOverflowTintList(tint); - } else { - // Otherwise we will record the value - if (mOverflowTintInfo == null) { - mOverflowTintInfo = new TintInfo(); - } - mOverflowTintInfo.mTintList = tint; - mOverflowTintInfo.mHasTintList = true; - } + public Menu getMenu() { + ensureMenu(); + return mMenuView.getMenu(); } /** - * Specifies the blending mode used to apply the tint specified by {@link - * #setOverflowTintList(ColorStateList)} to the overflow drawable. - * The default mode is {@link PorterDuff.Mode#SRC_IN}. - * - * @param tintMode the blending mode used to apply the tint, may be {@code null} to clear tint + * Set the icon to use for the overflow button. * - * @attr ref android.R.styleable#Toolbar_overflowTintMode + * @param icon Drawable to set, may be null to clear the icon */ - public void setOverflowTintMode(PorterDuff.Mode tintMode) { - if (mMenuView != null) { - // If the menu view is available, directly set the tint mode - mMenuView.setOverflowTintMode(tintMode); - } else { - // Otherwise we will record the value - if (mOverflowTintInfo == null) { - mOverflowTintInfo = new TintInfo(); - } - mOverflowTintInfo.mTintMode = tintMode; - mOverflowTintInfo.mHasTintMode = true; - } + public void setOverflowIcon(@Nullable Drawable icon) { + ensureMenu(); + mMenuView.setOverflowIcon(icon); } /** - * Return the Menu shown in the toolbar. - * - * <p>Applications that wish to populate the toolbar's menu can do so from here. To use - * an XML menu resource, use {@link #inflateMenu(int)}.</p> + * Return the current drawable used as the overflow icon. * - * @return The toolbar's Menu + * @return The overflow icon drawable */ - public Menu getMenu() { + @Nullable + public Drawable getOverflowIcon() { ensureMenu(); - return mMenuView.getMenu(); + return mMenuView.getOverflowIcon(); } private void ensureMenu() { @@ -950,17 +867,6 @@ public class Toolbar extends ViewGroup { lp.gravity = Gravity.END | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK); mMenuView.setLayoutParams(lp); addSystemView(mMenuView); - - if (mOverflowTintInfo != null) { - // If we have tint info for the overflow, set it on the menu view now - if (mOverflowTintInfo.mHasTintList) { - mMenuView.setOverflowTintList(mOverflowTintInfo.mTintList); - } - if (mOverflowTintInfo.mHasTintMode) { - mMenuView.setOverflowTintMode(mOverflowTintInfo.mTintMode); - } - mOverflowTintInfo = null; - } } } @@ -1114,7 +1020,6 @@ public class Toolbar extends ViewGroup { final LayoutParams lp = generateDefaultLayoutParams(); lp.gravity = Gravity.START | (mButtonGravity & Gravity.VERTICAL_GRAVITY_MASK); mNavButtonView.setLayoutParams(lp); - applyNavigationTint(); } } @@ -1133,7 +1038,6 @@ public class Toolbar extends ViewGroup { collapseActionView(); } }); - applyNavigationTint(); } } @@ -1885,30 +1789,6 @@ public class Toolbar extends ViewGroup { return mPopupContext; } - private void applyNavigationTint() { - final TintInfo tintInfo = mNavTintInfo; - if (tintInfo != null && (tintInfo.mHasTintList || tintInfo.mHasTintMode)) { - if (mNavButtonView != null) { - if (tintInfo.mHasTintList) { - mNavButtonView.setImageTintList(tintInfo.mTintList); - } - if (tintInfo.mHasTintMode) { - mNavButtonView.setImageTintMode(tintInfo.mTintMode); - } - } - - if (mCollapseButtonView != null) { - // We will use the same tint for the collapse button - if (tintInfo.mHasTintList) { - mCollapseButtonView.setImageTintList(tintInfo.mTintList); - } - if (tintInfo.mHasTintMode) { - mCollapseButtonView.setImageTintMode(tintInfo.mTintMode); - } - } - } - } - /** * Interface responsible for receiving menu item click events if the items themselves * do not have individual item click listeners. @@ -2136,11 +2016,4 @@ public class Toolbar extends ViewGroup { public void onRestoreInstanceState(Parcelable state) { } } - - private static class TintInfo { - ColorStateList mTintList; - PorterDuff.Mode mTintMode; - boolean mHasTintMode; - boolean mHasTintList; - } } diff --git a/core/java/com/android/internal/view/menu/ActionMenuItem.java b/core/java/com/android/internal/view/menu/ActionMenuItem.java index 00af401..ed676bb 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuItem.java +++ b/core/java/com/android/internal/view/menu/ActionMenuItem.java @@ -18,8 +18,6 @@ package com.android.internal.view.menu; import android.content.Context; import android.content.Intent; -import android.content.res.ColorStateList; -import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.view.ActionProvider; import android.view.ContextMenu.ContextMenuInfo; @@ -44,7 +42,6 @@ public class ActionMenuItem implements MenuItem { private Drawable mIconDrawable; private int mIconResId = NO_ICON; - private TintInfo mIconTintInfo; private Context mContext; @@ -161,14 +158,12 @@ public class ActionMenuItem implements MenuItem { public MenuItem setIcon(Drawable icon) { mIconDrawable = icon; mIconResId = NO_ICON; - applyIconTint(); return this; } public MenuItem setIcon(int iconRes) { mIconResId = iconRes; mIconDrawable = mContext.getDrawable(iconRes); - applyIconTint(); return this; } @@ -279,48 +274,4 @@ public class ActionMenuItem implements MenuItem { // No need to save the listener; ActionMenuItem does not support collapsing items. return this; } - - @Override - public MenuItem setIconTintList(ColorStateList tintList) { - if (mIconTintInfo == null) { - mIconTintInfo = new TintInfo(); - } - mIconTintInfo.mTintList = tintList; - mIconTintInfo.mHasTintList = true; - applyIconTint(); - return this; - } - - @Override - public MenuItem setIconTintMode(PorterDuff.Mode tintMode) { - if (mIconTintInfo == null) { - mIconTintInfo = new TintInfo(); - } - mIconTintInfo.mTintMode = tintMode; - mIconTintInfo.mHasTintMode = true; - applyIconTint(); - return this; - } - - private void applyIconTint() { - final TintInfo tintInfo = mIconTintInfo; - if (mIconDrawable != null && tintInfo != null) { - if (tintInfo.mHasTintList || tintInfo.mHasTintMode) { - mIconDrawable = mIconDrawable.mutate(); - if (tintInfo.mHasTintList) { - mIconDrawable.setTintList(tintInfo.mTintList); - } - if (tintInfo.mHasTintMode) { - mIconDrawable.setTintMode(tintInfo.mTintMode); - } - } - } - } - - private static class TintInfo { - ColorStateList mTintList; - PorterDuff.Mode mTintMode; - boolean mHasTintMode; - boolean mHasTintList; - } } diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java index ef4e546..3b1f20d 100644 --- a/core/java/com/android/internal/view/menu/MenuItemImpl.java +++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java @@ -21,8 +21,6 @@ import com.android.internal.view.menu.MenuView.ItemView; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; -import android.content.res.ColorStateList; -import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.util.Log; import android.view.ActionProvider; @@ -62,11 +60,6 @@ public final class MenuItemImpl implements MenuItem { * needed). */ private int mIconResId = NO_ICON; - - /** - * Tint info for the icon - */ - private TintInfo mIconTintInfo; /** The menu to which this item belongs */ private MenuBuilder mMenu; @@ -392,10 +385,10 @@ public final class MenuItemImpl implements MenuItem { } if (mIconResId != NO_ICON) { - mIconDrawable = mMenu.getContext().getDrawable(mIconResId); + Drawable icon = mMenu.getContext().getDrawable(mIconResId); mIconResId = NO_ICON; - applyIconTint(); - return mIconDrawable; + mIconDrawable = icon; + return icon; } return null; @@ -404,7 +397,6 @@ public final class MenuItemImpl implements MenuItem { public MenuItem setIcon(Drawable icon) { mIconResId = NO_ICON; mIconDrawable = icon; - applyIconTint(); mMenu.onItemsChanged(false); return this; @@ -678,48 +670,4 @@ public final class MenuItemImpl implements MenuItem { public boolean isActionViewExpanded() { return mIsActionViewExpanded; } - - @Override - public MenuItem setIconTintList(ColorStateList tintList) { - if (mIconTintInfo == null) { - mIconTintInfo = new TintInfo(); - } - mIconTintInfo.mTintList = tintList; - mIconTintInfo.mHasTintList = true; - applyIconTint(); - return this; - } - - @Override - public MenuItem setIconTintMode(PorterDuff.Mode tintMode) { - if (mIconTintInfo == null) { - mIconTintInfo = new TintInfo(); - } - mIconTintInfo.mTintMode = tintMode; - mIconTintInfo.mHasTintMode = true; - applyIconTint(); - return this; - } - - private void applyIconTint() { - final TintInfo tintInfo = mIconTintInfo; - if (mIconDrawable != null && tintInfo != null) { - if (tintInfo.mHasTintList || tintInfo.mHasTintMode) { - mIconDrawable = mIconDrawable.mutate(); - if (tintInfo.mHasTintList) { - mIconDrawable.setTintList(tintInfo.mTintList); - } - if (tintInfo.mHasTintMode) { - mIconDrawable.setTintMode(tintInfo.mTintMode); - } - } - } - } - - private static class TintInfo { - ColorStateList mTintList; - PorterDuff.Mode mTintMode; - boolean mHasTintMode; - boolean mHasTintList; - } } diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index a13f494..3f64e45 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -6646,33 +6646,6 @@ for more info. --> <attr name="actionProviderClass" format="string" /> - <!-- An optional tint for the item's icon. - See {@link android.view.MenuItem#setIconTintList(android.content.res.ColorStateList)} - for more info. --> - <attr name="iconTint" format="color" /> - - <!-- The blending mode used for tinting the item's icon - See {@link android.view.MenuItem#setIconTintMode(android.graphics.PorterDuff.Mode)} - for more info. --> - <attr name="iconTintMode"> - <!-- The tint is drawn on top of the drawable. - [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] --> - <enum name="src_over" value="3" /> - <!-- The tint is masked by the alpha channel of the drawable. The drawable’s - color channels are thrown out. [Sa * Da, Sc * Da] --> - <enum name="src_in" value="5" /> - <!-- The tint is drawn above the drawable, but with the drawable’s alpha - channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc] --> - <enum name="src_atop" value="9" /> - <!-- Multiplies the color and alpha channels of the drawable with those of - the tint. [Sa * Da, Sc * Dc] --> - <enum name="multiply" value="14" /> - <!-- [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] --> - <enum name="screen" value="15" /> - <!-- Combines the tint and drawable color and alpha channels, clamping the - result to valid color values. Saturate(S + D) --> - <enum name="add" value="16" /> - </attr> </declare-styleable> <!-- Attrbitutes for a ActvityChooserView. --> @@ -7786,52 +7759,6 @@ <!-- Text to set as the content description for the navigation button located at the start of the toolbar. --> <attr name="navigationContentDescription" format="string" /> - - <!-- Tint used for the navigation button --> - <attr name="navigationTint" format="color" /> - <!-- The blending mode used for tinting the navigation button --> - <attr name="navigationTintMode"> - <!-- The tint is drawn on top of the drawable. - [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] --> - <enum name="src_over" value="3" /> - <!-- The tint is masked by the alpha channel of the drawable. The drawable’s - color channels are thrown out. [Sa * Da, Sc * Da] --> - <enum name="src_in" value="5" /> - <!-- The tint is drawn above the drawable, but with the drawable’s alpha - channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc] --> - <enum name="src_atop" value="9" /> - <!-- Multiplies the color and alpha channels of the drawable with those of - the tint. [Sa * Da, Sc * Dc] --> - <enum name="multiply" value="14" /> - <!-- [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] --> - <enum name="screen" value="15" /> - <!-- Combines the tint and drawable color and alpha channels, clamping the - result to valid color values. Saturate(S + D). Only works on APIv 11+ --> - <enum name="add" value="16" /> - </attr> - - <!-- Tint used for the overflow button --> - <attr name="overflowTint" format="color" /> - <!-- The blending mode used for tinting the overflow button --> - <attr name="overflowTintMode"> - <!-- The tint is drawn on top of the drawable. - [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] --> - <enum name="src_over" value="3" /> - <!-- The tint is masked by the alpha channel of the drawable. The drawable’s - color channels are thrown out. [Sa * Da, Sc * Da] --> - <enum name="src_in" value="5" /> - <!-- The tint is drawn above the drawable, but with the drawable’s alpha - channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc] --> - <enum name="src_atop" value="9" /> - <!-- Multiplies the color and alpha channels of the drawable with those of - the tint. [Sa * Da, Sc * Dc] --> - <enum name="multiply" value="14" /> - <!-- [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] --> - <enum name="screen" value="15" /> - <!-- Combines the tint and drawable color and alpha channels, clamping the - result to valid color values. Saturate(S + D). Only works on APIv 11+ --> - <enum name="add" value="16" /> - </attr> </declare-styleable> <declare-styleable name="Toolbar_LayoutParams"> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index bbf4005..84b2ead 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2614,12 +2614,20 @@ <public type="attr" name="end" /> <public type="attr" name="windowLightStatusBar" /> <public type="attr" name="numbersInnerTextColor" /> - <public type="attr" name="iconTint" /> - <public type="attr" name="iconTintMode" /> - <public type="attr" name="overflowTint" /> - <public type="attr" name="overflowTintMode" /> - <public type="attr" name="navigationTint" /> - <public type="attr" name="navigationTintMode" /> + + <attr name="__reserved2" format="boolean" /> + <public type="attr" name="__reserved2" /> + <attr name="__reserved3" format="boolean" /> + <public type="attr" name="__reserved3" /> + <attr name="__reserved4" format="boolean" /> + <public type="attr" name="__reserved4" /> + <attr name="__reserved5" format="boolean" /> + <public type="attr" name="__reserved5" /> + <attr name="__reserved6" format="boolean" /> + <public type="attr" name="__reserved6" /> + <attr name="__reserved7" format="boolean" /> + <public type="attr" name="__reserved7" /> + <public type="attr" name="fullBackupContent" /> <public type="style" name="Widget.Material.Button.Colored" /> |