am dbdaa9b4: Merge "API council review feedback for ActionMenuView" into mnc-dev

* commit 'dbdaa9b41e418437ec29f7ea2fa27b859b3bef14':
  API council review feedback for ActionMenuView
This commit is contained in:
Chris Banes
2015-06-11 09:40:58 +00:00
committed by Android Git Automerger
11 changed files with 107 additions and 491 deletions

View File

@@ -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
@@ -35492,8 +35492,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);
@@ -39554,14 +39552,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();
}
@@ -41851,6 +41849,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();
@@ -41870,11 +41869,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);

View File

@@ -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
@@ -37772,8 +37772,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);
@@ -42148,14 +42146,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();
}
@@ -44445,6 +44443,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();
@@ -44464,11 +44463,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);

View File

@@ -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() {

View File

@@ -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);
}

View File

@@ -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;
}
}
}

View File

@@ -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,6 +541,27 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
dismissPopupMenus();
}
/**
* Set the icon to use for the overflow button.
*
* @param icon Drawable to set, may be null to clear the icon
*/
public void setOverflowIcon(@Nullable Drawable icon) {
getMenu();
mPresenter.setOverflowIcon(icon);
}
/**
* Return the current drawable used as the overflow icon.
*
* @return The overflow icon drawable
*/
@Nullable
public Drawable getOverflowIcon() {
getMenu();
return mPresenter.getOverflowIcon();
}
/** @hide */
public boolean isOverflowReserved() {
return mReserveOverflow;
@@ -551,31 +572,6 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
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.
*
* @param tint the tint to apply, may be {@code null} to clear tint
*/
public void setOverflowTintList(ColorStateList tint) {
if (mPresenter != null) {
mPresenter.setOverflowTintList(tint);
}
}
/**
* 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
*/
public void setOverflowTintMode(PorterDuff.Mode tintMode) {
if (mPresenter != null) {
mPresenter.setOverflowTintMode(tintMode);
}
}
@Override
protected LayoutParams generateDefaultLayoutParams() {
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,

View File

@@ -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();
}
@@ -829,91 +810,6 @@ public class Toolbar extends ViewGroup {
mNavButtonView.setOnClickListener(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 #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.
*
* @param tint the tint to apply, may be {@code null} to clear tint
*
* @attr ref android.R.styleable#Toolbar_overflowTint
*/
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;
}
}
/**
* 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
*
* @attr ref android.R.styleable#Toolbar_overflowTintMode
*/
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;
}
}
/**
* Return the Menu shown in the toolbar.
*
@@ -927,6 +823,27 @@ public class Toolbar extends ViewGroup {
return mMenuView.getMenu();
}
/**
* Set the icon to use for the overflow button.
*
* @param icon Drawable to set, may be null to clear the icon
*/
public void setOverflowIcon(@Nullable Drawable icon) {
ensureMenu();
mMenuView.setOverflowIcon(icon);
}
/**
* Return the current drawable used as the overflow icon.
*
* @return The overflow icon drawable
*/
@Nullable
public Drawable getOverflowIcon() {
ensureMenu();
return mMenuView.getOverflowIcon();
}
private void ensureMenu() {
ensureMenuView();
if (mMenuView.peekMenu() == null) {
@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -6651,33 +6651,6 @@ i
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 drawables
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 drawables 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. -->
@@ -7791,52 +7764,6 @@ i
<!-- 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 drawables
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 drawables 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 drawables
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 drawables 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">

View File

@@ -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" />