[automerge] [DO NOT MERGE] Refactor tests to use best practices for ActivityScenario 2p: f2b99a92d3

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Car/libs/+/16742226

Change-Id: Idbb78e20fcb2ea4492b5381f589559ac0ecb25a7
diff --git a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
index 8257cad..01c66f0 100644
--- a/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
+++ b/car-ui-lib/car-ui-lib/src/androidTest/java/com/android/car/ui/recyclerview/CarUiRecyclerViewTest.java
@@ -33,6 +33,7 @@
 import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist;
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
 import static androidx.test.espresso.matcher.ViewMatchers.assertThat;
+import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
 import static androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
@@ -40,6 +41,7 @@
 import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 import static androidx.test.espresso.matcher.ViewMatchers.withText;
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
 
 import static com.android.car.ui.actions.CarUiRecyclerViewActions.scrollToPosition;
 import static com.android.car.ui.actions.LowLevelActions.performDrag;
@@ -56,7 +58,6 @@
 import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
 import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.assertEquals;
@@ -102,7 +103,6 @@
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView.LayoutManager;
 import androidx.recyclerview.widget.RecyclerView.LayoutParams;
-import androidx.test.core.app.ActivityScenario;
 import androidx.test.espresso.IdlingRegistry;
 import androidx.test.espresso.IdlingResource;
 import androidx.test.ext.junit.rules.ActivityScenarioRule;
@@ -115,11 +115,11 @@
 import com.android.car.ui.utils.CarUxRestrictionsUtil;
 
 import org.junit.After;
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
+import org.mockito.ArgumentCaptor;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -127,14 +127,15 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * Unit tests for {@link CarUiRecyclerView}.
  */
-@TargetApi(MIN_TARGET_API)
 @RunWith(Parameterized.class)
+@TargetApi(MIN_TARGET_API)
 public class CarUiRecyclerViewTest {
-
     @Parameterized.Parameters
     public static Object[] data() {
         // It's important to do no plugin first, so that the plugin will
@@ -146,14 +147,6 @@
     public ActivityScenarioRule<TestActivity> mActivityRule =
             new ActivityScenarioRule<>(TestActivity.class);
 
-    ActivityScenario<TestActivity> mScenario;
-
-    private TestActivity mActivity;
-    private Context mTestableContext;
-    private Resources mTestableResources;
-
-
-    private Context mPluginContext;
     private final boolean mIsPluginEnabled;
 
     public CarUiRecyclerViewTest(boolean pluginEnabled) {
@@ -161,21 +154,6 @@
         mIsPluginEnabled = pluginEnabled;
     }
 
-    @Before
-    public void setUp() {
-        if (mIsPluginEnabled) {
-            mPluginContext = PluginFactorySingleton.getPluginContext();
-        }
-        mScenario = mActivityRule.getScenario();
-        mScenario.onActivity(activity -> {
-            mActivity = activity;
-            mTestableContext = spy(mActivity);
-            mTestableResources = spy(mActivity.getResources());
-        });
-
-        when(mTestableContext.getResources()).thenReturn(mTestableResources);
-    }
-
     @After
     public void tearDown() {
         for (IdlingResource idlingResource : IdlingRegistry.getInstance().getResources()) {
@@ -187,11 +165,19 @@
 
     @Test
     public void testIsScrollbarPresent_scrollbarDisabled() {
-        if (isScrollbarEnabledNotAsExpected(false)) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        container.post(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            doReturn(false).when(testableResources)
+                    .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setAdapter(new TestAdapter(100));
         });
@@ -201,21 +187,31 @@
 
     @Test
     public void testSmallRecyclerView_scrollbarDisabled() {
-        if (isScrollbarEnabledNotAsExpected(false)) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
-                anyInt())).thenReturn(0); // Small size
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        container.post(() -> {
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+                    anyInt())).thenReturn(0); // Small size
+
+            // Disable scrollbar
+            doReturn(false).when(testableResources)
+                    .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setAdapter(new TestAdapter(100));
         });
@@ -225,21 +221,31 @@
 
     @Test
     public void testMediumRecyclerView_scrollbarDisabled() {
-        if (isScrollbarEnabledNotAsExpected(false)) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
-                anyInt())).thenReturn(1); // Medium size
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        container.post(() -> {
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+                    anyInt())).thenReturn(1); // Medium size
+
+            // Disable scrollbar
+            doReturn(false).when(testableResources)
+                    .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setAdapter(new TestAdapter(100));
         });
@@ -249,21 +255,31 @@
 
     @Test
     public void testLargeRecyclerView_scrollbarDisabled() {
-        if (isScrollbarEnabledNotAsExpected(false)) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
-                anyInt())).thenReturn(2); // Large size
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        container.post(() -> {
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+                    anyInt())).thenReturn(2); // Large size
+
+            // Disable scrollbar
+            doReturn(false).when(testableResources)
+                    .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setAdapter(new TestAdapter(100));
         });
@@ -273,19 +289,19 @@
 
     @Test
     public void testPadding() {
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        int padding = 100;
-        carUiRecyclerView.setPadding(padding, padding, padding, padding);
-        container.post(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
+            int padding = 100;
+            carUiRecyclerView.setPadding(padding, padding, padding, padding);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setAdapter(new TestAdapter(100));
-        });
 
-        assertEquals(padding, carUiRecyclerView.getPaddingLeft());
-        assertEquals(padding, carUiRecyclerView.getPaddingRight());
-        assertEquals(padding, carUiRecyclerView.getPaddingTop());
-        assertEquals(padding, carUiRecyclerView.getPaddingBottom());
+            assertEquals(padding, carUiRecyclerView.getPaddingLeft());
+            assertEquals(padding, carUiRecyclerView.getPaddingRight());
+            assertEquals(padding, carUiRecyclerView.getPaddingTop());
+            assertEquals(padding, carUiRecyclerView.getPaddingBottom());
+        });
     }
 
     @Test
@@ -293,28 +309,35 @@
         // Ensure the CarUiRecyclerViewLayout constant matches the styleable attribute enum value
         assertEquals(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID, 1);
 
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
-                .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID);
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_numOfColumns), anyInt()))
-                .thenReturn(3);
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(4);
-        container.post(() -> {
-            container.addView(carUiRecyclerView.getView());
-            carUiRecyclerView.setAdapter(adapter);
-        });
 
-        assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
+                    .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID);
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_numOfColumns), anyInt()))
+                    .thenReturn(3);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
+            container.post(() -> {
+                container.addView(carUiRecyclerView.getView());
+                carUiRecyclerView.setAdapter(adapter);
+            });
+
+            assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
+        });
 
         // Check that all items in the first row are top-aligned.
         onView(withText(adapter.getItemText(0))).check(
@@ -342,26 +365,33 @@
         // Ensure the CarUiRecyclerViewLayout constant matches the styleable attribute enum value
         assertEquals(CarUiRecyclerView.CarUiRecyclerViewLayout.LINEAR, 0);
 
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
-                .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.LINEAR);
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(4);
-        container.post(() -> {
-            container.addView(carUiRecyclerView.getView());
-            carUiRecyclerView.setAdapter(adapter);
-        });
 
-        assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiLinearLayoutStyle);
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
+                    .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.LINEAR);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
+            container.post(() -> {
+                container.addView(carUiRecyclerView.getView());
+                carUiRecyclerView.setAdapter(adapter);
+            });
+
+            assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiLinearLayoutStyle);
+        });
 
         // Check that item views are laid out linearly.
         onView(withText(adapter.getItemText(0))).check(
@@ -374,151 +404,192 @@
 
     @Test
     public void testStartAtFirstPosition() {
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(100);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         // Check that the first item is completely displayed.
         onView(withText(adapter.getItemText(0))).check(matches(isCompletelyDisplayed()));
-        assertEquals(0, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertEquals(0, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+        });
     }
 
     @Test
     public void testPositionAfterPadding() {
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(100);
         int testPosition = 40;
-        container.post(() -> {
-            container.addView(carUiRecyclerView.getView());
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
+            ViewGroup container = activity.findViewById(R.id.test_container);
+            container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.scrollToPosition(testPosition);
         });
 
         // Check that the scrolled to item is completely displayed.
         onView(withText(adapter.getItemText(testPosition))).check(matches(isCompletelyDisplayed()));
-        assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
 
-        int padding = 150;
-        container.post(() -> carUiRecyclerView.setPadding(padding, padding, padding, padding));
+            int padding = 150;
+            carUiRecyclerView.setPadding(padding, padding, padding, padding);
+        });
 
         // Check that the scrolled to item is completely displayed.
         onView(withText(adapter.getItemText(testPosition))).check(matches(isCompletelyDisplayed()));
-        assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+        });
     }
 
     @Test
     public void testPositionAfterPaddingRelative() {
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(100);
         int testPosition = 40;
-        container.post(() -> {
-            container.addView(carUiRecyclerView.getView());
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
+            ViewGroup container = activity.findViewById(R.id.test_container);
+            container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.scrollToPosition(testPosition);
         });
 
         // Check that the scrolled to item is completely displayed.
         onView(withText(adapter.getItemText(testPosition))).check(matches(isCompletelyDisplayed()));
-        assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
 
-        int padding = 150;
-        container.post(
-                () -> carUiRecyclerView.setPaddingRelative(padding, padding, padding, padding));
+            int padding = 150;
+            carUiRecyclerView.setPaddingRelative(padding, padding, padding, padding);
+        });
 
         // Check that the scrolled to item is completely displayed.
         onView(withText(adapter.getItemText(testPosition))).check(matches(isCompletelyDisplayed()));
-        assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertEquals(testPosition, carUiRecyclerView.findFirstCompletelyVisibleItemPosition());
+        });
     }
 
     @Test
     public void testLayoutManagerSetInXml() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
         // Inflate activity where a LayoutManger is set for a CarUiRecyclerView through a
         // styleable attribute.
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(
-                        R.layout.car_ui_recycler_view_layout_manager_xml_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_layout_manager_xml_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
         TestAdapter adapter = new TestAdapter(3);
-        mActivity.runOnUiThread(() -> {
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
             setRotaryScrollEnabled(carUiRecyclerView.getView(), /* isVertical= */ true);
             carUiRecyclerView.setAdapter(adapter);
             carUiRecyclerView.setVisibility(View.VISIBLE);
+
+            assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
         });
 
         // Check that items in are displayed.
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
         onView(withText(adapter.getItemText(1))).check(matches(isDisplayed()));
         onView(withText(adapter.getItemText(2))).check(matches(isDisplayed()));
-
-        assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
     }
 
     @Test
     public void testSetLayoutManager_shouldUpdateItemDecorations() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getBoolean(eq(R.styleable.CarUiRecyclerView_enableDivider), anyBoolean()))
-                .thenReturn(true);
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
-                .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID);
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_numOfColumns), anyInt()))
-                .thenReturn(3);
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(4);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getBoolean(eq(R.styleable.CarUiRecyclerView_enableDivider),
+                    anyBoolean()))
+                    .thenReturn(true);
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_layoutStyle), anyInt()))
+                    .thenReturn(CarUiRecyclerView.CarUiRecyclerViewLayout.GRID);
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_numOfColumns), anyInt()))
+                    .thenReturn(3);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            carUiRecyclerView.setId(listId);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
-        assertEquals(carUiRecyclerView.getItemDecorationCount(), 1);
-        assertTrue(carUiRecyclerView.getItemDecorationAt(0) instanceof GridDividerItemDecoration);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
+            assertEquals(carUiRecyclerView.getItemDecorationCount(), 1);
+            assertTrue(
+                    carUiRecyclerView.getItemDecorationAt(0) instanceof GridDividerItemDecoration);
 
-        mActivity.runOnUiThread(() ->
-                carUiRecyclerView.setLayoutStyle(new CarUiLinearLayoutStyle()));
+            carUiRecyclerView.setLayoutStyle(new CarUiLinearLayoutStyle());
+        });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiLinearLayoutStyle);
-        assertEquals(carUiRecyclerView.getItemDecorationCount(), 1);
-        assertFalse(carUiRecyclerView.getItemDecorationAt(0)
-                instanceof GridDividerItemDecoration);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiLinearLayoutStyle);
+            assertEquals(carUiRecyclerView.getItemDecorationCount(), 1);
+            assertFalse(carUiRecyclerView.getItemDecorationAt(0)
+                    instanceof GridDividerItemDecoration);
+        });
     }
 
     @Test
     public void testVisibility_goneAtInflationWithChangeToVisible() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(
-                        R.layout.car_ui_recycler_view_gone_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_gone_test_activity));
 
         onView(withId(R.id.list)).check(matches(not(isDisplayed())));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
         TestAdapter adapter = new TestAdapter(3);
-        mActivity.runOnUiThread(() -> {
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
             carUiRecyclerView.setAdapter(adapter);
             carUiRecyclerView.setVisibility(View.VISIBLE);
         });
@@ -531,15 +602,15 @@
 
     @Test
     public void testVisibility_invisibleAtInflationWithChangeToVisible() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(
-                        R.layout.car_ui_recycler_view_invisible_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_invisible_test_activity));
 
         onView(withId(R.id.list)).check(matches(not(isDisplayed())));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
         TestAdapter adapter = new TestAdapter(3);
-        mActivity.runOnUiThread(() -> {
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
             carUiRecyclerView.setAdapter(adapter);
             carUiRecyclerView.setVisibility(View.VISIBLE);
         });
@@ -552,68 +623,93 @@
 
     @Test
     public void testFirstItemAtTop_onInitialLoad() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
         TestAdapter adapter = new TestAdapter(25);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            activity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+        });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertEquals(carUiRecyclerView.findFirstVisibleItemPosition(), 0);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            assertEquals(carUiRecyclerView.findFirstVisibleItemPosition(), 0);
+        });
     }
 
     @Test
     public void testPageUpAndDownMoveSameDistance() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            // Can't use OrientationHelper here, because it returns 0 when calling getTotalSpace
+            // methods
+            // until LayoutManager's onLayoutComplete is called. In this case waiting until the
+            // first
+            // item of the list is displayed guarantees that OrientationHelper is initialized
+            // properly.
+            int totalSpace = carUiRecyclerView.getHeight()
+                    - carUiRecyclerView.getPaddingTop()
+                    - carUiRecyclerView.getPaddingBottom();
+            PerfectFitTestAdapter adapter = new PerfectFitTestAdapter(5, totalSpace);
+            carUiRecyclerView.setAdapter(adapter);
 
-        // Can't use OrientationHelper here, because it returns 0 when calling getTotalSpace methods
-        // until LayoutManager's onLayoutComplete is called. In this case waiting until the first
-        // item of the list is displayed guarantees that OrientationHelper is initialized properly.
-        int totalSpace = carUiRecyclerView.getHeight()
-                - carUiRecyclerView.getPaddingTop()
-                - carUiRecyclerView.getPaddingBottom();
-        PerfectFitTestAdapter adapter = new PerfectFitTestAdapter(5, totalSpace);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
-        onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
+        onView(withText(PerfectFitTestAdapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertEquals(totalSpace, carUiRecyclerView.getTotalSpace());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            // Recalculate total space
+            int totalSpace = carUiRecyclerView.getHeight()
+                    - carUiRecyclerView.getPaddingTop()
+                    - carUiRecyclerView.getPaddingBottom();
+            assertEquals(totalSpace, carUiRecyclerView.getTotalSpace());
+        });
 
         // Move down one page so there will be sufficient pages for up and downs.
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
-        int topPosition = carUiRecyclerView.findFirstVisibleItemPosition();
 
         for (int i = 0; i < 3; i++) {
             onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
             onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
         }
 
-        assertEquals(carUiRecyclerView.findFirstVisibleItemPosition(), topPosition);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            int topPosition = carUiRecyclerView.findFirstVisibleItemPosition();
+            assertEquals(carUiRecyclerView.findFirstVisibleItemPosition(), topPosition);
+        });
     }
 
     @Test
     public void testContinuousScroll() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
         TestAdapter adapter = new TestAdapter(50);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
         // Press and hold the down button for 2 seconds to scroll the list to bottom.
@@ -621,49 +717,69 @@
         onView(isRoot()).perform(waitForView(withText("Sample item #49"), 3000));
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(release());
 
-        assertEquals(carUiRecyclerView.findLastCompletelyVisibleItemPosition(), 49);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            assertEquals(carUiRecyclerView.findLastCompletelyVisibleItemPosition(), 49);
+        });
     }
 
     @Test
     public void testAlphaJumpToMiddleForThumbWhenTrackClicked() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
         TestAdapter adapter = new TestAdapter(50);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        View trackView = mActivity.requireViewById(getId("car_ui_scrollbar_track"));
+        AtomicInteger trackViewHeight = new AtomicInteger();
+        mActivityRule.getScenario().onActivity(activity -> {
+            View trackView = activity.requireViewById(getId("car_ui_scrollbar_track"));
+            trackViewHeight.set(trackView.getHeight());
+        });
+
         // scroll to the middle
         onView(withId(getId("car_ui_scrollbar_track"))).perform(
-                touchDownAndUp(0f, (trackView.getHeight() / 2f)));
+                touchDownAndUp(0f, (trackViewHeight.get() / 2f)));
         onView(withText(adapter.getItemText(25))).check(matches(isDisplayed()));
     }
 
     @Test
     public void testAlphaJumpToEndAndStartForThumbWhenTrackClicked() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
         TestAdapter adapter = new TestAdapter(50);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        View trackView = mActivity.requireViewById(getId("car_ui_scrollbar_track"));
-        View thumbView = mActivity.requireViewById(getId("car_ui_scrollbar_thumb"));
+        AtomicInteger trackViewHeight = new AtomicInteger();
+        mActivityRule.getScenario().onActivity(activity -> {
+            View trackView = activity.requireViewById(getId("car_ui_scrollbar_track"));
+            trackViewHeight.set(trackView.getHeight());
+        });
+
         // scroll to the end
         onView(withId(getId("car_ui_scrollbar_track"))).perform(
-                touchDownAndUp(0f, trackView.getHeight() - 1));
+                touchDownAndUp(0f, trackViewHeight.get() - 1));
         onView(withText(adapter.getItemText(49))).check(matches(isDisplayed()));
 
         // scroll to the start
@@ -674,45 +790,56 @@
 
     @Test
     public void testThumbDragToCenter() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
         TestAdapter adapter = new TestAdapter(50);
-        mActivity.runOnUiThread(() -> {
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
             carUiRecyclerView.setAdapter(adapter);
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        View trackView = mActivity.requireViewById(getId("car_ui_scrollbar_track"));
-        View thumbView = mActivity.requireViewById(getId("car_ui_scrollbar_thumb"));
+        AtomicInteger trackViewHeight = new AtomicInteger();
+        AtomicInteger thumbViewHeight = new AtomicInteger();
+        mActivityRule.getScenario().onActivity(activity -> {
+            View trackView = activity.requireViewById(getId("car_ui_scrollbar_track"));
+            View thumbView = activity.requireViewById(getId("car_ui_scrollbar_thumb"));
+
+            trackViewHeight.set(trackView.getHeight());
+            thumbViewHeight.set(thumbView.getHeight());
+        });
+
         // if you drag too far in a single step you'll stop selecting the thumb view. Hence, drag
         // 5 units at a time for 200 intervals and stop at the center of the track by limitY.
-
         onView(withId(getId("car_ui_scrollbar_track"))).perform(
-                performDrag(0f, (thumbView.getHeight() / 2f), 0,
+                performDrag(0f, (thumbViewHeight.get() / 2f), 0,
                         5, 200, Float.MAX_VALUE,
-                        trackView.getHeight() / 2f));
+                        trackViewHeight.get() / 2f));
         onView(withText(adapter.getItemText(25))).check(matches(isDisplayed()));
     }
 
     @Test
     public void testPageUpButtonDisabledAtTop() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        //  50, because needs to be big enough to make sure content is scrollable.
         TestAdapter adapter = new TestAdapter(50);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
 
         // Initially page_up button is disabled.
         onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(not(isEnabled())));
@@ -731,15 +858,17 @@
     public void testPageUpScrollsWithoutSnap() {
         CarUiRecyclerView.OnScrollListener scrollListener =
                 mock(CarUiRecyclerView.OnScrollListener.class);
+        int listId = View.generateViewId();
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        container.post(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(new TestAdapter(100));
-        });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
 
         // Scroll down a few pages so that you can perform page up operations.
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
@@ -747,22 +876,35 @@
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
-        // Set a mocked scroll listener on the CarUiRecyclerView
-        carUiRecyclerView.addOnScrollListener(scrollListener);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            // Set a mocked scroll listener on the CarUiRecyclerView
+            carUiRecyclerView.addOnScrollListener(scrollListener);
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
 
+        ArgumentCaptor<CarUiRecyclerView> captor = ArgumentCaptor.forClass(CarUiRecyclerView.class);
+
         // Verify that scroll operation only settles on the destination once. This means a single
         // smooth scroll to the destination. If the scroll includes a secondary snap after an
         // initial scroll, this callback will have more than one invocation.
-        verify(scrollListener, times(1)).onScrollStateChanged(
-                carUiRecyclerView, SCROLL_STATE_SETTLING);
+        verify(scrollListener, times(1)).onScrollStateChanged(captor.capture(),
+                eq(SCROLL_STATE_SETTLING));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertEquals(carUiRecyclerView, captor.getValue());
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
 
         // Make same verification as above for a second page up operation.
         verify(scrollListener, times(2)).onScrollStateChanged(
-                carUiRecyclerView, SCROLL_STATE_SETTLING);
+                captor.capture(), eq(SCROLL_STATE_SETTLING));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertEquals(carUiRecyclerView, captor.getValue());
+        });
     }
 
     @Test
@@ -770,39 +912,45 @@
         CarUiRecyclerView.OnScrollListener scrollListener =
                 mock(CarUiRecyclerView.OnScrollListener.class);
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(new TestAdapter(100));
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+
+            // Set a mocked scroll listener on the CarUiRecyclerView
+            carUiRecyclerView.addOnScrollListener(scrollListener);
         });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
-
-        // Set a mocked scroll listener on the CarUiRecyclerView
-        carUiRecyclerView.addOnScrollListener(scrollListener);
-
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
         // Verify that scroll operation only settles on the destination once. This means a single
         // smooth scroll to the destination. If the scroll includes a secondary snap after an
         // initial scroll, this callback will have more than one invocation.
+        ArgumentCaptor<CarUiRecyclerView> captor = ArgumentCaptor.forClass(CarUiRecyclerView.class);
         verify(scrollListener, times(1)).onScrollStateChanged(
-                carUiRecyclerView, SCROLL_STATE_SETTLING);
+                captor.capture(), eq(SCROLL_STATE_SETTLING));
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
         // Make same verification as above for a second page down operation.
         verify(scrollListener, times(2)).onScrollStateChanged(
-                carUiRecyclerView, SCROLL_STATE_SETTLING);
+                captor.capture(), eq(SCROLL_STATE_SETTLING));
     }
 
     @Test
     public void testPageDownScrollsOverLongItem() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
@@ -814,63 +962,83 @@
         heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.TALL);
         TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        OrientationHelper orientationHelper =
-                OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
-        int screenHeight = carUiRecyclerView.getTotalSpace();
-
         // Scroll to a position where long item is partially visible.
         // Scrolling from top, scrollToPosition() aligns the pos-1 item to bottom.
         onView(withId(R.id.list)).perform(scrollToPosition(longItemPosition - 1));
         // This is needed to make sure scroll is finished before looking for the long item.
         onView(withText(adapter.getItemText(longItemPosition - 1))).check(matches(isDisplayed()));
 
-        // Scroll by half the height of the screen so the long item is partially visible.
-        mActivity.runOnUiThread(() -> carUiRecyclerView.scrollBy(0, screenHeight / 2));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+
+            // Scroll by half the height of the screen so the long item is partially visible.
+            carUiRecyclerView.scrollBy(0, screenHeight / 2);
+        });
+
         onView(withText(adapter.getItemText(longItemPosition))).check(matches(isDisplayed()));
 
-        // Verify long item is partially shown.
-        View longItem = getLongItem(carUiRecyclerView);
-        assertThat(
-                orientationHelper.getDecoratedStart(longItem),
-                is(greaterThan(orientationHelper.getStartAfterPadding())));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            // Verify long item is partially shown.
+            View longItem = getLongItem(carUiRecyclerView);
+            assertThat(
+                    orientationHelper.getDecoratedStart(longItem),
+                    is(greaterThan(carUiRecyclerView.getStartAfterPadding())));
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
-        // Verify long item is snapped to top.
-        assertThat(orientationHelper.getDecoratedStart(longItem),
-                is(equalTo(orientationHelper.getStartAfterPadding())));
-        assertThat(orientationHelper.getDecoratedEnd(longItem),
-                is(greaterThan(orientationHelper.getEndAfterPadding())));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            // Verify long item is snapped to top.
+            View longItem = getLongItem(carUiRecyclerView);
+            assertThat(orientationHelper.getDecoratedStart(longItem),
+                    is(equalTo(carUiRecyclerView.getStartAfterPadding())));
+            assertThat(orientationHelper.getDecoratedEnd(longItem),
+                    is(greaterThan(carUiRecyclerView.getEndAfterPadding())));
+        });
 
-        // Set a limit to avoid test stuck in non-moving state.
-        while (orientationHelper.getDecoratedEnd(longItem)
-                > orientationHelper.getEndAfterPadding()) {
-            onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
-        }
+        onView(withText(adapter.getItemText(longItemPosition))).check(matches(isDisplayed()));
+        onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
-        // Verify long item end is aligned to bottom.
-        assertThat(orientationHelper.getDecoratedEnd(longItem),
-                is(equalTo(orientationHelper.getEndAfterPadding())));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            View longItem = getLongItem(carUiRecyclerView);
+            // Verify long item end is aligned to bottom.
+            assertThat(orientationHelper.getDecoratedEnd(longItem),
+                    is(equalTo(carUiRecyclerView.getEndAfterPadding())));
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
         // Verify that the long item is no longer visible; Should be on the next child
-        assertThat(
-                orientationHelper.getDecoratedStart(longItem),
-                is(lessThan(orientationHelper.getStartAfterPadding())));
+        onView(hasDescendant(withText(adapter.getItemText(longItemPosition)))).check(
+                doesNotExistOrIsNotDisplayed());
     }
 
     @Test
     public void testPageDownScrollsOverLongItemAtTheEnd() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
@@ -882,22 +1050,20 @@
         heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.TALL);
         TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
             // Setting top padding to any number greater than 0.
             // Not having padding will make this test pass all the time.
             // Also adding bottom padding to make sure the padding
             // after the last content is considered in calculations.
             carUiRecyclerView.setPadding(0, 1, 0, 1);
             carUiRecyclerView.setAdapter(adapter);
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        OrientationHelper orientationHelper =
-                OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
-
         // 20 is just an arbitrary number to make sure we reach the end of the recyclerview.
         for (int i = 0; i < 20; i++) {
             onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
@@ -905,19 +1071,26 @@
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(not(isEnabled())));
 
-        View longItem = getLongItem(carUiRecyclerView);
-        // Making sure we've reached end of the recyclerview, after
-        // adding bottom padding
-        assertThat(orientationHelper.getDecoratedEnd(longItem),
-                is(equalTo(orientationHelper.getEndAfterPadding())));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            View longItem = getLongItem(carUiRecyclerView);
+            // Making sure we've reached end of the recyclerview, after
+            // adding bottom padding
+            assertThat(orientationHelper.getDecoratedEnd(longItem),
+                    is(equalTo(carUiRecyclerView.getEndAfterPadding())));
+        });
     }
 
     @Test
     public void testPageUpScrollsOverLongItem() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
@@ -929,48 +1102,74 @@
         heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.TALL);
         TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        OrientationHelper orientationHelper =
-                OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
-
         // Scroll to a position just below the long item.
         onView(withId(R.id.list)).perform(scrollToPosition(longItemPosition + 1));
         onView(withText(adapter.getItemText(longItemPosition + 1))).check(matches(isDisplayed()));
 
-        // Verify long item is off-screen.
-        View longItem = getLongItem(carUiRecyclerView);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            // Verify long item is off-screen.
+            View longItem = getLongItem(carUiRecyclerView);
+            assertThat(
+                    orientationHelper.getDecoratedEnd(longItem),
+                    is(lessThanOrEqualTo(carUiRecyclerView.getEndAfterPadding())));
+        });
 
-        assertThat(
-                orientationHelper.getDecoratedEnd(longItem),
-                is(lessThanOrEqualTo(orientationHelper.getEndAfterPadding())));
+        final AtomicBoolean check = new AtomicBoolean();
+        final AtomicInteger topBeforeClick = new AtomicInteger();
 
-        if (orientationHelper.getStartAfterPadding() - orientationHelper.getDecoratedStart(longItem)
-                < orientationHelper.getTotalSpace()) {
-            onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
-            assertThat(orientationHelper.getDecoratedStart(longItem),
-                    is(greaterThanOrEqualTo(orientationHelper.getStartAfterPadding())));
-        } else {
-            int topBeforeClick = orientationHelper.getDecoratedStart(longItem);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            View longItem = getLongItem(carUiRecyclerView);
+            if (carUiRecyclerView.getStartAfterPadding() - orientationHelper.getDecoratedStart(
+                    longItem)
+                    < carUiRecyclerView.getTotalSpace()) {
+                check.set(true);
+            } else {
+                topBeforeClick.set(orientationHelper.getDecoratedStart(longItem));
+            }
+        });
 
-            onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
+        onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
 
-            // Verify we scrolled 1 screen
-            assertThat(orientationHelper.getStartAfterPadding() - topBeforeClick,
-                    is(equalTo(orientationHelper.getTotalSpace())));
-        }
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            View longItem = getLongItem(carUiRecyclerView);
+            if (check.get()) {
+                OrientationHelper orientationHelper =
+                        OrientationHelper.createVerticalHelper(
+                                carUiRecyclerView.getLayoutManager());
+                assertThat(orientationHelper.getDecoratedStart(longItem),
+                        is(greaterThanOrEqualTo(carUiRecyclerView.getStartAfterPadding())));
+            } else {
+                // Verify we scrolled 1 screen
+                assertThat(carUiRecyclerView.getStartAfterPadding() - topBeforeClick.get(),
+                        is(equalTo(carUiRecyclerView.getTotalSpace())));
+            }
+        });
     }
 
     @Test
     public void testPageDownScrollsOverVeryLongItem() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
@@ -982,15 +1181,15 @@
         heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.EXTRA_TALL);
         TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        OrientationHelper orientationHelper =
-                OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
-
         int screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;
         // Scroll to a position where long item is partially visible.
         // Scrolling from top, scrollToPosition() aligns the pos-1 item to bottom.
@@ -999,38 +1198,60 @@
         onView(withText(adapter.getItemText(longItemPosition - 1)))
                 .check(matches(isDisplayed()));
 
-        // Scroll by half the height of the screen so the long item is partially visible.
-        mActivity.runOnUiThread(() -> carUiRecyclerView.scrollBy(0, screenHeight / 2));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            // Scroll by half the height of the screen so the long item is partially visible.
+            carUiRecyclerView.scrollBy(0, screenHeight / 2);
+        });
 
         onView(withText(adapter.getItemText(longItemPosition))).check(matches(isDisplayed()));
 
-        // Verify long item is partially shown.
-        View longItem = getLongItem(carUiRecyclerView);
-        assertThat(
-                orientationHelper.getDecoratedStart(longItem),
-                is(greaterThan(orientationHelper.getStartAfterPadding())));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            // Verify long item is partially shown.
+            View longItem = getLongItem(carUiRecyclerView);
+            assertThat(
+                    orientationHelper.getDecoratedStart(longItem),
+                    is(greaterThan(carUiRecyclerView.getStartAfterPadding())));
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
-        // Verify long item is snapped to top.
-        assertThat(orientationHelper.getDecoratedStart(longItem),
-                is(equalTo(orientationHelper.getStartAfterPadding())));
-        assertThat(orientationHelper.getDecoratedEnd(longItem),
-                is(greaterThan(orientationHelper.getEndAfterPadding())));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            View longItem = getLongItem(carUiRecyclerView);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            // Verify long item is snapped to top.
+            assertThat(orientationHelper.getDecoratedStart(longItem),
+                    is(equalTo(carUiRecyclerView.getStartAfterPadding())));
+            assertThat(orientationHelper.getDecoratedEnd(longItem),
+                    is(greaterThan(carUiRecyclerView.getEndAfterPadding())));
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
-        // Verify long item does not snap to bottom.
-        assertThat(orientationHelper.getDecoratedEnd(longItem),
-                not(equalTo(orientationHelper.getEndAfterPadding())));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            View longItem = getLongItem(carUiRecyclerView);
+            // Verify long item does not snap to bottom.
+            assertThat(orientationHelper.getDecoratedEnd(longItem),
+                    not(equalTo(carUiRecyclerView.getEndAfterPadding())));
+        });
     }
 
     @Test
     public void testPageDownScrollsOverVeryLongItemAtTheEnd() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
@@ -1042,22 +1263,20 @@
         heightOverrides.put(longItemPosition, TestAdapter.ItemHeight.EXTRA_TALL);
         TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
             // Setting top padding to any number greater than 0.
             // Not having padding will make this test pass all the time.
             // Also adding bottom padding to make sure the padding
             // after the last content is considered in calculations.
             carUiRecyclerView.setPadding(0, 1, 0, 1);
             carUiRecyclerView.setAdapter(adapter);
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        OrientationHelper orientationHelper =
-                OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
-
         // 20 is just an arbitrary number to make sure we reach the end of the recyclerview.
         for (int i = 0; i < 20; i++) {
             onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
@@ -1065,283 +1284,362 @@
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(not(isEnabled())));
 
-        View longItem = getLongItem(carUiRecyclerView);
-        // Making sure we've reached end of the recyclerview, after
-        // adding bottom padding
-        assertThat(orientationHelper.getDecoratedEnd(longItem),
-                is(equalTo(orientationHelper.getEndAfterPadding())));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper =
+                    OrientationHelper.createVerticalHelper(carUiRecyclerView.getLayoutManager());
+            View longItem = getLongItem(carUiRecyclerView);
+            // Making sure we've reached end of the recyclerview, after
+            // adding bottom padding
+            assertThat(orientationHelper.getDecoratedEnd(longItem),
+                    is(equalTo(carUiRecyclerView.getEndAfterPadding())));
+        });
     }
 
     @Test
     public void testPageDownMaintainsMinimumScrollThumbTrackHeight() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
         int itemCount = 2500;
         TestAdapter adapter = new TestAdapter(itemCount);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
-        mActivity.runOnUiThread(() -> carUiRecyclerView.requestLayout());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+            carUiRecyclerView.requestLayout();
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
-        // Check that thumb track maintains minimum height
-        int minThumbViewHeight = (int) mActivity.getResources()
-                .getDimension(R.dimen.car_ui_scrollbar_min_thumb_height);
-        View thumbView = mActivity.requireViewById(getId("car_ui_scrollbar_thumb"));
-        // Conversion from DP to pixel sometimes makes these two value differ by 1
-        assertThat(abs(thumbView.getHeight() - minThumbViewHeight), is(lessThanOrEqualTo(1)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            // Check that thumb track maintains minimum height
+            int minThumbViewHeight = (int) activity.getResources()
+                    .getDimension(R.dimen.car_ui_scrollbar_min_thumb_height);
+            View thumbView = activity.requireViewById(getId("car_ui_scrollbar_thumb"));
+            // Conversion from DP to pixel sometimes makes these two value differ by 1
+            assertThat(abs(thumbView.getHeight() - minThumbViewHeight), is(lessThanOrEqualTo(1)));
+        });
     }
 
     @Test
     public void testRecyclerView_canScrollVertically() {
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            // Can't use OrientationHelper here, because it returns 0 when calling getTotalSpace
+            // methods until LayoutManager's onLayoutComplete is called. In this case waiting until
+            // the first item of the list is displayed guarantees that OrientationHelper is
+            // initialized properly.
+            int totalSpace = carUiRecyclerView.getHeight()
+                    - carUiRecyclerView.getPaddingTop()
+                    - carUiRecyclerView.getPaddingBottom();
+            PerfectFitTestAdapter adapter = new PerfectFitTestAdapter(1, totalSpace);
+            carUiRecyclerView.setAdapter(adapter);
 
-        // Can't use OrientationHelper here, because it returns 0 when calling getTotalSpace methods
-        // until LayoutManager's onLayoutComplete is called. In this case waiting until the first
-        // item of the list is displayed guarantees that OrientationHelper is initialized properly.
-        int totalSpace = carUiRecyclerView.getHeight()
-                - carUiRecyclerView.getPaddingTop()
-                - carUiRecyclerView.getPaddingBottom();
-        PerfectFitTestAdapter adapter = new PerfectFitTestAdapter(1, totalSpace);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
-        onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
+        onView(withText(PerfectFitTestAdapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertEquals(totalSpace, carUiRecyclerView.getTotalSpace());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(R.id.list);
+            int totalSpace = carUiRecyclerView.getHeight()
+                    - carUiRecyclerView.getPaddingTop()
+                    - carUiRecyclerView.getPaddingBottom();
 
-        // Both scroll up and down are disabled
-        assertFalse(carUiRecyclerView.getView().canScrollVertically(1));
-        assertFalse(carUiRecyclerView.getView().canScrollVertically(-1));
+            assertEquals(totalSpace, carUiRecyclerView.getTotalSpace());
+
+            // Both scroll up and down are disabled
+            assertFalse(carUiRecyclerView.getView().canScrollVertically(1));
+            assertFalse(carUiRecyclerView.getView().canScrollVertically(-1));
+        });
     }
 
     @Test
     public void testSetPaddingToRecyclerViewContainerWithScrollbar() {
-        if (isScrollbarEnabledNotAsExpected(true)) return;
-
         TestAdapter adapter = new TestAdapter(50);
+        int listId = View.generateViewId();
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        mActivity.runOnUiThread(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
         onView(withId(getId("car_ui_scroll_bar"))).check(matches(isDisplayed()));
 
-        assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
-        assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(0)));
-        assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(0)));
-        // available space in recyclerview after applying paddings.
-        int screenHeight = carUiRecyclerView.getTotalSpace();
-        assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
+            assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(0)));
+            assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(0)));
+            // available space in recyclerview after applying paddings.
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+            assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
 
-        View scrollbar = mActivity.findViewById(getId("car_ui_scroll_bar"));
-        assertThat(scrollbar.getPaddingTop(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingLeft(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingRight(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingBottom(), is(equalTo(0)));
+            View scrollbar = activity.findViewById(getId("car_ui_scroll_bar"));
+            assertThat(scrollbar.getPaddingTop(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingLeft(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingRight(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingBottom(), is(equalTo(0)));
 
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setPadding(20, 150, 30, 170));
+            carUiRecyclerView.setPadding(20, 150, 30, 170);
+        });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(20)));
-        assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(30)));
-        assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
-        // available space in recyclerview after applying paddings.
-        screenHeight = carUiRecyclerView.getTotalSpace();
-        assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(20)));
+            assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(30)));
+            assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
 
-        assertThat(scrollbar.getPaddingTop(), is(equalTo(150)));
-        assertThat(scrollbar.getPaddingLeft(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingRight(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingBottom(), is(equalTo(170)));
+            // available space in recyclerview after applying paddings.
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+            assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+
+            View scrollbar = activity.findViewById(getId("car_ui_scroll_bar"));
+            assertThat(scrollbar.getPaddingTop(), is(equalTo(150)));
+            assertThat(scrollbar.getPaddingLeft(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingRight(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingBottom(), is(equalTo(170)));
+        });
     }
 
     @Test
     public void testSetPaddingToRecyclerViewContainerWithoutScrollbar() {
-        if (isScrollbarEnabledNotAsExpected(false)) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
         TestAdapter adapter = new TestAdapter(5);
+        int listId = View.generateViewId();
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        mActivity.runOnUiThread(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            // Disable scrollbar
+            doReturn(false).when(testableResources)
+                    .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
         onView(withId(getId("car_ui_scroll_bar"))).check(doesNotExist());
 
-        assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
-        assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(0)));
-        assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(0)));
-        // available space in recyclerview after applying paddings.
-        int screenHeight = carUiRecyclerView.getTotalSpace();
-        assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
+            assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(0)));
+            assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(0)));
+            // available space in recyclerview after applying paddings.
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+            assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
 
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setPadding(20, 150, 30, 170));
+            carUiRecyclerView.setPadding(20, 150, 30, 170);
+        });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(20)));
-        assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(30)));
-        assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
-        // available space in recyclerview after applying paddings.
-        screenHeight = carUiRecyclerView.getTotalSpace();
-        assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertThat(carUiRecyclerView.getView().getPaddingLeft(), is(equalTo(20)));
+            assertThat(carUiRecyclerView.getView().getPaddingRight(), is(equalTo(30)));
+            assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
+            // available space in recyclerview after applying paddings.
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+            assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+        });
     }
 
     @Test
     public void testSetPaddingRelativeToRecyclerViewContainerWithScrollbar() {
-        if (isScrollbarEnabledNotAsExpected(true)) return;
-
         TestAdapter adapter = new TestAdapter(50);
+        int listId = View.generateViewId();
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        mActivity.runOnUiThread(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
         onView(withId(getId("car_ui_scroll_bar"))).check(matches(isDisplayed()));
 
-        assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
-        assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(0)));
-        assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(0)));
-        // available space in recyclerview after applying paddings.
-        int screenHeight = carUiRecyclerView.getTotalSpace();
-        assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
+            assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(0)));
+            assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(0)));
+            // available space in recyclerview after applying paddings.
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+            assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
 
-        View scrollbar = mActivity.findViewById(getId("car_ui_scroll_bar"));
-        assertThat(scrollbar.getPaddingTop(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingStart(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingEnd(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingBottom(), is(equalTo(0)));
+            View scrollbar = activity.findViewById(getId("car_ui_scroll_bar"));
+            assertThat(scrollbar.getPaddingTop(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingStart(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingEnd(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingBottom(), is(equalTo(0)));
 
-        mActivity.runOnUiThread(() -> {
             carUiRecyclerView.setPaddingRelative(20, 150, 30, 170);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(20)));
-        assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(30)));
-        assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
-        // available space in recyclerview after applying paddings.
-        screenHeight = carUiRecyclerView.getTotalSpace();
-        assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(20)));
+            assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(30)));
+            assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
+            // available space in recyclerview after applying paddings.
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+            assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
 
-        assertThat(scrollbar.getPaddingTop(), is(equalTo(150)));
-        assertThat(scrollbar.getPaddingStart(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingEnd(), is(equalTo(0)));
-        assertThat(scrollbar.getPaddingBottom(), is(equalTo(170)));
+            View scrollbar = activity.findViewById(getId("car_ui_scroll_bar"));
+            assertThat(scrollbar.getPaddingTop(), is(equalTo(150)));
+            assertThat(scrollbar.getPaddingStart(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingEnd(), is(equalTo(0)));
+            assertThat(scrollbar.getPaddingBottom(), is(equalTo(170)));
+        });
     }
 
     @Test
     public void testSetPaddingRelativeToRecyclerViewContainerWithoutScrollbar() {
-        if (isScrollbarEnabledNotAsExpected(false)) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
         TestAdapter adapter = new TestAdapter(5);
+        int listId = View.generateViewId();
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        mActivity.runOnUiThread(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            // Disable scrollbar
+            doReturn(false).when(testableResources)
+                    .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
         onView(withId(getId("car_ui_scroll_bar"))).check(doesNotExist());
 
-        assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
-        assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(0)));
-        assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(0)));
-        // available space in recyclerview after applying paddings.
-        int screenHeight = carUiRecyclerView.getTotalSpace();
-        assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(0)));
+            assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(0)));
+            assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(0)));
+            // available space in recyclerview after applying paddings.
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+            assertThat(carUiRecyclerView.getHeight(), is(equalTo(screenHeight)));
 
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setPaddingRelative(20, 150, 30, 170));
+            carUiRecyclerView.setPaddingRelative(20, 150, 30, 170);
+        });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(20)));
-        assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(30)));
-        assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
-        // available space in recyclerview after applying paddings.
-        screenHeight = carUiRecyclerView.getTotalSpace();
-        assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertThat(carUiRecyclerView.getView().getPaddingStart(), is(equalTo(20)));
+            assertThat(carUiRecyclerView.getView().getPaddingEnd(), is(equalTo(30)));
+            assertThat(carUiRecyclerView.getStartAfterPadding(), is(equalTo(150)));
+            // available space in recyclerview after applying paddings.
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+            assertThat(carUiRecyclerView.getHeight() - 150 - 170, is(equalTo(screenHeight)));
+        });
     }
 
     @Test
     public void testSetAlphaToRecyclerView() {
-        if (isScrollbarEnabledNotAsExpected(false)) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-
-        assertThat(carUiRecyclerView.getView().getAlpha(), is(equalTo(1.0f)));
-
-        carUiRecyclerView.setAlpha(0.5f);
-
-        assertThat(carUiRecyclerView.getView().getAlpha(), is(equalTo(0.5f)));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            assertThat(carUiRecyclerView.getView().getAlpha(), is(equalTo(1.0f)));
+            carUiRecyclerView.setAlpha(0.5f);
+            assertThat(carUiRecyclerView.getView().getAlpha(), is(equalTo(0.5f)));
+        });
     }
 
     @Test
     public void testScrollbarVisibility_tooSmallHeight() {
-
-        if (isScrollbarEnabledNotAsExpected(true)) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
         // Set to anything less than 2 * (minTouchSize + margin)
         // minTouchSize = R.dimen.car_ui_touch_target_size
         // margin is button up top margin or button down bottom margin
         int recyclerviewHeight = 1;
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, recyclerviewHeight);
             container.addView(carUiRecyclerView.getView(), lp);
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(new TestAdapter(100));
         });
 
         onView(withId(getId("car_ui_scroll_bar"))).check(matches(not(isDisplayed())));
 
-        assertEquals(recyclerviewHeight, carUiRecyclerView.getTotalSpace());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertEquals(recyclerviewHeight, carUiRecyclerView.getTotalSpace());
+        });
     }
 
     @Test
     public void testScrollbarVisibility_justEnoughToShowOnlyButtons() {
-        if (isScrollbarEnabledNotAsExpected(true)) return;
+        Context context = getInstrumentation().getTargetContext();
+        int listId = View.generateViewId();
 
         // R.dimen.car_ui_touch_target_size
-        float minTouchSize = mTestableResources.getDimension(R.dimen.car_ui_touch_target_size);
+        float minTouchSize = context.getResources().getDimension(R.dimen.car_ui_touch_target_size);
         // This value is hardcoded to 15dp in the layout.
-        int margin = (int) dpToPixel(mTestableContext, 15)
-                + (int) mTestableResources.getDimension(R.dimen.car_ui_scrollbar_separator_margin);
+        int margin = (int) dpToPixel(context, 15)
+                + (int) context.getResources().getDimension(
+                R.dimen.car_ui_scrollbar_separator_margin);
         // Set to 2 * (minTouchSize + margin)
         int recyclerviewHeight = 2 * (int) (minTouchSize + margin);
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        container.post(() -> {
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, recyclerviewHeight);
             container.addView(carUiRecyclerView.getView(), lp);
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(new TestAdapter(100));
         });
 
@@ -1351,22 +1649,27 @@
         onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(isDisplayed()));
         onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(isDisplayed()));
 
-        int screenHeight = carUiRecyclerView.getTotalSpace();
-
-        assertEquals(recyclerviewHeight, screenHeight);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            int screenHeight = carUiRecyclerView.getTotalSpace();
+            assertEquals(recyclerviewHeight, screenHeight);
+        });
     }
 
     @Test
     public void testScrollbarVisibility_enoughToShowEverything() {
-        if (isScrollbarEnabledNotAsExpected(true)) return;
+        Context context = getInstrumentation().getTargetContext();
+        int listId = View.generateViewId();
 
-        int minTouchSize = (int) mTestableResources.getDimension(R.dimen.car_ui_touch_target_size);
-        int mScrollbarThumbMinHeight = (int) mTestableResources
+        int minTouchSize = (int) context.getResources().getDimension(
+                R.dimen.car_ui_touch_target_size);
+        int mScrollbarThumbMinHeight = (int) context.getResources()
                 .getDimension(R.dimen.car_ui_scrollbar_min_thumb_height);
         // This value is hardcoded to 15dp in the layout.
-        int margin = (int) dpToPixel(mTestableContext, 15)
-                + (int) mTestableResources.getDimension(R.dimen.car_ui_scrollbar_separator_margin);
-        int trackMargin = 2 * (int) mTestableResources
+        int margin = (int) dpToPixel(context, 15)
+                + (int) context.getResources().getDimension(
+                R.dimen.car_ui_scrollbar_separator_margin);
+        int trackMargin = 2 * (int) context.getResources()
                 .getDimension(R.dimen.car_ui_scrollbar_separator_margin);
         // Set to anything greater or equal to
         // 2 * minTouchSize + max(minTouchSize, mScrollbarThumbMinHeight) + 2 * margin
@@ -1375,11 +1678,12 @@
                         + max(minTouchSize, mScrollbarThumbMinHeight)
                         + 2 * margin + trackMargin;
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        container.post(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, recyclerviewHeight);
             container.addView(carUiRecyclerView.getView(), lp);
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(new TestAdapter(100));
         });
 
@@ -1389,18 +1693,32 @@
         onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(isDisplayed()));
         onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(isDisplayed()));
 
-        assertEquals(recyclerviewHeight, carUiRecyclerView.getTotalSpace());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertEquals(recyclerviewHeight, carUiRecyclerView.getTotalSpace());
+        });
     }
 
     @Test
     public void testDefaultSize_noScrollbar() {
-        if (isScrollbarEnabledNotAsExpected(false)) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
-        int listId = View.generateViewId();
         TestAdapter adapter = new TestAdapter(50);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            // Disable scrollbar
+            doReturn(false).when(testableResources)
+                    .getBoolean(R.bool.car_ui_scrollbar_enable);
+
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
@@ -1413,24 +1731,26 @@
 
     @Test
     public void testLargeSize_withScrollbar() {
-        if (isScrollbarEnabledNotAsExpected(true)) return;
-
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
-                anyInt())).thenReturn(2); // Large size
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        int listId = View.generateViewId();
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(50);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+                    anyInt())).thenReturn(2); // Large size
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
@@ -1445,24 +1765,27 @@
 
     @Test
     public void testMediumSize_withScrollbar() {
-        if (isScrollbarEnabledNotAsExpected(true)) return;
 
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
-                anyInt())).thenReturn(1); // Medium size
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        int listId = View.generateViewId();
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(50);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+                    anyInt())).thenReturn(1); // Medium size
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
@@ -1476,24 +1799,26 @@
 
     @Test
     public void testSmallSize_oneItem() {
-        if (isScrollbarEnabledNotAsExpected(true)) return;
-
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
-                anyInt())).thenReturn(0); // Small size
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        int listId = View.generateViewId();
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(1);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+                    anyInt())).thenReturn(0); // Small size
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
@@ -1506,24 +1831,26 @@
 
     @Test
     public void testSmallSize_multipleItem() {
-        doReturn(true).when(mTestableResources).getBoolean(R.bool.car_ui_scrollbar_enable);
-
-        TypedArray typedArray = spy(mActivity.getBaseContext().obtainStyledAttributes(
-                null, R.styleable.CarUiRecyclerView));
-
-        doReturn(typedArray).when(mTestableContext).obtainStyledAttributes(
-                any(),
-                eq(R.styleable.CarUiRecyclerView),
-                anyInt(),
-                anyInt());
-        when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
-                anyInt())).thenReturn(0); // Small size
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        int listId = View.generateViewId();
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(50);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            TypedArray typedArray = spy(activity.getBaseContext().obtainStyledAttributes(
+                    null, R.styleable.CarUiRecyclerView));
+
+            doReturn(typedArray).when(testableContext).obtainStyledAttributes(
+                    any(),
+                    eq(R.styleable.CarUiRecyclerView),
+                    anyInt(),
+                    anyInt());
+            when(typedArray.getInt(eq(R.styleable.CarUiRecyclerView_carUiSize),
+                    anyInt())).thenReturn(0); // Small size
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
             carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
@@ -1537,75 +1864,92 @@
 
     @Test
     public void testSameSizeItems_estimateNextPositionDiffForScrollDistance() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
         int itemCount = 100;
         TestAdapter adapter = new TestAdapter(itemCount);
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        // TODO:
-        LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
-        OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            int firstViewHeight = carUiRecyclerView.getRecyclerViewChildAt(0).getHeight();
+            int itemsToScroll = 10;
+            OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+                    carUiRecyclerView.getLayoutManager());
+            CarUiSnapHelper snapHelper = new CarUiSnapHelper(activity);
+            // Get an estimate of how many items CarUiSnapHelper says we need to scroll. The scroll
+            // distance is set to 10 * height of the first item. Since all items have the items have
+            // the same height, we're expecting to get exactly 10 back from CarUiSnapHelper.
+            int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(
+                    orientationHelper, itemsToScroll * firstViewHeight);
 
-        int firstViewHeight = layoutManager.getChildAt(0).getHeight();
-        int itemsToScroll = 10;
-        CarUiSnapHelper snapHelper = new CarUiSnapHelper(mActivity);
-        // Get an estimate of how many items CarUiSnaphelpwer says we need to scroll. The scroll
-        // distance is set to 10 * height of the first item. Since all items have the items have
-        // the same height, we're expecting to get exactly 10 back from CarUiSnapHelper.
-        int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(orientationHelper,
-                itemsToScroll * firstViewHeight);
-
-        assertEquals(estimate, itemsToScroll);
+            assertEquals(estimate, itemsToScroll);
+        });
     }
 
     @Test
     public void testSameSizeItems_estimateNextPositionDiffForScrollDistance_zeroDistance() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
         int itemCount = 100;
         TestAdapter adapter = new TestAdapter(itemCount);
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
-        OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+                    carUiRecyclerView.getLayoutManager());
+            int firstViewHeight = carUiRecyclerView.getRecyclerViewChildAt(0).getHeight();
+            // the scroll distance has to be less than half of the size of the first view so that
+            // recyclerview doesn't snap to the next view
+            int distantToScroll = (firstViewHeight / 2) - 1;
+            CarUiSnapHelper snapHelper = new CarUiSnapHelper(activity);
+            int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(
+                    orientationHelper, distantToScroll);
 
-        // TODO:
-        int firstViewHeight = layoutManager.getChildAt(0).getHeight();
-        // the scroll distance has to be less than half of the size of the first view so that
-        // recyclerview doesn't snap to the next view
-        int distantToScroll = (firstViewHeight / 2) - 1;
-        CarUiSnapHelper snapHelper = new CarUiSnapHelper(mActivity);
-        int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(orientationHelper,
-                distantToScroll);
+            assertEquals(estimate, 0);
+        });
 
-        assertEquals(estimate, 0);
     }
 
     @Test
     public void testSameSizeItems_estimateNextPositionDiffForScrollDistance_zeroHeight() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
@@ -1614,241 +1958,316 @@
         heightOverrides.put(0, TestAdapter.ItemHeight.ZERO);
         TestAdapter adapter = new TestAdapter(itemCount, heightOverrides);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withContentDescription("ZERO")).check(matches(isEnabled()));
 
-        LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
-        OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+                    carUiRecyclerView.getLayoutManager());
+            // 10 is an arbitrary number
+            int distantToScroll = 10;
+            CarUiSnapHelper snapHelper = new CarUiSnapHelper(activity);
+            int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(
+                    orientationHelper, distantToScroll);
 
-        // 10 is an arbitrary number
-        int distantToScroll = 10;
-        CarUiSnapHelper snapHelper = new CarUiSnapHelper(mActivity);
-        int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(orientationHelper,
-                distantToScroll);
-
-        assertEquals(estimate, 0);
+            assertEquals(estimate, 0);
+        });
     }
 
     @Test
     public void testSameSizeItems_estimateNextPositionDiffForScrollDistance_zeroItems() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
         int itemCount = 0;
         TestAdapter adapter = new TestAdapter(itemCount);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
 
-        LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
-        OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
-        CarUiSnapHelper snapHelper = new CarUiSnapHelper(mActivity);
-        int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(orientationHelper, 50);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+                    carUiRecyclerView.getLayoutManager());
+            CarUiSnapHelper snapHelper = new CarUiSnapHelper(activity);
+            int estimate = snapHelper.estimateNextPositionDiffForScrollDistance(
+                    orientationHelper, 50);
 
-        assertEquals(estimate, 50);
+            assertEquals(estimate, 50);
+        });
     }
 
     @Test
     public void testEmptyList_calculateScrollDistanceClampToScreenSize() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         int itemCount = 0;
         TestAdapter adapter = new TestAdapter(itemCount);
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
 
-        LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
+            LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
+            carUiRecyclerView.setOnFlingListener(null);
+            linearSnapHelper.attachToRecyclerView(
+                    ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
+            // 200 is just an arbitrary number. the intent is to make sure the return value is
+            // smaller
+            // than the layoutmanager height.
+            int[] baseOutDist = linearSnapHelper.calculateScrollDistance(200, -200);
 
-        LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
-        carUiRecyclerView.setOnFlingListener(null);
-        linearSnapHelper.attachToRecyclerView(
-                ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
-        // 200 is just an arbitrary number. the intent is to make sure the return value is smaller
-        // than the layoutmanager height.
-        int[] baseOutDist = linearSnapHelper.calculateScrollDistance(200, -200);
+            CarUiSnapHelper carUiSnapHelper = new CarUiSnapHelper(activity);
+            carUiRecyclerView.setOnFlingListener(null);
+            carUiSnapHelper.attachToRecyclerView(
+                    ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
+            int[] outDist = carUiSnapHelper.calculateScrollDistance(200, -200);
 
-        CarUiSnapHelper carUiSnapHelper = new CarUiSnapHelper(mTestableContext);
-        carUiRecyclerView.setOnFlingListener(null);
-        carUiSnapHelper.attachToRecyclerView(
-                ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
-        int[] outDist = carUiSnapHelper.calculateScrollDistance(200, -200);
-
-        assertEquals(outDist[0], baseOutDist[0]);
-        assertEquals(outDist[1], baseOutDist[1]);
+            assertEquals(outDist[0], baseOutDist[0]);
+            assertEquals(outDist[1], baseOutDist[1]);
+        });
     }
 
     @Test
     public void testCalculateScrollDistanceClampToScreenSize() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        mActivity.runOnUiThread(
-                () -> mActivity.setContentView(R.layout.car_ui_recycler_view_test_activity));
+        mActivityRule.getScenario().onActivity(activity -> activity.setContentView(
+                R.layout.car_ui_recycler_view_test_activity));
 
         onView(withId(R.id.list)).check(matches(isDisplayed()));
 
         int itemCount = 100;
         TestAdapter adapter = new TestAdapter(itemCount);
 
-        CarUiRecyclerView carUiRecyclerView = mActivity.requireViewById(R.id.list);
-        mActivity.runOnUiThread(() -> carUiRecyclerView.setAdapter(adapter));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            carUiRecyclerView.setAdapter(adapter);
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
+        });
+
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
-        OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(layoutManager);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(R.id.list);
+            LayoutManager layoutManager = carUiRecyclerView.getLayoutManager();
+            OrientationHelper orientationHelper = OrientationHelper.createVerticalHelper(
+                    layoutManager);
 
-        LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
-        carUiRecyclerView.setOnFlingListener(null);
-        linearSnapHelper.attachToRecyclerView(
-                ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
-        // 8000 is just an arbitrary number. the intent is to make sure the return value is bigger
-        // than the layoutmanager height.
-        int[] baseOutDist = linearSnapHelper.calculateScrollDistance(8000, -8000);
+            LinearSnapHelper linearSnapHelper = new LinearSnapHelper();
+            carUiRecyclerView.setOnFlingListener(null);
+            linearSnapHelper.attachToRecyclerView(
+                    ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
+            // 8000 is just an arbitrary number. the intent is to make sure the return value is
+            // bigger
+            // than the layoutmanager height.
+            int[] baseOutDist = linearSnapHelper.calculateScrollDistance(8000, -8000);
 
-        CarUiSnapHelper carUiSnapHelper = new CarUiSnapHelper(mTestableContext);
-        carUiRecyclerView.setOnFlingListener(null);
-        carUiSnapHelper.attachToRecyclerView(
-                ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
-        int[] outDist = carUiSnapHelper.calculateScrollDistance(8000, -8000);
+            CarUiSnapHelper carUiSnapHelper = new CarUiSnapHelper(activity);
+            carUiRecyclerView.setOnFlingListener(null);
+            carUiSnapHelper.attachToRecyclerView(
+                    ((CarUiRecyclerViewImpl) carUiRecyclerView).getRecyclerView());
+            int[] outDist = carUiSnapHelper.calculateScrollDistance(8000, -8000);
 
-        int lastChildPosition = carUiSnapHelper.isAtEnd(layoutManager)
-                ? 0 : layoutManager.getChildCount() - 1;
-        View lastChild = Objects.requireNonNull(layoutManager.getChildAt(lastChildPosition));
-        float percentageVisible = CarUiSnapHelper
-                .getPercentageVisible(lastChild, orientationHelper);
+            int lastChildPosition = carUiSnapHelper.isAtEnd(carUiRecyclerView.getLayoutManager())
+                    ? 0 : carUiRecyclerView.getRecyclerViewChildCount() - 1;
+            View lastChild = Objects.requireNonNull(
+                    carUiRecyclerView.getRecyclerViewChildAt(lastChildPosition));
+            float percentageVisible = CarUiSnapHelper
+                    .getPercentageVisible(lastChild, orientationHelper);
 
-        int maxDistance = layoutManager.getHeight();
-        if (percentageVisible > 0.f) {
-            // The max and min distance is the total height of the RecyclerView minus the height of
-            // the last child. This ensures that each scroll will never scroll more than a single
-            // page on the RecyclerView. That is, the max scroll will make the last child the
-            // first child and vice versa when scrolling the opposite way.
-            maxDistance -= layoutManager.getDecoratedMeasuredHeight(lastChild);
-        }
-        int minDistance = -maxDistance;
+            int maxDistance = carUiRecyclerView.getTotalSpace();
+            if (percentageVisible > 0.f) {
+                // The max and min distance is the total height of the RecyclerView minus the
+                // height of
+                // the last child. This ensures that each scroll will never scroll more than a
+                // single
+                // page on the RecyclerView. That is, the max scroll will make the last child the
+                // first child and vice versa when scrolling the opposite way.
+                maxDistance -= carUiRecyclerView.getLayoutManager()
+                        .getDecoratedMeasuredHeight(lastChild);
+            }
+            int minDistance = -maxDistance;
 
-        assertEquals(clamp(baseOutDist[0], minDistance, maxDistance), outDist[0]);
-        assertEquals(clamp(baseOutDist[1], minDistance, maxDistance), outDist[1]);
+            assertEquals(clamp(baseOutDist[0], minDistance, maxDistance), outDist[0]);
+            assertEquals(clamp(baseOutDist[1], minDistance, maxDistance), outDist[1]);
+        });
     }
 
     @Test
     public void testContinuousScrollListenerConstructor_negativeInitialDelay() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        if (isScrollbarEnabledNotAsExpected(true)) return;
-        doReturn(-1).when(mTestableResources)
-                .getInteger(R.integer.car_ui_scrollbar_longpress_initial_delay);
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            doReturn(-1).when(testableResources)
+                    .getInteger(R.integer.car_ui_scrollbar_longpress_initial_delay);
 
-        IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
-                () -> CarUiRecyclerView.create(mTestableContext));
-        assertEquals("negative intervals are not allowed", ex.getMessage());
+            IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
+                    () -> CarUiRecyclerView.create(testableContext));
+            assertEquals("negative intervals are not allowed", ex.getMessage());
+        });
     }
 
     @Test
     public void testContinuousScrollListenerConstructor_negativeRepeatInterval() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        if (isScrollbarEnabledNotAsExpected(true)) return;
-        doReturn(-1).when(mTestableResources)
-                .getInteger(R.integer.car_ui_scrollbar_longpress_repeat_interval);
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            doReturn(-1).when(testableResources)
+                    .getInteger(R.integer.car_ui_scrollbar_longpress_repeat_interval);
 
-        IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
-                () -> CarUiRecyclerView.create(mTestableContext));
-        assertEquals("negative intervals are not allowed", ex.getMessage());
+            IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
+                    () -> CarUiRecyclerView.create(testableContext));
+            assertEquals("negative intervals are not allowed", ex.getMessage());
+        });
     }
 
     @Test
     public void testUnknownClass_createScrollBarFromConfig() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        doReturn("random.class").when(mTestableResources)
-                .getString(R.string.car_ui_scrollbar_component);
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            doReturn("random.class").when(testableResources)
+                    .getString(R.string.car_ui_scrollbar_component);
 
-        RuntimeException ex = assertThrows(RuntimeException.class,
-                () -> CarUiRecyclerView.create(mTestableContext));
-        assertEquals("Error loading scroll bar component: random.class", ex.getMessage());
+            RuntimeException ex = assertThrows(RuntimeException.class,
+                    () -> CarUiRecyclerView.create(testableContext));
+            assertEquals("Error loading scroll bar component: random.class", ex.getMessage());
+        });
     }
 
     @Test
     public void testWrongType_createScrollBarFromConfig() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        // Basically return any class that exists but doesn't extend ScrollBar
-        doReturn(CarUiRecyclerView.class.getName()).when(mTestableResources)
-                .getString(R.string.car_ui_scrollbar_component);
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            // Basically return any class that exists but doesn't extend ScrollBar
+            doReturn(CarUiRecyclerView.class.getName()).when(testableResources)
+                    .getString(R.string.car_ui_scrollbar_component);
 
-        RuntimeException ex = assertThrows(RuntimeException.class,
-                () -> CarUiRecyclerView.create(mTestableContext));
-        assertEquals("Error creating scroll bar component: "
-                + CarUiRecyclerView.class.getName(), ex.getMessage());
+            RuntimeException ex = assertThrows(RuntimeException.class,
+                    () -> CarUiRecyclerView.create(testableContext));
+            assertEquals("Error creating scroll bar component: "
+                    + CarUiRecyclerView.class.getName(), ex.getMessage());
+        });
     }
 
     @Test
     public void testSetLinearLayoutStyle_setsLayoutManager() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        CarUiLayoutStyle layoutStyle = new CarUiLinearLayoutStyle();
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        carUiRecyclerView.setLayoutStyle(layoutStyle);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(50);
+        int listId = View.generateViewId();
+        CarUiLayoutStyle layoutStyle = new CarUiLinearLayoutStyle();
 
-        container.post(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView =
+                    (CarUiRecyclerViewImpl) CarUiRecyclerView.create(activity);
+            carUiRecyclerView.setLayoutStyle(layoutStyle);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertTrue(carUiRecyclerView.getLayoutManager() instanceof LinearLayoutManager);
-        assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
-                layoutStyle.getOrientation());
-        assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager())
-                .getReverseLayout(), layoutStyle.getReverseLayout());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+            assertTrue(carUiRecyclerView.getLayoutManager() instanceof LinearLayoutManager);
+            assertEquals(
+                    ((LinearLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
+                    layoutStyle.getOrientation());
+            assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager())
+                    .getReverseLayout(), layoutStyle.getReverseLayout());
+        });
     }
 
     @Test
     public void testSetGridLayoutStyle_setsLayoutManager() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        CarUiLayoutStyle layoutStyle = new CarUiGridLayoutStyle();
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        carUiRecyclerView.setLayoutStyle(layoutStyle);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(50);
+        CarUiLayoutStyle layoutStyle = new CarUiGridLayoutStyle();
+        int listId = View.generateViewId();
 
-        container.post(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView =
+                    (CarUiRecyclerViewImpl) CarUiRecyclerView.create(activity);
+            carUiRecyclerView.setLayoutStyle(layoutStyle);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
-        assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
-                layoutStyle.getOrientation());
-        assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getReverseLayout(),
-                layoutStyle.getReverseLayout());
-        assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanCount(),
-                layoutStyle.getSpanCount());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+            assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
+            assertEquals(
+                    ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
+                    layoutStyle.getOrientation());
+            assertEquals(
+                    ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getReverseLayout(),
+                    layoutStyle.getReverseLayout());
+            assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanCount(),
+                    layoutStyle.getSpanCount());
+        });
     }
 
     @Test
@@ -1861,7 +2280,6 @@
 
     @Test
     public void testSetGridLayoutStyle_setsLayoutManagerSpanSizeLookup() {
-
         CarUiGridLayoutStyle layoutStyle = new CarUiGridLayoutStyle();
         // has to bigger than span sizes for all the rows
         layoutStyle.setSpanCount(20);
@@ -1879,80 +2297,105 @@
             }
         };
         layoutStyle.setSpanSizeLookup(spanSizeLookup);
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        carUiRecyclerView.setLayoutStyle(layoutStyle);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(50);
+        int listId = View.generateViewId();
 
-        container.post(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            carUiRecyclerView.setLayoutStyle(layoutStyle);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
-        assertEquals(((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
-                .getSpanSize(0), spanSizeLookup.getSpanSize(0));
-        assertEquals(((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
-                .getSpanSize(1), spanSizeLookup.getSpanSize(1));
-        assertEquals(((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
-                .getSpanSize(2), spanSizeLookup.getSpanSize(2));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            assertTrue(carUiRecyclerView.getLayoutStyle() instanceof CarUiGridLayoutStyle);
+            assertEquals(
+                    ((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
+                            .getSpanSize(0), spanSizeLookup.getSpanSize(0));
+            assertEquals(
+                    ((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
+                            .getSpanSize(1), spanSizeLookup.getSpanSize(1));
+            assertEquals(
+                    ((CarUiGridLayoutStyle) carUiRecyclerView.getLayoutStyle()).getSpanSizeLookup()
+                            .getSpanSize(2), spanSizeLookup.getSpanSize(2));
+        });
     }
 
     @Test
     public void testCarUiGridLayoutStyle_LayoutManagerFrom() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        GridLayoutManager layoutManager =
-                new GridLayoutManager(mTestableContext, 20, RecyclerView.VERTICAL, true);
-        layoutManager.setSpanSizeLookup(new SpanSizeLookup() {
-            @Override
-            public int getSpanSize(int position) {
-                switch (position) {
-                    case 0:
-                        return 10;
-                    case 1:
-                        return 20;
-                    default:
-                        return 15;
-                }
-            }
-        });
-        CarUiGridLayoutStyle layoutStyle = CarUiGridLayoutStyle.from(layoutManager);
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        carUiRecyclerView.setLayoutStyle(layoutStyle);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(50);
+        int listId = View.generateViewId();
 
-        container.post(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            GridLayoutManager layoutManager =
+                    new GridLayoutManager(activity, 20, RecyclerView.VERTICAL, true);
+            layoutManager.setSpanSizeLookup(new SpanSizeLookup() {
+                @Override
+                public int getSpanSize(int position) {
+                    switch (position) {
+                        case 0:
+                            return 10;
+                        case 1:
+                            return 20;
+                        default:
+                            return 15;
+                    }
+                }
+            });
+            CarUiGridLayoutStyle layoutStyle = CarUiGridLayoutStyle.from(layoutManager);
+            CarUiRecyclerViewImpl carUiRecyclerView =
+                    (CarUiRecyclerViewImpl) CarUiRecyclerView.create(activity);
+            carUiRecyclerView.setLayoutStyle(layoutStyle);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
-        assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
-                layoutManager.getOrientation());
-        assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getReverseLayout(),
-                layoutManager.getReverseLayout());
-        assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanCount(),
-                layoutManager.getSpanCount());
-        assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
-                .getSpanSize(0), layoutManager.getSpanSizeLookup().getSpanSize(0));
-        assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
-                .getSpanSize(1), layoutManager.getSpanSizeLookup().getSpanSize(1));
-        assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
-                .getSpanSize(2), layoutManager.getSpanSizeLookup().getSpanSize(2));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+            assertTrue(carUiRecyclerView.getLayoutManager() instanceof GridLayoutManager);
+            GridLayoutManager layoutManager =
+                    (GridLayoutManager) carUiRecyclerView.getLayoutManager();
+            assertEquals(
+                    ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
+                    layoutManager.getOrientation());
+            assertEquals(
+                    ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getReverseLayout(),
+                    layoutManager.getReverseLayout());
+            assertEquals(((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanCount(),
+                    layoutManager.getSpanCount());
+            assertEquals(
+                    ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
+                            .getSpanSize(0), layoutManager.getSpanSizeLookup().getSpanSize(0));
+            assertEquals(
+                    ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
+                            .getSpanSize(1), layoutManager.getSpanSizeLookup().getSpanSize(1));
+            assertEquals(
+                    ((GridLayoutManager) carUiRecyclerView.getLayoutManager()).getSpanSizeLookup()
+                            .getSpanSize(2), layoutManager.getSpanSizeLookup().getSpanSize(2));
+        });
     }
 
     @Test
     public void testCarUiGridLayoutStyle_fromLinearLayout_throwsException() {
-        LinearLayoutManager layoutManager = new LinearLayoutManager(mTestableContext);
-        AssertionError ex = assertThrows(AssertionError.class,
-                () -> CarUiGridLayoutStyle.from(layoutManager));
-        assertEquals("GridLayoutManager required.", ex.getMessage());
+        mActivityRule.getScenario().onActivity(activity -> {
+            LinearLayoutManager layoutManager = new LinearLayoutManager(activity);
+            AssertionError ex = assertThrows(AssertionError.class,
+                    () -> CarUiGridLayoutStyle.from(layoutManager));
+            assertEquals("GridLayoutManager required.", ex.getMessage());
+        });
     }
 
     @Test
@@ -1962,36 +2405,49 @@
 
     @Test
     public void testCarUiLinearLayoutStyle_LayoutManagerFrom() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        LinearLayoutManager layoutManager =
-                new LinearLayoutManager(mTestableContext, RecyclerView.VERTICAL, true);
-        CarUiLinearLayoutStyle layoutStyle = CarUiLinearLayoutStyle.from(layoutManager);
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        carUiRecyclerView.setLayoutStyle(layoutStyle);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(50);
+        int listId = View.generateViewId();
 
-        container.post(() -> {
+        mActivityRule.getScenario().onActivity(activity -> {
+            LinearLayoutManager layoutManager =
+                    new LinearLayoutManager(activity, RecyclerView.VERTICAL, true);
+            CarUiLinearLayoutStyle layoutStyle = CarUiLinearLayoutStyle.from(layoutManager);
+            CarUiRecyclerViewImpl carUiRecyclerView =
+                    (CarUiRecyclerViewImpl) CarUiRecyclerView.create(activity);
+            carUiRecyclerView.setLayoutStyle(layoutStyle);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             container.addView(carUiRecyclerView.getView());
+            carUiRecyclerView.setId(listId);
             carUiRecyclerView.setAdapter(adapter);
         });
 
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        assertTrue(carUiRecyclerView.getLayoutManager() instanceof LinearLayoutManager);
-        assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
-                layoutManager.getOrientation());
-        assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager())
-                .getReverseLayout(), layoutManager.getReverseLayout());
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+            LinearLayoutManager layoutManager =
+                    (LinearLayoutManager) carUiRecyclerView.getLayoutManager();
+            assertTrue(carUiRecyclerView.getLayoutManager() instanceof LinearLayoutManager);
+            assertEquals(
+                    ((LinearLayoutManager) carUiRecyclerView.getLayoutManager()).getOrientation(),
+                    layoutManager.getOrientation());
+            assertEquals(((LinearLayoutManager) carUiRecyclerView.getLayoutManager())
+                    .getReverseLayout(), layoutManager.getReverseLayout());
+        });
     }
 
     @Test
     public void testCarUiLinearLayoutStyle_fromGridLayout_throwsException() {
-        NotLinearLayoutManager layoutManager = new NotLinearLayoutManager(mTestableContext);
-        AssertionError ex = assertThrows(AssertionError.class,
-                () -> CarUiLinearLayoutStyle.from(layoutManager));
-        assertEquals("LinearLayoutManager required.", ex.getMessage());
+        mActivityRule.getScenario().onActivity(activity -> {
+            NotLinearLayoutManager layoutManager = new NotLinearLayoutManager(activity);
+            AssertionError ex = assertThrows(AssertionError.class,
+                    () -> CarUiLinearLayoutStyle.from(layoutManager));
+            assertEquals("LinearLayoutManager required.", ex.getMessage());
+        });
     }
 
     @Test
@@ -2001,186 +2457,252 @@
 
     @Test
     public void testOnContinuousScrollListener_cancelCallback() {
-        doReturn(0).when(mTestableResources)
-                .getInteger(R.integer.car_ui_scrollbar_longpress_initial_delay);
-        View view = mock(View.class);
-        OnClickListener clickListener = mock(OnClickListener.class);
-        OnContinuousScrollListener listener = new OnContinuousScrollListener(
-                mTestableContext, clickListener);
-        MotionEvent motionEvent = mock(MotionEvent.class);
-        when(motionEvent.getAction()).thenReturn(MotionEvent.ACTION_DOWN);
-        listener.onTouch(view, motionEvent);
-        when(view.isEnabled()).thenReturn(false);
-        when(motionEvent.getAction()).thenReturn(MotionEvent.ACTION_UP);
-        listener.onTouch(view, motionEvent);
-        verify(clickListener, times(1)).onClick(view);
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            doReturn(0).when(testableResources)
+                    .getInteger(R.integer.car_ui_scrollbar_longpress_initial_delay);
+            View view = mock(View.class);
+            OnClickListener clickListener = mock(OnClickListener.class);
+            OnContinuousScrollListener listener = new OnContinuousScrollListener(
+                    testableContext, clickListener);
+            MotionEvent motionEvent = mock(MotionEvent.class);
+            when(motionEvent.getAction()).thenReturn(MotionEvent.ACTION_DOWN);
+            listener.onTouch(view, motionEvent);
+            when(view.isEnabled()).thenReturn(false);
+            when(motionEvent.getAction()).thenReturn(MotionEvent.ACTION_UP);
+            listener.onTouch(view, motionEvent);
+            verify(clickListener, times(1)).onClick(view);
+        });
     }
 
     @Test
     public void testUxRestriction_withLimitedContent_setsMaxItems() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        CarUxRestrictionsUtil uxRestriction = CarUxRestrictionsUtil.getInstance(mTestableContext);
-        CarUxRestrictions restriction = mock(CarUxRestrictions.class);
-        when(restriction.getActiveRestrictions()).thenReturn(UX_RESTRICTIONS_LIMIT_CONTENT);
-        when(restriction.getMaxCumulativeContentItems()).thenReturn(10);
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter.WithItemCap adapter = spy(new TestAdapter.WithItemCap(100));
-        container.post(() -> {
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUxRestrictionsUtil uxRestriction = CarUxRestrictionsUtil.getInstance(activity);
+            CarUxRestrictions restriction = mock(CarUxRestrictions.class);
+            when(restriction.getActiveRestrictions()).thenReturn(UX_RESTRICTIONS_LIMIT_CONTENT);
+            when(restriction.getMaxCumulativeContentItems()).thenReturn(10);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             uxRestriction.setUxRestrictions(restriction);
             carUiRecyclerView.setAdapter(adapter);
             container.addView(carUiRecyclerView.getView());
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
-
         verify(adapter, atLeastOnce()).setMaxItems(10);
     }
 
     @Test
     public void testUxRestriction_withoutLimitedContent_setsUnlimitedMaxItems() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        CarUxRestrictionsUtil uxRestriction = CarUxRestrictionsUtil.getInstance(mTestableContext);
-        CarUxRestrictions restriction = mock(CarUxRestrictions.class);
-        when(restriction.getMaxCumulativeContentItems()).thenReturn(10);
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter.WithItemCap adapter = spy(new TestAdapter.WithItemCap(100));
-        container.post(() -> {
-            uxRestriction.setUxRestrictions(restriction);
-            carUiRecyclerView.setAdapter(adapter);
-            container.addView(carUiRecyclerView.getView());
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUxRestrictionsUtil uxRestriction = CarUxRestrictionsUtil.getInstance(activity);
+            CarUxRestrictions restriction = mock(CarUxRestrictions.class);
+            when(restriction.getMaxCumulativeContentItems()).thenReturn(10);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(activity);
+            ViewGroup container = activity.findViewById(R.id.test_container);
+            container.post(() -> {
+                uxRestriction.setUxRestrictions(restriction);
+                carUiRecyclerView.setAdapter(adapter);
+                container.addView(carUiRecyclerView.getView());
+            });
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
-
         verify(adapter, atLeastOnce()).setMaxItems(UNLIMITED);
     }
 
     @Test
     public void testPageUp_returnsWhen_verticalScrollOffsetIsZero() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        if (isScrollbarEnabledNotAsExpected(true)) return;
-        doReturn(TestScrollBar.class.getName()).when(mTestableResources)
-                .getString(R.string.car_ui_scrollbar_component);
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(100);
         int listId = View.generateViewId();
-        container.post(() -> {
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            doReturn(TestScrollBar.class.getName()).when(testableResources)
+                    .getString(R.string.car_ui_scrollbar_component);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             carUiRecyclerView.setAdapter(adapter);
             carUiRecyclerView.setId(listId);
             container.addView(carUiRecyclerView.getView());
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         });
 
         onView(withId(listId)).check(matches(isDisplayed()));
-
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        // Scroll to a position so page up is enabled.
-        container.post(() -> carUiRecyclerView.scrollToPosition(20));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            // Scroll to a position so page up is enabled.
+            carUiRecyclerView.scrollToPosition(20);
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(isEnabled()));
 
-        View v = mActivity.findViewById(getId("car_ui_scroll_bar"));
-        TestScrollBar sb = (TestScrollBar) v.getTag();
-        // We set this to simulate a case where layout manager is null
-        sb.mReturnZeroVerticalScrollOffset = true;
+        mActivityRule.getScenario().onActivity(activity -> {
+            View v = activity.findViewById(getId("car_ui_scroll_bar"));
+            TestScrollBar sb = (TestScrollBar) v.getTag();
+            // We set this to simulate a case where layout manager is null
+            sb.mReturnZeroVerticalScrollOffset = true;
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
 
-        assertFalse(sb.mScrollWasCalled);
+        mActivityRule.getScenario().onActivity(activity -> {
+            View v = activity.findViewById(getId("car_ui_scroll_bar"));
+            TestScrollBar sb = (TestScrollBar) v.getTag();
+            assertFalse(sb.mScrollWasCalled);
+        });
     }
 
     @Test
     public void testPageUp_returnsWhen_layoutManagerIsNull() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        if (isScrollbarEnabledNotAsExpected(true)) return;
-        doReturn(TestScrollBar.class.getName()).when(mTestableResources)
-                .getString(R.string.car_ui_scrollbar_component);
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(100);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            doReturn(TestScrollBar.class.getName()).when(testableResources)
+                    .getString(R.string.car_ui_scrollbar_component);
+
+            CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             carUiRecyclerView.setAdapter(adapter);
+            carUiRecyclerView.setId(listId);
             container.addView(carUiRecyclerView.getView());
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        // Scroll to a position so page up is enabled.
-        container.post(() -> carUiRecyclerView.scrollToPosition(20));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            // Scroll to a position so page up is enabled.
+            carUiRecyclerView.scrollToPosition(20);
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_up"))).check(matches(isEnabled()));
 
-        View v = mActivity.findViewById(getId("car_ui_scroll_bar"));
-        TestScrollBar sb = (TestScrollBar) v.getTag();
-        // We set this to simulate a case where layout manager is null
-        sb.mReturnMockLayoutManager = true;
+        mActivityRule.getScenario().onActivity(activity -> {
+            View v = activity.findViewById(getId("car_ui_scroll_bar"));
+            TestScrollBar sb = (TestScrollBar) v.getTag();
+            // We set this to simulate a case where layout manager is null
+            sb.mReturnMockLayoutManager = true;
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_up"))).perform(click());
 
-        assertFalse(sb.mScrollWasCalled);
+        mActivityRule.getScenario().onActivity(activity -> {
+            View v = activity.findViewById(getId("car_ui_scroll_bar"));
+            TestScrollBar sb = (TestScrollBar) v.getTag();
+            assertFalse(sb.mScrollWasCalled);
+        });
     }
 
     @Test
     public void testPageDown_returnsWhen_layoutManagerIsNullOrEmpty() {
-        if (mIsPluginEnabled) return;
+        if (mIsPluginEnabled) {
+            return;
+        }
 
-        if (isScrollbarEnabledNotAsExpected(true)) return;
-        doReturn(TestScrollBar.class.getName()).when(mTestableResources)
-                .getString(R.string.car_ui_scrollbar_component);
-
-        CarUiRecyclerView carUiRecyclerView = CarUiRecyclerView.create(mTestableContext);
-        ViewGroup container = mActivity.findViewById(R.id.test_container);
         TestAdapter adapter = new TestAdapter(100);
-        container.post(() -> {
+        int listId = View.generateViewId();
+
+        mActivityRule.getScenario().onActivity(activity -> {
+            Context testableContext = spy(activity);
+            Resources testableResources = spy(activity.getResources());
+            when(testableContext.getResources()).thenReturn(testableResources);
+            doReturn(TestScrollBar.class.getName()).when(testableResources)
+                    .getString(R.string.car_ui_scrollbar_component);
+
+            CarUiRecyclerViewImpl carUiRecyclerView =
+                    (CarUiRecyclerViewImpl) CarUiRecyclerView.create(testableContext);
+            ViewGroup container = activity.findViewById(R.id.test_container);
             carUiRecyclerView.setAdapter(adapter);
+            carUiRecyclerView.setId(listId);
             container.addView(carUiRecyclerView.getView());
+
+            IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         });
 
-        IdlingRegistry.getInstance().register(new ScrollIdlingResource(carUiRecyclerView));
         onView(withText(adapter.getItemText(0))).check(matches(isDisplayed()));
 
-        // Scroll to a position so page up is enabled.
-        container.post(() -> carUiRecyclerView.scrollToPosition(20));
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerView carUiRecyclerView = activity.requireViewById(listId);
+            // Scroll to a position so page up is enabled.
+            carUiRecyclerView.scrollToPosition(20);
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).check(matches(isEnabled()));
 
-        View v = mActivity.findViewById(getId("car_ui_scroll_bar"));
-        TestScrollBar sb = (TestScrollBar) v.getTag();
-        // We set this to simulate a case where layout manager is empty
-        sb.mReturnMockLayoutManager = true;
-        sb.mMockLayoutManager = spy(carUiRecyclerView.getLayoutManager());
-        when(sb.mMockLayoutManager.getChildCount()).thenReturn(0);
+        mActivityRule.getScenario().onActivity(activity -> {
+            CarUiRecyclerViewImpl carUiRecyclerView = activity.requireViewById(listId);
+            View v = activity.findViewById(getId("car_ui_scroll_bar"));
+            TestScrollBar sb = (TestScrollBar) v.getTag();
+            // We set this to simulate a case where layout manager is empty
+            sb.mReturnMockLayoutManager = true;
+            sb.mMockLayoutManager = spy(carUiRecyclerView.getLayoutManager());
+            when(sb.mMockLayoutManager.getChildCount()).thenReturn(0);
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
-        assertFalse(sb.mScrollWasCalled);
+        mActivityRule.getScenario().onActivity(activity -> {
+            View v = activity.findViewById(getId("car_ui_scroll_bar"));
+            TestScrollBar sb = (TestScrollBar) v.getTag();
+            assertFalse(sb.mScrollWasCalled);
 
-        // We set this to simulate a case where layout manager is null
-        sb.mReturnMockLayoutManager = true;
-        sb.mMockLayoutManager = null;
+            // We set this to simulate a case where layout manager is null
+            sb.mReturnMockLayoutManager = true;
+            sb.mMockLayoutManager = null;
+        });
 
         onView(withId(getId("car_ui_scrollbar_page_down"))).perform(click());
 
-        assertFalse(sb.mScrollWasCalled);
+        mActivityRule.getScenario().onActivity(activity -> {
+            View v = activity.findViewById(getId("car_ui_scroll_bar"));
+            TestScrollBar sb = (TestScrollBar) v.getTag();
+            assertFalse(sb.mScrollWasCalled);
+        });
     }
 
     static class TestScrollBar extends DefaultScrollBar {
-
         boolean mReturnMockLayoutManager = false;
         LayoutManager mMockLayoutManager = null;
         boolean mScrollWasCalled = false;
@@ -2229,12 +2751,10 @@
      * @return An item that is taller than the CarUiRecyclerView.
      */
     private View getLongItem(CarUiRecyclerView recyclerView) {
-        OrientationHelper orientationHelper =
-                OrientationHelper.createVerticalHelper(recyclerView.getLayoutManager());
-        for (int i = 0; i < recyclerView.getLayoutManager().getChildCount(); i++) {
-            View item = recyclerView.getLayoutManager().getChildAt(i);
+        for (int i = 0; i < recyclerView.getRecyclerViewChildCount(); i++) {
+            View item = recyclerView.getRecyclerViewChildAt(i);
 
-            if (item.getHeight() > orientationHelper.getTotalSpace()) {
+            if (item.getHeight() > recyclerView.getTotalSpace()) {
                 return item;
             }
         }
@@ -2306,10 +2826,10 @@
                 case STANDARD:
                     break;
                 case TALL:
-                    holder.itemView.setMinimumHeight(screenHeight);
+                    holder.itemView.setMinimumHeight((int) (screenHeight * 1.1));
                     break;
                 case EXTRA_TALL:
-                    holder.itemView.setMinimumHeight(screenHeight * 2);
+                    holder.itemView.setMinimumHeight((int) (screenHeight * 2.1));
                     break;
                 default:
                     throw new IllegalStateException("Unexpected value: " + height);
@@ -2324,8 +2844,7 @@
         }
 
         static class WithItemCap extends TestAdapter implements CarUiRecyclerView.ItemCap {
-
-            private int mMaxitems = -1;
+            private int mMaxItems = -1;
 
             WithItemCap(int itemCount,
                     Map<Integer, ItemHeight> overrides) {
@@ -2338,18 +2857,17 @@
 
             @Override
             public void setMaxItems(int maxItems) {
-                mMaxitems = maxItems;
+                mMaxItems = maxItems;
             }
 
             @Override
             public int getItemCount() {
-                return mMaxitems >= 0 ? mMaxitems : mData.size();
+                return mMaxItems >= 0 ? mMaxItems : mData.size();
             }
         }
     }
 
     private static class PerfectFitTestAdapter extends RecyclerView.Adapter<TestViewHolder> {
-
         private static final int MIN_HEIGHT = 30;
         private final List<String> mData;
         private final int mItemHeight;
@@ -2376,7 +2894,7 @@
             }
         }
 
-        String getItemText(int position) {
+        public static String getItemText(int position) {
             return String.format(Locale.US, "Sample item #%d", position);
         }
 
@@ -2400,7 +2918,7 @@
     }
 
     private static class TestViewHolder extends RecyclerView.ViewHolder {
-        private TextView mTextView;
+        private final TextView mTextView;
 
         TestViewHolder(LayoutInflater inflater, ViewGroup parent) {
             super(inflater.inflate(R.layout.test_list_item, parent, false));
@@ -2439,8 +2957,8 @@
 
                                 @Override
                                 public void onScrolled(@NonNull CarUiRecyclerView recyclerView,
-                                                       int dx,
-                                                       int dy) {
+                                        int dx,
+                                        int dy) {
                                 }
                             });
         }
@@ -2462,8 +2980,8 @@
     }
 
     private static class NotLinearLayoutManager extends LayoutManager {
-
-        NotLinearLayoutManager(Context mTestableContext) {}
+        NotLinearLayoutManager(Context mTestableContext) {
+        }
 
         @Override
         public LayoutParams generateDefaultLayoutParams() {
@@ -2471,25 +2989,15 @@
         }
     }
 
-    private boolean isScrollbarEnabledNotAsExpected(boolean expectedValue) {
-        if (mIsPluginEnabled) {
-            int id = mPluginContext.getResources()
-                    .getIdentifier("scrollbar_enable", "bool", mPluginContext.getPackageName());
-            return (mPluginContext.getResources().getBoolean(id) != expectedValue);
-        } else {
-            doReturn(expectedValue).when(mTestableResources)
-                    .getBoolean(R.bool.car_ui_scrollbar_enable);
-            return false;
-        }
-    }
-
     private int getId(String resourceName) {
         if (mIsPluginEnabled) {
-            return mPluginContext.getResources().getIdentifier(
-                    resourceName.replace("car_ui_", ""), "id", mPluginContext.getPackageName());
+            Context pluginContext = PluginFactorySingleton.getPluginContext();
+            return pluginContext.getResources().getIdentifier(
+                    resourceName.replace("car_ui_", ""), "id", pluginContext.getPackageName());
         } else {
-            return mActivity.getResources()
-                    .getIdentifier(resourceName, "id", mActivity.getPackageName());
+            Context context = getInstrumentation().getTargetContext();
+            return context.getResources()
+                    .getIdentifier(resourceName, "id", context.getPackageName());
         }
     }
 }