Revert^3 "Speed up large settings requests."

This reverts commit 33c0a8866d78200cdec82db04b18e6b7618ddc28.

Reason for revert: b/319203694

Change-Id: I87963cb4bd3b0e2b3c0a36aaa152f4ebf2f17559
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index b9c64d4a..211bdef 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -108,6 +108,7 @@
 import java.lang.annotation.Target;
 import java.lang.reflect.Field;
 import java.net.URISyntaxException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -3584,12 +3585,10 @@
                     || applicationInfo.isSignedWithPlatformKey();
         }
 
-        private ArrayMap<String, String> getStringsForPrefixStripPrefix(
-                ContentResolver cr, String prefix, String[] names) {
+        public ArrayMap<String, String> getStringsForPrefix(ContentResolver cr, String prefix,
+                List<String> names) {
             String namespace = prefix.substring(0, prefix.length() - 1);
             ArrayMap<String, String> keyValues = new ArrayMap<>();
-            int substringLength = prefix.length();
-
             int currentGeneration = -1;
             boolean needsGenerationTracker = false;
 
@@ -3614,13 +3613,10 @@
                             if (DEBUG) {
                                 Log.i(TAG, "Cache hit for prefix:" + prefix);
                             }
-                            if (names.length > 0) {
+                            if (!names.isEmpty()) {
                                 for (String name : names) {
-                                    String value = mValues.get(name);
-                                    if (value != null) {
-                                        keyValues.put(
-                                                name.substring(substringLength),
-                                                value);
+                                    if (mValues.containsKey(name)) {
+                                        keyValues.put(name, mValues.get(name));
                                     }
                                 }
                             } else {
@@ -3629,10 +3625,7 @@
                                     // Explicitly exclude the prefix as it is only there to
                                     // signal that the prefix has been cached.
                                     if (key.startsWith(prefix) && !key.equals(prefix)) {
-                                        String value = mValues.valueAt(i);
-                                        keyValues.put(
-                                                key.substring(substringLength),
-                                                value);
+                                        keyValues.put(key, mValues.get(key));
                                     }
                                 }
                             }
@@ -3692,22 +3685,14 @@
                 Map<String, String> flagsToValues =
                         (HashMap) b.getSerializable(Settings.NameValueTable.VALUE, java.util.HashMap.class);
                 // Only the flags requested by the caller
-                if (names.length > 0) {
-                    for (String name : names) {
-                        String value = flagsToValues.get(name);
-                        if (value != null) {
-                            keyValues.put(
-                                    name.substring(substringLength),
-                                    value);
+                if (!names.isEmpty()) {
+                    for (Map.Entry<String, String> flag : flagsToValues.entrySet()) {
+                        if (names.contains(flag.getKey())) {
+                            keyValues.put(flag.getKey(), flag.getValue());
                         }
                     }
                 } else {
-                    keyValues.ensureCapacity(keyValues.size() + flagsToValues.size());
-                    for (Map.Entry<String, String> flag : flagsToValues.entrySet()) {
-                        keyValues.put(
-                                flag.getKey().substring(substringLength),
-                                flag.getValue());
-                    }
+                    keyValues.putAll(flagsToValues);
                 }
 
                 synchronized (NameValueCache.this) {
@@ -19850,15 +19835,21 @@
         @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
         public static Map<String, String> getStrings(@NonNull ContentResolver resolver,
                 @NonNull String namespace, @NonNull List<String> names) {
-            String[] compositeNames = new String[names.size()];
-            for (int i = 0, size = names.size(); i < size; ++i) {
-                compositeNames[i] = createCompositeName(namespace, names.get(i));
+            List<String> compositeNames = new ArrayList<>(names.size());
+            for (String name : names) {
+                compositeNames.add(createCompositeName(namespace, name));
             }
 
             String prefix = createPrefix(namespace);
-
-            ArrayMap<String, String> keyValues = sNameValueCache.getStringsForPrefixStripPrefix(
+            ArrayMap<String, String> rawKeyValues = sNameValueCache.getStringsForPrefix(
                     resolver, prefix, compositeNames);
+            int size = rawKeyValues.size();
+            int substringLength = prefix.length();
+            ArrayMap<String, String> keyValues = new ArrayMap<>(size);
+            for (int i = 0; i < size; ++i) {
+                keyValues.put(rawKeyValues.keyAt(i).substring(substringLength),
+                        rawKeyValues.valueAt(i));
+            }
             return keyValues;
         }
 
@@ -20184,13 +20175,12 @@
         private static String createCompositeName(@NonNull String namespace, @NonNull String name) {
             Preconditions.checkNotNull(namespace);
             Preconditions.checkNotNull(name);
-            var sb = new StringBuilder(namespace.length() + 1 + name.length());
-            return sb.append(namespace).append('/').append(name).toString();
+            return createPrefix(namespace) + name;
         }
 
         private static String createPrefix(@NonNull String namespace) {
             Preconditions.checkNotNull(namespace);
-            return namespace + '/';
+            return namespace + "/";
         }
 
         private static Uri createNamespaceUri(@NonNull String namespace) {