Loading core/java/android/provider/Settings.java +25 −35 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ import java.lang.annotation.RetentionPolicy; 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; Loading Loading @@ -3585,12 +3586,10 @@ public final class Settings { || 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; Loading Loading @@ -3620,13 +3619,10 @@ public final class Settings { 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 { Loading @@ -3635,10 +3631,7 @@ public final class Settings { // 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)); } } } Loading Loading @@ -3698,22 +3691,14 @@ public final class Settings { 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) { Loading Loading @@ -19865,15 +19850,21 @@ public final class Settings { @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; } Loading Loading @@ -20199,13 +20190,12 @@ public final class Settings { 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) { Loading
core/java/android/provider/Settings.java +25 −35 Original line number Diff line number Diff line Loading @@ -108,6 +108,7 @@ import java.lang.annotation.RetentionPolicy; 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; Loading Loading @@ -3585,12 +3586,10 @@ public final class Settings { || 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; Loading Loading @@ -3620,13 +3619,10 @@ public final class Settings { 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 { Loading @@ -3635,10 +3631,7 @@ public final class Settings { // 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)); } } } Loading Loading @@ -3698,22 +3691,14 @@ public final class Settings { 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) { Loading Loading @@ -19865,15 +19850,21 @@ public final class Settings { @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; } Loading Loading @@ -20199,13 +20190,12 @@ public final class Settings { 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) {