Loading graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java +38 −14 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.graphics.drawable; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.ColorFilter; import android.graphics.PorterDuff.Mode; import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.Resources.Theme; Loading Loading @@ -88,6 +90,7 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac canvas.restoreToCount(saveCount); } @Override public void start() { if (!mRunning) { mRunning = true; Loading @@ -95,11 +98,13 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac } } @Override public void stop() { mRunning = false; unscheduleSelf(this); } @Override public boolean isRunning() { return mRunning; } Loading @@ -109,6 +114,7 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac scheduleSelf(this, SystemClock.uptimeMillis() + mState.mFrameDuration); } @Override public void run() { // TODO: This should be computed in draw(Canvas), based on the amount // of time since the last frame drawn Loading Loading @@ -164,11 +170,17 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac mState.mDrawable.setColorFilter(cf); } @Override public void setTint(ColorStateList tint, Mode tintMode) { mState.mDrawable.setTint(tint, tintMode); } @Override public int getOpacity() { return mState.mDrawable.getOpacity(); } @Override public void invalidateDrawable(Drawable who) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -176,6 +188,7 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac } } @Override public void scheduleDrawable(Drawable who, Runnable what, long when) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -183,6 +196,7 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac } } @Override public void unscheduleDrawable(Drawable who, Runnable what) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -205,6 +219,16 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac mState.mDrawable.setBounds(bounds.left, bounds.top, bounds.right, bounds.bottom); } @Override protected boolean onLevelChange(int level) { return mState.mDrawable.setLevel(level); } @Override protected boolean onStateChange(int[] state) { return mState.mDrawable.setState(state); } @Override public int getIntrinsicWidth() { return mState.mDrawable.getIntrinsicWidth(); Loading graphics/java/android/graphics/drawable/AnimationDrawable.java +23 −20 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ import android.os.SystemClock; import android.util.AttributeSet; /** * * An object used to create frame-by-frame animations, defined by a series of Drawable objects, * which can be used as a View object's background. * <p> Loading Loading @@ -114,6 +113,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An * @see #isRunning() * @see #stop() */ @Override public void start() { if (!isRunning()) { run(); Loading @@ -127,6 +127,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An * @see #isRunning() * @see #start() */ @Override public void stop() { if (isRunning()) { unscheduleSelf(this); Loading @@ -138,6 +139,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An * * @return true if the animation is running, false otherwise */ @Override public boolean isRunning() { return mAnimating; } Loading @@ -148,6 +150,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An * * @see #start() */ @Override public void run() { nextFrame(false); } Loading graphics/java/android/graphics/drawable/BitmapDrawable.java +11 −29 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuff.Mode; import android.graphics.drawable.ColorDrawable.ColorState; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.Shader; Loading Loading @@ -618,9 +619,11 @@ public class BitmapDrawable extends Drawable { @Override public void setTint(ColorStateList tint, PorterDuff.Mode tintMode) { mBitmapState.mTint = tint; mBitmapState.mTintMode = tintMode; computeTintFilter(); final BitmapState state = mBitmapState; state.mTint = tint; state.mTintMode = tintMode; mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); invalidateSelf(); } Loading @@ -638,21 +641,6 @@ public class BitmapDrawable extends Drawable { return mBitmapState.mTintMode; } private void computeTintFilter() { final BitmapState state = mBitmapState; if (state.mTint != null && state.mTintMode != null) { final int color = state.mTint.getColorForState(getState(), 0); if (mTintFilter != null) { mTintFilter.setColor(color); mTintFilter.setMode(state.mTintMode); } else { mTintFilter = new PorterDuffColorFilter(color, state.mTintMode); } } else { mTintFilter = null; } } /** * @hide Candidate for future API inclusion */ Loading @@ -679,17 +667,11 @@ public class BitmapDrawable extends Drawable { @Override protected boolean onStateChange(int[] stateSet) { final ColorStateList tint = mBitmapState.mTint; if (tint != null) { final int newColor = tint.getColorForState(stateSet, 0); final int oldColor = mTintFilter.getColor(); if (oldColor != newColor) { mTintFilter.setColor(newColor); invalidateSelf(); final BitmapState state = mBitmapState; if (state.mTint != null && state.mTintMode != null) { mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); return true; } } return false; } Loading Loading @@ -946,7 +928,7 @@ public class BitmapDrawable extends Drawable { mTargetDensity = state.mTargetDensity; } computeTintFilter(); updateTintFilter(mTintFilter, state.mTint, state.mTintMode); computeBitmapSize(); } } graphics/java/android/graphics/drawable/ClipDrawable.java +12 −2 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package android.graphics.drawable; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.Resources.Theme; import android.graphics.*; import android.graphics.PorterDuff.Mode; import android.view.Gravity; import android.util.AttributeSet; Loading Loading @@ -111,6 +113,7 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { // overrides from Drawable.Callback @Override public void invalidateDrawable(Drawable who) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -118,6 +121,7 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { } } @Override public void scheduleDrawable(Drawable who, Runnable what, long when) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -125,6 +129,7 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { } } @Override public void unscheduleDrawable(Drawable who, Runnable what) { final Callback callback = getCallback(); if (callback != null) { Loading Loading @@ -168,6 +173,11 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { mClipState.mDrawable.setColorFilter(cf); } @Override public void setTint(ColorStateList tint, Mode tintMode) { mClipState.mDrawable.setTint(tint, tintMode); } @Override public int getOpacity() { return mClipState.mDrawable.getOpacity(); Loading graphics/java/android/graphics/drawable/ColorDrawable.java +61 −9 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.graphics.drawable; import android.graphics.*; import android.graphics.PorterDuff.Mode; import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.Resources.Theme; import android.content.res.TypedArray; Loading @@ -39,9 +41,13 @@ import java.io.IOException; * @attr ref android.R.styleable#ColorDrawable_color */ public class ColorDrawable extends Drawable { private final Paint mPaint = new Paint(); @ViewDebug.ExportedProperty(deepExport = true, prefix = "state_") private ColorState mColorState; private final Paint mPaint = new Paint(); private ColorStateList mTint; private PorterDuffColorFilter mTintFilter; private boolean mMutated; /** Loading Loading @@ -84,9 +90,17 @@ public class ColorDrawable extends Drawable { @Override public void draw(Canvas canvas) { if ((mColorState.mUseColor >>> 24) != 0) { final ColorFilter colorFilter = mPaint.getColorFilter(); if ((mColorState.mUseColor >>> 24) != 0 || colorFilter != null || mTintFilter != null) { if (colorFilter == null) { mPaint.setColorFilter(mTintFilter); } mPaint.setColor(mColorState.mUseColor); canvas.drawRect(getBounds(), mPaint); // Restore original color filter. mPaint.setColorFilter(colorFilter); } } Loading Loading @@ -141,16 +155,51 @@ public class ColorDrawable extends Drawable { } /** * Setting a color filter on a ColorDrawable has no effect. * Sets the color filter applied to this color. * <p> * Only supported on version {@link android.os.Build.VERSION_CODES#L} and * above. Calling this method has no effect on earlier versions. * * @param colorFilter Ignore. * @see android.graphics.drawable.Drawable#setColorFilter(ColorFilter) */ @Override public void setColorFilter(ColorFilter colorFilter) { mPaint.setColorFilter(colorFilter); } @Override public void setTint(ColorStateList tint, Mode tintMode) { final ColorState state = mColorState; if (state.mTint != tint || state.mTintMode != tintMode) { state.mTint = tint; state.mTintMode = tintMode; mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); invalidateSelf(); } } @Override protected boolean onStateChange(int[] stateSet) { final ColorState state = mColorState; if (state.mTint != null && state.mTintMode != null) { mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); return true; } return false; } @Override public boolean isStateful() { return mTint != null && mTint.isStateful(); } @Override public int getOpacity() { if (mTintFilter != null || mPaint.getColorFilter() != null) { return PixelFormat.TRANSLUCENT; } switch (mColorState.mUseColor >>> 24) { case 255: return PixelFormat.OPAQUE; Loading @@ -165,8 +214,7 @@ public class ColorDrawable extends Drawable { throws XmlPullParserException, IOException { super.inflate(r, parser, attrs, theme); final TypedArray a = obtainAttributes( r, theme, attrs, R.styleable.ColorDrawable); final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.ColorDrawable); inflateStateFromTypedArray(a); a.recycle(); } Loading Loading @@ -225,21 +273,25 @@ public class ColorDrawable extends Drawable { } final static class ColorState extends ConstantState { int[] mThemeAttrs; int mBaseColor; // base color, independent of setAlpha() @ViewDebug.ExportedProperty int mUseColor; // basecolor modulated by setAlpha() int mChangingConfigurations; int[] mThemeAttrs; ColorStateList mTint; Mode mTintMode; ColorState() { // Empty constructor. } ColorState(ColorState state) { mThemeAttrs = state.mThemeAttrs; mBaseColor = state.mBaseColor; mUseColor = state.mUseColor; mChangingConfigurations = state.mChangingConfigurations; mThemeAttrs = state.mThemeAttrs; mTint = state.mTint; mTintMode = state.mTintMode; } @Override Loading Loading @@ -276,6 +328,6 @@ public class ColorDrawable extends Drawable { mColorState = state; } // No local properties to initialize. mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); } } Loading
graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java +38 −14 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package android.graphics.drawable; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.ColorFilter; import android.graphics.PorterDuff.Mode; import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.Resources.Theme; Loading Loading @@ -88,6 +90,7 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac canvas.restoreToCount(saveCount); } @Override public void start() { if (!mRunning) { mRunning = true; Loading @@ -95,11 +98,13 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac } } @Override public void stop() { mRunning = false; unscheduleSelf(this); } @Override public boolean isRunning() { return mRunning; } Loading @@ -109,6 +114,7 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac scheduleSelf(this, SystemClock.uptimeMillis() + mState.mFrameDuration); } @Override public void run() { // TODO: This should be computed in draw(Canvas), based on the amount // of time since the last frame drawn Loading Loading @@ -164,11 +170,17 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac mState.mDrawable.setColorFilter(cf); } @Override public void setTint(ColorStateList tint, Mode tintMode) { mState.mDrawable.setTint(tint, tintMode); } @Override public int getOpacity() { return mState.mDrawable.getOpacity(); } @Override public void invalidateDrawable(Drawable who) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -176,6 +188,7 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac } } @Override public void scheduleDrawable(Drawable who, Runnable what, long when) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -183,6 +196,7 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac } } @Override public void unscheduleDrawable(Drawable who, Runnable what) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -205,6 +219,16 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac mState.mDrawable.setBounds(bounds.left, bounds.top, bounds.right, bounds.bottom); } @Override protected boolean onLevelChange(int level) { return mState.mDrawable.setLevel(level); } @Override protected boolean onStateChange(int[] state) { return mState.mDrawable.setState(state); } @Override public int getIntrinsicWidth() { return mState.mDrawable.getIntrinsicWidth(); Loading
graphics/java/android/graphics/drawable/AnimationDrawable.java +23 −20 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ import android.os.SystemClock; import android.util.AttributeSet; /** * * An object used to create frame-by-frame animations, defined by a series of Drawable objects, * which can be used as a View object's background. * <p> Loading Loading @@ -114,6 +113,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An * @see #isRunning() * @see #stop() */ @Override public void start() { if (!isRunning()) { run(); Loading @@ -127,6 +127,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An * @see #isRunning() * @see #start() */ @Override public void stop() { if (isRunning()) { unscheduleSelf(this); Loading @@ -138,6 +139,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An * * @return true if the animation is running, false otherwise */ @Override public boolean isRunning() { return mAnimating; } Loading @@ -148,6 +150,7 @@ public class AnimationDrawable extends DrawableContainer implements Runnable, An * * @see #start() */ @Override public void run() { nextFrame(false); } Loading
graphics/java/android/graphics/drawable/BitmapDrawable.java +11 −29 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuff; import android.graphics.PorterDuff.Mode; import android.graphics.drawable.ColorDrawable.ColorState; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.Shader; Loading Loading @@ -618,9 +619,11 @@ public class BitmapDrawable extends Drawable { @Override public void setTint(ColorStateList tint, PorterDuff.Mode tintMode) { mBitmapState.mTint = tint; mBitmapState.mTintMode = tintMode; computeTintFilter(); final BitmapState state = mBitmapState; state.mTint = tint; state.mTintMode = tintMode; mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); invalidateSelf(); } Loading @@ -638,21 +641,6 @@ public class BitmapDrawable extends Drawable { return mBitmapState.mTintMode; } private void computeTintFilter() { final BitmapState state = mBitmapState; if (state.mTint != null && state.mTintMode != null) { final int color = state.mTint.getColorForState(getState(), 0); if (mTintFilter != null) { mTintFilter.setColor(color); mTintFilter.setMode(state.mTintMode); } else { mTintFilter = new PorterDuffColorFilter(color, state.mTintMode); } } else { mTintFilter = null; } } /** * @hide Candidate for future API inclusion */ Loading @@ -679,17 +667,11 @@ public class BitmapDrawable extends Drawable { @Override protected boolean onStateChange(int[] stateSet) { final ColorStateList tint = mBitmapState.mTint; if (tint != null) { final int newColor = tint.getColorForState(stateSet, 0); final int oldColor = mTintFilter.getColor(); if (oldColor != newColor) { mTintFilter.setColor(newColor); invalidateSelf(); final BitmapState state = mBitmapState; if (state.mTint != null && state.mTintMode != null) { mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); return true; } } return false; } Loading Loading @@ -946,7 +928,7 @@ public class BitmapDrawable extends Drawable { mTargetDensity = state.mTargetDensity; } computeTintFilter(); updateTintFilter(mTintFilter, state.mTint, state.mTintMode); computeBitmapSize(); } }
graphics/java/android/graphics/drawable/ClipDrawable.java +12 −2 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package android.graphics.drawable; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.Resources.Theme; import android.graphics.*; import android.graphics.PorterDuff.Mode; import android.view.Gravity; import android.util.AttributeSet; Loading Loading @@ -111,6 +113,7 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { // overrides from Drawable.Callback @Override public void invalidateDrawable(Drawable who) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -118,6 +121,7 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { } } @Override public void scheduleDrawable(Drawable who, Runnable what, long when) { final Callback callback = getCallback(); if (callback != null) { Loading @@ -125,6 +129,7 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { } } @Override public void unscheduleDrawable(Drawable who, Runnable what) { final Callback callback = getCallback(); if (callback != null) { Loading Loading @@ -168,6 +173,11 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { mClipState.mDrawable.setColorFilter(cf); } @Override public void setTint(ColorStateList tint, Mode tintMode) { mClipState.mDrawable.setTint(tint, tintMode); } @Override public int getOpacity() { return mClipState.mDrawable.getOpacity(); Loading
graphics/java/android/graphics/drawable/ColorDrawable.java +61 −9 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package android.graphics.drawable; import android.graphics.*; import android.graphics.PorterDuff.Mode; import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.Resources.Theme; import android.content.res.TypedArray; Loading @@ -39,9 +41,13 @@ import java.io.IOException; * @attr ref android.R.styleable#ColorDrawable_color */ public class ColorDrawable extends Drawable { private final Paint mPaint = new Paint(); @ViewDebug.ExportedProperty(deepExport = true, prefix = "state_") private ColorState mColorState; private final Paint mPaint = new Paint(); private ColorStateList mTint; private PorterDuffColorFilter mTintFilter; private boolean mMutated; /** Loading Loading @@ -84,9 +90,17 @@ public class ColorDrawable extends Drawable { @Override public void draw(Canvas canvas) { if ((mColorState.mUseColor >>> 24) != 0) { final ColorFilter colorFilter = mPaint.getColorFilter(); if ((mColorState.mUseColor >>> 24) != 0 || colorFilter != null || mTintFilter != null) { if (colorFilter == null) { mPaint.setColorFilter(mTintFilter); } mPaint.setColor(mColorState.mUseColor); canvas.drawRect(getBounds(), mPaint); // Restore original color filter. mPaint.setColorFilter(colorFilter); } } Loading Loading @@ -141,16 +155,51 @@ public class ColorDrawable extends Drawable { } /** * Setting a color filter on a ColorDrawable has no effect. * Sets the color filter applied to this color. * <p> * Only supported on version {@link android.os.Build.VERSION_CODES#L} and * above. Calling this method has no effect on earlier versions. * * @param colorFilter Ignore. * @see android.graphics.drawable.Drawable#setColorFilter(ColorFilter) */ @Override public void setColorFilter(ColorFilter colorFilter) { mPaint.setColorFilter(colorFilter); } @Override public void setTint(ColorStateList tint, Mode tintMode) { final ColorState state = mColorState; if (state.mTint != tint || state.mTintMode != tintMode) { state.mTint = tint; state.mTintMode = tintMode; mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); invalidateSelf(); } } @Override protected boolean onStateChange(int[] stateSet) { final ColorState state = mColorState; if (state.mTint != null && state.mTintMode != null) { mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); return true; } return false; } @Override public boolean isStateful() { return mTint != null && mTint.isStateful(); } @Override public int getOpacity() { if (mTintFilter != null || mPaint.getColorFilter() != null) { return PixelFormat.TRANSLUCENT; } switch (mColorState.mUseColor >>> 24) { case 255: return PixelFormat.OPAQUE; Loading @@ -165,8 +214,7 @@ public class ColorDrawable extends Drawable { throws XmlPullParserException, IOException { super.inflate(r, parser, attrs, theme); final TypedArray a = obtainAttributes( r, theme, attrs, R.styleable.ColorDrawable); final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.ColorDrawable); inflateStateFromTypedArray(a); a.recycle(); } Loading Loading @@ -225,21 +273,25 @@ public class ColorDrawable extends Drawable { } final static class ColorState extends ConstantState { int[] mThemeAttrs; int mBaseColor; // base color, independent of setAlpha() @ViewDebug.ExportedProperty int mUseColor; // basecolor modulated by setAlpha() int mChangingConfigurations; int[] mThemeAttrs; ColorStateList mTint; Mode mTintMode; ColorState() { // Empty constructor. } ColorState(ColorState state) { mThemeAttrs = state.mThemeAttrs; mBaseColor = state.mBaseColor; mUseColor = state.mUseColor; mChangingConfigurations = state.mChangingConfigurations; mThemeAttrs = state.mThemeAttrs; mTint = state.mTint; mTintMode = state.mTintMode; } @Override Loading Loading @@ -276,6 +328,6 @@ public class ColorDrawable extends Drawable { mColorState = state; } // No local properties to initialize. mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); } }