summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Julian Mancini <dooper@google.com> 2017-07-21 14:26:46 -0700
committer Julian Mancini <dooper@google.com> 2017-07-27 10:21:23 -0700
commita83cc4582ff01f56eeb50664b51ab2aeb7bee45b (patch)
treeeebd8ba63646c608447ac19f07955bebe1872af7
parentba9dddc08ce84505567d2cb6dfa953c5fd8e51a7 (diff)
Add support for simpler Lat/Long values
In this CL, we add two public static final Strings to MetadataReader. I use these to put in an "extras" bundle into our highest level bundle. Within that extras bundle is the Latitude and Longitude values, if available. Bug: 63906073 Test: In Place Change-Id: I1feccb4444d6525f9bc8bddfe8cc73b098e0b90e
-rw-r--r--core/java/android/provider/MetadataReader.java30
-rw-r--r--core/tests/utiltests/res/drawable/image.jpgbin4235308 -> 2580618 bytes
-rw-r--r--core/tests/utiltests/src/android/util/MetadataReaderTest.java8
-rw-r--r--media/java/android/media/ExifInterface.java3
4 files changed, 25 insertions, 16 deletions
diff --git a/core/java/android/provider/MetadataReader.java b/core/java/android/provider/MetadataReader.java
index 2d1fca029c1c..5aa5f72ab788 100644
--- a/core/java/android/provider/MetadataReader.java
+++ b/core/java/android/provider/MetadataReader.java
@@ -44,7 +44,9 @@ public final class MetadataReader {
ExifInterface.TAG_IMAGE_LENGTH,
ExifInterface.TAG_DATETIME,
ExifInterface.TAG_GPS_LATITUDE,
+ ExifInterface.TAG_GPS_LATITUDE_REF,
ExifInterface.TAG_GPS_LONGITUDE,
+ ExifInterface.TAG_GPS_LONGITUDE_REF,
ExifInterface.TAG_MAKE,
ExifInterface.TAG_MODEL,
ExifInterface.TAG_APERTURE,
@@ -166,9 +168,9 @@ public final class MetadataReader {
TYPE_MAPPING.put(ExifInterface.TAG_GPS_DIFFERENTIAL, TYPE_INT);
TYPE_MAPPING.put(ExifInterface.TAG_GPS_IMG_DIRECTION, TYPE_DOUBLE);
TYPE_MAPPING.put(ExifInterface.TAG_GPS_IMG_DIRECTION_REF, TYPE_STRING);
- TYPE_MAPPING.put(ExifInterface.TAG_GPS_LATITUDE, TYPE_DOUBLE);
+ TYPE_MAPPING.put(ExifInterface.TAG_GPS_LATITUDE, TYPE_STRING);
TYPE_MAPPING.put(ExifInterface.TAG_GPS_LATITUDE_REF, TYPE_STRING);
- TYPE_MAPPING.put(ExifInterface.TAG_GPS_LONGITUDE, TYPE_DOUBLE);
+ TYPE_MAPPING.put(ExifInterface.TAG_GPS_LONGITUDE, TYPE_STRING);
TYPE_MAPPING.put(ExifInterface.TAG_GPS_LONGITUDE_REF, TYPE_STRING);
TYPE_MAPPING.put(ExifInterface.TAG_GPS_MAP_DATUM, TYPE_STRING);
TYPE_MAPPING.put(ExifInterface.TAG_GPS_MEASURE_MODE, TYPE_STRING);
@@ -215,7 +217,9 @@ public final class MetadataReader {
* ExifInterface.TAG_IMAGE_LENGTH,
* ExifInterface.TAG_DATETIME,
* ExifInterface.TAG_GPS_LATITUDE,
+ * ExifInterface.TAG_GPS_LATITUDE_REF,
* ExifInterface.TAG_GPS_LONGITUDE,
+ * ExifInterface.TAG_GPS_LONGITUDE_REF,
* ExifInterface.TAG_MAKE,
* ExifInterface.TAG_MODEL,
* ExifInterface.TAG_APERTURE,
@@ -250,7 +254,9 @@ public final class MetadataReader {
* ExifInterface.TAG_IMAGE_LENGTH,
* ExifInterface.TAG_DATETIME,
* ExifInterface.TAG_GPS_LATITUDE,
+ * ExifInterface.TAG_GPS_LATITUDE_REF,
* ExifInterface.TAG_GPS_LONGITUDE,
+ * ExifInterface.TAG_GPS_LONGITUDE_REF,
* ExifInterface.TAG_MAKE,
* ExifInterface.TAG_MODEL,
* ExifInterface.TAG_APERTURE,
@@ -262,21 +268,21 @@ public final class MetadataReader {
tags = DEFAULT_EXIF_TAGS;
}
Bundle exif = new Bundle();
- for (int i = 0; i < tags.length; i++) {
- if (TYPE_MAPPING.get(tags[i]).equals(TYPE_INT)) {
- int data = exifInterface.getAttributeInt(tags[i], Integer.MIN_VALUE);
+ for (String tag : tags) {
+ if (TYPE_MAPPING.get(tag).equals(TYPE_INT)) {
+ int data = exifInterface.getAttributeInt(tag, Integer.MIN_VALUE);
if (data != Integer.MIN_VALUE) {
- exif.putInt(tags[i], data);
+ exif.putInt(tag, data);
}
- } else if (TYPE_MAPPING.get(tags[i]).equals(TYPE_DOUBLE)) {
- double data = exifInterface.getAttributeDouble(tags[i], Double.MIN_VALUE);
+ } else if (TYPE_MAPPING.get(tag).equals(TYPE_DOUBLE)) {
+ double data = exifInterface.getAttributeDouble(tag, Double.MIN_VALUE);
if (data != Double.MIN_VALUE) {
- exif.putDouble(tags[i], data);
+ exif.putDouble(tag, data);
}
- } else if (TYPE_MAPPING.get(tags[i]).equals(TYPE_STRING)) {
- String data = exifInterface.getAttribute(tags[i]);
+ } else if (TYPE_MAPPING.get(tag).equals(TYPE_STRING)) {
+ String data = exifInterface.getAttribute(tag);
if (data != null) {
- exif.putString(tags[i], data);
+ exif.putString(tag, data);
}
}
}
diff --git a/core/tests/utiltests/res/drawable/image.jpg b/core/tests/utiltests/res/drawable/image.jpg
index bef1fb111f89..b539fcfdeb94 100644
--- a/core/tests/utiltests/res/drawable/image.jpg
+++ b/core/tests/utiltests/res/drawable/image.jpg
Binary files differ
diff --git a/core/tests/utiltests/src/android/util/MetadataReaderTest.java b/core/tests/utiltests/src/android/util/MetadataReaderTest.java
index 193fb50b06f3..a828edbac6ab 100644
--- a/core/tests/utiltests/src/android/util/MetadataReaderTest.java
+++ b/core/tests/utiltests/src/android/util/MetadataReaderTest.java
@@ -56,9 +56,11 @@ public class MetadataReaderTest extends TestCase {
Bundle exif = mData.getBundle(DocumentsContract.METADATA_EXIF);
assertEquals("3036", String.valueOf(exif.getInt(ExifInterface.TAG_IMAGE_WIDTH)));
assertEquals("4048", String.valueOf(exif.getInt(ExifInterface.TAG_IMAGE_LENGTH)));
- assertEquals("2017:07:17 19:19:28", exif.getString(ExifInterface.TAG_DATETIME));
- assertEquals(0.0, exif.getDouble(ExifInterface.TAG_GPS_LATITUDE));
- assertEquals(0.0, exif.getDouble(ExifInterface.TAG_GPS_LONGITUDE));
+ assertEquals("2017:07:26 21:06:25", exif.getString(ExifInterface.TAG_DATETIME));
+ assertEquals("33/1,59/1,4530/100", exif.getString(ExifInterface.TAG_GPS_LATITUDE));
+ assertEquals("N", exif.getString(ExifInterface.TAG_GPS_LATITUDE_REF));
+ assertEquals("118/1,28/1,3124/100", exif.getString(ExifInterface.TAG_GPS_LONGITUDE));
+ assertEquals("W", exif.getString(ExifInterface.TAG_GPS_LONGITUDE_REF));
assertEquals("Google", exif.getString(ExifInterface.TAG_MAKE));
assertEquals("Pixel", exif.getString(ExifInterface.TAG_MODEL));
assertEquals(mData.getStringArray(DocumentsContract.METADATA_TYPES)[0],
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 6677178514e0..7cdde5f6bbb4 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -2069,7 +2069,8 @@ public class ExifInterface {
}
}
- private static float convertRationalLatLonToFloat(String rationalString, String ref) {
+ /** {@hide} */
+ public static float convertRationalLatLonToFloat(String rationalString, String ref) {
try {
String [] parts = rationalString.split(",");