From 33e70bd6d208a0d49264efd93702fc0807695412 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 4 Dec 2018 11:28:11 -0700 Subject: [PATCH] Stop indexing location metadata. The new ACCESS_MEDIA_LOCATION permission is designed to protect the location metadata of items the caller doesn't own, but we can't easily perform partial filtering of metadata from returned Cursor objects based on per-row ownership, so we're forced to outright stop indexing and returning location metadata via queries. Apps can still easily obtain location metadata using ExifInterface. Bug: 111892141 Test: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore* Change-Id: I4d99e6aa7d94bb0e7a50ce86eb1ab0f1ed142d4a --- api/current.txt | 10 ++++----- core/java/android/provider/MediaStore.java | 25 ++++++++++++++++++++++ media/java/android/media/MediaScanner.java | 6 ------ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/api/current.txt b/api/current.txt index f9cebad7c0806..62bf40f3e7ff4 100644 --- a/api/current.txt +++ b/api/current.txt @@ -37515,8 +37515,8 @@ package android.provider { field public static final java.lang.String DATE_TAKEN = "datetaken"; field public static final java.lang.String DESCRIPTION = "description"; field public static final java.lang.String IS_PRIVATE = "isprivate"; - field public static final java.lang.String LATITUDE = "latitude"; - field public static final java.lang.String LONGITUDE = "longitude"; + field public static final deprecated java.lang.String LATITUDE = "latitude"; + field public static final deprecated java.lang.String LONGITUDE = "longitude"; field public static final deprecated java.lang.String MINI_THUMB_MAGIC = "mini_thumb_magic"; field public static final java.lang.String ORIENTATION = "orientation"; field public static final deprecated java.lang.String PICASA_ID = "picasa_id"; @@ -37640,8 +37640,8 @@ package android.provider { field public static final java.lang.String DURATION = "duration"; field public static final java.lang.String IS_PRIVATE = "isprivate"; field public static final java.lang.String LANGUAGE = "language"; - field public static final java.lang.String LATITUDE = "latitude"; - field public static final java.lang.String LONGITUDE = "longitude"; + field public static final deprecated java.lang.String LATITUDE = "latitude"; + field public static final deprecated java.lang.String LONGITUDE = "longitude"; field public static final deprecated java.lang.String MINI_THUMB_MAGIC = "mini_thumb_magic"; field public static final java.lang.String RESOLUTION = "resolution"; field public static final java.lang.String TAGS = "tags"; @@ -45865,8 +45865,8 @@ package android.text.style { method public deprecated java.lang.String getLocale(); method public java.util.Locale getLocaleObject(); method public int getSpanTypeId(); - method public int getUnderlineColor(); method public java.lang.String[] getSuggestions(); + method public int getUnderlineColor(); method public void setFlags(int); method public void updateDrawState(android.text.TextPaint); method public void writeToParcel(android.os.Parcel, int); diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index 9e26a368ad802..0299e416707a3 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -37,6 +37,7 @@ import android.database.DatabaseUtils; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Point; +import android.media.ExifInterface; import android.net.Uri; import android.os.Bundle; import android.os.CancellationSignal; @@ -1166,13 +1167,25 @@ public final class MediaStore { /** * The latitude where the image was captured. *

Type: DOUBLE

+ * + * @deprecated location details are no longer indexed for privacy + * reasons, and this value is now always {@code null}. + * You can still manually obtain location metadata using + * {@link ExifInterface#getLatLong(float[])}. */ + @Deprecated public static final String LATITUDE = "latitude"; /** * The longitude where the image was captured. *

Type: DOUBLE

+ * + * @deprecated location details are no longer indexed for privacy + * reasons, and this value is now always {@code null}. + * You can still manually obtain location metadata using + * {@link ExifInterface#getLatLong(float[])}. */ + @Deprecated public static final String LONGITUDE = "longitude"; /** @@ -2410,13 +2423,25 @@ public final class MediaStore { /** * The latitude where the video was captured. *

Type: DOUBLE

+ * + * @deprecated location details are no longer indexed for privacy + * reasons, and this value is now always {@code null}. + * You can still manually obtain location metadata using + * {@link ExifInterface#getLatLong(float[])}. */ + @Deprecated public static final String LATITUDE = "latitude"; /** * The longitude where the video was captured. *

Type: DOUBLE

+ * + * @deprecated location details are no longer indexed for privacy + * reasons, and this value is now always {@code null}. + * You can still manually obtain location metadata using + * {@link ExifInterface#getLatLong(float[])}. */ + @Deprecated public static final String LONGITUDE = "longitude"; /** diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 0950a24978663..90cfc534877e1 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -1015,12 +1015,6 @@ public class MediaScanner implements AutoCloseable { // exif is null } if (exif != null) { - float[] latlng = new float[2]; - if (exif.getLatLong(latlng)) { - values.put(Images.Media.LATITUDE, latlng[0]); - values.put(Images.Media.LONGITUDE, latlng[1]); - } - long time = exif.getGpsDateTime(); if (time != -1) { values.put(Images.Media.DATE_TAKEN, time);