Add test case for Api coverage
add test case testGetDocumentThumbnail into DocumentsContractTest.
Test: atest DocumentsContractTest#testGetDocumentThumbnail
Change-Id: I162af1a51d7148f6b6058422d5432f890e765c5b
Merged-In: I162af1a51d7148f6b6058422d5432f890e765c5b
Fix: 129200262
(cherry picked from commit 554ea2efe7938c7bf4ea52b0a42ad94920ee2e2d)
diff --git a/tests/tests/provider/src/android/provider/cts/DocumentsContractTest.java b/tests/tests/provider/src/android/provider/cts/DocumentsContractTest.java
index 89b231d..0f23543 100644
--- a/tests/tests/provider/src/android/provider/cts/DocumentsContractTest.java
+++ b/tests/tests/provider/src/android/provider/cts/DocumentsContractTest.java
@@ -61,6 +61,9 @@
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.database.MatrixCursor;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
import android.graphics.Point;
import android.net.Uri;
import android.os.Bundle;
@@ -77,6 +80,8 @@
import org.junit.runner.RunWith;
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -420,4 +425,55 @@
assertEquals(res, mResolver.query(buildSearchDocumentsUri(AUTHORITY, DOC_RED, "moo"), null,
Bundle.EMPTY, null));
}
+
+ @Test
+ public void testGetDocumentThumbnail() throws Exception {
+ // create file and image
+ final String testImagePath =
+ InstrumentationRegistry.getTargetContext().getExternalCacheDir().getPath()
+ + "/testimage.jpg";
+ final int imageSize = 128;
+ final int thumbnailSize = 32;
+ File file = new File(testImagePath);
+ try (FileOutputStream out = new FileOutputStream(file)) {
+ writeImage(imageSize, imageSize, Color.RED, out);
+ }
+
+ final AssetFileDescriptor res = new AssetFileDescriptor(
+ ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY),
+ 0, AssetFileDescriptor.UNKNOWN_LENGTH);
+ final Point size = new Point(thumbnailSize, thumbnailSize);
+ final Bundle opts = new Bundle();
+ opts.putParcelable(ContentResolver.EXTRA_SIZE, size);
+
+ doReturn(res).when(mProvider).openDocumentThumbnail(DOC_RED, size, null);
+ Bitmap bitmap = DocumentsContract.getDocumentThumbnail(mResolver, URI_RED, size, null);
+
+ // A provider may return a thumbnail of a different size, but never more than double the
+ // requested size.
+ assertFalse(bitmap.getWidth() > thumbnailSize * 2);
+ assertFalse(bitmap.getHeight() > thumbnailSize * 2);
+ assertColorMostlyEquals(Color.RED,
+ bitmap.getPixel(bitmap.getWidth() / 2, bitmap.getHeight() / 2));
+
+ // clean up
+ file.delete();
+ bitmap.recycle();
+ }
+
+ private static void writeImage(int width, int height, int color, OutputStream out) {
+ final Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ final Canvas canvas = new Canvas(bitmap);
+ canvas.drawColor(color);
+ bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
+ }
+
+ /**
+ * Since thumbnails might be bounced through a compression pass, we're okay
+ * if they're mostly equal.
+ */
+ private static void assertColorMostlyEquals(int expected, int actual) {
+ assertEquals(Integer.toHexString(expected & 0xF0F0F0F0),
+ Integer.toHexString(actual & 0xF0F0F0F0));
+ }
}