summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt15
-rw-r--r--api/system-current.txt15
-rw-r--r--api/test-current.txt15
-rw-r--r--core/jni/android/graphics/ColorFilter.cpp10
-rw-r--r--graphics/java/android/graphics/ColorFilter.java44
-rw-r--r--graphics/java/android/graphics/ColorMatrix.java17
-rw-r--r--graphics/java/android/graphics/ColorMatrixColorFilter.java68
-rw-r--r--graphics/java/android/graphics/LightingColorFilter.java39
-rw-r--r--graphics/java/android/graphics/Paint.java19
-rw-r--r--graphics/java/android/graphics/PorterDuffColorFilter.java35
-rw-r--r--graphics/java/android/graphics/Shader.java10
-rw-r--r--graphics/java/android/graphics/drawable/VectorDrawable.java2
-rw-r--r--tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java2
13 files changed, 187 insertions, 104 deletions
diff --git a/api/current.txt b/api/current.txt
index 77cb9e490b04..5908e429eba3 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -12757,7 +12757,7 @@ package android.graphics {
}
public class ColorFilter {
- ctor public ColorFilter();
+ ctor public deprecated ColorFilter();
}
public class ColorMatrix {
@@ -12781,6 +12781,9 @@ package android.graphics {
public class ColorMatrixColorFilter extends android.graphics.ColorFilter {
ctor public ColorMatrixColorFilter(android.graphics.ColorMatrix);
ctor public ColorMatrixColorFilter(float[]);
+ method public void getColorMatrix(android.graphics.ColorMatrix);
+ method public void setColorMatrix(android.graphics.ColorMatrix);
+ method public void setColorMatrixArray(float[]);
}
public abstract class ColorSpace {
@@ -13004,6 +13007,10 @@ package android.graphics {
public class LightingColorFilter extends android.graphics.ColorFilter {
ctor public LightingColorFilter(int, int);
+ method public int getColorAdd();
+ method public int getColorMultiply();
+ method public void setColorAdd(int);
+ method public void setColorMultiply(int);
}
public class LinearGradient extends android.graphics.Shader {
@@ -13520,6 +13527,10 @@ package android.graphics {
public class PorterDuffColorFilter extends android.graphics.ColorFilter {
ctor public PorterDuffColorFilter(int, android.graphics.PorterDuff.Mode);
+ method public int getColor();
+ method public android.graphics.PorterDuff.Mode getMode();
+ method public void setColor(int);
+ method public void setMode(android.graphics.PorterDuff.Mode);
}
public class PorterDuffXfermode extends android.graphics.Xfermode {
@@ -45423,7 +45434,7 @@ package android.view {
method public void setActivated(boolean);
method public void setAlpha(float);
method public void setAnimation(android.view.animation.Animation);
- method public void setAutofillHint(java.lang.String[]);
+ method public void setAutofillHint(java.lang.String...);
method public void setAutofillMode(int);
method public void setBackground(android.graphics.drawable.Drawable);
method public void setBackgroundColor(int);
diff --git a/api/system-current.txt b/api/system-current.txt
index 827b46ce7746..3142e71b778f 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -13495,7 +13495,7 @@ package android.graphics {
}
public class ColorFilter {
- ctor public ColorFilter();
+ ctor public deprecated ColorFilter();
}
public class ColorMatrix {
@@ -13519,6 +13519,9 @@ package android.graphics {
public class ColorMatrixColorFilter extends android.graphics.ColorFilter {
ctor public ColorMatrixColorFilter(android.graphics.ColorMatrix);
ctor public ColorMatrixColorFilter(float[]);
+ method public void getColorMatrix(android.graphics.ColorMatrix);
+ method public void setColorMatrix(android.graphics.ColorMatrix);
+ method public void setColorMatrixArray(float[]);
}
public abstract class ColorSpace {
@@ -13742,6 +13745,10 @@ package android.graphics {
public class LightingColorFilter extends android.graphics.ColorFilter {
ctor public LightingColorFilter(int, int);
+ method public int getColorAdd();
+ method public int getColorMultiply();
+ method public void setColorAdd(int);
+ method public void setColorMultiply(int);
}
public class LinearGradient extends android.graphics.Shader {
@@ -14258,6 +14265,10 @@ package android.graphics {
public class PorterDuffColorFilter extends android.graphics.ColorFilter {
ctor public PorterDuffColorFilter(int, android.graphics.PorterDuff.Mode);
+ method public int getColor();
+ method public android.graphics.PorterDuff.Mode getMode();
+ method public void setColor(int);
+ method public void setMode(android.graphics.PorterDuff.Mode);
}
public class PorterDuffXfermode extends android.graphics.Xfermode {
@@ -48889,7 +48900,7 @@ package android.view {
method public void setActivated(boolean);
method public void setAlpha(float);
method public void setAnimation(android.view.animation.Animation);
- method public void setAutofillHint(java.lang.String[]);
+ method public void setAutofillHint(java.lang.String...);
method public void setAutofillMode(int);
method public void setBackground(android.graphics.drawable.Drawable);
method public void setBackgroundColor(int);
diff --git a/api/test-current.txt b/api/test-current.txt
index 04f4f21e095f..9eacfac857c6 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -12795,7 +12795,7 @@ package android.graphics {
}
public class ColorFilter {
- ctor public ColorFilter();
+ ctor public deprecated ColorFilter();
}
public class ColorMatrix {
@@ -12819,6 +12819,9 @@ package android.graphics {
public class ColorMatrixColorFilter extends android.graphics.ColorFilter {
ctor public ColorMatrixColorFilter(android.graphics.ColorMatrix);
ctor public ColorMatrixColorFilter(float[]);
+ method public void getColorMatrix(android.graphics.ColorMatrix);
+ method public void setColorMatrix(android.graphics.ColorMatrix);
+ method public void setColorMatrixArray(float[]);
}
public abstract class ColorSpace {
@@ -13042,6 +13045,10 @@ package android.graphics {
public class LightingColorFilter extends android.graphics.ColorFilter {
ctor public LightingColorFilter(int, int);
+ method public int getColorAdd();
+ method public int getColorMultiply();
+ method public void setColorAdd(int);
+ method public void setColorMultiply(int);
}
public class LinearGradient extends android.graphics.Shader {
@@ -13558,6 +13565,10 @@ package android.graphics {
public class PorterDuffColorFilter extends android.graphics.ColorFilter {
ctor public PorterDuffColorFilter(int, android.graphics.PorterDuff.Mode);
+ method public int getColor();
+ method public android.graphics.PorterDuff.Mode getMode();
+ method public void setColor(int);
+ method public void setMode(android.graphics.PorterDuff.Mode);
}
public class PorterDuffXfermode extends android.graphics.Xfermode {
@@ -45786,7 +45797,7 @@ package android.view {
method public void setActivated(boolean);
method public void setAlpha(float);
method public void setAnimation(android.view.animation.Animation);
- method public void setAutofillHint(java.lang.String[]);
+ method public void setAutofillHint(java.lang.String...);
method public void setAutofillMode(int);
method public void setBackground(android.graphics.drawable.Drawable);
method public void setBackgroundColor(int);
diff --git a/core/jni/android/graphics/ColorFilter.cpp b/core/jni/android/graphics/ColorFilter.cpp
index 79439e2350ff..5553a3ed22c5 100644
--- a/core/jni/android/graphics/ColorFilter.cpp
+++ b/core/jni/android/graphics/ColorFilter.cpp
@@ -30,7 +30,7 @@ using namespace uirenderer;
class SkColorFilterGlue {
public:
- static void finalizer(JNIEnv* env, jobject clazz, jlong skFilterHandle) {
+ static void SafeUnref(JNIEnv* env, jobject clazz, jlong skFilterHandle) {
SkColorFilter* filter = reinterpret_cast<SkColorFilter *>(skFilterHandle);
SkSafeUnref(filter);
}
@@ -57,19 +57,19 @@ public:
};
static const JNINativeMethod colorfilter_methods[] = {
- {"destroyFilter", "(J)V", (void*) SkColorFilterGlue::finalizer}
+ {"nSafeUnref", "(J)V", (void*) SkColorFilterGlue::SafeUnref}
};
static const JNINativeMethod porterduff_methods[] = {
- { "native_CreatePorterDuffFilter", "(II)J", (void*) SkColorFilterGlue::CreatePorterDuffFilter },
+ { "native_CreatePorterDuffFilter", "(II)J", (void*) SkColorFilterGlue::CreatePorterDuffFilter },
};
static const JNINativeMethod lighting_methods[] = {
- { "native_CreateLightingFilter", "(II)J", (void*) SkColorFilterGlue::CreateLightingFilter },
+ { "native_CreateLightingFilter", "(II)J", (void*) SkColorFilterGlue::CreateLightingFilter },
};
static const JNINativeMethod colormatrix_methods[] = {
- { "nativeColorMatrixFilter", "([F)J", (void*) SkColorFilterGlue::CreateColorMatrixFilter },
+ { "nativeColorMatrixFilter", "([F)J", (void*) SkColorFilterGlue::CreateColorMatrixFilter },
};
int register_android_graphics_ColorFilter(JNIEnv* env) {
diff --git a/graphics/java/android/graphics/ColorFilter.java b/graphics/java/android/graphics/ColorFilter.java
index ac62bf4d69e9..0ca3729dcc0e 100644
--- a/graphics/java/android/graphics/ColorFilter.java
+++ b/graphics/java/android/graphics/ColorFilter.java
@@ -28,21 +28,51 @@ package android.graphics;
*/
public class ColorFilter {
/**
+ * @deprecated Use subclass constructors directly instead.
+ */
+ @Deprecated
+ public ColorFilter() {}
+
+ /**
* Holds the pointer to the native SkColorFilter instance.
- *
- * @hide
*/
- public long native_instance;
+ private long mNativeInstance;
+
+ long createNativeInstance() {
+ return 0;
+ }
+
+ void discardNativeInstance() {
+ if (mNativeInstance != 0) {
+ nSafeUnref(mNativeInstance);
+ mNativeInstance = 0;
+ }
+ }
@Override
protected void finalize() throws Throwable {
try {
- super.finalize();
+ if (mNativeInstance != 0) {
+ nSafeUnref(mNativeInstance);
+ }
+ mNativeInstance = -1;
} finally {
- destroyFilter(native_instance);
- native_instance = 0;
+ super.finalize();
+ }
+ }
+
+ /** @hide */
+ public long getNativeInstance() {
+ if (mNativeInstance == -1) {
+ throw new IllegalStateException("attempting to use a finalized ColorFilter");
+ }
+
+ if (mNativeInstance == 0) {
+ mNativeInstance = createNativeInstance();
}
+ return mNativeInstance;
+
}
- static native void destroyFilter(long native_instance);
+ static native void nSafeUnref(long native_instance);
}
diff --git a/graphics/java/android/graphics/ColorMatrix.java b/graphics/java/android/graphics/ColorMatrix.java
index 1b1849ebb835..6299b2c47ea1 100644
--- a/graphics/java/android/graphics/ColorMatrix.java
+++ b/graphics/java/android/graphics/ColorMatrix.java
@@ -268,4 +268,21 @@ public class ColorMatrix {
m[5] = 1; m[6] = -0.34414f; m[7] = -0.71414f;
m[10] = 1; m[11] = 1.772f; m[12] = 0;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ // if (obj == this) return true; -- NaN value would mean matrix != itself
+ if (!(obj instanceof ColorMatrix)) {
+ return false;
+ }
+
+ // we don't use Arrays.equals(), since that considers NaN == NaN
+ final float[] other = ((ColorMatrix) obj).mArray;
+ for (int i = 0; i < 20; i++) {
+ if (other[i] != mArray[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
}
diff --git a/graphics/java/android/graphics/ColorMatrixColorFilter.java b/graphics/java/android/graphics/ColorMatrixColorFilter.java
index 291c8ff301f4..61f6cc5ba4ee 100644
--- a/graphics/java/android/graphics/ColorMatrixColorFilter.java
+++ b/graphics/java/android/graphics/ColorMatrixColorFilter.java
@@ -16,6 +16,9 @@
package android.graphics;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
/**
* A color filter that transforms colors through a 4x5 color matrix. This filter
* can be used to change the saturation of pixels, convert from YUV to RGB, etc.
@@ -32,9 +35,8 @@ public class ColorMatrixColorFilter extends ColorFilter {
* the filter, so changes made to the matrix after the filter
* is constructed will not be reflected in the filter.
*/
- public ColorMatrixColorFilter(ColorMatrix matrix) {
+ public ColorMatrixColorFilter(@NonNull ColorMatrix matrix) {
mMatrix.set(matrix);
- update();
}
/**
@@ -44,84 +46,76 @@ public class ColorMatrixColorFilter extends ColorFilter {
* matrix. The first 20 entries of the array are copied into
* the filter. See ColorMatrix.
*/
- public ColorMatrixColorFilter(float[] array) {
+ public ColorMatrixColorFilter(@NonNull float[] array) {
if (array.length < 20) {
throw new ArrayIndexOutOfBoundsException();
}
mMatrix.set(array);
- update();
}
/**
- * Returns the {@link ColorMatrix} used by this filter. The returned
- * value is never null. Modifying the returned matrix does not have
- * any effect until you call {@link #setColorMatrix(ColorMatrix)}.
- *
- * @see #setColorMatrix(ColorMatrix)
+ * Copies the ColorMatrix from the filter into the passed ColorMatrix.
*
- * @hide
+ * @param colorMatrix Set to the current value of the filter's ColorMatrix.
*/
- public ColorMatrix getColorMatrix() {
- return mMatrix;
+ public void getColorMatrix(ColorMatrix colorMatrix) {
+ colorMatrix.set(mMatrix);
}
/**
- * Specifies the color matrix used by this filter. If the specified
- * color matrix is null, this filter's color matrix will be reset to
- * the identity matrix.
+ * Copies the provided color matrix to be used by this filter.
*
- * @param matrix A {@link ColorMatrix} or null
+ * If the specified color matrix is null, this filter's color matrix will be reset to the
+ * identity matrix.
*
- * @see #getColorMatrix()
- * @see android.graphics.ColorMatrix#reset()
- * @see #setColorMatrix(float[])
+ * @param matrix A {@link ColorMatrix} or null
*
- * @hide
+ * @see #getColorMatrix(ColorMatrix)
+ * @see #setColorMatrixArray(float[])
+ * @see ColorMatrix#reset()
*/
- public void setColorMatrix(ColorMatrix matrix) {
+ public void setColorMatrix(@Nullable ColorMatrix matrix) {
+ discardNativeInstance();
if (matrix == null) {
mMatrix.reset();
- } else if (matrix != mMatrix) {
+ } else {
mMatrix.set(matrix);
}
- update();
}
/**
- * Specifies the color matrix used by this filter. If the specified
- * color matrix is null, this filter's color matrix will be reset to
- * the identity matrix.
+ * Copies the provided color matrix to be used by this filter.
+ *
+ * If the specified color matrix is null, this filter's color matrix will be reset to the
+ * identity matrix.
*
* @param array Array of floats used to transform colors, treated as a 4x5
* matrix. The first 20 entries of the array are copied into
* the filter. See {@link ColorMatrix}.
*
- * @see #getColorMatrix()
- * @see android.graphics.ColorMatrix#reset()
+ * @see #getColorMatrix(ColorMatrix)
* @see #setColorMatrix(ColorMatrix)
+ * @see ColorMatrix#reset()
*
* @throws ArrayIndexOutOfBoundsException if the specified array's
* length is < 20
- *
- * @hide
*/
- public void setColorMatrix(float[] array) {
+ public void setColorMatrixArray(@Nullable float[] array) {
+ // called '...Array' so that passing null isn't ambiguous
+ discardNativeInstance();
if (array == null) {
mMatrix.reset();
} else {
if (array.length < 20) {
throw new ArrayIndexOutOfBoundsException();
}
-
mMatrix.set(array);
}
- update();
}
- private void update() {
- final float[] colorMatrix = mMatrix.getArray();
- destroyFilter(native_instance);
- native_instance = nativeColorMatrixFilter(colorMatrix);
+ @Override
+ long createNativeInstance() {
+ return nativeColorMatrixFilter(mMatrix.getArray());
}
private static native long nativeColorMatrixFilter(float[] array);
diff --git a/graphics/java/android/graphics/LightingColorFilter.java b/graphics/java/android/graphics/LightingColorFilter.java
index ad78430e2472..b0c145beb649 100644
--- a/graphics/java/android/graphics/LightingColorFilter.java
+++ b/graphics/java/android/graphics/LightingColorFilter.java
@@ -21,6 +21,8 @@
package android.graphics;
+import android.annotation.ColorInt;
+
/**
* A color filter that can be used to simulate simple lighting effects.
* A <code>LightingColorFilter</code> is defined by two parameters, one
@@ -37,7 +39,9 @@ package android.graphics;
* The result is pinned to the <code>[0..255]</code> range for each channel.
*/
public class LightingColorFilter extends ColorFilter {
+ @ColorInt
private int mMul;
+ @ColorInt
private int mAdd;
/**
@@ -45,10 +49,9 @@ public class LightingColorFilter extends ColorFilter {
* and then adds a second color. The alpha components of the mul and add
* arguments are ignored.
*/
- public LightingColorFilter(int mul, int add) {
+ public LightingColorFilter(@ColorInt int mul, @ColorInt int add) {
mMul = mul;
mAdd = add;
- update();
}
/**
@@ -56,9 +59,8 @@ public class LightingColorFilter extends ColorFilter {
* color filter is applied.
*
* @see #setColorMultiply(int)
- *
- * @hide
*/
+ @ColorInt
public int getColorMultiply() {
return mMul;
}
@@ -69,12 +71,12 @@ public class LightingColorFilter extends ColorFilter {
* The alpha channel of this color is ignored.
*
* @see #getColorMultiply()
- *
- * @hide
*/
- public void setColorMultiply(int mul) {
- mMul = mul;
- update();
+ public void setColorMultiply(@ColorInt int mul) {
+ if (mMul != mul) {
+ mMul = mul;
+ discardNativeInstance();
+ }
}
/**
@@ -82,9 +84,8 @@ public class LightingColorFilter extends ColorFilter {
* when the color filter is applied.
*
* @see #setColorAdd(int)
- *
- * @hide
*/
+ @ColorInt
public int getColorAdd() {
return mAdd;
}
@@ -95,17 +96,17 @@ public class LightingColorFilter extends ColorFilter {
* The alpha channel of this color is ignored.
*
* @see #getColorAdd()
- *
- * @hide
*/
- public void setColorAdd(int add) {
- mAdd = add;
- update();
+ public void setColorAdd(@ColorInt int add) {
+ if (mAdd != add) {
+ mAdd = add;
+ discardNativeInstance();
+ }
}
- private void update() {
- destroyFilter(native_instance);
- native_instance = native_CreateLightingFilter(mMul, mAdd);
+ @Override
+ long createNativeInstance() {
+ return native_CreateLightingFilter(mMul, mAdd);
}
private static native long native_CreateLightingFilter(int mul, int add);
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index 7ca4615434f5..5d6aa8a5f16d 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -42,7 +42,8 @@ import libcore.util.NativeAllocationRegistry;
public class Paint {
private long mNativePaint;
- private long mNativeShader = 0;
+ private long mNativeShader;
+ private long mNativeColorFilter;
// The approximate size of a native paint object.
private static final long NATIVE_PAINT_SIZE = 98;
@@ -584,6 +585,11 @@ public class Paint {
mNativeShader = newNativeShader;
nSetShader(mNativePaint, mNativeShader);
}
+ long newNativeColorFilter = mColorFilter == null ? 0 : mColorFilter.getNativeInstance();
+ if (newNativeColorFilter != mNativeColorFilter) {
+ mNativeColorFilter = newNativeColorFilter;
+ nSetColorFilter(mNativePaint, mNativeColorFilter);
+ }
return mNativePaint;
}
@@ -1044,10 +1050,13 @@ public class Paint {
* @return filter
*/
public ColorFilter setColorFilter(ColorFilter filter) {
- long filterNative = 0;
- if (filter != null)
- filterNative = filter.native_instance;
- nSetColorFilter(mNativePaint, filterNative);
+ // If mColorFilter changes, cached value of native shader aren't valid, since
+ // old shader's pointer may be reused by another shader allocation later
+ if (mColorFilter != filter) {
+ mNativeColorFilter = -1;
+ }
+
+ // Defer setting the filter natively until getNativeInstance() is called
mColorFilter = filter;
return filter;
}
diff --git a/graphics/java/android/graphics/PorterDuffColorFilter.java b/graphics/java/android/graphics/PorterDuffColorFilter.java
index 69d68910c8b5..ccc6eadc3df5 100644
--- a/graphics/java/android/graphics/PorterDuffColorFilter.java
+++ b/graphics/java/android/graphics/PorterDuffColorFilter.java
@@ -24,6 +24,7 @@ import android.annotation.NonNull;
* color and a specific {@link PorterDuff Porter-Duff composite mode}.
*/
public class PorterDuffColorFilter extends ColorFilter {
+ @ColorInt
private int mColor;
private PorterDuff.Mode mMode;
@@ -40,7 +41,6 @@ public class PorterDuffColorFilter extends ColorFilter {
public PorterDuffColorFilter(@ColorInt int color, @NonNull PorterDuff.Mode mode) {
mColor = color;
mMode = mode;
- update();
}
/**
@@ -49,9 +49,8 @@ public class PorterDuffColorFilter extends ColorFilter {
*
* @see Color
* @see #setColor(int)
- *
- * @hide
*/
+ @ColorInt
public int getColor() {
return mColor;
}
@@ -65,12 +64,12 @@ public class PorterDuffColorFilter extends ColorFilter {
* @see Color
* @see #getColor()
* @see #getMode()
- *
- * @hide
*/
- public void setColor(int color) {
- mColor = color;
- update();
+ public void setColor(@ColorInt int color) {
+ if (mColor != color) {
+ mColor = color;
+ discardNativeInstance();
+ }
}
/**
@@ -79,8 +78,6 @@ public class PorterDuffColorFilter extends ColorFilter {
*
* @see PorterDuff
* @see #setMode(android.graphics.PorterDuff.Mode)
- *
- * @hide
*/
public PorterDuff.Mode getMode() {
return mMode;
@@ -93,17 +90,18 @@ public class PorterDuffColorFilter extends ColorFilter {
* @see PorterDuff
* @see #getMode()
* @see #getColor()
- *
- * @hide
*/
public void setMode(@NonNull PorterDuff.Mode mode) {
+ if (mode == null) {
+ throw new IllegalArgumentException("mode must be non-null");
+ }
mMode = mode;
- update();
+ discardNativeInstance();
}
- private void update() {
- destroyFilter(native_instance);
- native_instance = native_CreatePorterDuffFilter(mColor, mMode.nativeInt);
+ @Override
+ long createNativeInstance() {
+ return native_CreatePorterDuffFilter(mColor, mMode.nativeInt);
}
@Override
@@ -115,10 +113,7 @@ public class PorterDuffColorFilter extends ColorFilter {
return false;
}
final PorterDuffColorFilter other = (PorterDuffColorFilter) object;
- if (mColor != other.mColor || mMode != other.mMode) {
- return false;
- }
- return true;
+ return (mColor == other.mColor && mMode.nativeInt == other.mMode.nativeInt);
}
@Override
diff --git a/graphics/java/android/graphics/Shader.java b/graphics/java/android/graphics/Shader.java
index b584e0dd0417..8410ab2a1e02 100644
--- a/graphics/java/android/graphics/Shader.java
+++ b/graphics/java/android/graphics/Shader.java
@@ -106,8 +106,10 @@ public class Shader {
}
void discardNativeInstance() {
- nativeSafeUnref(mNativeInstance);
- mNativeInstance = 0;
+ if (mNativeInstance != 0) {
+ nativeSafeUnref(mNativeInstance);
+ mNativeInstance = 0;
+ }
}
/**
@@ -120,7 +122,9 @@ public class Shader {
@Override
protected void finalize() throws Throwable {
try {
- nativeSafeUnref(mNativeInstance);
+ if (mNativeInstance != 0) {
+ nativeSafeUnref(mNativeInstance);
+ }
mNativeInstance = -1;
} finally {
super.finalize();
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
index 3a12419c8774..a1539b8f805a 100644
--- a/graphics/java/android/graphics/drawable/VectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -333,7 +333,7 @@ public class VectorDrawable extends Drawable {
// Color filters always override tint filters.
final ColorFilter colorFilter = (mColorFilter == null ? mTintFilter : mColorFilter);
final long colorFilterNativeInstance = colorFilter == null ? 0 :
- colorFilter.native_instance;
+ colorFilter.getNativeInstance();
boolean canReuseCache = mVectorState.canReuseCache();
int pixelCount = nDraw(mVectorState.getNativeRenderer(), canvas.getNativeCanvasWrapper(),
colorFilterNativeInstance, mTmpBounds, needMirroring(),
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java
index 808b5d39b44e..a7bdabd64684 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java
@@ -138,7 +138,7 @@ public class ColorFiltersMutateActivity extends Activity {
mSaturation = saturation;
final ColorMatrixColorFilter filter =
(ColorMatrixColorFilter) mColorMatrixPaint.getColorFilter();
- final ColorMatrix m = filter.getColorMatrix();
+ final ColorMatrix m = new ColorMatrix();
m.setSaturation(saturation);
filter.setColorMatrix(m);
invalidate();