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

Commit ecef459d authored by Zhi Dou's avatar Zhi Dou Committed by Automerger Merge Worker
Browse files

Merge "aconfig: add single-exported-file parameter" into main am: b664c8eb

parents fe8f1ba4 b664c8eb
Loading
Loading
Loading
Loading
+31 −10
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ pub struct JavaCodegenConfig {
    pub allow_instrumentation: bool,
    pub package_fingerprint: u64,
    pub new_exported: bool,
    pub single_exported_file: bool,
    pub check_api_level: bool,
}

@@ -71,8 +72,15 @@ where
        is_platform_container,
        package_fingerprint: format!("0x{:X}L", config.package_fingerprint),
        new_exported: config.new_exported,
        single_exported_file: config.single_exported_file,
    };
    let mut template = TinyTemplate::new();
    if library_exported && config.single_exported_file {
        template.add_template(
            "ExportedFlags.java",
            include_str!("../../templates/ExportedFlags.java.template"),
        )?;
    }
    template.add_template("Flags.java", include_str!("../../templates/Flags.java.template"))?;
    add_feature_flags_impl_template(&context, &mut template)?;
    template.add_template(
@@ -89,16 +97,23 @@ where
    )?;

    let path: PathBuf = package.split('.').collect();
    [
    let mut files = vec![
        "Flags.java",
        "FeatureFlags.java",
        "FeatureFlagsImpl.java",
        "CustomFeatureFlags.java",
        "FakeFeatureFlagsImpl.java",
    ]
    ];
    if library_exported && config.single_exported_file {
        files.push("ExportedFlags.java");
    }
    files
        .iter()
        .map(|file| {
        Ok(OutputFile { contents: template.render(file, &context)?.into(), path: path.join(file) })
            Ok(OutputFile {
                contents: template.render(file, &context)?.into(),
                path: path.join(file),
            })
        })
        .collect::<Result<Vec<OutputFile>>>()
}
@@ -138,6 +153,7 @@ struct Context {
    pub is_platform_container: bool,
    pub package_fingerprint: String,
    pub new_exported: bool,
    pub single_exported_file: bool,
}

#[derive(Serialize, Debug)]
@@ -259,7 +275,7 @@ fn add_feature_flags_impl_template(
        (true, false, _) => {
            template.add_template(
                "FeatureFlagsImpl.java",
                include_str!("../../templates/FeatureFlagsImpl.java.template"),
                include_str!("../../templates/FeatureFlagsImpl.deviceConfig.java.template"),
            )?;
        }

@@ -275,7 +291,7 @@ fn add_feature_flags_impl_template(
        (false, _, false) => {
            template.add_template(
                "FeatureFlagsImpl.java",
                include_str!("../../templates/FeatureFlagsImpl.java.template"),
                include_str!("../../templates/FeatureFlagsImpl.deviceConfig.java.template"),
            )?;
        }
    };
@@ -592,6 +608,7 @@ mod tests {
            allow_instrumentation: true,
            package_fingerprint: 5801144784618221668,
            new_exported: false,
            single_exported_file: false,
            check_api_level: false,
        };
        let generated_files = generate_java_code(
@@ -752,6 +769,7 @@ mod tests {
            allow_instrumentation: true,
            package_fingerprint: 5801144784618221668,
            new_exported: false,
            single_exported_file: false,
            check_api_level: false,
        };
        let generated_files = generate_java_code(
@@ -956,6 +974,7 @@ mod tests {
            allow_instrumentation: true,
            package_fingerprint: 5801144784618221668,
            new_exported: true,
            single_exported_file: false,
            check_api_level: false,
        };
        let generated_files = generate_java_code(
@@ -1022,7 +1041,7 @@ mod tests {
                } catch (LinkageError e) {
                    // for mainline module running on older devices.
                    // This should be replaces to version check, after the version bump.
                    Log.e(TAG, e.toString());
                    Log.w(TAG, e.toString());
                }
                isCached = true;
            }
@@ -1150,6 +1169,7 @@ mod tests {
            allow_instrumentation: true,
            package_fingerprint: 5801144784618221668,
            new_exported: false,
            single_exported_file: false,
            check_api_level: false,
        };
        let generated_files = generate_java_code(
@@ -1277,6 +1297,7 @@ mod tests {
            allow_instrumentation: true,
            package_fingerprint: 5801144784618221668,
            new_exported: false,
            single_exported_file: false,
            check_api_level: false,
        };
        let generated_files = generate_java_code(
+2 −0
Original line number Diff line number Diff line
@@ -219,6 +219,7 @@ pub fn create_java_lib(
    codegen_mode: CodegenMode,
    allow_instrumentation: bool,
    new_exported: bool,
    single_exported_file: bool,
    check_api_level: bool,
) -> Result<Vec<OutputFile>> {
    let parsed_flags = input.try_parse_flags()?;
@@ -237,6 +238,7 @@ pub fn create_java_lib(
        allow_instrumentation,
        package_fingerprint,
        new_exported,
        single_exported_file,
        check_api_level,
    };
    generate_java_code(&package, modified_parsed_flags.into_iter(), config)
+11 −0
Original line number Diff line number Diff line
@@ -157,12 +157,20 @@ fn cli() -> Command {
                        .value_parser(EnumValueParser::<CodegenMode>::new())
                        .default_value("production"),
                )
                .arg(
                    Arg::new("single-exported-file")
                        .long("single-exported-file")
                        .value_parser(clap::value_parser!(bool))
                        .default_value("false"),
                )
                // TODO: b/395899938 - clean up flags for switching to new storage
                .arg(
                    Arg::new("allow-instrumentation")
                        .long("allow-instrumentation")
                        .value_parser(clap::value_parser!(bool))
                        .default_value("false"),
                )
                // TODO: b/395899938 - clean up flags for switching to new storage
                .arg(
                    Arg::new("new-exported")
                        .long("new-exported")
@@ -373,12 +381,15 @@ fn main() -> Result<()> {
            let allow_instrumentation =
                get_required_arg::<bool>(sub_matches, "allow-instrumentation")?;
            let new_exported = get_required_arg::<bool>(sub_matches, "new-exported")?;
            let single_exported_file =
                get_required_arg::<bool>(sub_matches, "single-exported-file")?;
            let check_api_level = get_required_arg::<bool>(sub_matches, "check-api-level")?;
            let generated_files = commands::create_java_lib(
                cache,
                *mode,
                *allow_instrumentation,
                *new_exported,
                *single_exported_file,
                *check_api_level,
            )
            .context("failed to create java lib")?;
+6 −0
Original line number Diff line number Diff line
@@ -11,7 +11,13 @@ import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;

{{ -if single_exported_file }}
{{ -if library_exported }}
@Deprecated {#- PREFER ExportedFlags #}
{{ -endif }}
{{ -else }}
/** @hide */
{{ -endif }}
public class CustomFeatureFlags implements FeatureFlags \{

    private BiPredicate<String, Predicate<FeatureFlags>> mGetValueImpl;
+49 −0
Original line number Diff line number Diff line
package {package_name}; {#- CODEGEN FOR EXPORTED MODE FOR NEW STORAGE SINGLE EXPORTED FILE#}

import android.os.Build;
import android.os.flagging.AconfigPackage;
import android.util.Log;
public final class ExportedFlags \{
{{ -for item in flag_elements}}
    public static final String FLAG_{item.flag_name_constant_suffix} = "{item.device_config_flag}";
{{- endfor }}
    private static final String TAG = "ExportedFlags";
    private static volatile boolean isCached = false;
{{ for flag in flag_elements }}
    private static boolean {flag.method_name} = false;
{{ -endfor }} {#- end flag_elements #}
    private ExportedFlags() \{}

    private void init() \{
        try \{
            AconfigPackage reader = AconfigPackage.load("{package_name}");
            {{ -for namespace_with_flags in namespace_flags }}
            {{ -for flag in namespace_with_flags.flags }}
            {{ -if flag.finalized_sdk_present }}
            {flag.method_name} = Build.VERSION.SDK_INT >= {flag.finalized_sdk_value} ? true : reader.getBooleanFlagValue("{flag.flag_name}", {flag.default_value});
            {{ - else }} {#- else finalized_sdk_present #}
            {flag.method_name} = reader.getBooleanFlagValue("{flag.flag_name}", {flag.default_value});
            {{ -endif}}  {#- end finalized_sdk_present#}
            {{ -endfor }} {#- end namespace_with_flags.flags #}
            {{ -endfor }} {#- end namespace_flags #}
        } catch (Exception e) \{
            // pass
            Log.e(TAG, e.toString());
        } catch (LinkageError e) \{
            // for mainline module running on older devices.
            // This should be replaces to version check, after the version bump.
            Log.w(TAG, e.toString());
        }
        isCached = true;
    }

{{ -for flag in flag_elements }}
    public static boolean {flag.method_name}() \{
        if (!featureFlags.isCached) \{
            featureFlags.init();
        }
        return featureFlags.{flag.method_name};
    }
{{ -endfor }}
    private static ExportedFlags featureFlags = new ExportedFlags();
}
Loading