Loading packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/MovableElement.kt +2 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ internal fun Element( modifier: Modifier, content: @Composable ElementScope<ElementContentScope>.() -> Unit, ) { Box(modifier.element(layoutImpl, sceneOrOverlay, key)) { Box(modifier.element(layoutImpl, sceneOrOverlay, key), propagateMinConstraints = true) { val contentScope = sceneOrOverlay.scope val boxScope = this val elementScope = Loading @@ -64,7 +64,7 @@ internal fun MovableElement( "MovableElementKey($elementName).contentPicker.contents does not contain $contentName" } Box(modifier.element(layoutImpl, sceneOrOverlay, key)) { Box(modifier.element(layoutImpl, sceneOrOverlay, key), propagateMinConstraints = true) { val contentScope = sceneOrOverlay.scope val boxScope = this val elementScope = Loading packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt +31 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.assertPositionInRootIsEqualTo import androidx.compose.ui.test.assertTopPositionInRootIsEqualTo import androidx.compose.ui.test.hasParent import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText import androidx.compose.ui.test.junit4.createComposeRule Loading Loading @@ -2488,4 +2489,34 @@ class ElementTest { rule.waitForIdle() return layoutImpl } @Test fun elementComposableShouldPropagateMinConstraints() { val contentTestTag = "content" val movable = MovableElementKey("movable", contents = setOf(SceneA)) rule.setContent { TestContentScope(currentScene = SceneA) { Column { Element(TestElements.Foo, Modifier.size(40.dp)) { content { // Modifier.size() sets a preferred size and this should be ignored // because of the previously set 40dp size. Box(Modifier.testTag(contentTestTag).size(20.dp)) } } MovableElement(movable, Modifier.size(40.dp)) { content { Box(Modifier.testTag(contentTestTag).size(20.dp)) } } } } } rule .onNode(hasTestTag(contentTestTag) and hasParent(isElement(TestElements.Foo))) .assertSizeIsEqualTo(40.dp) rule .onNode(hasTestTag(contentTestTag) and hasParent(isElement(movable))) .assertSizeIsEqualTo(40.dp) } } packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementTest.kt +8 −4 Original line number Diff line number Diff line Loading @@ -309,12 +309,14 @@ class MovableElementTest { TestContentScope { Element(TestElements.Foo, Modifier.size(200.dp)) { content { Box { Box(Modifier.testTag("bottomEnd").align(Alignment.BottomEnd)) Box(Modifier.testTag("matchParentSize").matchParentSize()) } } } } } rule.onNodeWithTag("bottomEnd").assertPositionInRootIsEqualTo(200.dp, 200.dp) rule.onNodeWithTag("matchParentSize").assertSizeIsEqualTo(200.dp, 200.dp) Loading @@ -327,12 +329,14 @@ class MovableElementTest { TestContentScope(currentScene = SceneA) { MovableElement(key, Modifier.size(200.dp)) { content { Box { Box(Modifier.testTag("bottomEnd").align(Alignment.BottomEnd)) Box(Modifier.testTag("matchParentSize").matchParentSize()) } } } } } rule.onNodeWithTag("bottomEnd").assertPositionInRootIsEqualTo(200.dp, 200.dp) rule.onNodeWithTag("matchParentSize").assertSizeIsEqualTo(200.dp, 200.dp) Loading Loading
packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/MovableElement.kt +2 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ internal fun Element( modifier: Modifier, content: @Composable ElementScope<ElementContentScope>.() -> Unit, ) { Box(modifier.element(layoutImpl, sceneOrOverlay, key)) { Box(modifier.element(layoutImpl, sceneOrOverlay, key), propagateMinConstraints = true) { val contentScope = sceneOrOverlay.scope val boxScope = this val elementScope = Loading @@ -64,7 +64,7 @@ internal fun MovableElement( "MovableElementKey($elementName).contentPicker.contents does not contain $contentName" } Box(modifier.element(layoutImpl, sceneOrOverlay, key)) { Box(modifier.element(layoutImpl, sceneOrOverlay, key), propagateMinConstraints = true) { val contentScope = sceneOrOverlay.scope val boxScope = this val elementScope = Loading
packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt +31 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.assertPositionInRootIsEqualTo import androidx.compose.ui.test.assertTopPositionInRootIsEqualTo import androidx.compose.ui.test.hasParent import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText import androidx.compose.ui.test.junit4.createComposeRule Loading Loading @@ -2488,4 +2489,34 @@ class ElementTest { rule.waitForIdle() return layoutImpl } @Test fun elementComposableShouldPropagateMinConstraints() { val contentTestTag = "content" val movable = MovableElementKey("movable", contents = setOf(SceneA)) rule.setContent { TestContentScope(currentScene = SceneA) { Column { Element(TestElements.Foo, Modifier.size(40.dp)) { content { // Modifier.size() sets a preferred size and this should be ignored // because of the previously set 40dp size. Box(Modifier.testTag(contentTestTag).size(20.dp)) } } MovableElement(movable, Modifier.size(40.dp)) { content { Box(Modifier.testTag(contentTestTag).size(20.dp)) } } } } } rule .onNode(hasTestTag(contentTestTag) and hasParent(isElement(TestElements.Foo))) .assertSizeIsEqualTo(40.dp) rule .onNode(hasTestTag(contentTestTag) and hasParent(isElement(movable))) .assertSizeIsEqualTo(40.dp) } }
packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/MovableElementTest.kt +8 −4 Original line number Diff line number Diff line Loading @@ -309,12 +309,14 @@ class MovableElementTest { TestContentScope { Element(TestElements.Foo, Modifier.size(200.dp)) { content { Box { Box(Modifier.testTag("bottomEnd").align(Alignment.BottomEnd)) Box(Modifier.testTag("matchParentSize").matchParentSize()) } } } } } rule.onNodeWithTag("bottomEnd").assertPositionInRootIsEqualTo(200.dp, 200.dp) rule.onNodeWithTag("matchParentSize").assertSizeIsEqualTo(200.dp, 200.dp) Loading @@ -327,12 +329,14 @@ class MovableElementTest { TestContentScope(currentScene = SceneA) { MovableElement(key, Modifier.size(200.dp)) { content { Box { Box(Modifier.testTag("bottomEnd").align(Alignment.BottomEnd)) Box(Modifier.testTag("matchParentSize").matchParentSize()) } } } } } rule.onNodeWithTag("bottomEnd").assertPositionInRootIsEqualTo(200.dp, 200.dp) rule.onNodeWithTag("matchParentSize").assertSizeIsEqualTo(200.dp, 200.dp) Loading