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

Commit 612faaad authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Make change and version bump to BP2A.250201.001

Snap for 12997303 from 458d9188 to 25Q2-release

Change-Id: I96c73fa2ac235f60101c0342ef5b3f5176704ae0
parents c7d8185e 458d9188
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -18,4 +18,4 @@
# (like "CRB01").  It must be a single word, and is
# capitalized by convention.

BUILD_ID=BP2A.250131.002
BUILD_ID=BP2A.250201.001
+0 −1
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@
    <option name="test-suite-tag" value="robolectric" />
    <option name="test-suite-tag" value="robolectric-tests" />

    <option name="java-folder" value="prebuilts/jdk/jdk21/linux-x86/" />
    <option name="exclude-paths" value="java" />
    <option name="use-robolectric-resources" value="true" />

+58 −4
Original line number Diff line number Diff line
@@ -74,10 +74,7 @@ where
    };
    let mut template = TinyTemplate::new();
    template.add_template("Flags.java", include_str!("../../templates/Flags.java.template"))?;
    template.add_template(
        "FeatureFlagsImpl.java",
        include_str!("../../templates/FeatureFlagsImpl.java.template"),
    )?;
    add_feature_flags_impl_template(&context, &mut template)?;
    template.add_template(
        "FeatureFlags.java",
        include_str!("../../templates/FeatureFlags.java.template"),
@@ -233,6 +230,63 @@ fn format_property_name(property_name: &str) -> String {
    format!("mProperties{}{}", &name[0..1].to_ascii_uppercase(), &name[1..])
}

fn add_feature_flags_impl_template(
    context: &Context,
    template: &mut TinyTemplate,
) -> Result<(), tinytemplate::error::Error> {
    if context.is_test_mode {
        // Test mode has its own template, so use regardless of any other settings.
        template.add_template(
            "FeatureFlagsImpl.java",
            include_str!("../../templates/FeatureFlagsImpl.test_mode.java.template"),
        )?;
        return Ok(());
    }

    println!("lib exported: {}", context.library_exported);
    println!("new_exp: {}", context.new_exported);
    println!("allow in: {}", context.allow_instrumentation);
    match (context.library_exported, context.new_exported, context.allow_instrumentation) {
        // Exported library with new_exported enabled, use new storage exported template.
        (true, true, _) => {
            println!("new exported template");
            template.add_template(
                "FeatureFlagsImpl.java",
                include_str!("../../templates/FeatureFlagsImpl.exported.java.template"),
            )?;
        }

        // Exported library with new_exported NOT enabled, use legacy (device
        // config) template, because regardless of allow_instrumentation, we use
        // device config for exported libs if new_exported isn't enabled.
        // Remove once new_exported is fully rolled out.
        (true, false, _) => {
            println!("old exported, old template");
            template.add_template(
                "FeatureFlagsImpl.java",
                include_str!("../../templates/FeatureFlagsImpl.java.template"),
            )?;
        }

        // New storage internal mode.
        (false, _, true) => {
            template.add_template(
                "FeatureFlagsImpl.java",
                include_str!("../../templates/FeatureFlagsImpl.new_storage.java.template"),
            )?;
        }

        // Device config internal mode. Use legacy (device config) template.
        (false, _, false) => {
            template.add_template(
                "FeatureFlagsImpl.java",
                include_str!("../../templates/FeatureFlagsImpl.java.template"),
            )?;
        }
    };
    Ok(())
}

#[cfg(test)]
mod tests {
    use super::*;
+44 −0
Original line number Diff line number Diff line
package {package_name}; {#- CODEGEN FOR EXPORTED MODE FOR NEW STORAGE #}

import android.os.Build;
import android.os.flagging.AconfigPackage;
import android.util.Log;
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags \{
    private static final String TAG = "FeatureFlagsImplExport";
    private static volatile boolean isCached = false;
{{ for flag in flag_elements }}
    private static boolean {flag.method_name} = false;
{{ -endfor }} {#- end flag_elements #}
    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.e(TAG, e.toString());
        }
        isCached = true;
    }
{{ -for flag in flag_elements }}
    @Override
    public boolean {flag.method_name}() \{
        if (!isCached) \{
            init();
        }
        return {flag.method_name};
    }
{{ endfor }} {#- end flag_elements #}
}
+20 −20
Original line number Diff line number Diff line
@@ -8,11 +8,11 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.os.Build;
{{ if is_platform_container }}
import android.os.flagging.PlatformAconfigPackageInternal;
{{ -else }}
{{ -else }} {#- else is_platform_container #}
import android.os.flagging.AconfigPackageInternal;
{{ -endif }}
{{ -endif }} {#- end of is_platform_container#}
import android.util.Log;
{{ -endif }}
{{ -endif }} {#- end of runtime_lookup_required#}
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags \{
{{ -if runtime_lookup_required }}
@@ -21,21 +21,21 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
{{ for flag in flag_elements }}
{{ -if flag.is_read_write }}
    private static boolean {flag.method_name} = {flag.default_value};
{{ -endif }}
{{ -endif }} {#- end of is_read_write#}
{{ -endfor }}

    private void init() \{
        try \{
{{ if is_platform_container }}
            PlatformAconfigPackageInternal reader = PlatformAconfigPackageInternal.load("{package_name}", {package_fingerprint});
{{ -else }}
{{ -else }} {#- else is_platform_container #}
            AconfigPackageInternal reader = AconfigPackageInternal.load("{package_name}", {package_fingerprint});
{{ -endif }}
{{ -endif }} {#- end of is_platform_container#}
        {{ -for namespace_with_flags in namespace_flags }}
        {{ -for flag in namespace_with_flags.flags }}
        {{ -if flag.is_read_write }}
            {flag.method_name} = reader.getBooleanFlagValue({flag.flag_offset});
        {{ -endif }}
        {{ -endif }} {#- is_read_write#}
        {{ -endfor }}
        {{ -endfor }}
        } catch (Exception e) \{
@@ -58,9 +58,9 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
            init();
        }
        return {flag.method_name};
{{ -else }}
{{ -else }}{#- else is_read_write #}
        return {flag.default_value};
{{ -endif }}
{{ -endif }}  {#- end of is_read_write#}
    }
{{ endfor }}
}
@@ -83,9 +83,9 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
            {{ -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 }} {#- else finalized_sdk_present #}
            {flag.method_name} = reader.getBooleanFlagValue("{flag.flag_name}", {flag.default_value});
            {{ -endif}}
            {{ -endif}}  {#- end of finalized_sdk_present#}
            {{ -endfor }}
            {{ -endfor }}
        } catch (Exception e) \{
@@ -120,7 +120,7 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
{{ for flag in flag_elements }}
{{ -if flag.is_read_write }}
    private static boolean {flag.method_name} = {flag.default_value};
{{ -endif }}
{{ -endif }}  {#- end of is_read_write#}
{{ -endfor }}
{{ for namespace_with_flags in namespace_flags }}
    private void load_overrides_{namespace_with_flags.namespace}() \{
@@ -131,7 +131,7 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
{{ -if flag.is_read_write }}
            {flag.method_name} =
                properties.getBoolean(Flags.FLAG_{flag.flag_name_constant_suffix}, {flag.default_value});
{{ -endif }}
{{ -endif }}  {#- end of is_read_write#}
{{ -endfor }}
        } catch (NullPointerException e) \{
            throw new RuntimeException(
@@ -166,13 +166,13 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
{{ if not library_exported- }}
// TODO(b/303773055): Remove the annotation after access issue is resolved.
import android.compat.annotation.UnsupportedAppUsage;
{{ -endif }}
{{ -endif }} {#- end of not library_exported#}

{{ -if runtime_lookup_required }}
import android.os.Binder;
import android.provider.DeviceConfig;
import android.provider.DeviceConfig.Properties;
{{ -endif }}
{{ -endif }}  {#- end of runtime_lookup_required#}
/** @hide */
public final class FeatureFlagsImpl implements FeatureFlags \{
{{ -if runtime_lookup_required }}
@@ -183,7 +183,7 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
{{ for flag in flag_elements }}
{{- if flag.is_read_write }}
    private static boolean {flag.method_name} = {flag.default_value};
{{ -endif }}
{{ -endif }} {#- end of is_read_write#}
{{ -endfor }}
{{ for namespace_with_flags in namespace_flags }}
    private void load_overrides_{namespace_with_flags.namespace}() \{
@@ -194,7 +194,7 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
{{ -if flag.is_read_write }}
            {flag.method_name} =
                properties.getBoolean(Flags.FLAG_{flag.flag_name_constant_suffix}, {flag.default_value});
{{ -endif }}
{{ -endif }} {#- end of is_read_write#}
{{ -endfor }}
        } catch (NullPointerException e) \{
            throw new RuntimeException(
@@ -217,16 +217,16 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
{{ -if not library_exported }}
    @com.android.aconfig.annotations.AconfigFlagAccessor
    @UnsupportedAppUsage
{{ -endif }}
{{ -endif }}{#- end of not library_exported #}
    public boolean {flag.method_name}() \{
{{ -if flag.is_read_write }}
        if (!{flag.device_config_namespace}_is_cached) \{
            load_overrides_{flag.device_config_namespace}();
        }
        return {flag.method_name};
{{ -else }}
{{ -else }} {#- else is_read_write #}
        return {flag.default_value};
{{ -endif }}
{{ -endif }}{#- end of is_read_write #}
    }
{{ endfor }}
}
Loading