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

Commit adaba745 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Reland "Prevent local overrides and error for RO flags"" into main

parents fdd6b883 84d2378d
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -60,7 +60,13 @@ public class AconfigFlags {
            "/product/etc/aconfig_flags.pb",
            "/vendor/etc/aconfig_flags.pb");

    public enum Permission {
        READ_WRITE,
        READ_ONLY
    }

    private final ArrayMap<String, Boolean> mFlagValues = new ArrayMap<>();
    private final ArrayMap<String, Permission> mFlagPermissions = new ArrayMap<>();

    public AconfigFlags() {
        if (!Flags.manifestFlagging()) {
@@ -184,6 +190,12 @@ public class AconfigFlags {
            Slog.v(LOG_TAG, "Read Aconfig default flag value "
                    + flagPackageAndName + " = " + flagValue);
            mFlagValues.put(flagPackageAndName, flagValue);

            Permission permission = flag.permission == Aconfig.READ_ONLY
                    ? Permission.READ_ONLY
                    : Permission.READ_WRITE;

            mFlagPermissions.put(flagPackageAndName, permission);
        }
    }

@@ -199,6 +211,17 @@ public class AconfigFlags {
        return value;
    }

    /**
     * Get the flag permission, or null if the flag doesn't exist.
     * @param flagPackageAndName Full flag name formatted as 'package.flag'
     * @return the current permission of the given Aconfig flag, or null if there is no such flag
     */
    @Nullable
    public Permission getFlagPermission(@NonNull String flagPackageAndName) {
        Permission permission = mFlagPermissions.get(flagPackageAndName);
        return permission;
    }

    /**
     * Check if the element in {@code parser} should be skipped because of the feature flag.
     * @param parser XML parser object currently parsing an element
+8 −1
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import android.provider.Settings.Config.SyncDisabledMode;
import android.provider.UpdatableDeviceConfigServiceReadiness;
import android.util.Slog;

import com.android.internal.pm.pkg.component.AconfigFlags;
import com.android.internal.util.FastPrintWriter;

import java.io.File;
@@ -416,7 +417,13 @@ public final class DeviceConfigService extends Binder {
                    DeviceConfig.setProperty(namespace, key, value, makeDefault);
                    break;
                case OVERRIDE:
                    AconfigFlags.Permission permission =
                            (new AconfigFlags()).getFlagPermission(key);
                    if (permission == AconfigFlags.Permission.READ_ONLY) {
                        pout.println("cannot override read-only flag " + key);
                    } else {
                        DeviceConfig.setLocalOverride(namespace, key, value);
                    }
                    break;
                case CLEAR_OVERRIDE:
                    DeviceConfig.clearLocalOverride(namespace, key);