Add camera CTS to verify GPS exif data.

bug:3381761
Change-Id: Ia4bc03ba87a530093d6f4de003b7e7539a6c5523
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
index 0706287..944de6c 100644
--- a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
@@ -849,25 +849,10 @@
         assertEquals(focalLength, exifFocalLength, 0.001);
 
         // Test gps exif tags.
-        mCamera.startPreview();
-        parameters.setGpsLatitude(37.736071);
-        parameters.setGpsLongitude(-122.441983);
-        parameters.setGpsAltitude(21);
-        parameters.setGpsTimestamp(1199145600);
-        String thirtyTwoCharacters = "GPS NETWORK HYBRID ARE ALL FINE.";
-        parameters.setGpsProcessingMethod(thirtyTwoCharacters);
-        mCamera.setParameters(parameters);
-        mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
-        waitForSnapshotDone();
-        exif = new ExifInterface(JPEG_PATH);
-        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE));
-        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE));
-        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF));
-        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF));
-        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_TIMESTAMP));
-        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_DATESTAMP));
-        assertEquals(thirtyTwoCharacters,
-                exif.getAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD));
+        testGpsExifValues(parameters, 37.736071, -122.441983, 21, 1199145600,
+            "GPS NETWORK HYBRID ARE ALL FINE.");
+        testGpsExifValues(parameters, 0.736071, 0.441983, 1, 1199145601, "GPS");
+        testGpsExifValues(parameters, -89.736071, -179.441983, 100000, 1199145602, "NETWORK");
 
         // Test gps tags do not exist after calling removeGpsData.
         mCamera.startPreview();
@@ -880,6 +865,33 @@
         terminateMessageLooper();
     }
 
+    private void testGpsExifValues(Parameters parameters, double latitude,
+            double longitude, double altitude, long timestamp, String method)
+            throws IOException {
+        mCamera.startPreview();
+        parameters.setGpsLatitude(latitude);
+        parameters.setGpsLongitude(longitude);
+        parameters.setGpsAltitude(altitude);
+        parameters.setGpsTimestamp(timestamp);
+        parameters.setGpsProcessingMethod(method);
+        mCamera.setParameters(parameters);
+        mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
+        waitForSnapshotDone();
+        ExifInterface exif = new ExifInterface(JPEG_PATH);
+        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE));
+        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE));
+        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF));
+        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF));
+        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_TIMESTAMP));
+        assertNotNull(exif.getAttribute(ExifInterface.TAG_GPS_DATESTAMP));
+        assertEquals(method, exif.getAttribute(ExifInterface.TAG_GPS_PROCESSING_METHOD));
+        float[] latLong = new float[2];
+        assertTrue(exif.getLatLong(latLong));
+        assertEquals((float)latitude, latLong[0], 0.0001f);
+        assertEquals((float)longitude, latLong[1], 0.0001f);
+        assertEquals(altitude, exif.getAltitude(-1), 1);
+    }
+
     private void checkGpsDataNull(ExifInterface exif) {
         assertNull(exif.getAttribute(ExifInterface.TAG_GPS_LATITUDE));
         assertNull(exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE));