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

Commit feb71a91 authored by Ted Bauer's avatar Ted Bauer
Browse files

Map removed local overrides to new storage

Flag: com.android.providers.settings.sync_local_overrides_removal_new_storage
Test: m
Bug: 361643653
Change-Id: I34d62c3f1cbd63b0cfce5f7b474da6822fd45d56
parent 701b2ee2
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -81,3 +81,13 @@ flag {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "sync_local_overrides_removal_new_storage"
    namespace: "core_experiments_team_internal"
    description: "When DeviceConfig overrides are deleted, delete new storage overrides too."
    bug: "361643653"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -233,6 +233,7 @@ java_library_static {
        "stats_flags_lib",
        "core_os_flags_lib",
        "connectivity_flags_lib",
        "device_config_service_flags_java",
        "dreams_flags_lib",
        "aconfig_new_storage_flags_lib",
        "powerstats_flags_lib",
+36 −3
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.util.proto.ProtoInputStream;
import android.util.proto.ProtoOutputStream;

import com.android.internal.annotations.VisibleForTesting;
import com.android.providers.settings.Flags;

import android.aconfigd.Aconfigd.StorageRequestMessage;
import android.aconfigd.Aconfigd.StorageRequestMessages;
@@ -51,6 +52,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;

/**
@@ -456,6 +458,24 @@ public class SettingsToPropertiesMapper {
      proto.end(msgsToken);
    }

    /**
     * Send a request to aconfig storage to remove a flag local override.
     *
     * @param proto
     * @param packageName the package of the flag
     * @param flagName the name of the flag
     */
    static void writeFlagOverrideRemovalRequest(
        ProtoOutputStream proto, String packageName, String flagName) {
      long msgsToken = proto.start(StorageRequestMessages.MSGS);
      long msgToken = proto.start(StorageRequestMessage.REMOVE_LOCAL_OVERRIDE_MESSAGE);
      proto.write(StorageRequestMessage.RemoveLocalOverrideMessage.PACKAGE_NAME, packageName);
      proto.write(StorageRequestMessage.RemoveLocalOverrideMessage.FLAG_NAME, flagName);
      proto.write(StorageRequestMessage.RemoveLocalOverrideMessage.REMOVE_ALL, false);
      proto.end(msgToken);
      proto.end(msgsToken);
    }

    /**
     * deserialize a flag input proto stream and log
     * @param proto
@@ -501,9 +521,16 @@ public class SettingsToPropertiesMapper {
        ProtoOutputStream requests = new ProtoOutputStream();
        for (String flagName : props.getKeyset()) {
            String flagValue = props.getString(flagName, null);

            if (Flags.syncLocalOverridesRemovalNewStorage()) {
                if (flagName == null) {
                    continue;
                }
            } else {
                if (flagName == null || flagValue == null) {
                    continue;
                }
            }

            int idx = flagName.indexOf(":");
            if (idx == -1 || idx == flagName.length() - 1 || idx == 0) {
@@ -519,7 +546,13 @@ public class SettingsToPropertiesMapper {
            }
            String packageName = fullFlagName.substring(0, idx);
            String realFlagName = fullFlagName.substring(idx+1);

            if (Flags.syncLocalOverridesRemovalNewStorage() && flagValue == null) {
              writeFlagOverrideRemovalRequest(requests, packageName, realFlagName);
            } else {
              writeFlagOverrideRequest(requests, packageName, realFlagName, flagValue, true);
            }

            ++num_requests;
        }