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

Commit 33c0a886 authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Revert^2 "Speed up large settings requests."

This reverts commit 37518604.

Reason for revert: relanding the change

Bug: 316866951
Bug: 318932642
Test: atest CtsPermissionUiTestCases CtsDisplayTestCases CtsAutoFillServiceTestCases

Change-Id: I78cafd976842133190a7d29e19fa58b985fc4522
parent 30f4803c
Loading
Loading
Loading
Loading
+35 −25
Original line number Diff line number Diff line
@@ -108,7 +108,6 @@ 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;
@@ -3585,10 +3584,12 @@ public final class Settings {
                    || applicationInfo.isSignedWithPlatformKey();
        }
        public ArrayMap<String, String> getStringsForPrefix(ContentResolver cr, String prefix,
                List<String> names) {
        private ArrayMap<String, String> getStringsForPrefixStripPrefix(
                ContentResolver cr, String prefix, 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;
@@ -3613,10 +3614,13 @@ public final class Settings {
                            if (DEBUG) {
                                Log.i(TAG, "Cache hit for prefix:" + prefix);
                            }
                            if (!names.isEmpty()) {
                            if (names.length > 0) {
                                for (String name : names) {
                                    if (mValues.containsKey(name)) {
                                        keyValues.put(name, mValues.get(name));
                                    String value = mValues.get(name);
                                    if (value != null) {
                                        keyValues.put(
                                                name.substring(substringLength),
                                                value);
                                    }
                                }
                            } else {
@@ -3625,7 +3629,10 @@ 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, mValues.get(key));
                                        String value = mValues.valueAt(i);
                                        keyValues.put(
                                                key.substring(substringLength),
                                                value);
                                    }
                                }
                            }
@@ -3685,14 +3692,22 @@ 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.isEmpty()) {
                    for (Map.Entry<String, String> flag : flagsToValues.entrySet()) {
                        if (names.contains(flag.getKey())) {
                            keyValues.put(flag.getKey(), flag.getValue());
                if (names.length > 0) {
                    for (String name : names) {
                        String value = flagsToValues.get(name);
                        if (value != null) {
                            keyValues.put(
                                    name.substring(substringLength),
                                    value);
                        }
                    }
                } else {
                    keyValues.putAll(flagsToValues);
                    keyValues.ensureCapacity(keyValues.size() + flagsToValues.size());
                    for (Map.Entry<String, String> flag : flagsToValues.entrySet()) {
                        keyValues.put(
                                flag.getKey().substring(substringLength),
                                flag.getValue());
                    }
                }
                synchronized (NameValueCache.this) {
@@ -19835,21 +19850,15 @@ 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) {
            List<String> compositeNames = new ArrayList<>(names.size());
            for (String name : names) {
                compositeNames.add(createCompositeName(namespace, name));
            String[] compositeNames = new String[names.size()];
            for (int i = 0, size = names.size(); i < size; ++i) {
                compositeNames[i] = createCompositeName(namespace, names.get(i));
            }
            String prefix = createPrefix(namespace);
            ArrayMap<String, String> rawKeyValues = sNameValueCache.getStringsForPrefix(
            ArrayMap<String, String> keyValues = sNameValueCache.getStringsForPrefixStripPrefix(
                    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;
        }
@@ -20175,12 +20184,13 @@ public final class Settings {
        private static String createCompositeName(@NonNull String namespace, @NonNull String name) {
            Preconditions.checkNotNull(namespace);
            Preconditions.checkNotNull(name);
            return createPrefix(namespace) + name;
            var sb = new StringBuilder(namespace.length() + 1 + name.length());
            return sb.append(namespace).append('/').append(name).toString();
        }
        private static String createPrefix(@NonNull String namespace) {
            Preconditions.checkNotNull(namespace);
            return namespace + "/";
            return namespace + '/';
        }
        private static Uri createNamespaceUri(@NonNull String namespace) {