Add CTS tests for tinting API
Change-Id: If05c294a4669baef6e9f709c3c09baa1d9472bf1
diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/BitmapDrawableTest.java b/tests/tests/graphics/src/android/graphics/drawable/cts/BitmapDrawableTest.java
index fc63e9b..b415386 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/BitmapDrawableTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/BitmapDrawableTest.java
@@ -18,19 +18,21 @@
import com.android.cts.stub.R;
-
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Shader;
import android.graphics.Bitmap.Config;
+import android.graphics.PorterDuff.Mode;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable.ConstantState;
@@ -240,6 +242,16 @@
assertNull(bitmapDrawable.getPaint().getColorFilter());
}
+ public void testSetTint() {
+ final InputStream source = mContext.getResources().openRawResource(R.raw.testimage);
+ final BitmapDrawable d = new BitmapDrawable(source);
+
+ d.setTint(ColorStateList.valueOf(Color.BLACK), Mode.SRC_OVER);
+ assertEquals("Nine-patch is tinted", Color.BLACK, DrawableTestingUtils.getPixel(d, 0, 0));
+
+ d.setTint(null, null);
+ }
+
public void testGetOpacity() {
BitmapDrawable bitmapDrawable = new BitmapDrawable();
assertEquals(Gravity.FILL, bitmapDrawable.getGravity());
diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/ColorDrawableTest.java b/tests/tests/graphics/src/android/graphics/drawable/cts/ColorDrawableTest.java
index 1267885..b4237d7 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/ColorDrawableTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/ColorDrawableTest.java
@@ -16,22 +16,21 @@
package android.graphics.drawable.cts;
-import com.android.cts.stub.R;
-
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import android.content.res.Resources;
+import android.content.res.ColorStateList;
import android.content.res.XmlResourceParser;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
+import android.graphics.Color;
import android.graphics.PixelFormat;
+import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.ColorDrawable;
import android.test.AndroidTestCase;
import android.util.AttributeSet;
import android.util.Xml;
+import com.android.cts.stub.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
import java.io.IOException;
public class ColorDrawableTest extends AndroidTestCase {
@@ -120,9 +119,19 @@
}
public void testSetColorFilter() {
- final ColorDrawable colorDrawable = new ColorDrawable();
+ final ColorDrawable d = new ColorDrawable(Color.WHITE);
+ assertEquals(Color.WHITE, DrawableTestingUtils.getPixel(d, 0, 0));
- // setColorFilter(ColorFilter) is a non-operation function.
- colorDrawable.setColorFilter(null);
+ d.setColorFilter(Color.BLACK, Mode.SRC_OVER);
+ assertEquals(Color.BLACK, DrawableTestingUtils.getPixel(d, 0, 0));
+
+ }
+
+ public void testSetTint() {
+ final ColorDrawable d = new ColorDrawable(Color.WHITE);
+ assertEquals(Color.WHITE, DrawableTestingUtils.getPixel(d, 0, 0));
+
+ d.setTint(ColorStateList.valueOf(Color.BLACK), Mode.SRC_OVER);
+ assertEquals(Color.BLACK, DrawableTestingUtils.getPixel(d, 0, 0));
}
}
diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/DrawableContainerTest.java b/tests/tests/graphics/src/android/graphics/drawable/cts/DrawableContainerTest.java
index 26cdbb6..5a81feb 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/DrawableContainerTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/DrawableContainerTest.java
@@ -20,9 +20,12 @@
import java.util.Arrays;
+import android.content.res.ColorStateList;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
+import android.graphics.PorterDuff.Mode;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.DrawableContainer;
@@ -204,6 +207,23 @@
assertTrue(dr.hasSetColorFilterCalled());
}
+ public void testSetTint() {
+ assertConstantStateNotSet();
+ assertNull(mDrawableContainer.getCurrent());
+
+ mDrawableContainer.setConstantState(mDrawableContainerState);
+ mDrawableContainer.setTint(ColorStateList.valueOf(Color.BLACK), Mode.SRC_OVER);
+
+ MockDrawable dr = new MockDrawable();
+ addAndSelectDrawable(dr);
+
+ assertEquals("Initial tint propagates", Mode.SRC_OVER, dr.getTintMode());
+
+ dr.reset();
+ mDrawableContainer.setTint(null, null);
+ assertTrue("setTint() propagates", dr.hasSetTintCalled());
+ }
+
public void testOnBoundsChange() {
assertConstantStateNotSet();
assertNull(mDrawableContainer.getCurrent());
@@ -753,35 +773,29 @@
private class MockDrawable extends Drawable {
private boolean mHasCalledDraw;
-
private boolean mHasCalledSetAlpha;
-
private boolean mHasCalledSetColorFilter;
-
private boolean mHasCalledSetDither;
-
+ private boolean mHasCalledSetTint;
private boolean mHasCalledOnBoundsChanged;
-
private boolean mHasCalledOnStateChanged;
-
private boolean mHasCalledOnLevelChanged;
-
private boolean mHasCalledMutate;
- private boolean mIsStatful;
+ private boolean mIsStateful;
private Rect mPadding;
private int mIntrinsicHeight;
-
private int mIntrinsicWidth;
private int mMinimumHeight;
-
private int mMinimumWidth;
private int mOpacity;
+ private Mode mTintMode;
+
@Override
public int getOpacity() {
return mOpacity;
@@ -789,11 +803,15 @@
@Override
public boolean isStateful() {
- return mIsStatful;
+ return mIsStateful;
}
public void setStateful(boolean isStateful) {
- mIsStatful = isStateful;
+ mIsStateful = isStateful;
+ }
+
+ public Mode getTintMode() {
+ return mTintMode;
}
public void setPadding(Rect rect) {
@@ -832,11 +850,18 @@
return mIntrinsicWidth;
}
+ @Override
public Drawable mutate() {
mHasCalledMutate = true;
return this;
}
+ @Override
+ public void setTint(ColorStateList tint, Mode tintMode) {
+ mTintMode = tintMode;
+ mHasCalledSetTint = true;
+ }
+
public void setMinimumHeight(int h) {
mMinimumHeight = h;
}
@@ -873,6 +898,10 @@
return mHasCalledSetDither;
}
+ public boolean hasSetTintCalled() {
+ return mHasCalledSetTint;
+ }
+
public boolean hasOnBoundsChangedCalled() {
return mHasCalledOnBoundsChanged;
}
diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/DrawableTestingUtils.java b/tests/tests/graphics/src/android/graphics/drawable/cts/DrawableTestingUtils.java
new file mode 100644
index 0000000..d560906
--- /dev/null
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/DrawableTestingUtils.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+package android.graphics.drawable.cts;
+
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Bitmap.Config;
+import android.graphics.drawable.Drawable;
+
+public class DrawableTestingUtils {
+ public static int getPixel(Drawable d, int x, int y) {
+ final int w = Math.max(d.getIntrinsicWidth(), x + 1);
+ final int h = Math.max(d.getIntrinsicHeight(), y + 1);
+ final Bitmap b = Bitmap.createBitmap(w, h, Config.ARGB_8888);
+ final Canvas c = new Canvas(b);
+ d.setBounds(0, 0, w, h);
+ d.draw(c);
+
+ final int pixel = b.getPixel(x, y);
+ b.recycle();
+ return pixel;
+ }
+}
diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/NinePatchDrawableTest.java b/tests/tests/graphics/src/android/graphics/drawable/cts/NinePatchDrawableTest.java
index 84cf41b..d02a297 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/NinePatchDrawableTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/NinePatchDrawableTest.java
@@ -21,6 +21,7 @@
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
@@ -34,8 +35,11 @@
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Bitmap.Config;
+import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.NinePatchDrawable;
+import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.Drawable.ConstantState;
+import android.graphics.drawable.shapes.RectShape;
import android.test.InstrumentationTestCase;
import android.util.AttributeSet;
import android.util.Xml;
@@ -178,6 +182,14 @@
assertNull(mNinePatchDrawable.getPaint().getColorFilter());
}
+ public void testSetTint() {
+ mNinePatchDrawable.setTint(ColorStateList.valueOf(Color.BLACK), Mode.SRC_OVER);
+ assertEquals("Nine-patch is tinted", Color.BLACK,
+ DrawableTestingUtils.getPixel(mNinePatchDrawable, 0, 0));
+
+ mNinePatchDrawable.setTint(null, null);
+ }
+
public void testSetDither() {
mNinePatchDrawable.setDither(false);
assertFalse(mNinePatchDrawable.getPaint().isDither());
diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/ShapeDrawableTest.java b/tests/tests/graphics/src/android/graphics/drawable/cts/ShapeDrawableTest.java
index d92b8cb..0243f24 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/ShapeDrawableTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/ShapeDrawableTest.java
@@ -16,21 +16,18 @@
package android.graphics.drawable.cts;
-import com.android.cts.stub.R;
-
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
+import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
+import android.graphics.PorterDuff.Mode;
import android.graphics.Rect;
import android.graphics.Shader;
-import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.Drawable.ConstantState;
+import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.ShapeDrawable.ShaderFactory;
import android.graphics.drawable.shapes.RectShape;
import android.graphics.drawable.shapes.Shape;
@@ -38,6 +35,11 @@
import android.util.AttributeSet;
import android.util.Xml;
+import com.android.cts.stub.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
import java.io.IOException;
public class ShapeDrawableTest extends AndroidTestCase {
@@ -314,6 +316,12 @@
assertNull(shapeDrawable.getPaint().getColorFilter());
}
+ public void testSetTint() {
+ final ShapeDrawable d = new ShapeDrawable(new RectShape());
+ d.setTint(ColorStateList.valueOf(Color.BLACK), Mode.SRC_OVER);
+ assertEquals("Shape is tinted", Color.BLACK, DrawableTestingUtils.getPixel(d, 0, 0));
+ }
+
public void testSetDither() {
ShapeDrawable shapeDrawable = new ShapeDrawable();