Fix LazyScrollAccessibilityTests

Instead of defining the sizes in dp we will use pixels to not depend on the density and how the rounding works.

Fixes: 260010883
Fixes: 260011449
Fixes: 242180919
Test: run all LazyScrollAccessibilityTest`s
Change-Id: Id239eb8ee6c42eae6e816c728b70e76dfbec9f5c
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
index 2293c1a..3371446 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
@@ -32,7 +32,6 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.platform.LocalView
 import androidx.compose.ui.platform.testTag
@@ -41,15 +40,15 @@
 import androidx.compose.ui.test.assertIsDisplayed
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.dp
 import androidx.core.view.ViewCompat
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD
 import androidx.test.filters.MediumTest
-import androidx.test.filters.SdkSuppress
 import com.google.common.truth.IterableSubject
 import com.google.common.truth.Truth.assertThat
+import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
@@ -100,6 +99,22 @@
                 .provider as AccessibilityNodeProvider
         }
 
+    private val itemSize = 21
+    private var itemSizeDp: Dp = Dp.Unspecified
+    private val containerSize = 200
+    private var containerSizeDp: Dp = Dp.Unspecified
+    private val contentPadding = 50
+    private var contentPaddingDp: Dp = Dp.Unspecified
+
+    @Before
+    fun before() {
+        with(rule.density) {
+            itemSizeDp = itemSize.toDp()
+            containerSizeDp = containerSize.toDp()
+            contentPaddingDp = contentPadding.toDp()
+        }
+    }
+
     @Test
     fun scrollForward() {
         testRelativeDirection(58, ACTION_SCROLL_FORWARD)
@@ -148,7 +163,6 @@
         )
     }
 
-    @SdkSuppress(minSdkVersion = 29) // b/260010883
     @Test
     fun verifyScrollActionsAtEnd() {
         createScrollableContent_StartAtEnd()
@@ -277,13 +291,13 @@
     private fun createScrollableContent_StartInMiddle() {
         createScrollableContent {
             // Start at the middle:
-            // Content size: 100 items * 21dp per item = 2100dp
-            // Viewport size: 200dp rect - 50dp padding on both sides = 100dp
-            // Content outside viewport: 2100dp - 100dp = 2000dp
-            // -> centered when 1000dp on either side, which is 47 items + 13dp
+            // Content size: 100 items * 21 per item = 2100
+            // Viewport size: 200 rect - 50 padding on both sides = 100
+            // Content outside viewport: 2100 - 100 = 2000
+            // -> centered when 1000 on either side, which is 47 items + 13
             rememberLazyGridState(
                 47,
-                with(LocalDensity.current) { 13.dp.roundToPx() }
+                13
             )
         }
     }
@@ -294,19 +308,19 @@
     private fun createScrollableContent_StartAtEnd() {
         createScrollableContent {
             // Start at the end:
-            // Content size: 100 items * 21dp per item = 2100dp
-            // Viewport size: 200dp rect - 50dp padding on both sides = 100dp
-            // Content outside viewport: 2100dp - 100dp = 2000dp
-            // -> at the end when offset at 2000dp, which is 95 items + 5dp
+            // Content size: 100 items * 21 per item = 2100
+            // Viewport size: 200 rect - 50 padding on both sides = 100
+            // Content outside viewport: 2100 - 100 = 2000
+            // -> at the end when offset at 2000, which is 95 items + 5
             rememberLazyGridState(
                 95,
-                with(LocalDensity.current) { 5.dp.roundToPx() }
+                5
             )
         }
     }
 
     /**
-     * Creates a grid with a viewport of 100.dp, containing 100 items each 17.dp in size.
+     * Creates a grid with a viewport of 100 px, containing 100 items each 21 px in size.
      * The items have a text with their index (ASC), and where the viewport starts is determined
      * by the given [lambda][rememberLazyGridState]. All properties from [config] are applied.
      * The viewport has padding around it to make sure scroll distance doesn't include padding.
@@ -317,18 +331,18 @@
 
             val state = rememberLazyGridState()
 
-            Box(Modifier.requiredSize(200.dp).background(Color.White)) {
+            Box(Modifier.requiredSize(containerSizeDp).background(Color.White)) {
                 val direction = if (config.rtl) LayoutDirection.Rtl else LayoutDirection.Ltr
                 CompositionLocalProvider(LocalLayoutDirection provides direction) {
                     LazyGrid(
                         cells = 1,
                         modifier = Modifier.testTag(scrollerTag).matchParentSize(),
                         state = state,
-                        contentPadding = PaddingValues(50.dp),
+                        contentPadding = PaddingValues(contentPaddingDp),
                         reverseLayout = config.reversed
                     ) {
                         items(100) {
-                            Box(Modifier.requiredSize(21.dp).background(Color.Yellow)) {
+                            Box(Modifier.requiredSize(itemSizeDp).background(Color.Yellow)) {
                                 BasicText("$it", Modifier.align(Alignment.Center))
                             }
                         }
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt
index a29edf6..15fd4f6 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/list/LazyScrollAccessibilityTest.kt
@@ -38,7 +38,6 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.platform.LocalView
 import androidx.compose.ui.platform.testTag
@@ -48,15 +47,15 @@
 import androidx.compose.ui.test.junit4.createAndroidComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.dp
 import androidx.core.view.ViewCompat
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD
 import androidx.test.filters.MediumTest
-import androidx.test.filters.SdkSuppress
 import com.google.common.truth.IterableSubject
 import com.google.common.truth.Truth.assertThat
+import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -107,6 +106,22 @@
                 .provider as AccessibilityNodeProvider
         }
 
+    private val itemSize = 21
+    private var itemSizeDp: Dp = Dp.Unspecified
+    private val containerSize = 200
+    private var containerSizeDp: Dp = Dp.Unspecified
+    private val contentPadding = 50
+    private var contentPaddingDp: Dp = Dp.Unspecified
+
+    @Before
+    fun before() {
+        with(rule.density) {
+            itemSizeDp = itemSize.toDp()
+            containerSizeDp = containerSize.toDp()
+            contentPaddingDp = contentPadding.toDp()
+        }
+    }
+
     @Test
     fun scrollForward() {
         testRelativeDirection(58, ACTION_SCROLL_FORWARD)
@@ -155,7 +170,6 @@
         )
     }
 
-    @SdkSuppress(minSdkVersion = 29) // b/260011449
     @Test
     fun verifyScrollActionsAtEnd() {
         createScrollableContent_StartAtEnd()
@@ -284,13 +298,13 @@
     private fun createScrollableContent_StartInMiddle() {
         createScrollableContent {
             // Start at the middle:
-            // Content size: 100 items * 21dp per item = 2100dp
-            // Viewport size: 200dp rect - 50dp padding on both sides = 100dp
-            // Content outside viewport: 2100dp - 100dp = 2000dp
-            // -> centered when 1000dp on either side, which is 47 items + 13dp
+            // Content size: 100 items * 21 per item = 2100
+            // Viewport size: 200 rect - 50 padding on both sides = 100
+            // Content outside viewport: 2100 - 100 = 2000
+            // -> centered when 1000 on either side, which is 47 items + 13
             rememberLazyListState(
                 47,
-                with(LocalDensity.current) { 13.dp.roundToPx() }
+                13
             )
         }
     }
@@ -301,19 +315,19 @@
     private fun createScrollableContent_StartAtEnd() {
         createScrollableContent {
             // Start at the end:
-            // Content size: 100 items * 21dp per item = 2100dp
-            // Viewport size: 200dp rect - 50dp padding on both sides = 100dp
-            // Content outside viewport: 2100dp - 100dp = 2000dp
-            // -> at the end when offset at 2000dp, which is 95 items + 5dp
+            // Content size: 100 items * 21 per item = 2100
+            // Viewport size: 200 rect - 50 padding on both sides = 100
+            // Content outside viewport: 2100 - 100 = 2000
+            // -> at the end when offset at 2000, which is 95 items + 5
             rememberLazyListState(
                 95,
-                with(LocalDensity.current) { 5.dp.roundToPx() }
+                5
             )
         }
     }
 
     /**
-     * Creates a Row/Column with a viewport of 100.dp, containing 100 items each 17.dp in size.
+     * Creates a Row/Column with a viewport of 100 px, containing 100 items each 21 px in size.
      * The items have a text with their index (ASC), and where the viewport starts is determined
      * by the given [lambda][rememberLazyListState]. All properties from [config] are applied.
      * The viewport has padding around it to make sure scroll distance doesn't include padding.
@@ -323,7 +337,7 @@
             composeView = LocalView.current
             val lazyContent: LazyListScope.() -> Unit = {
                 items(100) {
-                    Box(Modifier.requiredSize(21.dp).background(Color.Yellow)) {
+                    Box(Modifier.requiredSize(itemSizeDp).background(Color.Yellow)) {
                         BasicText("$it", Modifier.align(Alignment.Center))
                     }
                 }
@@ -331,14 +345,14 @@
 
             val state = rememberLazyListState()
 
-            Box(Modifier.requiredSize(200.dp).background(Color.White)) {
+            Box(Modifier.requiredSize(containerSizeDp).background(Color.White)) {
                 val direction = if (config.rtl) LayoutDirection.Rtl else LayoutDirection.Ltr
                 CompositionLocalProvider(LocalLayoutDirection provides direction) {
                     if (config.horizontal) {
                         LazyRow(
                             Modifier.testTag(scrollerTag).matchParentSize(),
                             state = state,
-                            contentPadding = PaddingValues(50.dp),
+                            contentPadding = PaddingValues(contentPaddingDp),
                             reverseLayout = config.reversed,
                             verticalAlignment = Alignment.CenterVertically
                         ) {
@@ -348,7 +362,7 @@
                         LazyColumn(
                             Modifier.testTag(scrollerTag).matchParentSize(),
                             state = state,
-                            contentPadding = PaddingValues(50.dp),
+                            contentPadding = PaddingValues(contentPaddingDp),
                             reverseLayout = config.reversed,
                             horizontalAlignment = Alignment.CenterHorizontally
                         ) {
diff --git a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyScrollAccessibilityTest.kt b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
index a7bed08..aa11fda 100644
--- a/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
+++ b/tv/tv-foundation/src/androidTest/java/androidx/tv/foundation/lazy/grid/LazyScrollAccessibilityTest.kt
@@ -32,7 +32,6 @@
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.platform.LocalView
 import androidx.compose.ui.platform.testTag
@@ -41,15 +40,15 @@
 import androidx.compose.ui.test.assertIsDisplayed
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.LayoutDirection
-import androidx.compose.ui.unit.dp
 import androidx.core.view.ViewCompat
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD
 import androidx.test.filters.MediumTest
 import com.google.common.truth.IterableSubject
 import com.google.common.truth.Truth.assertThat
-import org.junit.Ignore
+import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
@@ -100,6 +99,22 @@
                 .provider as AccessibilityNodeProvider
         }
 
+    private val itemSize = 21
+    private var itemSizeDp: Dp = Dp.Unspecified
+    private val containerSize = 200
+    private var containerSizeDp: Dp = Dp.Unspecified
+    private val contentPadding = 50
+    private var contentPaddingDp: Dp = Dp.Unspecified
+
+    @Before
+    fun before() {
+        with(rule.density) {
+            itemSizeDp = itemSize.toDp()
+            containerSizeDp = containerSize.toDp()
+            contentPaddingDp = contentPadding.toDp()
+        }
+    }
+
     @Test
     fun scrollForward() {
         testRelativeDirection(58, ACTION_SCROLL_FORWARD)
@@ -148,7 +163,6 @@
         )
     }
 
-    @Ignore // b/242180919
     @Test
     fun verifyScrollActionsAtEnd() {
         createScrollableContent_StartAtEnd()
@@ -277,13 +291,13 @@
     private fun createScrollableContent_StartInMiddle() {
         createScrollableContent {
             // Start at the middle:
-            // Content size: 100 items * 21dp per item = 2100dp
-            // Viewport size: 200dp rect - 50dp padding on both sides = 100dp
-            // Content outside viewport: 2100dp - 100dp = 2000dp
-            // -> centered when 1000dp on either side, which is 47 items + 13dp
+            // Content size: 100 items * 21 per item = 2100
+            // Viewport size: 200 rect - 50 padding on both sides = 100
+            // Content outside viewport: 2100 - 100 = 2000
+            // -> centered when 1000 on either side, which is 47 items + 13
             rememberTvLazyGridState(
                 47,
-                with(LocalDensity.current) { 13.dp.roundToPx() }
+                13
             )
         }
     }
@@ -294,19 +308,19 @@
     private fun createScrollableContent_StartAtEnd() {
         createScrollableContent {
             // Start at the end:
-            // Content size: 100 items * 21dp per item = 2100dp
-            // Viewport size: 200dp rect - 50dp padding on both sides = 100dp
-            // Content outside viewport: 2100dp - 100dp = 2000dp
-            // -> at the end when offset at 2000dp, which is 95 items + 5dp
+            // Content size: 100 items * 21 per item = 2100
+            // Viewport size: 200 rect - 50 padding on both sides = 100
+            // Content outside viewport: 2100 - 100 = 2000
+            // -> at the end when offset at 2000, which is 95 items + 5
             rememberTvLazyGridState(
                 95,
-                with(LocalDensity.current) { 5.dp.roundToPx() }
+                5
             )
         }
     }
 
     /**
-     * Creates a grid with a viewport of 100.dp, containing 100 items each 17.dp in size.
+     * Creates a grid with a viewport of 100 px, containing 100 items each 21 px in size.
      * The items have a text with their index (ASC), and where the viewport starts is determined
      * by the given [lambda][rememberTvLazyGridState]. All properties from [config] are applied.
      * The viewport has padding around it to make sure scroll distance doesn't include padding.
@@ -319,18 +333,18 @@
 
             val state = rememberTvLazyGridState()
 
-            Box(Modifier.requiredSize(200.dp).background(Color.White)) {
+            Box(Modifier.requiredSize(containerSizeDp).background(Color.White)) {
                 val direction = if (config.rtl) LayoutDirection.Rtl else LayoutDirection.Ltr
                 CompositionLocalProvider(LocalLayoutDirection provides direction) {
                     LazyGrid(
                         cells = 1,
                         modifier = Modifier.testTag(scrollerTag).matchParentSize(),
                         state = state,
-                        contentPadding = PaddingValues(50.dp),
+                        contentPadding = PaddingValues(contentPaddingDp),
                         reverseLayout = config.reversed
                     ) {
                         items(100) {
-                            Box(Modifier.requiredSize(21.dp).background(Color.Yellow)) {
+                            Box(Modifier.requiredSize(itemSizeDp).background(Color.Yellow)) {
                                 BasicText("$it", Modifier.align(Alignment.Center))
                             }
                         }