commit | 183ee4983c0446e6cc1bb4ea2c94d15477aa9695 | [log] [tgz] |
---|---|---|
author | Jordan Demeulenaere <jdemeulenaere@google.com> | Thu May 30 14:04:00 2024 +0200 |
committer | Jordan Demeulenaere <jdemeulenaere@google.com> | Thu May 30 14:24:58 2024 +0200 |
tree | 373417928982ccd09cb72661d84d35ea5096f5b2 | |
parent | 14cf65b2276b8244295b3527399d30c0397b6c85 [diff] |
Expose the current scene key in SceneScope Bug: 290930950 Test: atest SceneTransitionLayoutTest Flag: com.android.systemui.scene_container Change-Id: Iad082ca5d635099fbbf3c30201f1c1674d0f1a55
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt index 6fef33c..25759e5 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Scene.kt
@@ -96,6 +96,7 @@ private val layoutImpl: SceneTransitionLayoutImpl, private val scene: Scene, ) : SceneScope, ElementStateScope by layoutImpl.elementStateScope { + override val sceneKey: SceneKey = scene.key override val layoutState: SceneTransitionLayoutState = layoutImpl.state override fun Modifier.element(key: ElementKey): Modifier {
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt index 11e711a..34e8f01 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayout.kt
@@ -163,6 +163,9 @@ @Stable @ElementDsl interface BaseSceneScope : ElementStateScope { + /** The key of this scene. */ + val sceneKey: SceneKey + /** The state of the [SceneTransitionLayout] in which this scene is contained. */ val layoutState: SceneTransitionLayoutState
diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt index 3751a22..08532bd 100644 --- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt +++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/SceneTransitionLayoutTest.kt
@@ -461,4 +461,30 @@ assertThat(exception).hasMessageThat().contains(Back.toString()) assertThat(exception).hasMessageThat().contains(SceneA.debugName) } + + @Test + fun sceneKeyInScope() { + val state = rule.runOnUiThread { MutableSceneTransitionLayoutState(SceneA) } + + var keyInA: SceneKey? = null + var keyInB: SceneKey? = null + var keyInC: SceneKey? = null + rule.setContent { + SceneTransitionLayout(state) { + scene(SceneA) { keyInA = sceneKey } + scene(SceneB) { keyInB = sceneKey } + scene(SceneC) { keyInC = sceneKey } + } + } + + // Snap to B then C to compose these scenes at least once. + rule.runOnUiThread { state.snapToScene(SceneB) } + rule.waitForIdle() + rule.runOnUiThread { state.snapToScene(SceneC) } + rule.waitForIdle() + + assertThat(keyInA).isEqualTo(SceneA) + assertThat(keyInB).isEqualTo(SceneB) + assertThat(keyInC).isEqualTo(SceneC) + } }