diff options
| author | 2018-09-14 18:38:15 +0000 | |
|---|---|---|
| committer | 2018-09-14 18:38:15 +0000 | |
| commit | 34e3e68375cf3a451b17054c7cd1435f4d70b1cf (patch) | |
| tree | 77c115ae33d9a621a20213bbdff9bfe00d05d9f8 | |
| parent | e4fa629d849c37bcc5b27ae25a408ad5d88ceb86 (diff) | |
| parent | 7049e651faa09d4846ea49a2e04bc62f2aa1d339 (diff) | |
Merge "Mark deprecated APIs, support column greylisting."
| -rwxr-xr-x | api/current.txt | 6 | ||||
| -rw-r--r-- | core/java/android/database/sqlite/SQLiteQueryBuilder.java | 32 | ||||
| -rw-r--r-- | core/java/android/provider/MediaStore.java | 14 | ||||
| -rw-r--r-- | media/java/android/media/MiniThumbFile.java | 9 |
4 files changed, 58 insertions, 3 deletions
diff --git a/api/current.txt b/api/current.txt index ea21c2dd10b1..27222e162542 100755 --- a/api/current.txt +++ b/api/current.txt @@ -36594,9 +36594,9 @@ package android.provider { 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 java.lang.String MINI_THUMB_MAGIC = "mini_thumb_magic"; + 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 java.lang.String PICASA_ID = "picasa_id"; + field public static final deprecated java.lang.String PICASA_ID = "picasa_id"; } public static final class MediaStore.Images.Media implements android.provider.MediaStore.Images.ImageColumns { @@ -36699,7 +36699,7 @@ package android.provider { 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 java.lang.String MINI_THUMB_MAGIC = "mini_thumb_magic"; + 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"; } diff --git a/core/java/android/database/sqlite/SQLiteQueryBuilder.java b/core/java/android/database/sqlite/SQLiteQueryBuilder.java index b705ebb77d9b..4fce2d7fe0df 100644 --- a/core/java/android/database/sqlite/SQLiteQueryBuilder.java +++ b/core/java/android/database/sqlite/SQLiteQueryBuilder.java @@ -34,6 +34,7 @@ import libcore.util.EmptyArray; import java.util.Arrays; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; @@ -50,6 +51,8 @@ public class SQLiteQueryBuilder { Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?"); private Map<String, String> mProjectionMap = null; + private List<Pattern> mProjectionGreylist = null; + @UnsupportedAppUsage private String mTables = ""; @UnsupportedAppUsage @@ -164,6 +167,17 @@ public class SQLiteQueryBuilder { } /** + * Sets a projection greylist of columns that will be allowed through, even + * when {@link #setStrict(boolean)} is enabled. This provides a way for + * abusive custom columns like {@code COUNT(*)} to continue working. + * + * @hide + */ + public void setProjectionGreylist(List<Pattern> projectionGreylist) { + mProjectionGreylist = projectionGreylist; + } + + /** * Sets the cursor factory to be used for the query. You can use * one factory for all queries on a database but it is normally * easier to specify the factory when doing this query. @@ -809,6 +823,24 @@ public class SQLiteQueryBuilder { continue; } + // If greylist is configured, we might be willing to let + // this custom column bypass our strict checks. + if (mProjectionGreylist != null) { + boolean match = false; + for (Pattern p : mProjectionGreylist) { + if (p.matcher(userColumn).matches()) { + match = true; + break; + } + } + + if (match) { + Log.w(TAG, "Allowing abusive custom column: " + userColumn); + projection[i] = userColumn; + continue; + } + } + throw new IllegalArgumentException("Invalid column " + projectionIn[i]); } diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java index 189b7b491dc5..82459b13a4eb 100644 --- a/core/java/android/provider/MediaStore.java +++ b/core/java/android/provider/MediaStore.java @@ -717,7 +717,11 @@ public final class MediaStore { /** * The picasa id of the image * <P>Type: TEXT</P> + * + * @deprecated this value was only relevant for images hosted on + * Picasa, which are no longer supported. */ + @Deprecated public static final String PICASA_ID = "picasa_id"; /** @@ -755,7 +759,12 @@ public final class MediaStore { /** * The mini thumb id. * <P>Type: INTEGER</P> + * + * @deprecated all thumbnails should be obtained via + * {@link Images.Thumbnails#getThumbnail}, as this + * value is no longer supported. */ + @Deprecated public static final String MINI_THUMB_MAGIC = "mini_thumb_magic"; /** @@ -1947,7 +1956,12 @@ public final class MediaStore { /** * The mini thumb id. * <P>Type: INTEGER</P> + * + * @deprecated all thumbnails should be obtained via + * {@link Images.Thumbnails#getThumbnail}, as this + * value is no longer supported. */ + @Deprecated public static final String MINI_THUMB_MAGIC = "mini_thumb_magic"; /** diff --git a/media/java/android/media/MiniThumbFile.java b/media/java/android/media/MiniThumbFile.java index 716e0cbf9fb4..f704acde7cf7 100644 --- a/media/java/android/media/MiniThumbFile.java +++ b/media/java/android/media/MiniThumbFile.java @@ -18,9 +18,12 @@ package android.media; import android.annotation.UnsupportedAppUsage; import android.net.Uri; +import android.os.Build; import android.os.Environment; import android.util.Log; +import dalvik.system.VMRuntime; + import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; @@ -42,7 +45,10 @@ import java.util.Hashtable; * * @hide This file is shared between MediaStore and MediaProvider and should remained internal use * only. + * @deprecated thumbnails are now maintained in separate files, and this file + * format is no longer used. */ +@Deprecated public class MiniThumbFile { private static final String TAG = "MiniThumbFile"; private static final int MINI_THUMB_DATA_FILE_VERSION = 4; @@ -69,6 +75,9 @@ public class MiniThumbFile { } public static synchronized MiniThumbFile instance(Uri uri) { + if (VMRuntime.getRuntime().getTargetSdkVersion() >= Build.VERSION_CODES.Q) { + throw new UnsupportedOperationException(); + } String type = uri.getPathSegments().get(1); MiniThumbFile file = sThumbFiles.get(type); // Log.v(TAG, "get minithumbfile for type: "+type); |