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) {