Fix spinner horizontal offset

Spinner dropdown will now take into account the offset set via
setDropDownHorizontalOffset.

Also, moved LocaleTestUtils from viewpager2 to testutils.

Bug: 80068491
Test: ./gradlew :appcompat:connectedCheck --info --daemon -Pandroid.testInstrumentationRunnerArguments.class=androidx.appcompat.widget.AppCompatSpinnerTest
Test: ./gradlew :internal-testutils:connectedCheck --info --daemon -Pandroid.testInstrumentationRunnerArguments.class=androidx.testutils.LocaleTestUtilsTest
Change-Id: I681acd7b89bafd52a6ed40f07ade3b62d25c6ca9
diff --git a/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java b/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java
index 1b20e5c..1827727 100644
--- a/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java
+++ b/appcompat/src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java
@@ -27,6 +27,7 @@
 import androidx.appcompat.app.AppCompatCallback;
 import androidx.appcompat.test.R;
 import androidx.appcompat.view.ActionMode;
+import androidx.testutils.LocaleTestUtils;
 import androidx.testutils.RecreatedAppCompatActivity;
 
 public abstract class BaseTestActivity extends RecreatedAppCompatActivity {
@@ -48,10 +49,19 @@
     private boolean mDestroyed;
 
     private AppCompatCallback mAppCompatCallback;
+    private static final String EXTRA_LANGUAGE = "language";
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+
+        final LocaleTestUtils locale = new LocaleTestUtils(this);
+        if (getIntent().hasExtra(EXTRA_LANGUAGE)) {
+            locale.setLocale(LocaleTestUtils.RTL_LANGUAGE);
+        } else {
+            locale.setLocale(LocaleTestUtils.DEFAULT_TEST_LANGUAGE);
+        }
+
         overridePendingTransition(0, 0);
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
         final int contentView = getContentViewLayoutResId();
diff --git a/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatSpinnerTest.java b/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatSpinnerTest.java
index 7c45fa9..dea4a0f6 100644
--- a/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatSpinnerTest.java
+++ b/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatSpinnerTest.java
@@ -32,8 +32,11 @@
 import static org.junit.Assert.assertTrue;
 
 import android.app.Instrumentation;
+import android.content.Context;
+import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.res.Resources;
+import android.os.Build;
 import android.os.SystemClock;
 import android.view.View;
 
@@ -51,10 +54,14 @@
 import androidx.test.espresso.action.Swipe;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.MediumTest;
+import androidx.test.filters.SdkSuppress;
 import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.testutils.LocaleTestUtils;
 import androidx.testutils.PollingCheck;
 
+import org.hamcrest.Description;
 import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
 import org.junit.After;
 import org.junit.Test;
 
@@ -65,7 +72,7 @@
 @LargeTest
 public class AppCompatSpinnerTest
         extends AppCompatBaseViewTest<AppCompatSpinnerActivity, AppCompatSpinner> {
-    private static final String EARTH = "Earth";
+    private static final String ONE = "1";
     private Instrumentation mInstrumentation;
 
     public AppCompatSpinnerTest() {
@@ -138,13 +145,11 @@
         waitUntilPopupIsHidden(spinner);
     }
 
-    @LargeTest
     @Test
     public void testPopupThemingFromXmlAttribute() {
         verifySpinnerPopupTheming(R.id.view_magenta_themed_popup, R.color.test_magenta, true);
     }
 
-    @LargeTest
     @Test
     public void testUnthemedPopupRuntimeTheming() {
         final AppCompatSpinner spinner =
@@ -158,7 +163,6 @@
         verifySpinnerPopupTheming(R.id.view_unthemed_popup, R.color.test_green, false);
     }
 
-    @LargeTest
     @Test
     public void testThemedPopupRuntimeTheming() {
         final AppCompatSpinner spinner =
@@ -191,13 +195,11 @@
         assertThat(dialogPopup.mPopup, instanceOf(AlertDialog.class));
     }
 
-    @LargeTest
     @Test
     public void testChangeOrientationDialogPopupPersists() {
         verifyChangeOrientationPopupPersists(R.id.spinner_dialog_popup, true);
     }
 
-    @LargeTest
     @Test
     public void testChangeOrientationDropdownPopupPersists() {
         verifyChangeOrientationPopupPersists(R.id.spinner_dropdown_popup, false);
@@ -213,10 +215,11 @@
         Instrumentation.ActivityMonitor monitor =
                 new Instrumentation.ActivityMonitor(mActivity.getClass().getName(), null, false);
         mInstrumentation.addMonitor(monitor);
+
         mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
         SystemClock.sleep(250);
-        mInstrumentation.waitForIdleSync();
 
+        mInstrumentation.waitForIdleSync();
         mActivity = (AppCompatSpinnerActivity) mInstrumentation.waitForMonitor(monitor);
 
         // Now we can get the new (post-rotation) instance of our spinner
@@ -225,7 +228,6 @@
         assertTrue(newSpinner.getInternalPopup().isShowing());
     }
 
-    @LargeTest
     @Test
     public void testSlowScroll() {
         final AppCompatSpinner spinner = mContainer
@@ -247,6 +249,69 @@
         onView(withText(secondItem)).check(doesNotExist());
     }
 
+    @Test
+    public void testHorizontalOffset() {
+        checkOffsetIsCorrect(500, false, false);
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN_MR1)
+    public void testHorizontalOffsetRtl() {
+        setRtl();
+        checkOffsetIsCorrect(200, false, true);
+    }
+
+    @Test
+    public void testVerticalOffset() {
+        checkOffsetIsCorrect(100, true, false);
+    }
+
+    private void checkOffsetIsCorrect(
+            final int offset,
+            final boolean isVerticalOffset,
+            final boolean isRtl) {
+        int spinnerId = R.id.spinner_dropdown_popup_small;
+
+        final AppCompatSpinner spinner = mContainer.findViewById(spinnerId);
+        if (isVerticalOffset) {
+            spinner.setDropDownVerticalOffset(offset);
+        } else {
+            spinner.setDropDownHorizontalOffset(offset);
+        }
+
+        onView(withId(spinnerId)).perform(click());
+        SystemClock.sleep(250);
+
+        int computedOffset;
+        if (isVerticalOffset) {
+            int[] location = new int[2];
+            spinner.getLocationOnScreen(location);
+
+            computedOffset = location[1] + offset;
+        } else {
+            if (isRtl) {
+                int[] location = new int[2];
+                spinner.getLocationOnScreen(location);
+                final AppCompatSpinner.SpinnerPopup spinnerPopup = spinner.getInternalPopup();
+                AppCompatSpinner.DropdownPopup dropdownPopup =
+                        (AppCompatSpinner.DropdownPopup) (spinnerPopup);
+                final int popupWidth = dropdownPopup.getWidth();
+                final int spinnerWidth = spinner.getWidth();
+
+                computedOffset = location[0] + (spinnerWidth - popupWidth - offset);
+            } else {
+                computedOffset = offset;
+            }
+        }
+
+        onView(withText(ONE)).check(matches(
+                hasOffset(
+                        computedOffset,
+                        isVerticalOffset ? "has vertical offset" : "has horizontal offset",
+                        isVerticalOffset)
+        ));
+    }
+
     private ViewAction slowScrollPopup() {
         return new GeneralSwipeAction(Swipe.SLOW,
                 new CoordinatesProvider() {
@@ -314,4 +379,50 @@
             }
         });
     }
+
+    private Matcher<View> hasOffset(
+            final int offset,
+            final String desc,
+            final boolean isVerticalOffset) {
+        return new TypeSafeMatcher<View>() {
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText(desc);
+            }
+
+            @Override
+            protected boolean matchesSafely(View view) {
+                if (view.getParent() instanceof DropDownListView) {
+                    final DropDownListView dropDownListView = (DropDownListView) (view.getParent());
+                    int[] location = new int[2];
+                    dropDownListView.getLocationOnScreen(location);
+                    dropDownListView.getWidth();
+                    return location[isVerticalOffset ? 1 : 0] == offset;
+                }
+
+                return false;
+            }
+        };
+    }
+
+    private void setRtl() {
+        final Context context = mInstrumentation.getTargetContext();
+
+        mActivity.finish();
+        final Intent intent = new Intent(context, AppCompatSpinnerActivity.class);
+        intent.putExtra("language", LocaleTestUtils.RTL_LANGUAGE);
+
+        Instrumentation.ActivityMonitor monitor =
+                new Instrumentation.ActivityMonitor(mActivity.getClass().getName(), null, false);
+        mInstrumentation.addMonitor(monitor);
+
+        mActivity = mActivityTestRule.launchActivity(intent);
+
+        mInstrumentation.waitForIdleSync();
+        mInstrumentation.waitForMonitor(monitor);
+
+        mContainer = mActivity.findViewById(R.id.container);
+        mResources = mActivity.getResources();
+    }
 }
diff --git a/appcompat/src/androidTest/res/layout/appcompat_spinner_activity.xml b/appcompat/src/androidTest/res/layout/appcompat_spinner_activity.xml
index 534048e..2378f9b 100644
--- a/appcompat/src/androidTest/res/layout/appcompat_spinner_activity.xml
+++ b/appcompat/src/androidTest/res/layout/appcompat_spinner_activity.xml
@@ -116,6 +116,15 @@
             android:entries="@array/numbers_array"
             android:focusable="false"
             android:spinnerMode="dropdown" />
+
+        <androidx.appcompat.widget.AppCompatSpinner
+            android:id="@+id/spinner_dropdown_popup_small"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:entries="@array/numbers_array_small"
+            android:popupBackground="@null"
+            android:focusable="false"
+            android:spinnerMode="dropdown" />
     </LinearLayout>
 
 </ScrollView>
diff --git a/appcompat/src/androidTest/res/values/strings.xml b/appcompat/src/androidTest/res/values/strings.xml
index 0188024..9b0c971 100644
--- a/appcompat/src/androidTest/res/values/strings.xml
+++ b/appcompat/src/androidTest/res/values/strings.xml
@@ -120,6 +120,11 @@
         <item>38</item>
         <item>39</item>
     </string-array>
+    <string-array name="numbers_array_small">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
 
     <string name="night_mode">DAY</string>
 
diff --git a/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java b/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
index 1033e46..01d7375 100644
--- a/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
+++ b/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
@@ -347,6 +347,7 @@
     @Override
     public void setDropDownHorizontalOffset(int pixels) {
         if (mPopup != null) {
+            mPopup.setHorizontalOriginalOffset(pixels);
             mPopup.setHorizontalOffset(pixels);
         } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
             super.setDropDownHorizontalOffset(pixels);
@@ -836,6 +837,8 @@
         void setBackgroundDrawable(Drawable bg);
         void setVerticalOffset(int px);
         void setHorizontalOffset(int px);
+        void setHorizontalOriginalOffset(int px);
+        int getHorizontalOriginalOffset();
         Drawable getBackground();
         int getVerticalOffset();
         int getHorizontalOffset();
@@ -933,12 +936,24 @@
         public int getHorizontalOffset() {
             return 0;
         }
+
+        @Override
+        public void setHorizontalOriginalOffset(int px) {
+            Log.e(TAG, "Cannot set horizontal (original) offset for MODE_DIALOG, ignoring");
+        }
+
+        @Override
+        public int getHorizontalOriginalOffset() {
+            return 0;
+        }
     }
 
-    private class DropdownPopup extends ListPopupWindow implements SpinnerPopup {
+    @VisibleForTesting
+    class DropdownPopup extends ListPopupWindow implements SpinnerPopup {
         private CharSequence mHintText;
         ListAdapter mAdapter;
         private final Rect mVisibleRect = new Rect();
+        private int mOriginalHorizontalOffset;
 
         public DropdownPopup(Context context, AttributeSet attrs, int defStyleAttr) {
             super(context, attrs, defStyleAttr);
@@ -1007,9 +1022,10 @@
                 setContentWidth(mDropDownWidth);
             }
             if (ViewUtils.isLayoutRtl(AppCompatSpinner.this)) {
-                hOffset += spinnerWidth - spinnerPaddingRight - getWidth();
+                hOffset += spinnerWidth - spinnerPaddingRight - getWidth()
+                        - getHorizontalOriginalOffset();
             } else {
-                hOffset += spinnerPaddingLeft;
+                hOffset += spinnerPaddingLeft + getHorizontalOriginalOffset();
             }
             setHorizontalOffset(hOffset);
         }
@@ -1075,5 +1091,15 @@
         boolean isVisibleToUser(View view) {
             return ViewCompat.isAttachedToWindow(view) && view.getGlobalVisibleRect(mVisibleRect);
         }
+
+        @Override
+        public void setHorizontalOriginalOffset(int px) {
+            mOriginalHorizontalOffset = px;
+        }
+
+        @Override
+        public int getHorizontalOriginalOffset() {
+            return mOriginalHorizontalOffset;
+        }
     }
 }
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/LocaleTestUtilsTest.kt b/testutils/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt
similarity index 74%
rename from viewpager2/src/androidTest/java/androidx/viewpager2/LocaleTestUtilsTest.kt
rename to testutils/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt
index a10fd14..433d6de 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/LocaleTestUtilsTest.kt
+++ b/testutils/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2018 The Android Open Source Project
+ * Copyright 2019 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.viewpager2
+package androidx.testutils
 
 import android.content.Context
 import android.content.res.Configuration
@@ -25,10 +25,10 @@
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
-import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.CoreMatchers
 import org.hamcrest.Matchers
 import org.junit.After
-import org.junit.Assert.assertThat
+import org.junit.Assert
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -40,7 +40,8 @@
 @RunWith(AndroidJUnit4::class)
 @LargeTest
 class LocaleTestUtilsTest {
-    private val configuration: Configuration get() =
+    private val configuration: Configuration
+        get() =
         (ApplicationProvider.getApplicationContext() as Context).resources.configuration
     private val Configuration.language: String get() =
         ConfigurationCompat.getLocales(this).get(0).toString()
@@ -51,7 +52,8 @@
     @Before
     fun setUp() {
         localeUtil = LocaleTestUtils(
-            ApplicationProvider.getApplicationContext() as android.content.Context)
+            ApplicationProvider.getApplicationContext() as Context
+        )
         determineDefaultLayoutDirection()
     }
 
@@ -84,12 +86,24 @@
         val getReason: (String, String) -> String = { name, code ->
             "$name test language '$code' does not exist on test device"
         }
-        assertThat(getReason("Default", LocaleTestUtils.DEFAULT_TEST_LANGUAGE),
-            LocaleTestUtils.DEFAULT_TEST_LANGUAGE, Matchers.isIn(availableLanguages))
-        assertThat(getReason("LTR", LocaleTestUtils.LTR_LANGUAGE),
-            LocaleTestUtils.LTR_LANGUAGE, Matchers.isIn(availableLanguages))
-        assertThat(getReason("RTL", LocaleTestUtils.RTL_LANGUAGE),
-            LocaleTestUtils.RTL_LANGUAGE, Matchers.isIn(availableLanguages))
+        Assert.assertThat(
+            getReason(
+                "Default",
+                LocaleTestUtils.DEFAULT_TEST_LANGUAGE
+            ),
+            LocaleTestUtils.DEFAULT_TEST_LANGUAGE,
+            Matchers.isIn(availableLanguages)
+        )
+        Assert.assertThat(
+            getReason("LTR", LocaleTestUtils.LTR_LANGUAGE),
+            LocaleTestUtils.LTR_LANGUAGE,
+            Matchers.isIn(availableLanguages)
+        )
+        Assert.assertThat(
+            getReason("RTL", LocaleTestUtils.RTL_LANGUAGE),
+            LocaleTestUtils.RTL_LANGUAGE,
+            Matchers.isIn(availableLanguages)
+        )
     }
 
     private fun assertDefaultValues() {
@@ -97,25 +111,25 @@
     }
 
     private fun assertLocaleIs(lang: String, expectRtl: Boolean) {
-        assertThat(
+        Assert.assertThat(
             "Locale should be $lang",
             configuration.language,
-            equalTo(lang)
+            CoreMatchers.equalTo(lang)
         )
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
-            assertThat(
+            Assert.assertThat(
                 "Layout direction should be ${if (expectRtl) "RTL" else "LTR"}",
                 configuration.layoutDirection,
-                equalTo(if (expectRtl) LAYOUT_DIRECTION_RTL else LAYOUT_DIRECTION_LTR)
+                CoreMatchers.equalTo(if (expectRtl) LAYOUT_DIRECTION_RTL else LAYOUT_DIRECTION_LTR)
             )
         }
     }
 
     private fun determineDefaultLayoutDirection() {
-        assertThat(
+        Assert.assertThat(
             "Locale must still be the default when determining the default layout direction",
             configuration.language,
-            equalTo(DEFAULT_LANGUAGE)
+            CoreMatchers.equalTo(DEFAULT_LANGUAGE)
         )
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
             expectRtlInDefaultLanguage = configuration.layoutDirection == LAYOUT_DIRECTION_RTL
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/LocaleTestUtils.kt b/testutils/src/main/java/androidx/testutils/LocaleTestUtils.kt
similarity index 98%
rename from viewpager2/src/androidTest/java/androidx/viewpager2/LocaleTestUtils.kt
rename to testutils/src/main/java/androidx/testutils/LocaleTestUtils.kt
index 6ca6392..e2e4c4e 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/LocaleTestUtils.kt
+++ b/testutils/src/main/java/androidx/testutils/LocaleTestUtils.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2018 The Android Open Source Project
+ * Copyright 2019 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.viewpager2
+package androidx.testutils
 
 import android.content.Context
 import android.content.res.Configuration
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
index 42d38bc..ba7dfdb 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
@@ -41,7 +41,7 @@
 import androidx.test.rule.ActivityTestRule
 import androidx.testutils.AppCompatActivityUtils
 import androidx.testutils.FragmentActivityUtils.waitForActivityDrawn
-import androidx.viewpager2.LocaleTestUtils
+import androidx.testutils.LocaleTestUtils
 import androidx.viewpager2.adapter.FragmentStateAdapter
 import androidx.viewpager2.test.R
 import androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL
@@ -84,7 +84,8 @@
     @Before
     open fun setUp() {
         localeUtil = LocaleTestUtils(
-            ApplicationProvider.getApplicationContext() as android.content.Context)
+            ApplicationProvider.getApplicationContext() as android.content.Context
+        )
         // Ensure a predictable test environment by explicitly setting a locale
         localeUtil.setLocale(LocaleTestUtils.DEFAULT_TEST_LANGUAGE)
     }
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
index c3e93b9..a7a4e17 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
@@ -24,7 +24,7 @@
 import androidx.core.view.animation.PathInterpolatorCompat
 import androidx.test.filters.LargeTest
 import androidx.testutils.FragmentActivityUtils.waitForCycles
-import androidx.viewpager2.LocaleTestUtils
+import androidx.testutils.LocaleTestUtils
 import androidx.viewpager2.widget.BaseTest.Context.SwipeMethod
 import androidx.viewpager2.widget.FakeDragTest.Event.OnPageScrollStateChangedEvent
 import androidx.viewpager2.widget.FakeDragTest.Event.OnPageScrolledEvent
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/OffscreenPageLimitTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/OffscreenPageLimitTest.kt
index 6eab611..8fae152 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/OffscreenPageLimitTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/OffscreenPageLimitTest.kt
@@ -20,7 +20,7 @@
 import android.view.ViewGroup
 import androidx.recyclerview.widget.RecyclerView
 import androidx.test.filters.LargeTest
-import androidx.viewpager2.LocaleTestUtils
+import androidx.testutils.LocaleTestUtils
 import androidx.viewpager2.widget.OffscreenPageLimitTest.Event.OnChildViewAdded
 import androidx.viewpager2.widget.OffscreenPageLimitTest.Event.OnChildViewRemoved
 import androidx.viewpager2.widget.OffscreenPageLimitTest.Event.OnPageScrollStateChangedEvent
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt
index fc0b31a..9dfefab 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt
@@ -22,9 +22,9 @@
 import androidx.recyclerview.widget.RecyclerView
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.LargeTest
+import androidx.testutils.LocaleTestUtils
 import androidx.testutils.PollingCheck
 import androidx.viewpager.widget.ViewPager
-import androidx.viewpager2.LocaleTestUtils
 import androidx.viewpager2.widget.BaseTest.Context.SwipeMethod
 import androidx.viewpager2.widget.PageChangeCallbackTest.Event.MarkerEvent
 import androidx.viewpager2.widget.PageChangeCallbackTest.Event.OnPageScrollStateChangedEvent
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/TestActivity.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/TestActivity.kt
index 411285e..3b53100 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/TestActivity.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/TestActivity.kt
@@ -17,8 +17,8 @@
 package androidx.viewpager2.widget.swipe
 
 import android.os.Bundle
+import androidx.testutils.LocaleTestUtils
 import androidx.testutils.RecreatedAppCompatActivity
-import androidx.viewpager2.LocaleTestUtils
 import androidx.viewpager2.test.R
 
 class TestActivity : RecreatedAppCompatActivity() {