Merge "Narrow concession to support legacy apps." into rvc-qpr-dev am: 1ebcca8e49

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/providers/MediaProvider/+/12634766

Change-Id: I0fa79d33fdb7a3b20c0c4b88e6c7f06d2250d4e3
diff --git a/src/com/android/providers/media/util/SQLiteQueryBuilder.java b/src/com/android/providers/media/util/SQLiteQueryBuilder.java
index e95d28c..e68cb80 100644
--- a/src/com/android/providers/media/util/SQLiteQueryBuilder.java
+++ b/src/com/android/providers/media/util/SQLiteQueryBuilder.java
@@ -75,6 +75,7 @@
                     + "mov|asf|avi|divx|mpg|mpeg|mkv|webm|mk3d|mks|3gp|mpegts|ts|m2ts|m2t)");
     private static final Pattern sPattern156832140 = Pattern.compile(
             "(?i)%com\\.gopro\\.smarty%");
+    private static final Pattern sPattern158537159 = Pattern.compile("(?i)localized");
 
     private static final Pattern sCustomCollatorPattern = Pattern.compile(
             "(?i)custom_[a-zA-Z]+");
@@ -817,6 +818,7 @@
             // proper SQL string substitution
             if (sPattern154193772.matcher(token).matches()) return;
             if (sPattern156832140.matcher(token).matches()) return;
+            if (sPattern158537159.matcher(token).matches()) return;
         }
 
         throw new IllegalArgumentException("Invalid token " + token);
diff --git a/tests/src/com/android/providers/media/util/SQLiteQueryBuilderTest.java b/tests/src/com/android/providers/media/util/SQLiteQueryBuilderTest.java
index 9af8e5d..c8fe3bb 100644
--- a/tests/src/com/android/providers/media/util/SQLiteQueryBuilderTest.java
+++ b/tests/src/com/android/providers/media/util/SQLiteQueryBuilderTest.java
@@ -741,6 +741,25 @@
     }
 
     @Test
+    public void testStrict_158537159() {
+        final SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
+        final HashMap<String, String> map = new HashMap<>();
+        map.put("bucket_id", "bucket_id");
+        builder.setProjectionMap(map);
+        final String sortOrder = "bucket_id COLLATE LOCALIZED ASC";
+        {
+            builder.setTargetSdkVersion(Build.VERSION_CODES.Q);
+            builder.enforceStrictGrammar(null, null, null, sortOrder, null);
+        }
+        try {
+            builder.setTargetSdkVersion(Build.VERSION_CODES.R);
+            builder.enforceStrictGrammar(null, null, null, sortOrder, null);
+            fail("Expected to throw");
+        } catch (IllegalArgumentException expected) {
+        }
+    }
+
+    @Test
     public void testStrictCustomCollator() {
         final SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
         final HashMap<String, String> map = new HashMap<>();