Merge "Parse protos in library" into main

This commit is contained in:
Ted Bauer
2024-08-15 22:15:19 +00:00
committed by Gerrit Code Review
2 changed files with 35 additions and 5 deletions

View File

@@ -39,8 +39,8 @@ rust_library {
genrule {
name: "libaconfig_java_device_paths_src",
srcs: ["src/DevicePathsTemplate.java"],
out: ["DevicePaths.java"],
srcs: ["src/DeviceProtosTemplate.java"],
out: ["DeviceProtos.java"],
tool_files: ["partition_aconfig_flags_paths.txt"],
cmd: "sed -e '/TEMPLATE/{r$(location partition_aconfig_flags_paths.txt)' -e 'd}' $(in) > $(out)",
}
@@ -48,5 +48,7 @@ genrule {
java_library {
name: "aconfig_device_paths_java",
srcs: [":libaconfig_java_device_paths_src"],
sdk_version: "core_current",
static_libs: [
"libaconfig_java_proto_nano",
],
}

View File

@@ -15,7 +15,12 @@
*/
package android.aconfig;
import android.aconfig.nano.Aconfig.parsed_flag;
import android.aconfig.nano.Aconfig.parsed_flags;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -23,7 +28,7 @@ import java.util.List;
/**
* @hide
*/
public class DevicePaths {
public class DeviceProtos {
static final String[] PATHS = {
TEMPLATE
};
@@ -31,12 +36,35 @@ public class DevicePaths {
private static final String APEX_DIR = "/apex";
private static final String APEX_ACONFIG_PATH_SUFFIX = "/etc/aconfig_flags.pb";
/**
* Returns a list of all on-device aconfig protos.
*
* May throw an exception if the protos can't be read at the call site. For
* example, some of the protos are in the apex/ partition, which is mounted
* somewhat late in the boot process.
*
* @throws IOException if we can't read one of the protos yet
* @return a list of all on-device aconfig protos
*/
public static List<parsed_flag> loadAndParseFlagProtos() throws IOException {
ArrayList<parsed_flag> result = new ArrayList();
for (String path : parsedFlagsProtoPaths()) {
FileInputStream inputStream = new FileInputStream(path);
parsed_flags parsedFlags = parsed_flags.parseFrom(inputStream.readAllBytes());
for (parsed_flag flag : parsedFlags.parsedFlag) {
result.add(flag);
}
}
return result;
}
/**
* Returns the list of all on-device aconfig protos paths.
* @hide
*/
public static List<String> parsedFlagsProtoPaths() {
private static List<String> parsedFlagsProtoPaths() {
ArrayList<String> paths = new ArrayList(Arrays.asList(PATHS));
File apexDirectory = new File(APEX_DIR);