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