Add cts test for JPEG EXIF thumbnail sizes.

bug:2375986
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
index 93785f1..0e2f4ff 100644
--- a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
@@ -22,6 +22,8 @@
 import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestTargets;
 
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.graphics.PixelFormat;
 import android.hardware.Camera;
 import android.hardware.Camera.AutoFocusCallback;
@@ -31,6 +33,7 @@
 import android.hardware.Camera.PreviewCallback;
 import android.hardware.Camera.Size;
 import android.hardware.Camera.ShutterCallback;
+import android.media.ExifInterface;
 import android.os.ConditionVariable;
 import android.os.Looper;
 import android.test.ActivityInstrumentationTestCase2;
@@ -50,6 +53,7 @@
     private String TAG = "CameraTest";
     private static final String PACKAGE = "com.android.cts.stub";
     private static final boolean LOGV = false;
+    private final String JPEG_PATH = "/sdcard/test.jpg";
 
     private boolean mRawPreviewCallbackResult = false;
     private boolean mShutterCallbackResult = false;
@@ -170,7 +174,7 @@
                     mJpegPictureCallbackResult = true;
 
                     // try to store the picture on the SD card
-                    File rawoutput = new File("/sdcard/test.bmp");
+                    File rawoutput = new File(JPEG_PATH);
                     FileOutputStream outStream = new FileOutputStream(rawoutput);
                     outStream.write(rawData);
                     outStream.close();
@@ -543,4 +547,58 @@
         return (format == PixelFormat.RGB_565) || (format == PixelFormat.YCbCr_420_SP)
                 || (format == PixelFormat.JPEG) || (format == PixelFormat.YCbCr_422_I);
     }
+
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "setJpegThumbnailSize",
+            args = {android.hardware.Camera.Size.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getJpegThumbnailSize",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getJpegSupportedThumbnailSizes",
+            args = {}
+        )
+    })
+    public void testJpegThumbnailSize() throws Exception {
+        initializeMessageLooper();
+        // Thumbnail size parameters should have valid values.
+        Parameters p = mCamera.getParameters();
+        Size size = p.getJpegThumbnailSize();
+        assertTrue(size.width > 0 && size.height > 0);
+        List<Size> sizes = p.getSupportedJpegThumbnailSizes();
+        assertTrue(sizes.size() >= 2);
+        assertTrue(sizes.contains(size));
+        assertTrue(sizes.contains(mCamera.new Size(0, 0)));
+
+        // Test if the thumbnail size matches the setting.
+        SurfaceHolder mSurfaceHolder;
+        mSurfaceHolder = CameraStubActivity.mSurfaceView.getHolder();
+        mCamera.setPreviewDisplay(mSurfaceHolder);
+        mCamera.startPreview();
+        mCamera.takePicture(null, null, mJpegPictureCallback);
+        Thread.sleep(WAIT_LONG);
+        ExifInterface exif = new ExifInterface(JPEG_PATH);
+        assertTrue(exif.hasThumbnail());
+        byte[] thumb = exif.getThumbnail();
+        Bitmap b = BitmapFactory.decodeByteArray(thumb, 0, thumb.length);
+        assertEquals(b.getWidth(), size.width);
+        assertEquals(b.getHeight(), size.height);
+
+        // Test no thumbnail case.
+        p.setJpegThumbnailSize(0, 0);
+        mCamera.setParameters(p);
+        mCamera.startPreview();
+        mCamera.takePicture(null, null, mJpegPictureCallback);
+        Thread.sleep(WAIT_LONG);
+        exif = new ExifInterface(JPEG_PATH);
+        assertTrue(!exif.hasThumbnail());
+
+        terminateMessageLooper();
+    }
 }