Merge "Use selectable to set focusable on root pref view" into mnc-ub-dev
diff --git a/design/base/android/support/design/widget/AnimationUtils.java b/design/base/android/support/design/widget/AnimationUtils.java
index a7854f5..8ef1722 100644
--- a/design/base/android/support/design/widget/AnimationUtils.java
+++ b/design/base/android/support/design/widget/AnimationUtils.java
@@ -16,7 +16,9 @@
package android.support.design.widget;
+import android.support.v4.view.animation.FastOutLinearInInterpolator;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
+import android.support.v4.view.animation.LinearOutSlowInInterpolator;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
@@ -26,6 +28,8 @@
static final Interpolator LINEAR_INTERPOLATOR = new LinearInterpolator();
static final Interpolator FAST_OUT_SLOW_IN_INTERPOLATOR = new FastOutSlowInInterpolator();
+ static final Interpolator FAST_OUT_LINEAR_IN_INTERPOLATOR = new FastOutLinearInInterpolator();
+ static final Interpolator LINEAR_OUT_SLOW_IN_INTERPOLATOR = new LinearOutSlowInInterpolator();
static final Interpolator DECELERATE_INTERPOLATOR = new DecelerateInterpolator();
/**
diff --git a/design/base/android/support/design/widget/CircularBorderDrawable.java b/design/base/android/support/design/widget/CircularBorderDrawable.java
index ff57777..7e2ebc7 100644
--- a/design/base/android/support/design/widget/CircularBorderDrawable.java
+++ b/design/base/android/support/design/widget/CircularBorderDrawable.java
@@ -54,6 +54,8 @@
private boolean mInvalidateShader = true;
+ private float mRotation;
+
public CircularBorderDrawable() {
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.STROKE);
@@ -98,8 +100,11 @@
rectF.right -= halfBorderWidth;
rectF.bottom -= halfBorderWidth;
+ canvas.save();
+ canvas.rotate(mRotation, rectF.centerX(), rectF.centerY());
// Draw the oval
canvas.drawOval(rectF, mPaint);
+ canvas.restore();
}
@Override
@@ -132,6 +137,13 @@
return mBorderWidth > 0 ? PixelFormat.TRANSLUCENT : PixelFormat.TRANSPARENT;
}
+ final void setRotation(float rotation) {
+ if (rotation != mRotation) {
+ mRotation = rotation;
+ invalidateSelf();
+ }
+ }
+
@Override
protected void onBoundsChange(Rect bounds) {
mInvalidateShader = true;
diff --git a/design/base/android/support/design/widget/FloatingActionButtonImpl.java b/design/base/android/support/design/widget/FloatingActionButtonImpl.java
index 18b0d366..097aedf 100644
--- a/design/base/android/support/design/widget/FloatingActionButtonImpl.java
+++ b/design/base/android/support/design/widget/FloatingActionButtonImpl.java
@@ -23,6 +23,7 @@
import android.support.annotation.Nullable;
import android.support.design.R;
import android.view.View;
+import android.view.ViewTreeObserver;
abstract class FloatingActionButtonImpl {
@@ -42,6 +43,8 @@
final View mView;
final ShadowViewDelegate mShadowViewDelegate;
+ private ViewTreeObserver.OnPreDrawListener mPreDrawListener;
+
FloatingActionButtonImpl(View view, ShadowViewDelegate shadowViewDelegate) {
mView = view;
mShadowViewDelegate = shadowViewDelegate;
@@ -68,7 +71,25 @@
abstract void show(@Nullable InternalVisibilityChangedListener listener);
- Drawable createBorderDrawable(int borderWidth, ColorStateList backgroundTint) {
+ void onAttachedToWindow() {
+ if (requirePreDrawListener()) {
+ ensurePreDrawListener();
+ mView.getViewTreeObserver().addOnPreDrawListener(mPreDrawListener);
+ }
+ }
+
+ void onDetachedFromWindow() {
+ if (mPreDrawListener != null) {
+ mView.getViewTreeObserver().removeOnPreDrawListener(mPreDrawListener);
+ mPreDrawListener = null;
+ }
+ }
+
+ boolean requirePreDrawListener() {
+ return false;
+ }
+
+ CircularBorderDrawable createBorderDrawable(int borderWidth, ColorStateList backgroundTint) {
final Resources resources = mView.getResources();
CircularBorderDrawable borderDrawable = newCircularDrawable();
borderDrawable.setGradientColors(
@@ -84,4 +105,19 @@
CircularBorderDrawable newCircularDrawable() {
return new CircularBorderDrawable();
}
+
+ void onPreDraw() {
+ }
+
+ private void ensurePreDrawListener() {
+ if (mPreDrawListener == null) {
+ mPreDrawListener = new ViewTreeObserver.OnPreDrawListener() {
+ @Override
+ public boolean onPreDraw() {
+ FloatingActionButtonImpl.this.onPreDraw();
+ return true;
+ }
+ };
+ }
+ }
}
diff --git a/design/base/android/support/design/widget/ShadowDrawableWrapper.java b/design/base/android/support/design/widget/ShadowDrawableWrapper.java
index dec1b62..bd7997f 100644
--- a/design/base/android/support/design/widget/ShadowDrawableWrapper.java
+++ b/design/base/android/support/design/widget/ShadowDrawableWrapper.java
@@ -71,6 +71,8 @@
private boolean mAddPaddingForCorners = true;
+ private float mRotation;
+
/**
* If shadow size is set to a value above max shadow, we print a warning
*/
@@ -195,7 +197,17 @@
super.draw(canvas);
}
+ final void setRotation(float rotation) {
+ if (mRotation != rotation) {
+ mRotation = rotation;
+ invalidateSelf();
+ }
+ }
+
private void drawShadow(Canvas canvas) {
+ final int rotateSaved = canvas.save();
+ canvas.rotate(mRotation, mContentBounds.centerX(), mContentBounds.centerY());
+
final float edgeShadowTop = -mCornerRadius - mShadowSize;
final float shadowOffset = mCornerRadius;
final boolean drawHorizontalEdges = mContentBounds.width() - 2 * shadowOffset > 0;
@@ -262,6 +274,8 @@
mContentBounds.height() - 2 * shadowOffset, -mCornerRadius, mEdgeShadowPaint);
}
canvas.restoreToCount(saved);
+
+ canvas.restoreToCount(rotateSaved);
}
private void buildShadowCorners() {
diff --git a/design/eclair-mr1/android/support/design/widget/FloatingActionButtonEclairMr1.java b/design/eclair-mr1/android/support/design/widget/FloatingActionButtonEclairMr1.java
index 8ff74a1..8ad581d 100644
--- a/design/eclair-mr1/android/support/design/widget/FloatingActionButtonEclairMr1.java
+++ b/design/eclair-mr1/android/support/design/widget/FloatingActionButtonEclairMr1.java
@@ -34,9 +34,9 @@
class FloatingActionButtonEclairMr1 extends FloatingActionButtonImpl {
- private Drawable mShapeDrawable;
- private Drawable mRippleDrawable;
- private Drawable mBorderDrawable;
+ Drawable mShapeDrawable;
+ Drawable mRippleDrawable;
+ CircularBorderDrawable mBorderDrawable;
private float mElevation;
private float mPressedTranslationZ;
@@ -180,7 +180,7 @@
Animation anim = android.view.animation.AnimationUtils.loadAnimation(
mView.getContext(), R.anim.design_fab_out);
- anim.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
+ anim.setInterpolator(AnimationUtils.FAST_OUT_LINEAR_IN_INTERPOLATOR);
anim.setDuration(SHOW_HIDE_ANIM_DURATION);
anim.setAnimationListener(new AnimationUtils.AnimationListenerAdapter() {
@Override
@@ -210,7 +210,7 @@
Animation anim = android.view.animation.AnimationUtils.loadAnimation(
mView.getContext(), R.anim.design_fab_in);
anim.setDuration(SHOW_HIDE_ANIM_DURATION);
- anim.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
+ anim.setInterpolator(AnimationUtils.LINEAR_OUT_SLOW_IN_INTERPOLATOR);
anim.setAnimationListener(new AnimationListenerAdapter() {
@Override
public void onAnimationEnd(Animation animation) {
diff --git a/design/honeycomb-mr1/android/support/design/widget/FloatingActionButtonHoneycombMr1.java b/design/honeycomb-mr1/android/support/design/widget/FloatingActionButtonHoneycombMr1.java
index 786d063..4749d59 100644
--- a/design/honeycomb-mr1/android/support/design/widget/FloatingActionButtonHoneycombMr1.java
+++ b/design/honeycomb-mr1/android/support/design/widget/FloatingActionButtonHoneycombMr1.java
@@ -31,6 +31,16 @@
}
@Override
+ boolean requirePreDrawListener() {
+ return true;
+ }
+
+ @Override
+ void onPreDraw() {
+ updateFromViewRotation(mView.getRotation());
+ }
+
+ @Override
void hide(@Nullable final InternalVisibilityChangedListener listener) {
if (mIsHiding || mView.getVisibility() != View.VISIBLE) {
// A hide animation is in progress, or we're already hidden. Skip the call
@@ -52,7 +62,7 @@
.scaleY(0f)
.alpha(0f)
.setDuration(SHOW_HIDE_ANIM_DURATION)
- .setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR)
+ .setInterpolator(AnimationUtils.FAST_OUT_LINEAR_IN_INTERPOLATOR)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
@@ -89,7 +99,7 @@
.scaleY(1f)
.alpha(1f)
.setDuration(SHOW_HIDE_ANIM_DURATION)
- .setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR)
+ .setInterpolator(AnimationUtils.LINEAR_OUT_SLOW_IN_INTERPOLATOR)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
@@ -114,4 +124,14 @@
}
}
}
+
+ private void updateFromViewRotation(float rotation) {
+ // Offset any View rotation
+ if (mShadowDrawable != null) {
+ mShadowDrawable.setRotation(-rotation);
+ }
+ if (mBorderDrawable != null) {
+ mBorderDrawable.setRotation(-rotation);
+ }
+ }
}
diff --git a/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java b/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java
index eb4360b..25e9dd9 100644
--- a/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java
+++ b/design/lollipop/android/support/design/widget/FloatingActionButtonLollipop.java
@@ -125,6 +125,11 @@
// no-op
}
+ @Override
+ boolean requirePreDrawListener() {
+ return false;
+ }
+
private Animator setupAnimator(Animator animator) {
animator.setInterpolator(mInterpolator);
return animator;
diff --git a/design/src/android/support/design/widget/CollapsingToolbarLayout.java b/design/src/android/support/design/widget/CollapsingToolbarLayout.java
index d20c420..af53b7b 100644
--- a/design/src/android/support/design/widget/CollapsingToolbarLayout.java
+++ b/design/src/android/support/design/widget/CollapsingToolbarLayout.java
@@ -514,7 +514,10 @@
if (mScrimAnimator == null) {
mScrimAnimator = ViewUtils.createAnimator();
mScrimAnimator.setDuration(SCRIM_ANIMATION_DURATION);
- mScrimAnimator.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
+ mScrimAnimator.setInterpolator(
+ targetAlpha > mScrimAlpha
+ ? AnimationUtils.FAST_OUT_LINEAR_IN_INTERPOLATOR
+ : AnimationUtils.LINEAR_OUT_SLOW_IN_INTERPOLATOR);
mScrimAnimator.setUpdateListener(new ValueAnimatorCompat.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimatorCompat animator) {
diff --git a/design/src/android/support/design/widget/FloatingActionButton.java b/design/src/android/support/design/widget/FloatingActionButton.java
index 099099d..6f80498 100644
--- a/design/src/android/support/design/widget/FloatingActionButton.java
+++ b/design/src/android/support/design/widget/FloatingActionButton.java
@@ -324,6 +324,18 @@
}
@Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ mImpl.onAttachedToWindow();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ mImpl.onDetachedFromWindow();
+ }
+
+ @Override
protected void drawableStateChanged() {
super.drawableStateChanged();
mImpl.onDrawableStateChanged(getDrawableState());
diff --git a/design/src/android/support/design/widget/TabLayout.java b/design/src/android/support/design/widget/TabLayout.java
index 2410a32..89ca383 100755
--- a/design/src/android/support/design/widget/TabLayout.java
+++ b/design/src/android/support/design/widget/TabLayout.java
@@ -39,7 +39,7 @@
import android.support.v4.view.ViewPager;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.app.ActionBar;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.text.Layout;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -1071,7 +1071,7 @@
*/
@NonNull
public Tab setIcon(@DrawableRes int resId) {
- return setIcon(TintManager.getDrawable(mParent.getContext(), resId));
+ return setIcon(AppCompatDrawableManager.get().getDrawable(mParent.getContext(), resId));
}
/**
@@ -1176,7 +1176,8 @@
super(context);
mTab = tab;
if (mTabBackgroundResId != 0) {
- setBackgroundDrawable(TintManager.getDrawable(context, mTabBackgroundResId));
+ setBackgroundDrawable(
+ AppCompatDrawableManager.get().getDrawable(context, mTabBackgroundResId));
}
ViewCompat.setPaddingRelative(this, mTabPaddingStart, mTabPaddingTop,
mTabPaddingEnd, mTabPaddingBottom);
diff --git a/design/src/android/support/design/widget/TextInputLayout.java b/design/src/android/support/design/widget/TextInputLayout.java
index 404bb32..b9319b5 100644
--- a/design/src/android/support/design/widget/TextInputLayout.java
+++ b/design/src/android/support/design/widget/TextInputLayout.java
@@ -32,7 +32,7 @@
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPropertyAnimatorListenerAdapter;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
@@ -416,7 +416,7 @@
ViewCompat.animate(mErrorView)
.alpha(1f)
.setDuration(ANIMATION_DURATION)
- .setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR)
+ .setInterpolator(AnimationUtils.LINEAR_OUT_SLOW_IN_INTERPOLATOR)
.setListener(new ViewPropertyAnimatorListenerAdapter() {
@Override
public void onAnimationStart(View view) {
@@ -434,7 +434,7 @@
ViewCompat.animate(mErrorView)
.alpha(0f)
.setDuration(ANIMATION_DURATION)
- .setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR)
+ .setInterpolator(AnimationUtils.FAST_OUT_LINEAR_IN_INTERPOLATOR)
.setListener(new ViewPropertyAnimatorListenerAdapter() {
@Override
public void onAnimationEnd(View view) {
@@ -536,9 +536,9 @@
ViewCompat.setBackgroundTintList(mEditText,
ColorStateList.valueOf(mCounterView.getCurrentTextColor()));
} else {
- final TintManager tintManager = TintManager.get(getContext());
ViewCompat.setBackgroundTintList(mEditText,
- tintManager.getTintList(R.drawable.abc_edit_text_material));
+ AppCompatDrawableManager.get()
+ .getTintList(getContext(), R.drawable.abc_edit_text_material));
}
}
diff --git a/scripts/support-deps-license.sh b/scripts/support-deps-license.sh
new file mode 100755
index 0000000..55efac6
--- /dev/null
+++ b/scripts/support-deps-license.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+#
+# Copyright (C) 2015 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+#
+# This needs to be ran from the root folder in the Android source tree
+#
+
+function parentdirname() {
+ FULL_PATH=`readlink -f $1`
+ echo `dirname $FULL_PATH`
+}
+
+function rundeps() {
+ LIB_PATH=$1
+ LIB_PARENT_PATH=`parentdirname $LIB_PATH`
+ OUTPUT_FILE=`basename $LIB_PARENT_PATH`-`basename $LIB_PATH`.log
+ make deps-license PROJ_PATH=$LIB_PATH DEP_PATH=frameworks/support > $OUTPUT_FILE
+}
+
+rundeps frameworks/support/customtabs
+rundeps frameworks/support/design
+rundeps frameworks/support/percent
+rundeps frameworks/support/recommendation
+rundeps frameworks/support/v4
+rundeps frameworks/support/v7/appcompat
+rundeps frameworks/support/v7/cardview
+rundeps frameworks/support/v7/mediarouter
+rundeps frameworks/support/v7/palette
+rundeps frameworks/support/v7/gridlayout
+rundeps frameworks/support/v7/preference
+rundeps frameworks/support/v7/recyclerview
+rundeps frameworks/support/v13
+rundeps frameworks/support/v14/preference
+rundeps frameworks/support/v17/leanback
+rundeps frameworks/support/v17/preference-leanback
diff --git a/v17/leanback/res/layout/lb_search_fragment.xml b/v17/leanback/res/layout/lb_search_fragment.xml
index 57a46b4..25150d3 100644
--- a/v17/leanback/res/layout/lb_search_fragment.xml
+++ b/v17/leanback/res/layout/lb_search_fragment.xml
@@ -18,8 +18,6 @@
android:id="@+id/lb_search_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="@dimen/lb_search_bar_padding_top"
- android:clipToPadding="false"
android:clipChildren="false"
>
<FrameLayout
@@ -28,6 +26,7 @@
android:layout_height="match_parent"/>
<android.support.v17.leanback.widget.SearchBar
android:id="@+id/lb_search_bar"
+ android:layout_marginTop="@dimen/lb_search_bar_padding_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clipChildren="false"
diff --git a/v17/leanback/res/values/dimens.xml b/v17/leanback/res/values/dimens.xml
index 8b10d5d..66417c0 100644
--- a/v17/leanback/res/values/dimens.xml
+++ b/v17/leanback/res/values/dimens.xml
@@ -180,7 +180,7 @@
<!-- Search Fragment -->
- <dimen name="lb_search_browse_rows_align_top">120dp</dimen>
+ <dimen name="lb_search_browse_rows_align_top">147dp</dimen>
<dimen name="lb_search_browse_row_padding_start">56dp</dimen>
<dimen name="lb_search_orb_size">52dp</dimen>
diff --git a/v4/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java b/v4/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java
index 5439972..64f1969 100644
--- a/v4/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java
+++ b/v4/kitkat/android/support/v4/view/ViewPropertyAnimatorCompatKK.java
@@ -22,12 +22,16 @@
public static void setUpdateListener(final View view,
final ViewPropertyAnimatorUpdateListener listener) {
- view.animate().setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator valueAnimator) {
- listener.onAnimationUpdate(view);
- }
- });
+ ValueAnimator.AnimatorUpdateListener wrapped = null;
+ if (listener != null) {
+ wrapped = new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator valueAnimator) {
+ listener.onAnimationUpdate(view);
+ }
+ };
+ }
+ view.animate().setUpdateListener(wrapped);
}
}
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV7.java b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV7.java
index c61f979..72f2af7 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV7.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatDelegateImplV7.java
@@ -54,10 +54,10 @@
import android.support.v7.internal.view.menu.MenuPresenter;
import android.support.v7.internal.view.menu.MenuView;
import android.support.v7.internal.widget.ActionBarContextView;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.ContentFrameLayout;
import android.support.v7.internal.widget.DecorContentParent;
import android.support.v7.internal.widget.FitWindowsViewGroup;
-import android.support.v7.internal.widget.TintManager;
import android.support.v7.internal.widget.ViewStubCompat;
import android.support.v7.internal.widget.ViewUtils;
import android.support.v7.view.ActionMode;
@@ -2013,7 +2013,7 @@
@Override
public void setBackgroundResource(int resid) {
- setBackgroundDrawable(TintManager.getDrawable(getContext(), resid));
+ setBackgroundDrawable(AppCompatDrawableManager.get().getDrawable(getContext(), resid));
}
private boolean isOutOfBounds(int x, int y) {
diff --git a/v7/appcompat/src/android/support/v7/internal/app/WindowDecorActionBar.java b/v7/appcompat/src/android/support/v7/internal/app/WindowDecorActionBar.java
index 968c781..341217d 100644
--- a/v7/appcompat/src/android/support/v7/internal/app/WindowDecorActionBar.java
+++ b/v7/appcompat/src/android/support/v7/internal/app/WindowDecorActionBar.java
@@ -42,9 +42,9 @@
import android.support.v7.internal.widget.ActionBarContainer;
import android.support.v7.internal.widget.ActionBarContextView;
import android.support.v7.internal.widget.ActionBarOverlayLayout;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.DecorToolbar;
import android.support.v7.internal.widget.ScrollingTabContainerView;
-import android.support.v7.internal.widget.TintManager;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
@@ -58,7 +58,6 @@
import android.view.Window;
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.AccelerateInterpolator;
-import android.view.animation.AnimationUtils;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.widget.SpinnerAdapter;
@@ -132,8 +131,6 @@
private boolean mShowHideAnimationEnabled;
boolean mHideOnContentScroll;
- private TintManager mTintManager;
-
final ViewPropertyAnimatorListener mHideListener = new ViewPropertyAnimatorListenerAdapter() {
@Override
public void onAnimationEnd(View view) {
@@ -1184,7 +1181,7 @@
@Override
public Tab setIcon(int resId) {
- return setIcon(getTintManager().getDrawable(resId));
+ return setIcon(AppCompatDrawableManager.get().getDrawable(mContext, resId));
}
@Override
@@ -1340,12 +1337,4 @@
setDisplayHomeAsUpEnabled(enable);
}
}
-
- TintManager getTintManager() {
- if (mTintManager == null) {
- mTintManager = TintManager.get(mContext);
- }
- return mTintManager;
- }
-
}
diff --git a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java
index ed2afc0..ccf3c49 100644
--- a/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java
+++ b/v7/appcompat/src/android/support/v7/internal/view/menu/MenuItemImpl.java
@@ -21,11 +21,10 @@
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Build;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.ActionProvider;
import android.support.v4.internal.view.SupportMenuItem;
+import android.support.v4.view.ActionProvider;
import android.support.v4.view.MenuItemCompat;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.Log;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
@@ -419,7 +418,8 @@
}
if (mIconResId != NO_ICON) {
- Drawable icon = TintManager.getDrawable(mMenu.getContext(), mIconResId);
+ Drawable icon = AppCompatDrawableManager.get()
+ .getDrawable(mMenu.getContext(), mIconResId);
mIconResId = NO_ICON;
mIconDrawable = icon;
return icon;
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/TintManager.java b/v7/appcompat/src/android/support/v7/internal/widget/AppCompatDrawableManager.java
similarity index 80%
rename from v7/appcompat/src/android/support/v7/internal/widget/TintManager.java
rename to v7/appcompat/src/android/support/v7/internal/widget/AppCompatDrawableManager.java
index bfaa570..8f0b84c 100644
--- a/v7/appcompat/src/android/support/v7/internal/widget/TintManager.java
+++ b/v7/appcompat/src/android/support/v7/internal/widget/AppCompatDrawableManager.java
@@ -25,8 +25,10 @@
import android.graphics.drawable.DrawableContainer;
import android.graphics.drawable.InsetDrawable;
import android.graphics.drawable.LayerDrawable;
-import android.graphics.drawable.StateListDrawable;
import android.os.Build;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v4.graphics.ColorUtils;
import android.support.v4.graphics.drawable.DrawableCompat;
@@ -34,9 +36,8 @@
import android.support.v7.appcompat.R;
import android.util.Log;
import android.util.SparseArray;
-import android.view.View;
-import java.lang.ref.WeakReference;
+import java.util.ArrayList;
import java.util.WeakHashMap;
import static android.support.v7.internal.widget.ThemeUtils.getDisabledThemeAttrColor;
@@ -46,15 +47,34 @@
/**
* @hide
*/
-public final class TintManager {
+public final class AppCompatDrawableManager {
- public static final boolean SHOULD_BE_USED = Build.VERSION.SDK_INT < 21;
+ public interface InflateDelegate {
+ /**
+ * Allows custom inflation of a drawable resource.
+ *
+ * @param context Context to inflate/create with
+ * @param resId Resource ID of the drawable
+ * @return the created drawable, or {@code null} to leave inflation to
+ * AppCompatDrawableManager.
+ */
+ @Nullable
+ Drawable onInflateDrawable(@NonNull Context context, @DrawableRes int resId);
+ }
private static final String TAG = "TintManager";
private static final boolean DEBUG = false;
private static final PorterDuff.Mode DEFAULT_MODE = PorterDuff.Mode.SRC_IN;
- private static final WeakHashMap<Context, TintManager> INSTANCE_CACHE = new WeakHashMap<>();
+ private static AppCompatDrawableManager INSTANCE;
+
+ public static AppCompatDrawableManager get() {
+ if (INSTANCE == null) {
+ INSTANCE = new AppCompatDrawableManager();
+ }
+ return INSTANCE;
+ }
+
private static final ColorFilterLruCache COLOR_FILTER_CACHE = new ColorFilterLruCache(6);
/**
@@ -134,46 +154,27 @@
R.drawable.abc_btn_radio_material
};
- private final WeakReference<Context> mContextRef;
- private SparseArray<ColorStateList> mTintLists;
- private ColorStateList mDefaultColorStateList;
+ private WeakHashMap<Context, SparseArray<ColorStateList>> mTintLists;
+ private ArrayList<InflateDelegate> mDelegates;
- /**
- * A helper method to get a {@link TintManager} and then call {@link #getDrawable(int)}.
- * This method should not be used routinely.
- */
- public static Drawable getDrawable(Context context, int resId) {
- if (isInTintList(resId)) {
- return TintManager.get(context).getDrawable(resId);
- } else {
- return ContextCompat.getDrawable(context, resId);
+ public Drawable getDrawable(@NonNull Context context, @DrawableRes int resId) {
+ return getDrawable(context, resId, false);
+ }
+
+ public Drawable getDrawable(@NonNull Context context, @DrawableRes int resId,
+ boolean failIfNotKnown) {
+ // Let the InflateDelegates have a go first
+ if (mDelegates != null) {
+ for (int i = 0, count = mDelegates.size(); i < count; i++) {
+ final InflateDelegate delegate = mDelegates.get(i);
+ final Drawable result = delegate.onInflateDrawable(context, resId);
+ if (result != null) {
+ return result;
+ }
+ }
}
- }
- /**
- * Get a {@link android.support.v7.internal.widget.TintManager} instance.
- */
- public static TintManager get(Context context) {
- TintManager tm = INSTANCE_CACHE.get(context);
- if (tm == null) {
- tm = new TintManager(context);
- INSTANCE_CACHE.put(context, tm);
- }
- return tm;
- }
-
- private TintManager(Context context) {
- mContextRef = new WeakReference<>(context);
- }
-
- public Drawable getDrawable(int resId) {
- return getDrawable(resId, false);
- }
-
- public Drawable getDrawable(int resId, boolean failIfNotKnown) {
- final Context context = mContextRef.get();
- if (context == null) return null;
-
+ // The delegates failed so we'll carry on
Drawable drawable = ContextCompat.getDrawable(context, resId);
if (drawable != null) {
@@ -182,7 +183,7 @@
drawable = drawable.mutate();
}
- final ColorStateList tintList = getTintList(resId);
+ final ColorStateList tintList = getTintList(context, resId);
if (tintList != null) {
// First wrap the Drawable and set the tint list
drawable = DrawableCompat.wrap(drawable);
@@ -195,8 +196,8 @@
}
} else if (resId == R.drawable.abc_cab_background_top_material) {
return new LayerDrawable(new Drawable[]{
- getDrawable(R.drawable.abc_cab_background_internal_bg),
- getDrawable(R.drawable.abc_cab_background_top_mtrl_alpha)
+ getDrawable(context, R.drawable.abc_cab_background_internal_bg),
+ getDrawable(context, R.drawable.abc_cab_background_top_mtrl_alpha)
});
} else if (resId == R.drawable.abc_seekbar_track_material) {
LayerDrawable ld = (LayerDrawable) drawable;
@@ -207,8 +208,8 @@
setPorterDuffColorFilter(ld.findDrawableByLayerId(android.R.id.progress),
getThemeAttrColor(context, R.attr.colorControlActivated), DEFAULT_MODE);
} else {
- final boolean usedColorFilter = tintDrawableUsingColorFilter(resId, drawable);
- if (!usedColorFilter && failIfNotKnown) {
+ final boolean tinted = tintDrawableUsingColorFilter(context, resId, drawable);
+ if (!tinted && failIfNotKnown) {
// If we didn't tint using a ColorFilter, and we're set to fail if we don't
// know the id, return null
drawable = null;
@@ -218,10 +219,8 @@
return drawable;
}
- public final boolean tintDrawableUsingColorFilter(final int resId, Drawable drawable) {
- final Context context = mContextRef.get();
- if (context == null) return false;
-
+ public final boolean tintDrawableUsingColorFilter(@NonNull Context context,
+ @DrawableRes final int resId, @NonNull Drawable drawable) {
PorterDuff.Mode tintMode = DEFAULT_MODE;
boolean colorAttrSet = false;
int colorAttr = 0;
@@ -260,6 +259,21 @@
return false;
}
+ public void addDelegate(@NonNull InflateDelegate delegate) {
+ if (mDelegates == null) {
+ mDelegates = new ArrayList<>();
+ }
+ if (!mDelegates.contains(delegate)) {
+ mDelegates.add(delegate);
+ }
+ }
+
+ public void removeDelegate(@NonNull InflateDelegate delegate) {
+ if (mDelegates != null) {
+ mDelegates.remove(delegate);
+ }
+ }
+
private static boolean arrayContains(int[] array, int value) {
for (int id : array) {
if (id == value) {
@@ -269,16 +283,6 @@
return false;
}
- private static boolean isInTintList(int drawableId) {
- return arrayContains(TINT_COLOR_CONTROL_NORMAL, drawableId) ||
- arrayContains(COLORFILTER_TINT_COLOR_CONTROL_NORMAL, drawableId) ||
- arrayContains(COLORFILTER_COLOR_CONTROL_ACTIVATED, drawableId) ||
- arrayContains(TINT_COLOR_CONTROL_STATE_LIST, drawableId) ||
- arrayContains(COLORFILTER_COLOR_BACKGROUND_MULTIPLY, drawableId) ||
- arrayContains(TINT_CHECKABLE_BUTTON_LIST, drawableId) ||
- drawableId == R.drawable.abc_cab_background_top_material;
- }
-
final PorterDuff.Mode getTintMode(final int resId) {
PorterDuff.Mode mode = null;
@@ -289,12 +293,9 @@
return mode;
}
- public final ColorStateList getTintList(int resId) {
- final Context context = mContextRef.get();
- if (context == null) return null;
-
+ public final ColorStateList getTintList(@NonNull Context context, @DrawableRes int resId) {
// Try the cache first (if it exists)
- ColorStateList tint = mTintLists != null ? mTintLists.get(resId) : null;
+ ColorStateList tint = getTintListFromCache(context, resId);
if (tint == null) {
// ...if the cache did not contain a color state list, try and create one
@@ -315,7 +316,7 @@
} else if (arrayContains(TINT_COLOR_CONTROL_NORMAL, resId)) {
tint = getThemeAttrColorStateList(context, R.attr.colorControlNormal);
} else if (arrayContains(TINT_COLOR_CONTROL_STATE_LIST, resId)) {
- tint = getDefaultColorStateList(context);
+ tint = createDefaultColorStateList(context);
} else if (arrayContains(TINT_CHECKABLE_BUTTON_LIST, resId)) {
tint = createCheckableButtonColorStateList(context);
} else if (resId == R.drawable.abc_seekbar_thumb_material) {
@@ -323,65 +324,78 @@
}
if (tint != null) {
- if (mTintLists == null) {
- // If our tint list cache hasn't been set up yet, create it
- mTintLists = new SparseArray<>();
- }
- // Add any newly created ColorStateList to the cache
- mTintLists.append(resId, tint);
+ addTintListToCache(context, resId, tint);
}
}
return tint;
}
- private ColorStateList getDefaultColorStateList(Context context) {
- if (mDefaultColorStateList == null) {
- /**
- * Generate the default color state list which uses the colorControl attributes.
- * Order is important here. The default enabled state needs to go at the bottom.
- */
-
- final int colorControlNormal = getThemeAttrColor(context, R.attr.colorControlNormal);
- final int colorControlActivated = getThemeAttrColor(context,
- R.attr.colorControlActivated);
-
- final int[][] states = new int[7][];
- final int[] colors = new int[7];
- int i = 0;
-
- // Disabled state
- states[i] = ThemeUtils.DISABLED_STATE_SET;
- colors[i] = getDisabledThemeAttrColor(context, R.attr.colorControlNormal);
- i++;
-
- states[i] = ThemeUtils.FOCUSED_STATE_SET;
- colors[i] = colorControlActivated;
- i++;
-
- states[i] = ThemeUtils.ACTIVATED_STATE_SET;
- colors[i] = colorControlActivated;
- i++;
-
- states[i] = ThemeUtils.PRESSED_STATE_SET;
- colors[i] = colorControlActivated;
- i++;
-
- states[i] = ThemeUtils.CHECKED_STATE_SET;
- colors[i] = colorControlActivated;
- i++;
-
- states[i] = ThemeUtils.SELECTED_STATE_SET;
- colors[i] = colorControlActivated;
- i++;
-
- // Default enabled state
- states[i] = ThemeUtils.EMPTY_STATE_SET;
- colors[i] = colorControlNormal;
- i++;
-
- mDefaultColorStateList = new ColorStateList(states, colors);
+ private ColorStateList getTintListFromCache(@NonNull Context context, @DrawableRes int resId) {
+ if (mTintLists != null) {
+ final SparseArray<ColorStateList> tints = mTintLists.get(context);
+ return tints != null ? tints.get(resId) : null;
}
- return mDefaultColorStateList;
+ return null;
+ }
+
+ private void addTintListToCache(@NonNull Context context, @DrawableRes int resId,
+ @NonNull ColorStateList tintList) {
+ if (mTintLists == null) {
+ mTintLists = new WeakHashMap<>();
+ }
+ SparseArray<ColorStateList> themeTints = mTintLists.get(context);
+ if (themeTints == null) {
+ themeTints = new SparseArray<>();
+ mTintLists.put(context, themeTints);
+ }
+ themeTints.append(resId, tintList);
+ }
+
+ private ColorStateList createDefaultColorStateList(Context context) {
+ /**
+ * Generate the default color state list which uses the colorControl attributes.
+ * Order is important here. The default enabled state needs to go at the bottom.
+ */
+
+ final int colorControlNormal = getThemeAttrColor(context, R.attr.colorControlNormal);
+ final int colorControlActivated = getThemeAttrColor(context,
+ R.attr.colorControlActivated);
+
+ final int[][] states = new int[7][];
+ final int[] colors = new int[7];
+ int i = 0;
+
+ // Disabled state
+ states[i] = ThemeUtils.DISABLED_STATE_SET;
+ colors[i] = getDisabledThemeAttrColor(context, R.attr.colorControlNormal);
+ i++;
+
+ states[i] = ThemeUtils.FOCUSED_STATE_SET;
+ colors[i] = colorControlActivated;
+ i++;
+
+ states[i] = ThemeUtils.ACTIVATED_STATE_SET;
+ colors[i] = colorControlActivated;
+ i++;
+
+ states[i] = ThemeUtils.PRESSED_STATE_SET;
+ colors[i] = colorControlActivated;
+ i++;
+
+ states[i] = ThemeUtils.CHECKED_STATE_SET;
+ colors[i] = colorControlActivated;
+ i++;
+
+ states[i] = ThemeUtils.SELECTED_STATE_SET;
+ colors[i] = colorControlActivated;
+ i++;
+
+ // Default enabled state
+ states[i] = ThemeUtils.EMPTY_STATE_SET;
+ colors[i] = colorControlNormal;
+ i++;
+
+ return new ColorStateList(states, colors);
}
private ColorStateList createCheckableButtonColorStateList(Context context) {
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/TintContextWrapper.java b/v7/appcompat/src/android/support/v7/internal/widget/TintContextWrapper.java
index 3fdd971..f9bc275 100644
--- a/v7/appcompat/src/android/support/v7/internal/widget/TintContextWrapper.java
+++ b/v7/appcompat/src/android/support/v7/internal/widget/TintContextWrapper.java
@@ -45,7 +45,7 @@
@Override
public Resources getResources() {
if (mResources == null) {
- mResources = new TintResources(super.getResources(), TintManager.get(this));
+ mResources = new TintResources(super.getResources());
}
return mResources;
}
@@ -53,13 +53,9 @@
/**
* This class allows us to intercept calls so that we can tint resources (if applicable).
*/
- static class TintResources extends ResourcesWrapper {
-
- private final TintManager mTintManager;
-
- public TintResources(Resources resources, TintManager tintManager) {
+ class TintResources extends ResourcesWrapper {
+ public TintResources(Resources resources) {
super(resources);
- mTintManager = tintManager;
}
/**
@@ -71,7 +67,8 @@
public Drawable getDrawable(int id) throws NotFoundException {
Drawable d = super.getDrawable(id);
if (d != null) {
- mTintManager.tintDrawableUsingColorFilter(id, d);
+ AppCompatDrawableManager.get().tintDrawableUsingColorFilter(
+ TintContextWrapper.this, id, d);
}
return d;
}
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/TintTypedArray.java b/v7/appcompat/src/android/support/v7/internal/widget/TintTypedArray.java
index 09e2b56..eae72d6 100644
--- a/v7/appcompat/src/android/support/v7/internal/widget/TintTypedArray.java
+++ b/v7/appcompat/src/android/support/v7/internal/widget/TintTypedArray.java
@@ -36,8 +36,6 @@
private final Context mContext;
private final TypedArray mWrapped;
- private TintManager mTintManager;
-
public static TintTypedArray obtainStyledAttributes(Context context, AttributeSet set,
int[] attrs) {
TypedArray array = context.obtainStyledAttributes(set, attrs);
@@ -59,7 +57,7 @@
if (mWrapped.hasValue(index)) {
final int resourceId = mWrapped.getResourceId(index, 0);
if (resourceId != 0) {
- return getTintManager().getDrawable(resourceId);
+ return AppCompatDrawableManager.get().getDrawable(mContext, resourceId);
}
}
return mWrapped.getDrawable(index);
@@ -69,7 +67,7 @@
if (mWrapped.hasValue(index)) {
final int resourceId = mWrapped.getResourceId(index, 0);
if (resourceId != 0) {
- return getTintManager().getDrawable(resourceId, true);
+ return AppCompatDrawableManager.get().getDrawable(mContext, resourceId, true);
}
}
return null;
@@ -187,11 +185,4 @@
return mWrapped.getChangingConfigurations();
}
- public TintManager getTintManager() {
- if (mTintManager == null) {
- mTintManager = TintManager.get(mContext);
- }
- return mTintManager;
- }
-
}
diff --git a/v7/appcompat/src/android/support/v7/internal/widget/ToolbarWidgetWrapper.java b/v7/appcompat/src/android/support/v7/internal/widget/ToolbarWidgetWrapper.java
index 59b52c5..8828769 100644
--- a/v7/appcompat/src/android/support/v7/internal/widget/ToolbarWidgetWrapper.java
+++ b/v7/appcompat/src/android/support/v7/internal/widget/ToolbarWidgetWrapper.java
@@ -85,7 +85,7 @@
private int mNavigationMode = ActionBar.NAVIGATION_MODE_STANDARD;
- private final TintManager mTintManager;
+ private final AppCompatDrawableManager mDrawableManager;
private int mDefaultNavigationContentDescription = 0;
private Drawable mDefaultNavigationIcon;
@@ -174,18 +174,16 @@
}
a.recycle();
- // Keep the TintManager in case we need it later
- mTintManager = a.getTintManager();
} else {
mDisplayOpts = detectDisplayOptions();
- // Create a TintManager in case we need it later
- mTintManager = TintManager.get(toolbar.getContext());
}
+ mDrawableManager = AppCompatDrawableManager.get();
+
setDefaultNavigationContentDescription(defaultNavigationContentDescription);
mHomeDescription = mToolbar.getNavigationContentDescription();
- setDefaultNavigationIcon(mTintManager.getDrawable(defaultNavigationIcon));
+ setDefaultNavigationIcon(mDrawableManager.getDrawable(getContext(), defaultNavigationIcon));
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
final ActionMenuItem mNavItem = new ActionMenuItem(mToolbar.getContext(),
@@ -322,7 +320,7 @@
@Override
public void setIcon(int resId) {
- setIcon(resId != 0 ? mTintManager.getDrawable(resId) : null);
+ setIcon(resId != 0 ? mDrawableManager.getDrawable(getContext(), resId) : null);
}
@Override
@@ -333,7 +331,7 @@
@Override
public void setLogo(int resId) {
- setLogo(resId != 0 ? mTintManager.getDrawable(resId) : null);
+ setLogo(resId != 0 ? mDrawableManager.getDrawable(getContext(), resId) : null);
}
@Override
@@ -623,8 +621,7 @@
@Override
public void setNavigationIcon(int resId) {
setNavigationIcon(resId != 0
- ? mTintManager.getDrawable(resId)
- : null);
+ ? AppCompatDrawableManager.get().getDrawable(getContext(), resId) : null);
}
@Override
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatAutoCompleteTextView.java b/v7/appcompat/src/android/support/v7/widget/AppCompatAutoCompleteTextView.java
index 7d8746d..2cbf14f 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatAutoCompleteTextView.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatAutoCompleteTextView.java
@@ -24,8 +24,8 @@
import android.support.annotation.Nullable;
import android.support.v4.view.TintableBackgroundView;
import android.support.v7.appcompat.R;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintContextWrapper;
-import android.support.v7.internal.widget.TintManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.util.AttributeSet;
import android.widget.AutoCompleteTextView;
@@ -52,7 +52,7 @@
android.R.attr.popupBackground
};
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
private AppCompatBackgroundHelper mBackgroundTintHelper;
private AppCompatTextHelper mTextHelper;
@@ -67,15 +67,16 @@
public AppCompatAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(TintContextWrapper.wrap(context), attrs, defStyleAttr);
+ mDrawableManager = AppCompatDrawableManager.get();
+
TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
TINT_ATTRS, defStyleAttr, 0);
- mTintManager = a.getTintManager();
if (a.hasValue(0)) {
setDropDownBackgroundDrawable(a.getDrawable(0));
}
a.recycle();
- mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mTintManager);
+ mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mDrawableManager);
mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
mTextHelper = AppCompatTextHelper.create(this);
@@ -85,8 +86,8 @@
@Override
public void setDropDownBackgroundResource(@DrawableRes int resId) {
- if (mTintManager != null) {
- setDropDownBackgroundDrawable(mTintManager.getDrawable(resId));
+ if (mDrawableManager != null) {
+ setDropDownBackgroundDrawable(mDrawableManager.getDrawable(getContext(), resId));
} else {
super.setDropDownBackgroundResource(resId);
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatBackgroundHelper.java b/v7/appcompat/src/android/support/v7/widget/AppCompatBackgroundHelper.java
index 6022e55..a6218f9 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatBackgroundHelper.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatBackgroundHelper.java
@@ -23,22 +23,22 @@
import android.support.v4.view.ViewCompat;
import android.support.v7.appcompat.R;
import android.support.v7.graphics.drawable.DrawableUtils;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintInfo;
-import android.support.v7.internal.widget.TintManager;
import android.util.AttributeSet;
import android.view.View;
class AppCompatBackgroundHelper {
private final View mView;
- private final TintManager mTintManager;
+ private final AppCompatDrawableManager mDrawableManager;
private TintInfo mInternalBackgroundTint;
private TintInfo mBackgroundTint;
- AppCompatBackgroundHelper(View view, TintManager tintManager) {
+ AppCompatBackgroundHelper(View view, AppCompatDrawableManager drawableManager) {
mView = view;
- mTintManager = tintManager;
+ mDrawableManager = drawableManager;
}
void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {
@@ -46,7 +46,7 @@
R.styleable.ViewBackgroundHelper, defStyleAttr, 0);
try {
if (a.hasValue(R.styleable.ViewBackgroundHelper_android_background)) {
- ColorStateList tint = mTintManager.getTintList(
+ ColorStateList tint = mDrawableManager.getTintList(mView.getContext(),
a.getResourceId(R.styleable.ViewBackgroundHelper_android_background, -1));
if (tint != null) {
setInternalBackgroundTint(tint);
@@ -69,7 +69,9 @@
void onSetBackgroundResource(int resId) {
// Update the default background tint
- setInternalBackgroundTint(mTintManager != null ? mTintManager.getTintList(resId) : null);
+ setInternalBackgroundTint(mDrawableManager != null
+ ? mDrawableManager.getTintList(mView.getContext(), resId)
+ : null);
}
void onSetBackgroundDrawable(Drawable background) {
@@ -109,9 +111,10 @@
final Drawable background = mView.getBackground();
if (background != null) {
if (mBackgroundTint != null) {
- TintManager.tintDrawable(background, mBackgroundTint, mView.getDrawableState());
+ AppCompatDrawableManager
+ .tintDrawable(background, mBackgroundTint, mView.getDrawableState());
} else if (mInternalBackgroundTint != null) {
- TintManager.tintDrawable(background, mInternalBackgroundTint,
+ AppCompatDrawableManager.tintDrawable(background, mInternalBackgroundTint,
mView.getDrawableState());
}
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatButton.java b/v7/appcompat/src/android/support/v7/widget/AppCompatButton.java
index 3f51d6e..545c0f9 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatButton.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatButton.java
@@ -24,8 +24,7 @@
import android.support.annotation.Nullable;
import android.support.v4.view.TintableBackgroundView;
import android.support.v7.appcompat.R;
-import android.support.v7.internal.text.AllCapsTransformationMethod;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.AttributeSet;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
@@ -48,7 +47,7 @@
*/
public class AppCompatButton extends Button implements TintableBackgroundView {
- private final TintManager mTintManager;
+ private final AppCompatDrawableManager mDrawableManager;
private final AppCompatBackgroundHelper mBackgroundTintHelper;
private final AppCompatTextHelper mTextHelper;
@@ -63,8 +62,8 @@
public AppCompatButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- mTintManager = TintManager.get(getContext());
- mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mTintManager);
+ mDrawableManager = AppCompatDrawableManager.get();
+ mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mDrawableManager);
mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
mTextHelper = AppCompatTextHelper.create(this);
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatCheckBox.java b/v7/appcompat/src/android/support/v7/widget/AppCompatCheckBox.java
index 1ad2c77..cb7d2f4 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatCheckBox.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatCheckBox.java
@@ -25,7 +25,7 @@
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.TintableCompoundButton;
import android.support.v7.appcompat.R;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.AttributeSet;
import android.widget.CheckBox;
@@ -44,7 +44,7 @@
*/
public class AppCompatCheckBox extends CheckBox implements TintableCompoundButton {
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
private AppCompatCompoundButtonHelper mCompoundButtonHelper;
public AppCompatCheckBox(Context context) {
@@ -57,8 +57,8 @@
public AppCompatCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- mTintManager = TintManager.get(context);
- mCompoundButtonHelper = new AppCompatCompoundButtonHelper(this, mTintManager);
+ mDrawableManager = AppCompatDrawableManager.get();
+ mCompoundButtonHelper = new AppCompatCompoundButtonHelper(this, mDrawableManager);
mCompoundButtonHelper.loadFromAttributes(attrs, defStyleAttr);
}
@@ -72,8 +72,8 @@
@Override
public void setButtonDrawable(@DrawableRes int resId) {
- setButtonDrawable(mTintManager != null
- ? mTintManager.getDrawable(resId)
+ setButtonDrawable(mDrawableManager != null
+ ? mDrawableManager.getDrawable(getContext(), resId)
: ContextCompat.getDrawable(getContext(), resId));
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatCheckedTextView.java b/v7/appcompat/src/android/support/v7/widget/AppCompatCheckedTextView.java
index a892ae5..35e146e 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatCheckedTextView.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatCheckedTextView.java
@@ -18,7 +18,7 @@
import android.content.Context;
import android.support.annotation.DrawableRes;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.util.AttributeSet;
import android.widget.CheckedTextView;
@@ -35,7 +35,7 @@
android.R.attr.checkMark
};
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
private AppCompatTextHelper mTextHelper;
public AppCompatCheckedTextView(Context context) {
@@ -53,20 +53,18 @@
mTextHelper.loadFromAttributes(attrs, defStyleAttr);
mTextHelper.applyCompoundDrawablesTints();
- if (TintManager.SHOULD_BE_USED) {
- TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
- TINT_ATTRS, defStyleAttr, 0);
- setCheckMarkDrawable(a.getDrawable(0));
- a.recycle();
+ mDrawableManager = AppCompatDrawableManager.get();
- mTintManager = a.getTintManager();
- }
+ TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
+ TINT_ATTRS, defStyleAttr, 0);
+ setCheckMarkDrawable(a.getDrawable(0));
+ a.recycle();
}
@Override
public void setCheckMarkDrawable(@DrawableRes int resId) {
- if (mTintManager != null) {
- setCheckMarkDrawable(mTintManager.getDrawable(resId));
+ if (mDrawableManager != null) {
+ setCheckMarkDrawable(mDrawableManager.getDrawable(getContext(), resId));
} else {
super.setCheckMarkDrawable(resId);
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatCompoundButtonHelper.java b/v7/appcompat/src/android/support/v7/widget/AppCompatCompoundButtonHelper.java
index 20c3667..0711210 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatCompoundButtonHelper.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatCompoundButtonHelper.java
@@ -26,14 +26,14 @@
import android.support.v4.widget.CompoundButtonCompat;
import android.support.v7.appcompat.R;
import android.support.v7.graphics.drawable.DrawableUtils;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.AttributeSet;
import android.widget.CompoundButton;
class AppCompatCompoundButtonHelper {
private final CompoundButton mView;
- private final TintManager mTintManager;
+ private final AppCompatDrawableManager mDrawableManager;
private ColorStateList mButtonTintList = null;
private PorterDuff.Mode mButtonTintMode = null;
@@ -49,9 +49,9 @@
void setButtonDrawable(Drawable buttonDrawable);
}
- AppCompatCompoundButtonHelper(CompoundButton view, TintManager tintManager) {
+ AppCompatCompoundButtonHelper(CompoundButton view, AppCompatDrawableManager drawableManager) {
mView = view;
- mTintManager = tintManager;
+ mDrawableManager = drawableManager;
}
void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {
@@ -62,7 +62,8 @@
final int resourceId = a.getResourceId(
R.styleable.CompoundButton_android_button, 0);
if (resourceId != 0) {
- mView.setButtonDrawable(mTintManager.getDrawable(resourceId));
+ mView.setButtonDrawable(
+ mDrawableManager.getDrawable(mView.getContext(), resourceId));
}
}
if (a.hasValue(R.styleable.CompoundButton_buttonTint)) {
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatEditText.java b/v7/appcompat/src/android/support/v7/widget/AppCompatEditText.java
index 7845388..151e4f3 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatEditText.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatEditText.java
@@ -24,8 +24,8 @@
import android.support.annotation.Nullable;
import android.support.v4.view.TintableBackgroundView;
import android.support.v7.appcompat.R;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintContextWrapper;
-import android.support.v7.internal.widget.TintManager;
import android.util.AttributeSet;
import android.widget.EditText;
@@ -46,7 +46,7 @@
*/
public class AppCompatEditText extends EditText implements TintableBackgroundView {
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
private AppCompatBackgroundHelper mBackgroundTintHelper;
private AppCompatTextHelper mTextHelper;
@@ -61,8 +61,8 @@
public AppCompatEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(TintContextWrapper.wrap(context), attrs, defStyleAttr);
- mTintManager = TintManager.get(getContext());
- mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mTintManager);
+ mDrawableManager = AppCompatDrawableManager.get();
+ mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mDrawableManager);
mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
mTextHelper = AppCompatTextHelper.create(this);
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatImageButton.java b/v7/appcompat/src/android/support/v7/widget/AppCompatImageButton.java
index 20c5402..84b225d 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatImageButton.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatImageButton.java
@@ -24,11 +24,9 @@
import android.support.annotation.Nullable;
import android.support.v4.view.TintableBackgroundView;
import android.support.v7.appcompat.R;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.AttributeSet;
-import android.widget.Button;
import android.widget.ImageButton;
-import android.widget.ImageView;
/**
* A {@link ImageButton} which supports compatible features on older version of the platform,
@@ -59,12 +57,12 @@
public AppCompatImageButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- final TintManager tintManager = TintManager.get(context);
+ final AppCompatDrawableManager drawableManager = AppCompatDrawableManager.get();
- mBackgroundTintHelper = new AppCompatBackgroundHelper(this, tintManager);
+ mBackgroundTintHelper = new AppCompatBackgroundHelper(this, drawableManager);
mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
- mImageHelper = new AppCompatImageHelper(this, tintManager);
+ mImageHelper = new AppCompatImageHelper(this, drawableManager);
mImageHelper.loadFromAttributes(attrs, defStyleAttr);
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatImageHelper.java b/v7/appcompat/src/android/support/v7/widget/AppCompatImageHelper.java
index 41bda8b..bcbca2b 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatImageHelper.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatImageHelper.java
@@ -16,11 +16,8 @@
package android.support.v7.widget;
-import android.content.res.ColorStateList;
-import android.graphics.PorterDuff;
import android.support.v4.content.ContextCompat;
-import android.support.v7.internal.widget.TintInfo;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.util.AttributeSet;
import android.widget.ImageView;
@@ -30,11 +27,11 @@
private static final int[] VIEW_ATTRS = {android.R.attr.src};
private final ImageView mView;
- private final TintManager mTintManager;
+ private final AppCompatDrawableManager mDrawableManager;
- AppCompatImageHelper(ImageView view, TintManager tintManager) {
+ AppCompatImageHelper(ImageView view, AppCompatDrawableManager drawableManager) {
mView = view;
- mTintManager = tintManager;
+ mDrawableManager = drawableManager;
}
void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {
@@ -50,8 +47,8 @@
}
void setImageResource(int resId) {
- mView.setImageDrawable(mTintManager != null
- ? mTintManager.getDrawable(resId)
+ mView.setImageDrawable(mDrawableManager != null
+ ? mDrawableManager.getDrawable(mView.getContext(), resId)
: ContextCompat.getDrawable(mView.getContext(), resId));
}
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatImageView.java b/v7/appcompat/src/android/support/v7/widget/AppCompatImageView.java
index c289028..4bad773 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatImageView.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatImageView.java
@@ -24,10 +24,8 @@
import android.support.annotation.Nullable;
import android.support.v4.view.TintableBackgroundView;
import android.support.v7.appcompat.R;
-import android.support.v7.internal.widget.TintManager;
-import android.support.v7.internal.widget.TintTypedArray;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.AttributeSet;
-import android.widget.ImageButton;
import android.widget.ImageView;
/**
@@ -59,12 +57,12 @@
public AppCompatImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- final TintManager tintManager = TintManager.get(context);
+ final AppCompatDrawableManager drawableManager = AppCompatDrawableManager.get();
- mBackgroundTintHelper = new AppCompatBackgroundHelper(this, tintManager);
+ mBackgroundTintHelper = new AppCompatBackgroundHelper(this, drawableManager);
mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
- mImageHelper = new AppCompatImageHelper(this, tintManager);
+ mImageHelper = new AppCompatImageHelper(this, drawableManager);
mImageHelper.loadFromAttributes(attrs, defStyleAttr);
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatMultiAutoCompleteTextView.java b/v7/appcompat/src/android/support/v7/widget/AppCompatMultiAutoCompleteTextView.java
index fae720a..dae7557 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatMultiAutoCompleteTextView.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatMultiAutoCompleteTextView.java
@@ -24,8 +24,8 @@
import android.support.annotation.Nullable;
import android.support.v4.view.TintableBackgroundView;
import android.support.v7.appcompat.R;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintContextWrapper;
-import android.support.v7.internal.widget.TintManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.util.AttributeSet;
import android.widget.MultiAutoCompleteTextView;
@@ -52,7 +52,7 @@
android.R.attr.popupBackground
};
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
private AppCompatBackgroundHelper mBackgroundTintHelper;
private AppCompatTextHelper mTextHelper;
@@ -67,15 +67,16 @@
public AppCompatMultiAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(TintContextWrapper.wrap(context), attrs, defStyleAttr);
+ mDrawableManager = AppCompatDrawableManager.get();
+
TintTypedArray a = TintTypedArray.obtainStyledAttributes(getContext(), attrs,
TINT_ATTRS, defStyleAttr, 0);
- mTintManager = a.getTintManager();
if (a.hasValue(0)) {
setDropDownBackgroundDrawable(a.getDrawable(0));
}
a.recycle();
- mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mTintManager);
+ mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mDrawableManager);
mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
mTextHelper = AppCompatTextHelper.create(this);
@@ -85,8 +86,8 @@
@Override
public void setDropDownBackgroundResource(@DrawableRes int resId) {
- if (mTintManager != null) {
- setDropDownBackgroundDrawable(mTintManager.getDrawable(resId));
+ if (mDrawableManager != null) {
+ setDropDownBackgroundDrawable(mDrawableManager.getDrawable(getContext(), resId));
} else {
super.setDropDownBackgroundResource(resId);
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatProgressBarHelper.java b/v7/appcompat/src/android/support/v7/widget/AppCompatProgressBarHelper.java
index 7fd8f05..34f00fa 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatProgressBarHelper.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatProgressBarHelper.java
@@ -28,12 +28,10 @@
import android.graphics.drawable.shapes.RoundRectShape;
import android.graphics.drawable.shapes.Shape;
import android.support.v4.graphics.drawable.DrawableWrapper;
-import android.support.v7.appcompat.R;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.util.AttributeSet;
import android.view.Gravity;
-import android.widget.CompoundButton;
import android.widget.ProgressBar;
class AppCompatProgressBarHelper {
@@ -44,13 +42,13 @@
};
private final ProgressBar mView;
- final TintManager mTintManager;
+ final AppCompatDrawableManager mDrawableManager;
private Bitmap mSampleTile;
- AppCompatProgressBarHelper(ProgressBar view, TintManager tintManager) {
+ AppCompatProgressBarHelper(ProgressBar view, AppCompatDrawableManager drawableManager) {
mView = view;
- mTintManager = tintManager;
+ mDrawableManager = drawableManager;
}
void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatRadioButton.java b/v7/appcompat/src/android/support/v7/widget/AppCompatRadioButton.java
index 0d928fc..1c36fd9 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatRadioButton.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatRadioButton.java
@@ -25,7 +25,7 @@
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.TintableCompoundButton;
import android.support.v7.appcompat.R;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.AttributeSet;
import android.widget.RadioButton;
@@ -44,7 +44,7 @@
*/
public class AppCompatRadioButton extends RadioButton implements TintableCompoundButton {
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
private AppCompatCompoundButtonHelper mCompoundButtonHelper;
public AppCompatRadioButton(Context context) {
@@ -57,8 +57,8 @@
public AppCompatRadioButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- mTintManager = TintManager.get(context);
- mCompoundButtonHelper = new AppCompatCompoundButtonHelper(this, mTintManager);
+ mDrawableManager = AppCompatDrawableManager.get();
+ mCompoundButtonHelper = new AppCompatCompoundButtonHelper(this, mDrawableManager);
mCompoundButtonHelper.loadFromAttributes(attrs, defStyleAttr);
}
@@ -72,8 +72,8 @@
@Override
public void setButtonDrawable(@DrawableRes int resId) {
- setButtonDrawable(mTintManager != null
- ? mTintManager.getDrawable(resId)
+ setButtonDrawable(mDrawableManager != null
+ ? mDrawableManager.getDrawable(getContext(), resId)
: ContextCompat.getDrawable(getContext(), resId));
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatRatingBar.java b/v7/appcompat/src/android/support/v7/widget/AppCompatRatingBar.java
index 0bc14ab..bb26c6d 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatRatingBar.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatRatingBar.java
@@ -20,7 +20,7 @@
import android.graphics.Bitmap;
import android.support.v4.view.ViewCompat;
import android.support.v7.appcompat.R;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.AttributeSet;
import android.widget.RatingBar;
@@ -33,7 +33,7 @@
public class AppCompatRatingBar extends RatingBar {
private AppCompatProgressBarHelper mAppCompatProgressBarHelper;
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
public AppCompatRatingBar(Context context) {
this(context, null);
@@ -46,9 +46,9 @@
public AppCompatRatingBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- mTintManager = TintManager.get(context);
+ mDrawableManager = AppCompatDrawableManager.get();
- mAppCompatProgressBarHelper = new AppCompatProgressBarHelper(this, mTintManager);
+ mAppCompatProgressBarHelper = new AppCompatProgressBarHelper(this, mDrawableManager);
mAppCompatProgressBarHelper.loadFromAttributes(attrs, defStyleAttr);
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java b/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java
index 86ec881..a6d7fcf 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBar.java
@@ -18,7 +18,7 @@
import android.content.Context;
import android.support.v7.appcompat.R;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.AttributeSet;
import android.widget.SeekBar;
@@ -31,7 +31,7 @@
public class AppCompatSeekBar extends SeekBar {
private AppCompatSeekBarHelper mAppCompatSeekBarHelper;
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
public AppCompatSeekBar(Context context) {
this(context, null);
@@ -44,9 +44,9 @@
public AppCompatSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- mTintManager = TintManager.get(context);
+ mDrawableManager = AppCompatDrawableManager.get();
- mAppCompatSeekBarHelper = new AppCompatSeekBarHelper(this, mTintManager);
+ mAppCompatSeekBarHelper = new AppCompatSeekBarHelper(this, mDrawableManager);
mAppCompatSeekBarHelper.loadFromAttributes(attrs, defStyleAttr);
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java b/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java
index 3211942..0312921 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatSeekBarHelper.java
@@ -17,7 +17,7 @@
package android.support.v7.widget;
import android.graphics.drawable.Drawable;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.util.AttributeSet;
import android.widget.SeekBar;
@@ -30,8 +30,8 @@
private final SeekBar mView;
- AppCompatSeekBarHelper(SeekBar view, TintManager tintManager) {
- super(view, tintManager);
+ AppCompatSeekBarHelper(SeekBar view, AppCompatDrawableManager drawableManager) {
+ super(view, drawableManager);
mView = view;
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatSpinner.java b/v7/appcompat/src/android/support/v7/widget/AppCompatSpinner.java
index 90985cdb..fa0ef54 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatSpinner.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatSpinner.java
@@ -31,7 +31,7 @@
import android.support.v4.view.ViewCompat;
import android.support.v7.appcompat.R;
import android.support.v7.internal.view.ContextThemeWrapper;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.support.v7.internal.widget.ViewUtils;
import android.util.AttributeSet;
@@ -77,7 +77,7 @@
private static final int MODE_DROPDOWN = 1;
private static final int MODE_THEME = -1;
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
private AppCompatBackgroundHelper mBackgroundTintHelper;
@@ -199,8 +199,8 @@
TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs,
R.styleable.Spinner, defStyleAttr, 0);
- mTintManager = a.getTintManager();
- mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mTintManager);
+ mDrawableManager = AppCompatDrawableManager.get();
+ mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mDrawableManager);
if (popupTheme != null) {
mPopupContext = new ContextThemeWrapper(context, popupTheme);
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java b/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java
index 036ce70..2a1d02c 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelper.java
@@ -22,8 +22,8 @@
import android.os.Build;
import android.support.v7.appcompat.R;
import android.support.v7.internal.text.AllCapsTransformationMethod;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintInfo;
-import android.support.v7.internal.widget.TintManager;
import android.util.AttributeSet;
import android.widget.TextView;
@@ -54,7 +54,7 @@
void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {
final Context context = mView.getContext();
- final TintManager tintManager = TintManager.get(context);
+ final AppCompatDrawableManager drawableManager = AppCompatDrawableManager.get();
// First read the TextAppearance style id
TypedArray a = context.obtainStyledAttributes(attrs, VIEW_ATTRS, defStyleAttr, 0);
@@ -64,22 +64,26 @@
if (a.hasValue(1)) {
mDrawableLeftTint = new TintInfo();
mDrawableLeftTint.mHasTintList = true;
- mDrawableLeftTint.mTintList = tintManager.getTintList(a.getResourceId(1, 0));
+ mDrawableLeftTint.mTintList = drawableManager.getTintList(
+ context, a.getResourceId(1, 0));
}
if (a.hasValue(2)) {
mDrawableTopTint = new TintInfo();
mDrawableTopTint.mHasTintList = true;
- mDrawableTopTint.mTintList = tintManager.getTintList(a.getResourceId(2, 0));
+ mDrawableTopTint.mTintList = drawableManager.getTintList(
+ context, a.getResourceId(2, 0));
}
if (a.hasValue(3)) {
mDrawableRightTint = new TintInfo();
mDrawableRightTint.mHasTintList = true;
- mDrawableRightTint.mTintList = tintManager.getTintList(a.getResourceId(3, 0));
+ mDrawableRightTint.mTintList = drawableManager.getTintList(
+ context, a.getResourceId(3, 0));
}
if (a.hasValue(4)) {
mDrawableBottomTint = new TintInfo();
mDrawableBottomTint.mHasTintList = true;
- mDrawableBottomTint.mTintList = tintManager.getTintList(a.getResourceId(4, 0));
+ mDrawableBottomTint.mTintList = drawableManager.getTintList(
+ context, a.getResourceId(4, 0));
}
a.recycle();
@@ -127,7 +131,7 @@
final void applyCompoundDrawableTint(Drawable drawable, TintInfo info) {
if (drawable != null && info != null) {
- TintManager.tintDrawable(drawable, info, mView.getDrawableState());
+ AppCompatDrawableManager.tintDrawable(drawable, info, mView.getDrawableState());
}
}
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java b/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java
index f0337ab..fe53c74 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatTextHelperV17.java
@@ -19,8 +19,8 @@
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintInfo;
-import android.support.v7.internal.widget.TintManager;
import android.util.AttributeSet;
import android.widget.TextView;
@@ -40,19 +40,21 @@
super.loadFromAttributes(attrs, defStyleAttr);
final Context context = mView.getContext();
- final TintManager tintManager = TintManager.get(context);
+ final AppCompatDrawableManager drawableManager = AppCompatDrawableManager.get();
// First read the TextAppearance style id
TypedArray a = context.obtainStyledAttributes(attrs, VIEW_ATTRS_v17, defStyleAttr, 0);
if (a.hasValue(0)) {
mDrawableStartTint = new TintInfo();
mDrawableStartTint.mHasTintList = true;
- mDrawableStartTint.mTintList = tintManager.getTintList(a.getResourceId(0, 0));
+ mDrawableStartTint.mTintList = drawableManager.getTintList(
+ context, a.getResourceId(0, 0));
}
if (a.hasValue(1)) {
mDrawableEndTint = new TintInfo();
mDrawableEndTint.mHasTintList = true;
- mDrawableEndTint.mTintList = tintManager.getTintList(a.getResourceId(1, 0));
+ mDrawableEndTint.mTintList = drawableManager.getTintList(
+ context, a.getResourceId(1, 0));
}
a.recycle();
}
diff --git a/v7/appcompat/src/android/support/v7/widget/AppCompatTextView.java b/v7/appcompat/src/android/support/v7/widget/AppCompatTextView.java
index cf99f3b..a990600 100644
--- a/v7/appcompat/src/android/support/v7/widget/AppCompatTextView.java
+++ b/v7/appcompat/src/android/support/v7/widget/AppCompatTextView.java
@@ -24,7 +24,7 @@
import android.support.annotation.Nullable;
import android.support.v4.view.TintableBackgroundView;
import android.support.v7.appcompat.R;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.AttributeSet;
import android.widget.TextView;
@@ -45,7 +45,7 @@
*/
public class AppCompatTextView extends TextView implements TintableBackgroundView {
- private TintManager mTintManager;
+ private AppCompatDrawableManager mDrawableManager;
private AppCompatBackgroundHelper mBackgroundTintHelper;
private AppCompatTextHelper mTextHelper;
@@ -60,8 +60,8 @@
public AppCompatTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
- mTintManager = TintManager.get(getContext());
- mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mTintManager);
+ mDrawableManager = AppCompatDrawableManager.get();
+ mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mDrawableManager);
mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
mTextHelper = AppCompatTextHelper.create(this);
diff --git a/v7/appcompat/src/android/support/v7/widget/SearchView.java b/v7/appcompat/src/android/support/v7/widget/SearchView.java
index 65d1078..985c1f7 100644
--- a/v7/appcompat/src/android/support/v7/widget/SearchView.java
+++ b/v7/appcompat/src/android/support/v7/widget/SearchView.java
@@ -39,7 +39,7 @@
import android.support.v4.view.KeyEventCompat;
import android.support.v4.widget.CursorAdapter;
import android.support.v7.appcompat.R;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.support.v7.internal.widget.ViewUtils;
import android.support.v7.view.CollapsibleActionView;
@@ -162,7 +162,7 @@
private SearchableInfo mSearchable;
private Bundle mAppSearchData;
- private final TintManager mTintManager;
+ private final AppCompatDrawableManager mDrawableManager;
static final AutoCompleteTextViewReflector HIDDEN_METHOD_INVOKER = new AutoCompleteTextViewReflector();
@@ -278,10 +278,10 @@
public SearchView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
+ mDrawableManager = AppCompatDrawableManager.get();
+
final TintTypedArray a = TintTypedArray.obtainStyledAttributes(context,
attrs, R.styleable.SearchView, defStyleAttr, 0);
- // Keep the TintManager in case we need it later
- mTintManager = a.getTintManager();
final LayoutInflater inflater = LayoutInflater.from(context);
final int layoutResId = a.getResourceId(
diff --git a/v7/appcompat/src/android/support/v7/widget/ShareActionProvider.java b/v7/appcompat/src/android/support/v7/widget/ShareActionProvider.java
index a840f95..7b8b8e8 100644
--- a/v7/appcompat/src/android/support/v7/widget/ShareActionProvider.java
+++ b/v7/appcompat/src/android/support/v7/widget/ShareActionProvider.java
@@ -25,15 +25,15 @@
import android.support.v4.view.ActionProvider;
import android.support.v7.appcompat.R;
import android.support.v7.internal.widget.ActivityChooserModel;
+import android.support.v7.internal.widget.ActivityChooserModel.OnChooseActivityListener;
import android.support.v7.internal.widget.ActivityChooserView;
-import android.support.v7.internal.widget.TintManager;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.SubMenu;
import android.view.View;
-import android.support.v7.internal.widget.ActivityChooserModel.OnChooseActivityListener;
/**
* This is a provider for a share action. It is responsible for creating views
@@ -188,7 +188,8 @@
// Lookup and set the expand action icon.
TypedValue outTypedValue = new TypedValue();
mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, outTypedValue, true);
- Drawable drawable = TintManager.getDrawable(mContext, outTypedValue.resourceId);
+ Drawable drawable = AppCompatDrawableManager.get()
+ .getDrawable(mContext, outTypedValue.resourceId);
activityChooserView.setExpandActivityOverflowButtonDrawable(drawable);
activityChooserView.setProvider(this);
diff --git a/v7/appcompat/src/android/support/v7/widget/SwitchCompat.java b/v7/appcompat/src/android/support/v7/widget/SwitchCompat.java
index 60dd4b0..4a99ed6 100644
--- a/v7/appcompat/src/android/support/v7/widget/SwitchCompat.java
+++ b/v7/appcompat/src/android/support/v7/widget/SwitchCompat.java
@@ -33,8 +33,8 @@
import android.support.v4.view.ViewCompat;
import android.support.v7.appcompat.R;
import android.support.v7.internal.text.AllCapsTransformationMethod;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.DrawableUtils;
-import android.support.v7.internal.widget.TintManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.support.v7.internal.widget.ViewUtils;
import android.text.Layout;
@@ -145,7 +145,7 @@
@SuppressWarnings("hiding")
private final Rect mTempRect = new Rect();
- private final TintManager mTintManager;
+ private final AppCompatDrawableManager mDrawableManager;
private static final int[] CHECKED_STATE_SET = {
android.R.attr.state_checked
@@ -216,7 +216,7 @@
setSwitchTextAppearance(context, appearance);
}
- mTintManager = a.getTintManager();
+ mDrawableManager = AppCompatDrawableManager.get();
a.recycle();
@@ -408,7 +408,7 @@
* @param resId Resource ID of a track drawable
*/
public void setTrackResource(int resId) {
- setTrackDrawable(mTintManager.getDrawable(resId));
+ setTrackDrawable(mDrawableManager.getDrawable(getContext(), resId));
}
/**
@@ -438,7 +438,7 @@
* @param resId Resource ID of a thumb drawable
*/
public void setThumbResource(int resId) {
- setThumbDrawable(mTintManager.getDrawable(resId));
+ setThumbDrawable(mDrawableManager.getDrawable(getContext(), resId));
}
/**
diff --git a/v7/appcompat/src/android/support/v7/widget/Toolbar.java b/v7/appcompat/src/android/support/v7/widget/Toolbar.java
index 0e8e318..5e6221b 100644
--- a/v7/appcompat/src/android/support/v7/widget/Toolbar.java
+++ b/v7/appcompat/src/android/support/v7/widget/Toolbar.java
@@ -17,9 +17,6 @@
package android.support.v7.widget;
import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Parcel;
@@ -38,17 +35,15 @@
import android.support.v4.view.ViewCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.appcompat.R;
-import android.support.v7.graphics.drawable.DrawableUtils;
import android.support.v7.internal.view.SupportMenuInflater;
import android.support.v7.internal.view.menu.MenuBuilder;
import android.support.v7.internal.view.menu.MenuItemImpl;
import android.support.v7.internal.view.menu.MenuPresenter;
import android.support.v7.internal.view.menu.MenuView;
import android.support.v7.internal.view.menu.SubMenuBuilder;
+import android.support.v7.internal.widget.AppCompatDrawableManager;
import android.support.v7.internal.widget.DecorToolbar;
import android.support.v7.internal.widget.RtlSpacingHelper;
-import android.support.v7.internal.widget.TintInfo;
-import android.support.v7.internal.widget.TintManager;
import android.support.v7.internal.widget.TintTypedArray;
import android.support.v7.internal.widget.ToolbarWidgetWrapper;
import android.support.v7.internal.widget.ViewUtils;
@@ -197,7 +192,7 @@
}
};
- private final TintManager mTintManager;
+ private final AppCompatDrawableManager mDrawableManager;
public Toolbar(Context context) {
this(context, null);
@@ -306,8 +301,7 @@
}
a.recycle();
- // Keep the TintManager in case we need it later
- mTintManager = a.getTintManager();
+ mDrawableManager = AppCompatDrawableManager.get();
}
/**
@@ -354,7 +348,7 @@
* @param resId ID of a drawable resource
*/
public void setLogo(@DrawableRes int resId) {
- setLogo(mTintManager.getDrawable(resId));
+ setLogo(mDrawableManager.getDrawable(getContext(), resId));
}
/** @hide */
@@ -781,7 +775,7 @@
* @param resId Resource ID of a drawable to set
*/
public void setNavigationIcon(@DrawableRes int resId) {
- setNavigationIcon(mTintManager.getDrawable(resId));
+ setNavigationIcon(mDrawableManager.getDrawable(getContext(), resId));
}
/**
diff --git a/v7/mediarouter/res/values/strings.xml b/v7/mediarouter/res/values/strings.xml
index c1ceb31..fad0408 100644
--- a/v7/mediarouter/res/values/strings.xml
+++ b/v7/mediarouter/res/values/strings.xml
@@ -23,7 +23,7 @@
<!-- Content description of a MediaRouteButton for accessibility support.
Cast is the standard android verb for sending content to a remote device. [CHAR LIMIT=50] -->
- <string name="mr_button_content_description">Cast</string>
+ <string name="mr_button_content_description">Cast button</string>
<!-- Title of the media route chooser dialog. [CHAR LIMIT=30] -->
<string name="mr_chooser_title">Cast to</string>
diff --git a/v7/palette/src/main/java/android/support/v7/graphics/Palette.java b/v7/palette/src/main/java/android/support/v7/graphics/Palette.java
index 55bd1ca..f0e9b8e 100644
--- a/v7/palette/src/main/java/android/support/v7/graphics/Palette.java
+++ b/v7/palette/src/main/java/android/support/v7/graphics/Palette.java
@@ -524,7 +524,7 @@
}
/**
- * Add a filter to be able to have fine grained controlled over the colors which are
+ * Add a filter to be able to have fine grained control over which colors are
* allowed in the resulting palette.
*
* @param filter filter to add.