Loading packages/SettingsProvider/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ android_library { ], static_libs: [ "device_config_service_flags_java", "libaconfig_java_proto_lite", "SettingsLibDeviceStateRotationLock", "SettingsLibDisplayUtils", ], Loading packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java +49 −52 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import static android.provider.Settings.Config.SYNC_DISABLED_MODE_UNTIL_REBOOT; import static com.android.providers.settings.Flags.supportOverrides; import android.aconfig.Aconfig.parsed_flag; import android.aconfig.Aconfig.parsed_flags; import android.annotation.SuppressLint; import android.app.ActivityManager; import android.content.AttributionSource; Loading @@ -39,12 +41,13 @@ import android.provider.DeviceConfigShellCommandHandler; import android.provider.Settings; import android.provider.Settings.Config.SyncDisabledMode; import android.provider.UpdatableDeviceConfigServiceReadiness; import android.util.Slog; import com.android.internal.util.FastPrintWriter; import java.io.File; import java.io.FileDescriptor; import java.io.FileNotFoundException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; Loading @@ -56,18 +59,17 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Scanner; /** * Receives shell commands from the command line related to device config flags, and dispatches them * to the SettingsProvider. */ public final class DeviceConfigService extends Binder { private static final List<String> aconfigTextProtoFilesOnDevice = List.of( "/system/etc/aconfig_flags.textproto", "/system_ext/etc/aconfig_flags.textproto", "/system_ext/etc/aconfig_flags.textproto", "/vendor/etc/aconfig_flags.textproto"); private static final List<String> sAconfigTextProtoFilesOnDevice = List.of( "/system/etc/aconfig_flags.pb", "/system_ext/etc/aconfig_flags.pb", "/system_ext/etc/aconfig_flags.pb", "/vendor/etc/aconfig_flags.pb"); private static final List<String> PRIVATE_NAMESPACES = List.of( "device_config_overrides", Loading @@ -76,6 +78,8 @@ public final class DeviceConfigService extends Binder { final SettingsProvider mProvider; private static final String TAG = "DeviceConfigService"; public DeviceConfigService(SettingsProvider provider) { mProvider = provider; } Loading @@ -101,7 +105,7 @@ public final class DeviceConfigService extends Binder { } ArrayList<String> missingFiles = new ArrayList<String>(); for (String fileName : aconfigTextProtoFilesOnDevice) { for (String fileName : sAconfigTextProtoFilesOnDevice) { File aconfigFile = new File(fileName); if (!aconfigFile.exists()) { missingFiles.add(fileName); Loading @@ -123,32 +127,25 @@ public final class DeviceConfigService extends Binder { private static HashSet<String> getAconfigFlagNamesInDeviceConfig() { HashSet<String> nameSet = new HashSet<String>(); for (String fileName : aconfigTextProtoFilesOnDevice) { try { File aconfigFile = new File(fileName); String packageName = ""; String namespace = ""; String name = ""; try (Scanner scanner = new Scanner(aconfigFile)) { while (scanner.hasNextLine()) { String data = scanner.nextLine().replaceAll("\\s+",""); if (data.startsWith("package:\"")) { packageName = data.substring(9, data.length()-1); } else if (data.startsWith("name:\"")) { name = data.substring(6, data.length()-1); } else if (data.startsWith("namespace:\"")) { namespace = data.substring(11, data.length()-1); nameSet.add(namespace + "/" + packageName + "." + name); } } for (String fileName : sAconfigTextProtoFilesOnDevice) { byte[] contents = (new FileInputStream(fileName)).readAllBytes(); parsed_flags parsedFlags = parsed_flags.parseFrom(contents); if (parsedFlags == null) { Slog.e(TAG, "failed to parse aconfig protobuf from " + fileName); continue; } } catch (FileNotFoundException e) { continue; for (parsed_flag flag : parsedFlags.getParsedFlagList()) { String namespace = flag.getNamespace(); String packageName = flag.getPackage(); String name = flag.getName(); nameSet.add(namespace + "/" + packageName + "." + name); } } } catch (IOException e) { Slog.e(TAG, "failed to read aconfig protobuf", e); } return nameSet; } Loading Loading
packages/SettingsProvider/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ android_library { ], static_libs: [ "device_config_service_flags_java", "libaconfig_java_proto_lite", "SettingsLibDeviceStateRotationLock", "SettingsLibDisplayUtils", ], Loading
packages/SettingsProvider/src/com/android/providers/settings/DeviceConfigService.java +49 −52 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import static android.provider.Settings.Config.SYNC_DISABLED_MODE_UNTIL_REBOOT; import static com.android.providers.settings.Flags.supportOverrides; import android.aconfig.Aconfig.parsed_flag; import android.aconfig.Aconfig.parsed_flags; import android.annotation.SuppressLint; import android.app.ActivityManager; import android.content.AttributionSource; Loading @@ -39,12 +41,13 @@ import android.provider.DeviceConfigShellCommandHandler; import android.provider.Settings; import android.provider.Settings.Config.SyncDisabledMode; import android.provider.UpdatableDeviceConfigServiceReadiness; import android.util.Slog; import com.android.internal.util.FastPrintWriter; import java.io.File; import java.io.FileDescriptor; import java.io.FileNotFoundException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; Loading @@ -56,18 +59,17 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Scanner; /** * Receives shell commands from the command line related to device config flags, and dispatches them * to the SettingsProvider. */ public final class DeviceConfigService extends Binder { private static final List<String> aconfigTextProtoFilesOnDevice = List.of( "/system/etc/aconfig_flags.textproto", "/system_ext/etc/aconfig_flags.textproto", "/system_ext/etc/aconfig_flags.textproto", "/vendor/etc/aconfig_flags.textproto"); private static final List<String> sAconfigTextProtoFilesOnDevice = List.of( "/system/etc/aconfig_flags.pb", "/system_ext/etc/aconfig_flags.pb", "/system_ext/etc/aconfig_flags.pb", "/vendor/etc/aconfig_flags.pb"); private static final List<String> PRIVATE_NAMESPACES = List.of( "device_config_overrides", Loading @@ -76,6 +78,8 @@ public final class DeviceConfigService extends Binder { final SettingsProvider mProvider; private static final String TAG = "DeviceConfigService"; public DeviceConfigService(SettingsProvider provider) { mProvider = provider; } Loading @@ -101,7 +105,7 @@ public final class DeviceConfigService extends Binder { } ArrayList<String> missingFiles = new ArrayList<String>(); for (String fileName : aconfigTextProtoFilesOnDevice) { for (String fileName : sAconfigTextProtoFilesOnDevice) { File aconfigFile = new File(fileName); if (!aconfigFile.exists()) { missingFiles.add(fileName); Loading @@ -123,32 +127,25 @@ public final class DeviceConfigService extends Binder { private static HashSet<String> getAconfigFlagNamesInDeviceConfig() { HashSet<String> nameSet = new HashSet<String>(); for (String fileName : aconfigTextProtoFilesOnDevice) { try { File aconfigFile = new File(fileName); String packageName = ""; String namespace = ""; String name = ""; try (Scanner scanner = new Scanner(aconfigFile)) { while (scanner.hasNextLine()) { String data = scanner.nextLine().replaceAll("\\s+",""); if (data.startsWith("package:\"")) { packageName = data.substring(9, data.length()-1); } else if (data.startsWith("name:\"")) { name = data.substring(6, data.length()-1); } else if (data.startsWith("namespace:\"")) { namespace = data.substring(11, data.length()-1); nameSet.add(namespace + "/" + packageName + "." + name); } } for (String fileName : sAconfigTextProtoFilesOnDevice) { byte[] contents = (new FileInputStream(fileName)).readAllBytes(); parsed_flags parsedFlags = parsed_flags.parseFrom(contents); if (parsedFlags == null) { Slog.e(TAG, "failed to parse aconfig protobuf from " + fileName); continue; } } catch (FileNotFoundException e) { continue; for (parsed_flag flag : parsedFlags.getParsedFlagList()) { String namespace = flag.getNamespace(); String packageName = flag.getPackage(); String name = flag.getName(); nameSet.add(namespace + "/" + packageName + "." + name); } } } catch (IOException e) { Slog.e(TAG, "failed to read aconfig protobuf", e); } return nameSet; } Loading