diff options
5 files changed, 28 insertions, 17 deletions
diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt index 5dc1079e8b56..3036228944e7 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/Element.kt @@ -32,10 +32,11 @@ import androidx.compose.ui.geometry.isUnspecified import androidx.compose.ui.geometry.lerp import androidx.compose.ui.graphics.drawscope.ContentDrawScope import androidx.compose.ui.graphics.drawscope.scale -import androidx.compose.ui.layout.IntermediateMeasureScope +import androidx.compose.ui.layout.ApproachMeasureScope +import androidx.compose.ui.layout.LookaheadScope import androidx.compose.ui.layout.Measurable import androidx.compose.ui.layout.Placeable -import androidx.compose.ui.layout.intermediateLayout +import androidx.compose.ui.layout.approachLayout import androidx.compose.ui.node.DrawModifierNode import androidx.compose.ui.node.ModifierNodeElement import androidx.compose.ui.platform.testTag @@ -153,7 +154,9 @@ internal fun Modifier.element( return this.then(ElementModifier(layoutImpl, scene, element, sceneValues)) // TODO(b/311132415): Move this into ElementNode once we can create a delegate // IntermediateLayoutModifierNode. - .intermediateLayout { measurable, constraints -> + .approachLayout( + isMeasurementApproachInProgress = { layoutImpl.state.isTransitioning() }, + ) { measurable, constraints -> val placeable = measure(layoutImpl, scene, element, sceneValues, measurable, constraints) layout(placeable.width, placeable.height) { @@ -428,7 +431,7 @@ private fun elementAlpha( } @OptIn(ExperimentalComposeUiApi::class) -private fun IntermediateMeasureScope.measure( +private fun ApproachMeasureScope.measure( layoutImpl: SceneTransitionLayoutImpl, scene: Scene, element: Element, @@ -505,7 +508,7 @@ private fun getDrawScale( } @OptIn(ExperimentalComposeUiApi::class) -private fun IntermediateMeasureScope.place( +private fun ApproachMeasureScope.place( layoutImpl: SceneTransitionLayoutImpl, scene: Scene, element: Element, @@ -513,6 +516,8 @@ private fun IntermediateMeasureScope.place( placeable: Placeable, placementScope: Placeable.PlacementScope, ) { + this as LookaheadScope + with(placementScope) { // Update the offset (relative to the SceneTransitionLayout) this element has in this scene // when idle. 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 6a7a3a00d4fe..370012054a1d 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 @@ -30,7 +30,7 @@ import androidx.compose.runtime.snapshots.SnapshotStateMap import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Shape -import androidx.compose.ui.layout.intermediateLayout +import androidx.compose.ui.layout.approachLayout import androidx.compose.ui.platform.testTag import androidx.compose.ui.unit.IntSize import androidx.compose.ui.zIndex @@ -60,7 +60,9 @@ internal class Scene( Box( modifier .zIndex(zIndex) - .intermediateLayout { measurable, constraints -> + .approachLayout( + isMeasurementApproachInProgress = { scope.layoutState.isTransitioning() } + ) { measurable, constraints -> targetSize = lookaheadSize val placeable = measurable.measure(constraints) layout(placeable.width, placeable.height) { placeable.place(0, 0) } diff --git a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt index c99c3250bbb1..3ee6d974fc9a 100644 --- a/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt +++ b/packages/SystemUI/compose/scene/src/com/android/compose/animation/scene/SceneTransitionLayoutImpl.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawWithContent import androidx.compose.ui.layout.LookaheadScope -import androidx.compose.ui.layout.intermediateLayout +import androidx.compose.ui.layout.approachLayout import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.IntSize import androidx.compose.ui.util.fastForEach @@ -150,7 +150,9 @@ internal class SceneTransitionLayoutImpl( .swipeToScene(horizontalGestureHandler) .swipeToScene(verticalGestureHandler) // Animate the size of this layout. - .intermediateLayout { measurable, constraints -> + .approachLayout( + isMeasurementApproachInProgress = { state.isTransitioning() }, + ) { measurable, constraints -> // Measure content normally. val placeable = measurable.measure(constraints) diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt index 6c47e2d1cf7d..0c55eb050f6a 100644 --- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt +++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/animation/scene/ElementTest.kt @@ -35,7 +35,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier -import androidx.compose.ui.layout.intermediateLayout +import androidx.compose.ui.layout.approachLayout import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -67,7 +67,9 @@ class ElementTest { modifier .offset(offset) .element(key) - .intermediateLayout { measurable, constraints -> + .approachLayout( + isMeasurementApproachInProgress = { layoutState.isTransitioning() }, + ) { measurable, constraints -> onLayout() val placement = measurable.measure(constraints) layout(placement.width, placement.height) { @@ -436,7 +438,7 @@ class ElementTest { // page should be composed. HorizontalPager( pagerState, - outOfBoundsPageCount = 0, + beyondViewportPageCount = 0, ) { page -> when (page) { 0 -> Box(Modifier.element(TestElements.Foo).fillMaxSize()) diff --git a/packages/SystemUI/compose/scene/tests/src/com/android/compose/nestedscroll/LargeTopAppBarNestedScrollConnectionTest.kt b/packages/SystemUI/compose/scene/tests/src/com/android/compose/nestedscroll/LargeTopAppBarNestedScrollConnectionTest.kt index e2974cddf1b9..4ddff5004779 100644 --- a/packages/SystemUI/compose/scene/tests/src/com/android/compose/nestedscroll/LargeTopAppBarNestedScrollConnectionTest.kt +++ b/packages/SystemUI/compose/scene/tests/src/com/android/compose/nestedscroll/LargeTopAppBarNestedScrollConnectionTest.kt @@ -201,11 +201,11 @@ class LargeTopAppBarNestedScrollConnectionTest(testCase: TestCase) { companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic - fun data(): List<TestCase> = - listOf( - TestCase(NestedScrollSource.Drag), - TestCase(NestedScrollSource.Fling), - TestCase(NestedScrollSource.Wheel), + fun data(): List<TestCase> { + return listOf( + TestCase(NestedScrollSource.UserInput), + TestCase(NestedScrollSource.SideEffect), ) + } } } |