Flexiglass: add SceneStack.toString
I'd like to print the back stack in a debug message in a future change,
but it didn't have a toString, so I'm implementing one.
Bug: 364076359
Test: builds
Flag: com.android.systemui.scene_container
Change-Id: I6d048a4fe8f79c3e11977a25dfa0b29074cf79cd
diff --git a/packages/SystemUI/src/com/android/systemui/scene/data/model/SceneStack.kt b/packages/SystemUI/src/com/android/systemui/scene/data/model/SceneStack.kt
index 323bb3d..6479e57 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/data/model/SceneStack.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/data/model/SceneStack.kt
@@ -21,10 +21,6 @@
/** An immutable stack of [SceneKey]s backed by a singly-linked list. */
sealed interface SceneStack
-private data object EmptyStack : SceneStack
-
-private data class StackedNodes(val head: SceneKey, val tail: SceneStack) : SceneStack
-
/** Returns the scene at the head of the stack, or `null` if empty. O(1) */
fun SceneStack.peek(): SceneKey? =
when (this) {
@@ -69,3 +65,14 @@
}
return result
}
+
+private data object EmptyStack : SceneStack {
+ override fun toString() = sceneStackToString()
+}
+
+private data class StackedNodes(val head: SceneKey, val tail: SceneStack) : SceneStack {
+ override fun toString() = sceneStackToString()
+}
+
+private fun SceneStack.sceneStackToString(): String =
+ asIterable().joinToString { it.testTag }.let { "SceneStack([$it])" }
diff --git a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneBackInteractor.kt b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneBackInteractor.kt
index afb72f0..bebd398 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneBackInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/domain/interactor/SceneBackInteractor.kt
@@ -19,7 +19,6 @@
import com.android.compose.animation.scene.SceneKey
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.scene.data.model.SceneStack
-import com.android.systemui.scene.data.model.asIterable
import com.android.systemui.scene.data.model.peek
import com.android.systemui.scene.data.model.pop
import com.android.systemui.scene.data.model.push
@@ -68,13 +67,13 @@
checkNotNull(stack.pop()) { "Cannot pop ${from.debugName} when stack is empty" }
}
}
- logger.logSceneBackStack(backStack.value.asIterable())
+ logger.logSceneBackStack(backStack.value)
}
/** Applies the given [transform] to the back stack. */
fun updateBackStack(transform: (SceneStack) -> SceneStack) {
_backStack.update { stack -> transform(stack) }
- logger.logSceneBackStack(backStack.value.asIterable())
+ logger.logSceneBackStack(backStack.value)
}
private fun stackOperation(from: SceneKey, to: SceneKey, stack: SceneStack): StackOperation? {
diff --git a/packages/SystemUI/src/com/android/systemui/scene/shared/logger/SceneLogger.kt b/packages/SystemUI/src/com/android/systemui/scene/shared/logger/SceneLogger.kt
index fb53ddb..16c2ef5 100644
--- a/packages/SystemUI/src/com/android/systemui/scene/shared/logger/SceneLogger.kt
+++ b/packages/SystemUI/src/com/android/systemui/scene/shared/logger/SceneLogger.kt
@@ -22,6 +22,7 @@
import com.android.systemui.log.LogBuffer
import com.android.systemui.log.core.LogLevel
import com.android.systemui.log.dagger.SceneFrameworkLog
+import com.android.systemui.scene.data.model.SceneStack
import javax.inject.Inject
class SceneLogger @Inject constructor(@SceneFrameworkLog private val logBuffer: LogBuffer) {
@@ -40,16 +41,11 @@
},
messagePrinter = {
"Scene framework is ${asWord(bool1)}${if (str1 != null) " $str1" else ""}"
- }
+ },
)
}
- fun logSceneChanged(
- from: SceneKey,
- to: SceneKey,
- reason: String,
- isInstant: Boolean,
- ) {
+ fun logSceneChanged(from: SceneKey, to: SceneKey, reason: String, isInstant: Boolean) {
logBuffer.log(
tag = TAG,
level = LogLevel.INFO,
@@ -123,11 +119,7 @@
)
}
- fun logVisibilityChange(
- from: Boolean,
- to: Boolean,
- reason: String,
- ) {
+ fun logVisibilityChange(from: Boolean, to: Boolean, reason: String) {
fun asWord(isVisible: Boolean): String {
return if (isVisible) "visible" else "invisible"
}
@@ -144,9 +136,7 @@
)
}
- fun logRemoteUserInputStarted(
- reason: String,
- ) {
+ fun logRemoteUserInputStarted(reason: String) {
logBuffer.log(
tag = TAG,
level = LogLevel.INFO,
@@ -164,11 +154,11 @@
)
}
- fun logSceneBackStack(backStack: Iterable<SceneKey>) {
+ fun logSceneBackStack(backStack: SceneStack) {
logBuffer.log(
tag = TAG,
level = LogLevel.INFO,
- messageInitializer = { str1 = backStack.joinToString(", ") { it.debugName } },
+ messageInitializer = { str1 = backStack.toString() },
messagePrinter = { "back stack: $str1" },
)
}