Upgrade to androidx.test 1.4.0-beta01

1.4.0 has a fix for multidex test apks on older
api levels.

Fix appcompat tests on api17-19:
- Skip emoji2 integration tests below API19 as they are correctly
detecting emoji2 doesn't work below api19
- Use @UiThreadTest for various tests that call methods that require ui
thread to call ui-thread only methods (previously, they were called on a
test thread, which happens to work by accident on later API levels)

Bug: 189215873
Bug: 189491755
Bug: 189492236
Bug: 189491928
Bug: 189492631
Bug: 189493648
Test: ./gradlew assembleAndroidTest
Change-Id: I0256cb19d97bc016f0ef2a45c25f0cd0814fb1b6
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewTest.java
index c5046d0..448975c 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewTest.java
@@ -22,10 +22,9 @@
 import android.view.Menu;
 import android.view.MenuItem;
 
+import androidx.test.annotation.UiThreadTest;
 import androidx.test.filters.LargeTest;
 
-import org.junit.Test;
-
 /**
  * In addition to all tinting-related tests done by the base class, this class provides
  * tests specific to {@link AppCompatAutoCompleteTextView} class.
@@ -39,7 +38,7 @@
         super(AppCompatAutoCompleteTextViewActivity.class);
     }
 
-    @Test
+    @UiThreadTest
     public void testSetCustomSelectionActionModeCallback() {
         final AppCompatAutoCompleteTextView view = new AppCompatAutoCompleteTextView(mActivity);
         final ActionMode.Callback callback = new ActionMode.Callback() {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseAutoSizeTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseAutoSizeTest.java
index e555de4..483718c 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseAutoSizeTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseAutoSizeTest.java
@@ -42,6 +42,7 @@
 import androidx.core.content.res.ResourcesCompat;
 import androidx.core.widget.AutoSizeableTextView;
 import androidx.core.widget.TextViewCompat;
+import androidx.test.annotation.UiThreadTest;
 import androidx.test.filters.FlakyTest;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.MediumTest;
@@ -527,7 +528,7 @@
         }
     }
 
-    @Test
+    @UiThreadTest
     @MediumTest
     @FlakyTest(bugId = 157145343)
     public void testAutoSizeCallers_setTypeface() throws Throwable {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseTextViewEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseTextViewEmojiTest.java
index 64117cf..da6fa86 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseTextViewEmojiTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseTextViewEmojiTest.java
@@ -18,6 +18,8 @@
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.atLeast;
 import static org.mockito.Mockito.atLeastOnce;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -25,6 +27,7 @@
 import static org.mockito.Mockito.when;
 
 import android.app.Instrumentation;
+import android.view.inputmethod.EditorInfo;
 import android.widget.TextView;
 
 import androidx.appcompat.testutils.BaseTestActivity;
@@ -32,6 +35,7 @@
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
+import androidx.test.filters.SdkSuppress;
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.rule.ActivityTestRule;
 
@@ -76,6 +80,7 @@
 
     @Test
     @UiThreadTest
+    @SdkSuppress(minSdkVersion = 19)
     public void byDefault_setText_callsEmojiCompat() {
         resetEmojiCompatToNewMock();
         ViewType subject = mActivityTestRule.getActivity()
@@ -86,6 +91,7 @@
 
     @Test
     @UiThreadTest
+    @SdkSuppress(minSdkVersion = 19)
     public void whenEnabled_setText_callsProcess() {
         resetEmojiCompatToNewMock();
         ViewType subject = mActivityTestRule.getActivity()
@@ -97,6 +103,7 @@
 
     @Test
     @UiThreadTest
+    @SdkSuppress(minSdkVersion = 19)
     public void whenDisabled_noCalls() {
         resetEmojiCompatToNewMock();
         ViewType subject = mActivityTestRule.getActivity()
@@ -109,6 +116,7 @@
 
     @Test
     @UiThreadTest
+    @SdkSuppress(minSdkVersion = 19)
     public void whenReEnabled_callsProcess() throws Throwable {
         resetEmojiCompatToNewMock();
         ViewType subject = mActivityTestRule.getActivity()
@@ -123,6 +131,7 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void whenNotConfigured_andDisabled_doesNotEnable_whenConfigured() throws Throwable {
         EmojiCompat.reset((EmojiCompat) null);
         mActivityTestRule.finishActivity();
@@ -150,12 +159,16 @@
             enabledInAdvance.setText("Some text");
             defaultEmoji.setFilters(defaultEmoji.getFilters());
             defaultEmoji.setText("Some text");
+            // this is allowed, but all other interactions should not happen
+            verify(mEmojiCompatMock, atLeast(0)).updateEditorInfoAttrs(
+                    any(EditorInfo.class));
             verifyNoMoreInteractions(mEmojiCompatMock);
         });
 
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void whenNotConfigured_callingEnabled_afterConfigure_enablesEmoji() throws Throwable {
         EmojiCompat.reset((EmojiCompat) null);
         mActivityTestRule.finishActivity();
@@ -175,6 +188,7 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void getEnabled() throws Throwable {
         ActivityType activity = mActivityTestRule.getActivity();
         ViewType disabledInAdvance =
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatButtonTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatButtonTest.java
index b6febf9..3c15924 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatButtonTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatButtonTest.java
@@ -29,6 +29,7 @@
 
 import androidx.appcompat.test.R;
 import androidx.core.content.res.ResourcesCompat;
+import androidx.test.annotation.UiThreadTest;
 import androidx.test.filters.LargeTest;
 
 import org.junit.Test;
@@ -107,7 +108,7 @@
         assertEquals(expected, button.getTypeface());
     }
 
-    @Test
+    @UiThreadTest
     public void testSetCustomSelectionActionModeCallback() {
         final AppCompatButton view = new AppCompatButton(mActivity);
         final ActionMode.Callback callback = new ActionMode.Callback() {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckedTextViewTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckedTextViewTest.java
index cef0f44..6df367d 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckedTextViewTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckedTextViewTest.java
@@ -31,6 +31,7 @@
 import androidx.appcompat.test.R;
 import androidx.core.content.res.ResourcesCompat;
 import androidx.core.widget.CheckedTextViewCompat;
+import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
@@ -113,7 +114,7 @@
         assertNotNull(checkMark);
     }
 
-    @Test
+    @UiThreadTest
     public void testSetCustomSelectionActionModeCallback() {
         final AppCompatCheckedTextView view = new AppCompatCheckedTextView(mActivity);
         final ActionMode.Callback callback = new ActionMode.Callback() {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextTest.java
index 1f61146..7a1b0fb 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextTest.java
@@ -200,7 +200,7 @@
 
     private static class NoOpTextClassifier implements TextClassifier {}
 
-    @Test
+    @UiThreadTest
     public void testSetCustomSelectionActionModeCallback() {
         final AppCompatEditText view = new AppCompatEditText(mActivityTestRule.getActivity());
         final ActionMode.Callback callback = new ActionMode.Callback() {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewTest.java
index 281e840..ad475d6 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewTest.java
@@ -1221,7 +1221,7 @@
                 true);
     }
 
-    @Test
+    @UiThreadTest
     public void testSetCustomSelectionActionModeCallback() {
         final AppCompatTextView view = new AppCompatTextView(mActivity);
         final ActionMode.Callback callback = new ActionMode.Callback() {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/SwitchCompatEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/SwitchCompatEmojiTest.java
index 9c85141..9b84be7 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/SwitchCompatEmojiTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/SwitchCompatEmojiTest.java
@@ -26,6 +26,7 @@
 import androidx.appcompat.test.R;
 import androidx.emoji2.text.EmojiCompat;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 
 import org.junit.Test;
@@ -41,6 +42,7 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void setupCallbacks_whenLoading() throws Throwable {
         SwitchCompat emojiEnabled = mActivityTestRule.getActivity()
                 .findViewById(R.id.emoji_enabled);
@@ -55,6 +57,7 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void dontSetupCallbacks_whenDisabled() throws Throwable {
         SwitchCompat emojiDisabled =
                 mActivityTestRule.getActivity().findViewById(R.id.emoji_disabled);
@@ -69,6 +72,7 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void noInteractions_whenDisnabled_andRepeatedShowText() {
         SwitchCompat emojiDisabled =
                 mActivityTestRule.getActivity().findViewById(R.id.emoji_disabled);
@@ -85,6 +89,8 @@
         verifyNoMoreInteractions(mEmojiCompatMock);
     }
 
+    @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void setupCallbacks_whenLoading_andEnabledLate() throws Throwable {
         SwitchCompat emojiDisabled =
                 mActivityTestRule.getActivity().findViewById(R.id.emoji_disabled);
@@ -101,6 +107,8 @@
         verify(mEmojiCompatMock).registerInitCallback(any(EmojiCompat.InitCallback.class));
     }
 
+    @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void whenSetShowText_doesTransform() {
         SwitchCompat emojiEnabled =
                 mActivityTestRule.getActivity().findViewById(R.id.emoji_enabled);
@@ -111,6 +119,8 @@
         verify(mEmojiCompatMock, atLeastOnce()).getLoadState();
     }
 
+    @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void whenSetTextOn_doesTransform() {
         SwitchCompat emojiEnabled =
                 mActivityTestRule.getActivity().findViewById(R.id.emoji_enabled);
@@ -122,6 +132,8 @@
         verify(mEmojiCompatMock, atLeastOnce()).getLoadState();
     }
 
+    @Test
+    @SdkSuppress(minSdkVersion = 19)
     public void whenSetTextOff_doesTransform() {
         SwitchCompat emojiEnabled =
                 mActivityTestRule.getActivity().findViewById(R.id.emoji_enabled);
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/SwitchCompatTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/SwitchCompatTest.java
index 12a4d54..03bfb04 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/SwitchCompatTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/SwitchCompatTest.java
@@ -41,6 +41,7 @@
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
+import androidx.test.filters.SdkSuppress;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -171,6 +172,7 @@
         info.recycle();
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189493648
     @Test
     public void testSetCustomSelectionActionModeCallback() {
         final SwitchCompat view = new SwitchCompat(mActivity);
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
index 763d853..42ea14c 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
@@ -19,25 +19,16 @@
 import androidx.build.OperatingSystem
 import androidx.build.getOperatingSystem
 
-const val ANDROIDX_TEST_VERSION = "1.3.0"
+const val ANDROIDX_TEST_VERSION = "1.4.0-beta01"
 const val ANDROIDX_TEST_CORE = "androidx.test:core:$ANDROIDX_TEST_VERSION"
-const val ANDROIDX_TEST_EXT_JUNIT = "androidx.test.ext:junit:1.1.2"
-const val ANDROIDX_TEST_EXT_KTX = "androidx.test.ext:junit-ktx:1.1.2"
+const val ANDROIDX_TEST_EXT_JUNIT = "androidx.test.ext:junit:1.1.3-beta01"
+const val ANDROIDX_TEST_EXT_KTX = "androidx.test.ext:junit-ktx:1.1.3-beta01"
 const val ANDROIDX_TEST_EXT_TRUTH = "androidx.test.ext:truth:$ANDROIDX_TEST_VERSION"
 const val ANDROIDX_TEST_MONITOR = "androidx.test:monitor:$ANDROIDX_TEST_VERSION"
 const val ANDROIDX_TEST_RULES = "androidx.test:rules:$ANDROIDX_TEST_VERSION"
 const val ANDROIDX_TEST_RUNNER = "androidx.test:runner:$ANDROIDX_TEST_VERSION"
 const val ANDROIDX_TEST_UIAUTOMATOR = "androidx.test.uiautomator:uiautomator:2.2.0"
 
-// Remove ANDROIDX_TEST_*_LATEST once ANDROIDX_TEST_* upgrades to the next stable release
-// after 1.3.0, and replace all usages of ANDROIDX_TEST_*_LATEST with ANDROIDX_TEST_*
-const val ANDROIDX_TEST_LATEST_VERSION = "1.4.0-alpha06"
-const val ANDROIDX_TEST_CORE_LATEST = "androidx.test:core:$ANDROIDX_TEST_LATEST_VERSION"
-const val ANDROIDX_TEST_EXT_TRUTH_LATEST = "androidx.test.ext:truth:$ANDROIDX_TEST_LATEST_VERSION"
-const val ANDROIDX_TEST_MONITOR_LATEST = "androidx.test:monitor:$ANDROIDX_TEST_LATEST_VERSION"
-const val ANDROIDX_TEST_RULES_LATEST = "androidx.test:rules:$ANDROIDX_TEST_LATEST_VERSION"
-const val ANDROIDX_TEST_RUNNER_LATEST = "androidx.test:runner:$ANDROIDX_TEST_LATEST_VERSION"
-
 const val AUTO_COMMON = "com.google.auto:auto-common:0.11"
 const val AUTO_SERVICE_ANNOTATIONS = "com.google.auto.service:auto-service-annotations:1.0-rc6"
 const val AUTO_SERVICE_PROCESSOR = "com.google.auto.service:auto-service:1.0-rc6"
diff --git a/compose/integration-tests/demos/build.gradle b/compose/integration-tests/demos/build.gradle
index c80024b..499c336 100644
--- a/compose/integration-tests/demos/build.gradle
+++ b/compose/integration-tests/demos/build.gradle
@@ -32,7 +32,7 @@
     implementation("androidx.preference:preference-ktx:1.1.1")
 
     androidTestImplementation(project(":compose:ui:ui-test-junit4"))
-
+    androidTestImplementation(ANDROIDX_TEST_CORE)
     androidTestImplementation(ANDROIDX_TEST_RULES)
     androidTestImplementation(ANDROIDX_TEST_RUNNER)
     androidTestImplementation(ESPRESSO_CORE)
diff --git a/compose/test-utils/build.gradle b/compose/test-utils/build.gradle
index 9683b8b..4f47043 100644
--- a/compose/test-utils/build.gradle
+++ b/compose/test-utils/build.gradle
@@ -46,6 +46,7 @@
         implementation(projectOrArtifact(":compose:ui:ui-unit"))
         implementation(projectOrArtifact(":compose:ui:ui-graphics"))
         implementation(projectOrArtifact(":activity:activity-compose"))
+        implementation(ANDROIDX_TEST_CORE)
         implementation(ANDROIDX_TEST_RULES)
 
         // This has stub APIs for access to legacy Android APIs, so we don't want
@@ -83,6 +84,7 @@
                 // This has stub APIs for access to legacy Android APIs, so we don't want
                 // any dependency on this module.
                 compileOnly(projectOrArtifact(":compose:ui:ui-android-stubs"))
+                implementation(ANDROIDX_TEST_CORE)
                 implementation(ANDROIDX_TEST_RULES)
             }
 
diff --git a/compose/ui/ui-test-junit4/build.gradle b/compose/ui/ui-test-junit4/build.gradle
index 753900b..89bbc5a 100644
--- a/compose/ui/ui-test-junit4/build.gradle
+++ b/compose/ui/ui-test-junit4/build.gradle
@@ -41,7 +41,7 @@
     if(!AndroidXUiPlugin.isMultiplatformEnabled(project)) {
         api(project(":compose:ui:ui-test"))
         api("androidx.activity:activity:1.2.0")
-        api(ANDROIDX_TEST_EXT_JUNIT)
+        api("androidx.test.ext:junit:1.1.2")
         api(JUNIT)
         api(KOTLIN_STDLIB)
         api(KOTLIN_STDLIB_COMMON)
@@ -52,8 +52,8 @@
         implementation("androidx.annotation:annotation:1.1.0")
         implementation("androidx.lifecycle:lifecycle-common:2.3.0")
         implementation("androidx.lifecycle:lifecycle-runtime:2.3.0")
-        implementation(ANDROIDX_TEST_CORE)
-        implementation(ANDROIDX_TEST_MONITOR)
+        implementation("androidx.test:core:1.3.0")
+        implementation("androidx.test:monitor:1.3.0")
         implementation(ESPRESSO_CORE)
         implementation(ESPRESSO_IDLING_RESOURCE)
         implementation(KOTLIN_COROUTINES_CORE)
@@ -103,14 +103,14 @@
             androidMain.dependencies {
                 api("androidx.activity:activity:1.2.0")
                 implementation project(":activity:activity-compose")
-                api(ANDROIDX_TEST_EXT_JUNIT)
+                api("androidx.test.ext:junit:1.1.2")
 
                 implementation(project(":compose:animation:animation-core"))
                 implementation(project(":compose:runtime:runtime-saveable"))
                 implementation("androidx.lifecycle:lifecycle-common:2.3.0")
                 implementation("androidx.lifecycle:lifecycle-runtime:2.3.0")
-                implementation(ANDROIDX_TEST_CORE)
-                implementation(ANDROIDX_TEST_MONITOR)
+                implementation("androidx.test:core:1.3.0")
+                implementation("androidx.test:monitor:1.3.0")
                 implementation(ESPRESSO_CORE)
                 implementation(ESPRESSO_IDLING_RESOURCE)
             }
diff --git a/compose/ui/ui-test-manifest/integration-tests/testapp/build.gradle b/compose/ui/ui-test-manifest/integration-tests/testapp/build.gradle
index ef1ee31..350db1d 100644
--- a/compose/ui/ui-test-manifest/integration-tests/testapp/build.gradle
+++ b/compose/ui/ui-test-manifest/integration-tests/testapp/build.gradle
@@ -30,6 +30,7 @@
 
     androidTestImplementation(project(":compose:ui:ui-test-junit4"))
     androidTestImplementation(ANDROIDX_TEST_RUNNER)
+    androidTestImplementation(ANDROIDX_TEST_CORE)
 }
 
 android {
diff --git a/compose/ui/ui/build.gradle b/compose/ui/ui/build.gradle
index ca35bc6..a131583 100644
--- a/compose/ui/ui/build.gradle
+++ b/compose/ui/ui/build.gradle
@@ -80,9 +80,9 @@
         testImplementation(project(":compose:ui:ui-test-junit4"))
         testImplementation(project(":compose:test-utils"))
 
-        androidTestImplementation(ANDROIDX_TEST_CORE_LATEST)
-        androidTestImplementation(ANDROIDX_TEST_RULES_LATEST)
-        androidTestImplementation(ANDROIDX_TEST_RUNNER_LATEST)
+        androidTestImplementation(ANDROIDX_TEST_CORE)
+        androidTestImplementation(ANDROIDX_TEST_RULES)
+        androidTestImplementation(ANDROIDX_TEST_RUNNER)
         androidTestImplementation(ANDROIDX_TEST_EXT_KTX)
         androidTestImplementation(ANDROIDX_TEST_UIAUTOMATOR)
         androidTestImplementation(KOTLIN_COROUTINES_TEST)
diff --git a/core/core/src/androidTest/java/androidx/core/location/LocationCompatTest.java b/core/core/src/androidTest/java/androidx/core/location/LocationCompatTest.java
index 6584403..13d7a29 100644
--- a/core/core/src/androidTest/java/androidx/core/location/LocationCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/location/LocationCompatTest.java
@@ -26,6 +26,7 @@
 import android.os.Build;
 import android.os.SystemClock;
 
+import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 
 import org.junit.Test;
@@ -70,6 +71,7 @@
                 < MAX_ELAPSED_REALTIME_OFFSET_MS);
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189491755
     @Test
     public void testMock() {
         Location location = new Location("");
diff --git a/core/core/src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java b/core/core/src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java
index f7fe966..93f601c 100644
--- a/core/core/src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java
@@ -52,6 +52,7 @@
                 (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189491928
     @Test
     public void testGetSubscriptionId() {
         SubscriptionManager subscriptionManager = (SubscriptionManager) mContext.getSystemService(
diff --git a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatTest.kt b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatTest.kt
index 16af340..54862d3 100644
--- a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsCompatTest.kt
@@ -278,6 +278,7 @@
         assertEquals(result.hashCode(), result2.hashCode())
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492236
     @Test
     public fun set_only_navigation_bar_insets() {
         val insets = WindowInsetsCompat.Builder()
diff --git a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt
index ca37b0c..4f40563 100644
--- a/core/core/src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt
@@ -263,7 +263,8 @@
     }
 
     @Test
-    @SdkSuppress(maxSdkVersion = 29) // Flag deprecated in 30+
+    // minSdkVersion = 21 due to b/189492236
+    @SdkSuppress(minSdkVersion = 21, maxSdkVersion = 29) // Flag deprecated in 30+
     public fun systemBarsBehavior_swipe() {
         scenario.onActivity {
             windowInsetsController.systemBarsBehavior =
@@ -279,7 +280,8 @@
     }
 
     @Test
-    @SdkSuppress(maxSdkVersion = 29) // Flag deprecated in 30+
+    // minSdkVersion = 21 due to b/189492236
+    @SdkSuppress(minSdkVersion = 21, maxSdkVersion = 29) // Flag deprecated in 30+
     public fun systemBarsBehavior_transient() {
         scenario.onActivity {
             windowInsetsController.systemBarsBehavior =
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index b695822..733bb6f 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -12,8 +12,8 @@
 # -----------------------------------------------------------------------------
 
 androidLintMin = "26.3.0"
-androidxTest = "1.3.0"
-androidxTestExt = "1.1.2"
+androidxTest = "1.4.0-beta01"
+androidxTestExt = "1.1.3-beta01"
 autoService = "1.0-rc6"
 autoValue = "1.6.3"
 dexmaker = "2.25.0"
diff --git a/paging/runtime/src/androidTest/java/androidx/paging/AsyncPagingDataDifferTest.kt b/paging/runtime/src/androidTest/java/androidx/paging/AsyncPagingDataDifferTest.kt
index 7fd3cb8..85f72e34 100644
--- a/paging/runtime/src/androidTest/java/androidx/paging/AsyncPagingDataDifferTest.kt
+++ b/paging/runtime/src/androidTest/java/androidx/paging/AsyncPagingDataDifferTest.kt
@@ -28,6 +28,7 @@
 import androidx.recyclerview.widget.ListUpdateCallback
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
 import androidx.testutils.MainDispatcherRule
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.Dispatchers
@@ -112,6 +113,7 @@
         workerDispatcher = Dispatchers.Main
     )
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492631
     @Test
     fun performDiff_fastPathLoadStates() = testScope.runBlockingTest {
         val loadEvents = mutableListOf<CombinedLoadStates>()
@@ -168,6 +170,7 @@
         )
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492631
     @Test
     fun performDiff_fastPathLoadStatesFlow() = testScope.runBlockingTest {
         val loadEvents = mutableListOf<CombinedLoadStates>()
@@ -368,6 +371,7 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492631
     @Test
     fun submitData_guaranteesOrder() = testScope.runBlockingTest {
         val pager = Pager(config = PagingConfig(2, enablePlaceholders = false), initialKey = 50) {
@@ -447,6 +451,7 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492631
     @Test
     fun submitData_doesNotCancelCollectionsCoroutine() = testScope.runBlockingTest {
         lateinit var source1: TestPagingSource
@@ -508,6 +513,7 @@
         job2.cancelAndJoin()
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492631
     @Test
     fun loadStateFlowSynchronouslyUpdates() = testScope.runBlockingTest {
         var combinedLoadStates: CombinedLoadStates? = null
diff --git a/paging/runtime/src/androidTest/java/androidx/paging/StateRestorationTest.kt b/paging/runtime/src/androidTest/java/androidx/paging/StateRestorationTest.kt
index 9fe24ea..c4b76df7 100644
--- a/paging/runtime/src/androidTest/java/androidx/paging/StateRestorationTest.kt
+++ b/paging/runtime/src/androidTest/java/androidx/paging/StateRestorationTest.kt
@@ -30,6 +30,7 @@
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
 import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -108,6 +109,7 @@
         createRecyclerView()
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492631
     @Test
     fun restoreState_withPlaceholders() {
         runTest {
@@ -152,6 +154,7 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492631
     @Test
     fun restoreState_withoutPlaceholders_cachedIn() {
         runTest {
@@ -181,6 +184,7 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492631
     @Test
     fun emptyNewPage_allowRestoration() {
         // check that we don't block restoration indefinitely if new pager is empty.
@@ -206,6 +210,7 @@
         }
     }
 
+    @SdkSuppress(minSdkVersion = 21) // b/189492631
     @Test
     fun userOverridesStateRestoration() {
         runTest {
diff --git a/transition/transition/build.gradle b/transition/transition/build.gradle
index 1b20ed2..6fd5d13a 100644
--- a/transition/transition/build.gradle
+++ b/transition/transition/build.gradle
@@ -1,6 +1,8 @@
 import androidx.build.LibraryGroups
 import androidx.build.Publish
 
+import static androidx.build.dependencies.DependenciesKt.MULTIDEX
+
 plugins {
     id("AndroidXPlugin")
     id("com.android.library")
@@ -28,6 +30,7 @@
     androidTestImplementation(project(":internal-testutils-runtime"), {
         exclude group: "androidx.fragment", module: "fragment"
     })
+    androidTestImplementation(libs.multidex)
 }
 
 android {
@@ -37,6 +40,9 @@
     aaptOptions {
         additionalParameters "--no-version-transitions"
     }
+    defaultConfig {
+        multiDexEnabled = true
+    }
 }
 
 androidx {