1 package com.android.onboarding.flags
2 
3 import android.os.SystemProperties
4 
5 /** A default implementation of [OnboardingFlagsProvider] using system property. */
6 class DefaultOnboardingFlagsProvider : OnboardingFlagsProvider {
7   override val isContractEnabled: Boolean
8     get() =
9       SystemProperties.getBoolean("$SYSTEM_PROPERTY_NAMESPACE.$FEATURE_CONTRACT_ENABLED", false)
10   override val isNodeLoggingEnabled: Boolean
11     get() =
12       SystemProperties.getBoolean("$SYSTEM_PROPERTY_NAMESPACE.$FEATURE_NODE_LOGGING_ENABLED", false)
13   override val isUiLoggingEnabled: Boolean
14     get() = true
15 
16   override val isDimensionLoggingEnabled: Boolean
17     get() =
18       SystemProperties.getBoolean(
19         "$SYSTEM_PROPERTY_NAMESPACE.$FEATURE_DIMENSION_LOGGING_ENABLED",
20         false,
21       )
22 
23   override val isDebug: Boolean
24     get() = SystemProperties.getBoolean("$SYSTEM_PROPERTY_NAMESPACE.$FEATURE_DEBUG_ENABLED", false)
25 
26   override val shouldVisualiseNodeTransitionsInLogcat: Boolean
27     get() =
28       SystemProperties.getBoolean(
29         "$SYSTEM_PROPERTY_NAMESPACE.$FEATURE_VISUALISE_TRANSITIONS",
30         false,
31       ) || isDebug
32 
33   companion object {
34     // The key length has to be less that 31 characters (<18 if excluding namespace)
35     const val SYSTEM_PROPERTY_NAMESPACE = "aoj.feature"
36     private const val FEATURE_CONTRACT_ENABLED = "contract"
37     private const val FEATURE_NODE_LOGGING_ENABLED = "node_logging"
38     private const val FEATURE_DEBUG_ENABLED = "debug"
39     private const val FEATURE_UI_LOGGING_ENABLED = "ui_logging"
40     private const val FEATURE_VISUALISE_TRANSITIONS = "vis_transitions"
41     private const val FEATURE_DIMENSION_LOGGING_ENABLED = "dimension_logging"
42   }
43 }
44