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))
                             }
                         }
