Loading core/java/com/android/internal/pm/pkg/component/AconfigFlags.java +23 −0 Original line number Diff line number Diff line Loading @@ -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()) { Loading Loading @@ -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); } } Loading @@ -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 Loading packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java +8 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading Loading
core/java/com/android/internal/pm/pkg/component/AconfigFlags.java +23 −0 Original line number Diff line number Diff line Loading @@ -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()) { Loading Loading @@ -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); } } Loading @@ -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 Loading
packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java +8 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading