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

Commit 84d2378d authored by Ted Bauer's avatar Ted Bauer
Browse files

Reland "Prevent local overrides and error for RO flags"

This reverts commit 46227cac.

Reason for revert: relanding without apex access

Test: m
Change-Id: I8483d13e4be5a8c11df949a458f37dcb4d04b324
parent 46227cac
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;
@@ -425,7 +426,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);