• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package {package_name}; {#- CODEGEN FOR EXPORTED MODE FOR NEW STORAGE #}
2
3import android.os.Build;
4import android.os.flagging.AconfigPackage;
5import android.util.Log;
6{{ -if single_exported_file }}
7{{ -if library_exported }}
8/**
9 * @deprecated Use \{@link ExportedFlags} instead.
10 */
11@Deprecated {#- PREFER ExportedFlags #}
12{{ -endif }}
13{{ -else }}
14/** @hide */
15{{ -endif }}
16public final class FeatureFlagsImpl implements FeatureFlags \{
17    private static final String TAG = "FeatureFlagsImplExport";
18    private static volatile boolean isCached = false;
19{{ for flag in flag_elements }}
20    private static boolean {flag.method_name} = false;
21{{ -endfor }} {#- end flag_elements #}
22    private void init() \{
23        try \{
24            AconfigPackage reader = AconfigPackage.load("{package_name}");
25            {{ -for namespace_with_flags in namespace_flags }}
26            {{ -for flag in namespace_with_flags.flags }}
27            {{ -if flag.finalized_sdk_present }}
28            {flag.method_name} = Build.VERSION.SDK_INT >= {flag.finalized_sdk_value} ? true : reader.getBooleanFlagValue("{flag.flag_name}", {flag.default_value});
29            {{ - else }} {#- else finalized_sdk_present #}
30            {flag.method_name} = reader.getBooleanFlagValue("{flag.flag_name}", {flag.default_value});
31            {{ -endif}}  {#- end finalized_sdk_present#}
32            {{ -endfor }} {#- end namespace_with_flags.flags #}
33            {{ -endfor }} {#- end namespace_flags #}
34        } catch (Exception e) \{
35            // pass
36            Log.e(TAG, e.toString());
37        } catch (LinkageError e) \{
38            // for mainline module running on older devices.
39            // This should be replaces to version check, after the version bump.
40            Log.w(TAG, e.toString());
41        }
42        isCached = true;
43    }
44{{ -for flag in flag_elements }}
45    @Override
46    public boolean {flag.method_name}() \{
47        if (!isCached) \{
48            init();
49        }
50        return {flag.method_name};
51    }
52{{ endfor }} {#- end flag_elements #}
53}
54