CTS test for scale bitmap shaders for target density
Bug: 31841123
Test: BitmapDrawableTest#testPreloadDensity()
Change-Id: Ife0a1109bd978a12f9dfa9cb2d90cd322f121aaf
diff --git a/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_am_density_golden_160.png b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_am_density_golden_160.png
new file mode 100644
index 0000000..2e77270
--- /dev/null
+++ b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_am_density_golden_160.png
Binary files differ
diff --git a/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_am_density_golden_320.png b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_am_density_golden_320.png
new file mode 100644
index 0000000..5a5c3d2
--- /dev/null
+++ b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_am_density_golden_320.png
Binary files differ
diff --git a/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_am_density_golden_80.png b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_am_density_golden_80.png
new file mode 100644
index 0000000..611b27b
--- /dev/null
+++ b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_am_density_golden_80.png
Binary files differ
diff --git a/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_density_golden_160.png b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_density_golden_160.png
new file mode 100644
index 0000000..2e77270
--- /dev/null
+++ b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_density_golden_160.png
Binary files differ
diff --git a/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_density_golden_320.png b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_density_golden_320.png
new file mode 100644
index 0000000..e8beaa5
--- /dev/null
+++ b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_density_golden_320.png
Binary files differ
diff --git a/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_density_golden_80.png b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_density_golden_80.png
new file mode 100644
index 0000000..b869ed7
--- /dev/null
+++ b/tests/tests/graphics/res/drawable-nodpi/bitmap_shader_density_golden_80.png
Binary files differ
diff --git a/tests/tests/graphics/res/drawable/bitmap_shader_am_density.xml b/tests/tests/graphics/res/drawable/bitmap_shader_am_density.xml
new file mode 100644
index 0000000..dfecfbb
--- /dev/null
+++ b/tests/tests/graphics/res/drawable/bitmap_shader_am_density.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/bitmap_shader_density_internal"
+ android:tileModeX="repeat"
+ android:tileModeY="clamp"
+ android:autoMirrored="true" />
diff --git a/tests/tests/graphics/res/drawable/bitmap_shader_am_density_internal.png b/tests/tests/graphics/res/drawable/bitmap_shader_am_density_internal.png
new file mode 100644
index 0000000..b6d4d89
--- /dev/null
+++ b/tests/tests/graphics/res/drawable/bitmap_shader_am_density_internal.png
Binary files differ
diff --git a/tests/tests/graphics/res/drawable/bitmap_shader_density.xml b/tests/tests/graphics/res/drawable/bitmap_shader_density.xml
new file mode 100644
index 0000000..435b06a
--- /dev/null
+++ b/tests/tests/graphics/res/drawable/bitmap_shader_density.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2016 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/bitmap_shader_density_internal"
+ android:tileModeX="repeat"
+ android:tileModeY="clamp" />
diff --git a/tests/tests/graphics/res/drawable/bitmap_shader_density_internal.png b/tests/tests/graphics/res/drawable/bitmap_shader_density_internal.png
new file mode 100644
index 0000000..b6d4d89
--- /dev/null
+++ b/tests/tests/graphics/res/drawable/bitmap_shader_density_internal.png
Binary files differ
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 755da01..f9592dc 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/BitmapDrawableTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/BitmapDrawableTest.java
@@ -41,6 +41,7 @@
import android.graphics.drawable.Drawable.ConstantState;
import android.test.InstrumentationTestCase;
import android.util.AttributeSet;
+import android.util.LayoutDirection;
import android.util.Xml;
import android.view.Gravity;
@@ -506,29 +507,25 @@
};
private static final int[] DENSITY_IMAGES = new int[] {
- R.drawable.bitmap_density
- };
-
- private static final int[][] DENSITY_GOLDEN_IMAGES = new int[][] {
- {
- R.drawable.bitmap_density_golden_160,
- R.drawable.bitmap_density_golden_80,
- R.drawable.bitmap_density_golden_320,
- }
+ R.drawable.bitmap_density,
+ R.drawable.bitmap_shader_density,
+ R.drawable.bitmap_shader_am_density,
};
public void testPreloadDensity() throws XmlPullParserException, IOException {
final Resources res = mContext.getResources();
final int densityDpi = res.getConfiguration().densityDpi;
try {
- testPreloadDensityInner(res, DENSITY_IMAGES[0], DENSITY_VALUES, DENSITY_GOLDEN_IMAGES[0]);
+ for (int i = 0; i < DENSITY_IMAGES.length; i++) {
+ testPreloadDensityInner(res, DENSITY_IMAGES[i], DENSITY_VALUES);
+ }
} finally {
DrawableTestUtils.setResourcesDensity(res, densityDpi);
}
}
- private void testPreloadDensityInner(Resources res, int sourceResId, int[] densities,
- int[] goldenResIds) throws XmlPullParserException, IOException {
+ private void testPreloadDensityInner(Resources res, int sourceResId, int[] densities)
+ throws XmlPullParserException, IOException {
final Rect tempPadding = new Rect();
// Capture initial state at preload density.
@@ -544,7 +541,7 @@
final int origHeight = preloadedDrawable.getIntrinsicHeight();
assertFalse(preloadedDrawable.getPadding(tempPadding));
- compareOrSave(preloadedDrawable, preloadDensityDpi, sourceResId, goldenResIds[0]);
+ compareOrSave(preloadedDrawable, preloadDensityDpi, sourceResId);
for (int i = 1; i < densities.length; i++) {
final int scaledDensityDpi = densities[i];
@@ -553,6 +550,7 @@
final BitmapDrawable scaledDrawable =
(BitmapDrawable) preloadedConstantState.newDrawable(res);
+ scaledDrawable.setLayoutDirection(LayoutDirection.RTL);
// Sizes are rounded.
assertEquals(Math.round(origWidth * scale), scaledDrawable.getIntrinsicWidth());
@@ -561,7 +559,7 @@
// Bitmaps have no padding.
assertFalse(scaledDrawable.getPadding(tempPadding));
- compareOrSave(scaledDrawable, scaledDensityDpi, sourceResId, goldenResIds[i]);
+ compareOrSave(scaledDrawable, scaledDensityDpi, sourceResId);
// Ensure theme density is applied correctly. Unlike most
// drawables, we don't have any loss of accuracy because density
@@ -576,7 +574,7 @@
}
}
- private void compareOrSave(Drawable dr, int densityDpi, int sourceResId, int goldenResId) {
+ private void compareOrSave(Drawable dr, int densityDpi, int sourceResId) {
final int width = dr.getIntrinsicWidth();
final int height = dr.getIntrinsicHeight();
final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
@@ -589,6 +587,7 @@
if (DBG_DUMP_PNG) {
saveGoldenImage(bitmap, sourceResId, densityDpi);
} else {
+ final int goldenResId = getGoldenImageResId(sourceResId, densityDpi);
final Bitmap golden = BitmapFactory.decodeResource(
mContext.getResources(), goldenResId);
DrawableTestUtils.compareImages(densityDpi + " dpi", golden, bitmap,
@@ -596,28 +595,32 @@
}
}
+ private int getGoldenImageResId(int sourceResId, int densityDpi) {
+ final String name = getGoldenImageName(sourceResId, densityDpi);
+ return mContext.getResources().getIdentifier(name, "drawable", mContext.getPackageName());
+ }
+
+ private String getGoldenImageName(int sourceResId, int densityDpi) {
+ return mContext.getResources().getResourceEntryName(sourceResId) + "_golden_" + densityDpi;
+ }
+
private void saveGoldenImage(Bitmap bitmap, int sourceResId, int densityDpi) {
// Save the image to the disk.
FileOutputStream out = null;
try {
- final String outputFolder = "/sdcard/temp/";
- final File folder = new File(outputFolder);
- if (!folder.exists()) {
- folder.mkdir();
+ final File outputFolder = new File("/sdcard/temp/");
+ if (!outputFolder.exists()) {
+ outputFolder.mkdir();
}
- final String sourceFilename = new File(
- mContext.getResources().getString(sourceResId)).getName();
- final String sourceTitle = sourceFilename.substring(0, sourceFilename.lastIndexOf("."));
- final String outputTitle = sourceTitle + "_golden_" + densityDpi;
- final String outputFilename = outputFolder + outputTitle + ".png";
- final File outputFile = new File(outputFilename);
- if (!outputFile.exists()) {
- outputFile.createNewFile();
+ final String goldenFilename = getGoldenImageName(sourceResId, densityDpi) + ".png";
+ final File goldenFile = new File(outputFolder, goldenFilename);
+ if (!goldenFile.exists()) {
+ goldenFile.createNewFile();
}
- out = new FileOutputStream(outputFile, false);
+ out = new FileOutputStream(goldenFile, false);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
} catch (Exception e) {
e.printStackTrace();