Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e7a8b84 authored by Surajit Chandra's avatar Surajit Chandra Committed by Android (Google) Code Review
Browse files

Merge "Revert "Speed up large settings requests."" into main

parents c7a5dab5 37518604
Loading
Loading
Loading
Loading
+22 −29
Original line number Diff line number Diff line
@@ -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;
@@ -3584,12 +3585,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;
@@ -3614,12 +3613,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) {
                                    if (mValues.containsKey(name)) {
                                        keyValues.put(
                                                name.substring(substringLength),
                                                mValues.get(name));
                                        keyValues.put(name, mValues.get(name));
                                    }
                                }
                            } else {
@@ -3628,9 +3625,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)) {
                                        keyValues.put(
                                                key.substring(substringLength),
                                                mValues.get(key));
                                        keyValues.put(key, mValues.get(key));
                                    }
                                }
                            }
@@ -3690,22 +3685,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) {
@@ -19847,15 +19834,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;
        }