Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73687b25 authored by Jordan Demeulenaere's avatar Jordan Demeulenaere Committed by Android (Google) Code Review
Browse files

Merge "Propagate min size constraints in (Movable)Element" into main

parents 8de36bde db41a304
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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 =
@@ -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 =
+31 −0
Original line number Diff line number Diff line
@@ -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
@@ -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)
    }
}
+8 −4
Original line number Diff line number Diff line
@@ -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)
@@ -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)