Loading packages/SystemUI/src/com/android/systemui/flags/FlagDependenciesBase.kt +17 −3 Original line number Diff line number Diff line Loading @@ -48,10 +48,14 @@ abstract class FlagDependenciesBase( private var unmetDependencies = emptyList<Dependency>() override fun start() { if (!handler.enableDependencies) { return } defineDependencies() allDependencies = workingDependencies.toList() unmetDependencies = workingDependencies.filter { !it.isMet } workingDependencies.clear() handler.onCollected(allDependencies) if (unmetDependencies.isNotEmpty()) { handler.warnAboutBadFlagConfiguration(all = allDependencies, unmet = unmetDependencies) } Loading Loading @@ -106,14 +110,24 @@ abstract class FlagDependenciesBase( /** Add a dependency to the working list */ private fun addDependency(first: FlagToken, second: FlagToken) { if (!Compile.IS_DEBUG) return // `user` builds should omit all this code if (!handler.enableDependencies) return workingDependencies.add( Dependency(first.name, first.isEnabled, second.name, second.isEnabled) ) } /** An interface which handles a warning about a bad flag configuration. */ /** An interface which handles dependency collection. */ interface Handler { /** * Should FlagDependencies do anything? * * @return false for user builds so that we skip this overhead. */ val enableDependencies: Boolean get() = Compile.IS_DEBUG /** Handle the complete list of dependencies. */ fun onCollected(all: List<Dependency>) {} /** Handle a bad flag configuration. */ fun warnAboutBadFlagConfiguration(all: List<Dependency>, unmet: List<Dependency>) } } Loading @@ -133,7 +147,7 @@ constructor( all: List<FlagDependenciesBase.Dependency>, unmet: List<FlagDependenciesBase.Dependency> ) { val title = "Invalid flag dependencies: ${unmet.size} of ${all.size}" val title = "Invalid flag dependencies: ${unmet.size}" val details = unmet.joinToString("\n") { it.shortUnmetString() } Log.e("FlagDependencies", "$title:\n$details") val channel = NotificationChannel("FLAGS", "Flags", NotificationManager.IMPORTANCE_DEFAULT) Loading packages/SystemUI/tests/src/com/android/systemui/flags/FlagDependenciesTest.kt +9 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.flags import android.testing.AndroidTestingRunner import android.util.Log import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import java.io.PrintWriter Loading @@ -41,14 +42,21 @@ class FlagDependenciesTest : SysuiTestCase() { FlagDependencies(TestFeatureFlags(teamfood = teamfood), TestHandler()) private class TestHandler : FlagDependenciesBase.Handler { override val enableDependencies: Boolean get() = true override fun warnAboutBadFlagConfiguration( all: List<FlagDependenciesBase.Dependency>, unmet: List<FlagDependenciesBase.Dependency> ) { val title = "${unmet.size} invalid of ${all.size} flag dependencies" val title = "Invalid flag dependencies: ${unmet.size}" val details = unmet.joinToString("\n") fail("$title:\n$details") } override fun onCollected(all: List<FlagDependenciesBase.Dependency>) { Log.d("FlagDependencies", "All: ${all.size}") all.forEach { Log.d("FlagDependencies", " $it") } } } private class TestFeatureFlags(val teamfood: Boolean) : FeatureFlagsClassic { Loading Loading
packages/SystemUI/src/com/android/systemui/flags/FlagDependenciesBase.kt +17 −3 Original line number Diff line number Diff line Loading @@ -48,10 +48,14 @@ abstract class FlagDependenciesBase( private var unmetDependencies = emptyList<Dependency>() override fun start() { if (!handler.enableDependencies) { return } defineDependencies() allDependencies = workingDependencies.toList() unmetDependencies = workingDependencies.filter { !it.isMet } workingDependencies.clear() handler.onCollected(allDependencies) if (unmetDependencies.isNotEmpty()) { handler.warnAboutBadFlagConfiguration(all = allDependencies, unmet = unmetDependencies) } Loading Loading @@ -106,14 +110,24 @@ abstract class FlagDependenciesBase( /** Add a dependency to the working list */ private fun addDependency(first: FlagToken, second: FlagToken) { if (!Compile.IS_DEBUG) return // `user` builds should omit all this code if (!handler.enableDependencies) return workingDependencies.add( Dependency(first.name, first.isEnabled, second.name, second.isEnabled) ) } /** An interface which handles a warning about a bad flag configuration. */ /** An interface which handles dependency collection. */ interface Handler { /** * Should FlagDependencies do anything? * * @return false for user builds so that we skip this overhead. */ val enableDependencies: Boolean get() = Compile.IS_DEBUG /** Handle the complete list of dependencies. */ fun onCollected(all: List<Dependency>) {} /** Handle a bad flag configuration. */ fun warnAboutBadFlagConfiguration(all: List<Dependency>, unmet: List<Dependency>) } } Loading @@ -133,7 +147,7 @@ constructor( all: List<FlagDependenciesBase.Dependency>, unmet: List<FlagDependenciesBase.Dependency> ) { val title = "Invalid flag dependencies: ${unmet.size} of ${all.size}" val title = "Invalid flag dependencies: ${unmet.size}" val details = unmet.joinToString("\n") { it.shortUnmetString() } Log.e("FlagDependencies", "$title:\n$details") val channel = NotificationChannel("FLAGS", "Flags", NotificationManager.IMPORTANCE_DEFAULT) Loading
packages/SystemUI/tests/src/com/android/systemui/flags/FlagDependenciesTest.kt +9 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.flags import android.testing.AndroidTestingRunner import android.util.Log import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import java.io.PrintWriter Loading @@ -41,14 +42,21 @@ class FlagDependenciesTest : SysuiTestCase() { FlagDependencies(TestFeatureFlags(teamfood = teamfood), TestHandler()) private class TestHandler : FlagDependenciesBase.Handler { override val enableDependencies: Boolean get() = true override fun warnAboutBadFlagConfiguration( all: List<FlagDependenciesBase.Dependency>, unmet: List<FlagDependenciesBase.Dependency> ) { val title = "${unmet.size} invalid of ${all.size} flag dependencies" val title = "Invalid flag dependencies: ${unmet.size}" val details = unmet.joinToString("\n") fail("$title:\n$details") } override fun onCollected(all: List<FlagDependenciesBase.Dependency>) { Log.d("FlagDependencies", "All: ${all.size}") all.forEach { Log.d("FlagDependencies", " $it") } } } private class TestFeatureFlags(val teamfood: Boolean) : FeatureFlagsClassic { Loading