summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Sharkey <jsharkey@google.com> 2018-09-14 18:38:15 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-09-14 18:38:15 +0000
commit34e3e68375cf3a451b17054c7cd1435f4d70b1cf (patch)
tree77c115ae33d9a621a20213bbdff9bfe00d05d9f8
parente4fa629d849c37bcc5b27ae25a408ad5d88ceb86 (diff)
parent7049e651faa09d4846ea49a2e04bc62f2aa1d339 (diff)
Merge "Mark deprecated APIs, support column greylisting."
-rwxr-xr-xapi/current.txt6
-rw-r--r--core/java/android/database/sqlite/SQLiteQueryBuilder.java32
-rw-r--r--core/java/android/provider/MediaStore.java14
-rw-r--r--media/java/android/media/MiniThumbFile.java9
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);