Add positionInParent and boundsInParent
Fixes: 152735784
Relnote: Added positionInParent and boundsInParent for LayoutCoordinates.
Test: New tests
Change-Id: Icacdd0909bc434cd5fd935c46e0a07b965c6a38d
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OnPositionedTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OnPositionedTest.kt
index 0753797..a8e8cd8 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OnPositionedTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OnPositionedTest.kt
@@ -20,12 +20,16 @@
import androidx.test.filters.SmallTest
import androidx.test.rule.ActivityTestRule
import androidx.ui.core.Layout
+import androidx.ui.core.LayoutCoordinates
import androidx.ui.core.Modifier
+import androidx.ui.core.boundsInParent
import androidx.ui.core.globalPosition
import androidx.ui.core.onChildPositioned
import androidx.ui.core.onPositioned
+import androidx.ui.core.positionInParent
import androidx.ui.core.setContent
import androidx.ui.framework.test.TestActivity
+import androidx.ui.unit.PxBounds
import androidx.ui.unit.PxPosition
import androidx.ui.unit.ipx
import androidx.ui.unit.px
@@ -232,4 +236,66 @@
assertTrue(wrap2OnPositionedCalled)
assertEquals(1, onChildPositionedCalledTimes)
}
+
+ @Test
+ fun testPositionInParent() {
+ val positionedLatch = CountDownLatch(1)
+ var coordinates: LayoutCoordinates? = null
+
+ rule.runOnUiThread {
+ activity.setContentInFrameLayout {
+ FixedSize(10.ipx,
+ PaddingModifier(5.ipx) +
+ Modifier.onPositioned {
+ coordinates = it
+ positionedLatch.countDown()
+ }
+ ) {
+ }
+ }
+ }
+ assertTrue(positionedLatch.await(1, TimeUnit.SECONDS))
+
+ rule.runOnUiThread {
+ assertEquals(PxPosition(5.px, 5.px), coordinates!!.positionInParent)
+
+ var root = coordinates!!
+ while (root.parentCoordinates != null) {
+ root = root.parentCoordinates!!
+ }
+
+ assertEquals(PxPosition.Origin, root.positionInParent)
+ }
+ }
+
+ @Test
+ fun testBoundsInParent() {
+ val positionedLatch = CountDownLatch(1)
+ var coordinates: LayoutCoordinates? = null
+
+ rule.runOnUiThread {
+ activity.setContentInFrameLayout {
+ FixedSize(10.ipx,
+ PaddingModifier(5.ipx) +
+ Modifier.onPositioned {
+ coordinates = it
+ positionedLatch.countDown()
+ }
+ ) {
+ }
+ }
+ }
+ assertTrue(positionedLatch.await(1, TimeUnit.SECONDS))
+
+ rule.runOnUiThread {
+ assertEquals(PxBounds(5.px, 5.px, 15.px, 15.px), coordinates!!.boundsInParent)
+
+ var root = coordinates!!
+ while (root.parentCoordinates != null) {
+ root = root.parentCoordinates!!
+ }
+
+ assertEquals(PxBounds(0.px, 0.px, 20.px, 20.px), root.boundsInParent)
+ }
+ }
}
\ No newline at end of file