Update BuildCompat for Sv2 and Tiramisu

Deprecates isAtLeastS() and replaces usages.

Relnote: Adds experimental BuildCompat methods for future SDKs
Fixes: 207528937
Test: BuildCompatTest
Change-Id: Iafd82e20e0c6d54878d352baddb18e86095504a7
diff --git a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java
index 11b6755..720d679 100644
--- a/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java
+++ b/appsearch/appsearch-debug-view/src/main/java/androidx/appsearch/debugview/DebugAppSearchManager.java
@@ -34,7 +34,6 @@
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.localstorage.LocalStorage;
 import androidx.appsearch.platformstorage.PlatformStorage;
-import androidx.core.os.BuildCompat;
 import androidx.core.util.Preconditions;
 
 import com.google.common.util.concurrent.Futures;
@@ -103,7 +102,7 @@
                                 unused -> debugAppSearchManager, executor);
                 break;
             case AppSearchDebugActivity.STORAGE_TYPE_PLATFORM:
-                if (BuildCompat.isAtLeastS()) {
+                if (Build.VERSION.SDK_INT >= 31) {
                     debugAppSearchManagerListenableFuture =
                             Futures.transform(
                                     debugAppSearchManager.initializePlatformStorage(databaseName),
diff --git a/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java b/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java
index 9b66d9a..f01b379 100644
--- a/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java
+++ b/core/core-appdigest/src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java
@@ -53,7 +53,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.concurrent.futures.ResolvableFuture;
-import androidx.core.os.BuildCompat;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
@@ -273,7 +272,7 @@
     public void testDefaultChecksums() throws Exception {
         Checksum[] checksums = getChecksums(V2V3_PACKAGE_NAME, true, 0, TRUST_NONE);
         assertNotNull(checksums);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertEquals(1, checksums.length);
             assertEquals(checksums[0].getType(),
                     android.content.pm.Checksum.TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256);
@@ -300,7 +299,7 @@
 
         Checksum[] checksums = getChecksums(V4_PACKAGE_NAME, true, 0, TRUST_NONE);
         assertNotNull(checksums);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertEquals(checksums.length, 6);
             // v2/v3 signature use 1M merkle tree.
             assertEquals(null, checksums[0].getSplitName());
@@ -344,7 +343,7 @@
         Checksum[] checksums = getChecksums(V4_PACKAGE_NAME, true, TYPE_WHOLE_SHA256,
                 TRUST_NONE);
         assertNotNull(checksums);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertEquals(checksums.length, 12);
             // v2/v3 signature use 1M merkle tree.
             assertEquals(null, checksums[0].getSplitName());
@@ -440,7 +439,7 @@
         Checksum[] checksums = getChecksums(FIXED_PACKAGE_NAME, true, 0,
                 TRUST_NONE);
         assertNotNull(checksums);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertEquals(1, checksums.length);
             // v2/v3 signature use 1M merkle tree.
             assertEquals(TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256, checksums[0].getType());
@@ -498,7 +497,7 @@
         Checksum[] checksums = getChecksums(FIXED_PACKAGE_NAME, true, 0,
                 TRUST_NONE);
         assertNotNull(checksums);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertEquals(1, checksums.length);
             // v2/v3 signature use 1M merkle tree.
             assertEquals(TYPE_PARTIAL_MERKLE_ROOT_1M_SHA512, checksums[0].getType());
@@ -556,7 +555,7 @@
         Checksum[] checksums = getChecksums(V2V3_PACKAGE_NAME, true, ALL_CHECKSUMS,
                 TRUST_NONE);
         assertNotNull(checksums);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertEquals(checksums.length, 7);
             assertEquals(TYPE_WHOLE_MERKLE_ROOT_4K_SHA256, checksums[0].getType());
             assertEquals(TYPE_WHOLE_MD5, checksums[1].getType());
@@ -896,7 +895,7 @@
     }
 
     private void validateFixedAllChecksums(Checksum[] checksums) {
-        if (!BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT < 31) {
             validateFixedAllChecksumsFallback(checksums);
             return;
         }
diff --git a/core/core-appdigest/src/main/java/androidx/core/appdigest/Checksums.java b/core/core-appdigest/src/main/java/androidx/core/appdigest/Checksums.java
index 708626b7..750ac3d 100644
--- a/core/core-appdigest/src/main/java/androidx/core/appdigest/Checksums.java
+++ b/core/core-appdigest/src/main/java/androidx/core/appdigest/Checksums.java
@@ -34,7 +34,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.concurrent.futures.ResolvableFuture;
-import androidx.core.os.BuildCompat;
 import androidx.core.util.Preconditions;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -116,7 +115,7 @@
         Preconditions.checkNotNull(trustedInstallers);
         Preconditions.checkNotNull(executor);
 
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             return ChecksumsApiSImpl.getChecksums(context, packageName, includeSplits, required,
                     trustedInstallers, executor);
         }
@@ -156,7 +155,7 @@
         }
 
         final String installerPackageName;
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             installerPackageName = ChecksumsApiSImpl.getInstallerPackageName(context, packageName);
         } else {
             installerPackageName = null;
@@ -239,7 +238,7 @@
             try {
                 final SparseArray<Checksum> checksums = new SparseArray<>();
 
-                if (BuildCompat.isAtLeastS()) {
+                if (Build.VERSION.SDK_INT >= 31) {
                     try {
                         ChecksumsApiSImpl.getInstallerChecksums(context, split, file, required,
                                 installerPackageName, trustedInstallers, checksums);
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index 399b948..6480cd1 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -1646,7 +1646,7 @@
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
-    method @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
+    method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
   }
 
   public final class CancellationSignal {
diff --git a/core/core/api/public_plus_experimental_current.txt b/core/core/api/public_plus_experimental_current.txt
index 03bbcc0..5526a5d 100644
--- a/core/core/api/public_plus_experimental_current.txt
+++ b/core/core/api/public_plus_experimental_current.txt
@@ -1646,8 +1646,9 @@
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
-    method @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
-    method @ChecksSdkIntAtLeast(codename="T") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastT();
+    method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
+    method @ChecksSdkIntAtLeast(api=32, codename="Sv2") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastSv2();
+    method @ChecksSdkIntAtLeast(codename="Tiramisu") @androidx.core.os.BuildCompat.PrereleaseSdkCheck public static boolean isAtLeastT();
   }
 
   @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface BuildCompat.PrereleaseSdkCheck {
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index 85539f6..1c85f37 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -1977,7 +1977,7 @@
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.P) public static boolean isAtLeastP();
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.Q) public static boolean isAtLeastQ();
     method @Deprecated @ChecksSdkIntAtLeast(api=android.os.Build.VERSION_CODES.R) public static boolean isAtLeastR();
-    method @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
+    method @Deprecated @ChecksSdkIntAtLeast(api=31, codename="S") public static boolean isAtLeastS();
   }
 
   public final class CancellationSignal {
diff --git a/core/core/src/androidTest/java/androidx/core/os/BuildCompatTest.java b/core/core/src/androidTest/java/androidx/core/os/BuildCompatTest.java
index 93c2ae3..27b0171 100644
--- a/core/core/src/androidTest/java/androidx/core/os/BuildCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/os/BuildCompatTest.java
@@ -34,8 +34,8 @@
     @Test
     public void isAtLeastPreReleaseCodename() {
         assertTrue(BuildCompat.isAtLeastPreReleaseCodename("S", "S"));
-        assertTrue(BuildCompat.isAtLeastPreReleaseCodename("S", "T"));
-        assertFalse(BuildCompat.isAtLeastPreReleaseCodename("T", "S"));
+        assertTrue(BuildCompat.isAtLeastPreReleaseCodename("S", "Tiramisu"));
+        assertFalse(BuildCompat.isAtLeastPreReleaseCodename("Tiramisu", "S"));
 
         assertTrue(BuildCompat.isAtLeastPreReleaseCodename("O", "OMR1"));
         assertFalse(BuildCompat.isAtLeastPreReleaseCodename("OMR1", "O"));
diff --git a/core/core/src/androidTest/java/androidx/core/widget/EdgeEffectCompatTest.java b/core/core/src/androidTest/java/androidx/core/widget/EdgeEffectCompatTest.java
index 6ca1bf9..80537e2 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/EdgeEffectCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/widget/EdgeEffectCompatTest.java
@@ -20,6 +20,7 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.os.Build;
 import android.support.v4.BaseInstrumentationTestCase;
 import android.support.v4.BaseTestActivity;
 import android.util.AttributeSet;
@@ -29,7 +30,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
-import androidx.core.os.BuildCompat;
 import androidx.core.test.R;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
@@ -58,7 +58,7 @@
 
     @Test
     public void distanceApi() {
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertEquals(0, EdgeEffectCompat.getDistance(mEdgeEffect), 0f);
             assertEquals(1f, EdgeEffectCompat.onPullDistance(mEdgeEffect, 1, 0.5f), 0f);
             assertEquals(1, EdgeEffectCompat.getDistance(mEdgeEffect), 0f);
diff --git a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewTest.java b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewTest.java
index 00466d6..db3f6a7 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewTest.java
+++ b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewTest.java
@@ -25,12 +25,12 @@
 import android.content.Context;
 import android.graphics.Rect;
 import android.graphics.drawable.GradientDrawable;
+import android.os.Build;
 import android.os.Parcelable;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
 
-import androidx.core.os.BuildCompat;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
@@ -317,7 +317,7 @@
         swipeDown(false);
         assertEquals(0, mNestedScrollView.getScrollY());
         swipeUp(true);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             // This should just reverse the overscroll effect
             assertEquals(0, mNestedScrollView.getScrollY());
         } else {
@@ -339,7 +339,7 @@
         swipeUp(false);
         assertEquals(scrollRange, mNestedScrollView.getScrollY());
         swipeDown(true);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             // This should just reverse the overscroll effect
             assertEquals(scrollRange, mNestedScrollView.getScrollY());
         } else {
@@ -358,7 +358,7 @@
         flingDown();
         assertTrue(edgeEffect.getDistance() > 0);
 
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertTrue(edgeEffect.getAbsorbed() > 0);
         } else {
             assertEquals(0, edgeEffect.getAbsorbed());
@@ -382,7 +382,7 @@
         assertTrue(edgeEffect.getDistance() > 0);
         assertEquals(scrollRange, mNestedScrollView.getScrollY());
 
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertTrue(edgeEffect.getAbsorbed() > 0);
         } else {
             assertEquals(0, edgeEffect.getAbsorbed());
diff --git a/core/core/src/main/java/androidx/core/app/ActivityCompat.java b/core/core/src/main/java/androidx/core/app/ActivityCompat.java
index 77a8f39..c8f5b71 100644
--- a/core/core/src/main/java/androidx/core/app/ActivityCompat.java
+++ b/core/core/src/main/java/androidx/core/app/ActivityCompat.java
@@ -42,7 +42,6 @@
 import androidx.annotation.RestrictTo;
 import androidx.core.content.ContextCompat;
 import androidx.core.content.LocusIdCompat;
-import androidx.core.os.BuildCompat;
 import androidx.core.view.DragAndDropPermissionsCompat;
 
 import java.util.Arrays;
@@ -580,7 +579,7 @@
      * </ul>
      */
     public static boolean isLaunchedFromBubble(@NonNull Activity activity) {
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             return Api31Impl.isLaunchedFromBubble(activity);
         } else if (Build.VERSION.SDK_INT == 30) {
             return activity.getDisplay() != null
diff --git a/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java b/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
index 76a9bcd..15b05ac 100644
--- a/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
+++ b/core/core/src/main/java/androidx/core/app/NotificationCompatBuilder.java
@@ -36,7 +36,6 @@
 import androidx.annotation.RestrictTo;
 import androidx.collection.ArraySet;
 import androidx.core.graphics.drawable.IconCompat;
-import androidx.core.os.BuildCompat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -248,7 +247,7 @@
                 mBuilder.setLocusId(b.mLocusId.toLocusId());
             }
         }
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             if (b.mFgsDeferBehavior != NotificationCompat.FOREGROUND_SERVICE_DEFAULT) {
                 mBuilder.setForegroundServiceBehavior(b.mFgsDeferBehavior);
             }
diff --git a/core/core/src/main/java/androidx/core/content/res/ColorStateListInflaterCompat.java b/core/core/src/main/java/androidx/core/content/res/ColorStateListInflaterCompat.java
index 9ea4288..dbf7d45 100644
--- a/core/core/src/main/java/androidx/core/content/res/ColorStateListInflaterCompat.java
+++ b/core/core/src/main/java/androidx/core/content/res/ColorStateListInflaterCompat.java
@@ -22,6 +22,7 @@
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Color;
+import android.os.Build;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.StateSet;
@@ -37,7 +38,6 @@
 import androidx.annotation.XmlRes;
 import androidx.core.R;
 import androidx.core.math.MathUtils;
-import androidx.core.os.BuildCompat;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
@@ -168,7 +168,7 @@
             }
 
             final float lStar;
-            if (BuildCompat.isAtLeastS()
+            if (Build.VERSION.SDK_INT >= 31
                     && a.hasValue(R.styleable.ColorStateListItem_android_lStar)) {
                 lStar = a.getFloat(R.styleable.ColorStateListItem_android_lStar, -1.0f);
             } else {
diff --git a/core/core/src/main/java/androidx/core/os/BuildCompat.java b/core/core/src/main/java/androidx/core/os/BuildCompat.java
index 8e25696..b1944a6 100644
--- a/core/core/src/main/java/androidx/core/os/BuildCompat.java
+++ b/core/core/src/main/java/androidx/core/os/BuildCompat.java
@@ -162,27 +162,48 @@
      * Android S or newer.
      *
      * @return {@code true} if S APIs are available for use, {@code false} otherwise
+     * @deprecated Android S is a finalized release and this method is no longer necessary. It
+     *             will be removed in a future release of this library. Instead, use
+     *             {@code Build.VERSION.SDK_INT >= 31}.
      */
     @ChecksSdkIntAtLeast(api = 31, codename = "S")
+    @Deprecated
     public static boolean isAtLeastS() {
         return VERSION.SDK_INT >= 31
                 || (VERSION.SDK_INT >= 30 && isAtLeastPreReleaseCodename("S", VERSION.CODENAME));
     }
 
     /**
-     * Checks if the device is running on a pre-release version of Android T or a release version of
-     * Android T or newer.
+     * Checks if the device is running on a pre-release version of Android Sv2 or a release
+     * version of Android Sv2 or newer.
      * <p>
-     * <strong>Note:</strong> When Android T is finalized for release, this method will be
+     * <strong>Note:</strong> When Android Sv2 is finalized for release, this method will be
      * removed and all calls must be replaced with {@code Build.VERSION.SDK_INT >=
-     * Build.VERSION_CODES.T}.
+     * Build.VERSION_CODES.S_V2}.
+     *
+     * @return {@code true} if Sv2 APIs are available for use, {@code false} otherwise
+     */
+    @PrereleaseSdkCheck
+    @ChecksSdkIntAtLeast(api = 32, codename = "Sv2")
+    public static boolean isAtLeastSv2() {
+        return VERSION.SDK_INT >= 32
+                || (VERSION.SDK_INT >= 31 && isAtLeastPreReleaseCodename("Sv2", VERSION.CODENAME));
+    }
+
+    /**
+     * Checks if the device is running on a pre-release version of Android Tiramisu or a release
+     * version of Android Tiramisu or newer.
+     * <p>
+     * <strong>Note:</strong> When Android Tiramisu is finalized for release, this method will be
+     * removed and all calls must be replaced with {@code Build.VERSION.SDK_INT >=
+     * Build.VERSION_CODES.TIRAMISU}.
      *
      * @return {@code true} if T APIs are available for use, {@code false} otherwise
      */
     @PrereleaseSdkCheck
-    @ChecksSdkIntAtLeast(codename = "T")
+    @ChecksSdkIntAtLeast(codename = "Tiramisu")
     public static boolean isAtLeastT() {
-        return VERSION.SDK_INT >= 31 && isAtLeastPreReleaseCodename("T", VERSION.CODENAME);
+        return VERSION.SDK_INT >= 32 && isAtLeastPreReleaseCodename("Tiramisu", VERSION.CODENAME);
     }
 
     /**
diff --git a/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java b/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
index 24b4ce6..9203f2f 100644
--- a/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
+++ b/media/media/src/main/java/android/support/v4/media/session/MediaSessionCompat.java
@@ -73,7 +73,6 @@
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.core.app.BundleCompat;
-import androidx.core.os.BuildCompat;
 import androidx.media.MediaSessionManager;
 import androidx.media.MediaSessionManager.RemoteUserInfo;
 import androidx.media.VolumeProviderCompat;
@@ -559,7 +558,7 @@
             mediaButtonIntent.setComponent(mbrComponent);
             mbrIntent = PendingIntent.getBroadcast(context,
                     0/* requestCode, ignored */, mediaButtonIntent,
-                    BuildCompat.isAtLeastS() ? PendingIntent.FLAG_MUTABLE : 0);
+                    Build.VERSION.SDK_INT >= 31 ? PendingIntent.FLAG_MUTABLE : 0);
         }
 
         if (android.os.Build.VERSION.SDK_INT >= 21) {
diff --git a/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java b/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java
index f344746..f131f65 100644
--- a/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java
+++ b/media/media/src/main/java/androidx/media/session/MediaButtonReceiver.java
@@ -37,7 +37,6 @@
 
 import androidx.annotation.RestrictTo;
 import androidx.core.content.ContextCompat;
-import androidx.core.os.BuildCompat;
 import androidx.media.MediaBrowserServiceCompat;
 
 import java.util.List;
@@ -272,7 +271,7 @@
             intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
         }
         return PendingIntent.getBroadcast(context, keyCode, intent,
-                BuildCompat.isAtLeastS() ? PendingIntent.FLAG_MUTABLE : 0);
+                Build.VERSION.SDK_INT >= 31 ? PendingIntent.FLAG_MUTABLE : 0);
     }
 
     /**
diff --git a/media/version-compat-tests/current/service/src/androidTest/java/android/support/mediacompat/service/MediaSessionCompatCallbackTest.java b/media/version-compat-tests/current/service/src/androidTest/java/android/support/mediacompat/service/MediaSessionCompatCallbackTest.java
index aed2cf7..3ec68e1 100644
--- a/media/version-compat-tests/current/service/src/androidTest/java/android/support/mediacompat/service/MediaSessionCompatCallbackTest.java
+++ b/media/version-compat-tests/current/service/src/androidTest/java/android/support/mediacompat/service/MediaSessionCompatCallbackTest.java
@@ -101,7 +101,6 @@
 import android.util.Log;
 import android.view.KeyEvent;
 
-import androidx.core.os.BuildCompat;
 import androidx.media.MediaSessionManager.RemoteUserInfo;
 import androidx.media.VolumeProviderCompat;
 import androidx.media.test.lib.CustomParcelable;
@@ -745,7 +744,7 @@
                 .setComponent(new ComponentName(getApplicationContext(),
                         getApplicationContext().getClass()));
         PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent,
-                BuildCompat.isAtLeastS() ? PendingIntent.FLAG_MUTABLE : 0);
+                Build.VERSION.SDK_INT >= 31 ? PendingIntent.FLAG_MUTABLE : 0);
         mSession.setMediaButtonReceiver(pi);
 
         // Set state to STATE_PLAYING to get higher priority.
diff --git a/media/version-compat-tests/previous/service/src/androidTest/java/android/support/mediacompat/service/MediaSessionCompatCallbackTest.java b/media/version-compat-tests/previous/service/src/androidTest/java/android/support/mediacompat/service/MediaSessionCompatCallbackTest.java
index ed18bd5..8ab279d 100644
--- a/media/version-compat-tests/previous/service/src/androidTest/java/android/support/mediacompat/service/MediaSessionCompatCallbackTest.java
+++ b/media/version-compat-tests/previous/service/src/androidTest/java/android/support/mediacompat/service/MediaSessionCompatCallbackTest.java
@@ -101,7 +101,6 @@
 import android.util.Log;
 import android.view.KeyEvent;
 
-import androidx.core.os.BuildCompat;
 import androidx.media.MediaSessionManager.RemoteUserInfo;
 import androidx.media.VolumeProviderCompat;
 import androidx.media.test.lib.CustomParcelable;
@@ -745,7 +744,7 @@
                 .setComponent(new ComponentName(getApplicationContext(),
                         getApplicationContext().getClass()));
         PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, mediaButtonIntent,
-                BuildCompat.isAtLeastS() ? PendingIntent.FLAG_MUTABLE : 0);
+                Build.VERSION.SDK_INT >= 31 ? PendingIntent.FLAG_MUTABLE : 0);
         mSession.setMediaButtonReceiver(pi);
 
         // Set state to STATE_PLAYING to get higher priority.
diff --git a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java
index 37081ac7..20d9a96 100644
--- a/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java
+++ b/media2/media2-session/src/main/java/androidx/media2/session/MediaSessionImplBase.java
@@ -61,7 +61,6 @@
 import androidx.annotation.Nullable;
 import androidx.concurrent.futures.AbstractResolvableFuture;
 import androidx.concurrent.futures.ResolvableFuture;
-import androidx.core.os.BuildCompat;
 import androidx.core.util.ObjectsCompat;
 import androidx.media.AudioAttributesCompat;
 import androidx.media.MediaBrowserServiceCompat;
@@ -185,7 +184,7 @@
             }
             mbrComponent = sServiceComponentName;
         }
-        int pendingIntentFlagMutable = BuildCompat.isAtLeastS() ? PendingIntent.FLAG_MUTABLE : 0;
+        int pendingIntentFlagMutable = Build.VERSION.SDK_INT >= 31 ? PendingIntent.FLAG_MUTABLE : 0;
         if (mbrComponent == null) {
             // No service to revive playback after it's dead.
             // Create a PendingIntent that points to the runtime broadcast receiver.
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteButton.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteButton.java
index 3584deaa..43c29f4 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteButton.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteButton.java
@@ -45,7 +45,6 @@
 import androidx.appcompat.content.res.AppCompatResources;
 import androidx.appcompat.widget.TooltipCompat;
 import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.core.os.BuildCompat;
 import androidx.core.view.ViewCompat;
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
@@ -399,7 +398,7 @@
      */
     private boolean showOutputSwitcher() {
         boolean result = false;
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             result = showOutputSwitcherForAndroidSAndAbove();
             if (!result) {
                 // The intent action and related string constants are changed in S,
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/StretchEdgeEffectTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/StretchEdgeEffectTest.java
index e99348e..a4cea9f 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/StretchEdgeEffectTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/StretchEdgeEffectTest.java
@@ -23,12 +23,12 @@
 import static org.junit.Assert.assertTrue;
 
 import android.content.Context;
+import android.os.Build;
 import android.view.MotionEvent;
 import android.view.ViewGroup;
 import android.widget.EdgeEffect;
 
 import androidx.annotation.NonNull;
-import androidx.core.os.BuildCompat;
 import androidx.core.view.InputDeviceCompat;
 import androidx.core.widget.EdgeEffectCompat;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -85,12 +85,12 @@
         scrollToPosition(0);
         waitForIdleScroll(mRecyclerView);
         scrollHorizontalBy(-3);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertTrue(EdgeEffectCompat.getDistance(mFactory.mLeft) > 0);
         }
         scrollHorizontalBy(4);
         assertEquals(0f, EdgeEffectCompat.getDistance(mFactory.mLeft), 0f);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertTrue(mFactory.mLeft.isFinished());
         }
     }
@@ -103,12 +103,12 @@
         scrollToPosition(0);
         waitForIdleScroll(mRecyclerView);
         scrollVerticalBy(3);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertTrue(EdgeEffectCompat.getDistance(mFactory.mTop) > 0);
         }
         scrollVerticalBy(-4);
         assertEquals(0f, EdgeEffectCompat.getDistance(mFactory.mTop), 0f);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertTrue(mFactory.mTop.isFinished());
         }
     }
@@ -123,12 +123,12 @@
         scrollToPosition(NUM_ITEMS - 1);
         waitForIdleScroll(mRecyclerView);
         scrollHorizontalBy(3);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertTrue(EdgeEffectCompat.getDistance(mFactory.mRight) > 0);
         }
         scrollHorizontalBy(-4);
         assertEquals(0f, EdgeEffectCompat.getDistance(mFactory.mRight), 0f);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertTrue(mFactory.mRight.isFinished());
         }
     }
@@ -141,12 +141,12 @@
         scrollToPosition(NUM_ITEMS - 1);
         waitForIdleScroll(mRecyclerView);
         scrollVerticalBy(-3);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertTrue(EdgeEffectCompat.getDistance(mFactory.mBottom) > 0);
         }
 
         scrollVerticalBy(4);
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             assertEquals(0f, EdgeEffectCompat.getDistance(mFactory.mBottom), 0f);
             assertTrue(mFactory.mBottom.isFinished());
         }
@@ -165,7 +165,7 @@
         // test flinging right
         dragHorizontally(1000);
 
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             mActivityRule.runOnUiThread(() -> {
                 float pullDistance = EdgeEffectCompat.getDistance(mFactory.mLeft);
                 assertTrue(pullDistance > 0);
@@ -219,7 +219,7 @@
         dragVertically(1000);
         Thread.sleep(1000);
 
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             mActivityRule.runOnUiThread(() -> {
                 float pullDistance = EdgeEffectCompat.getDistance(mFactory.mTop);
                 assertTrue(pullDistance > 0);
@@ -273,7 +273,7 @@
         // test flinging left
         dragHorizontally(-1000);
 
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             mActivityRule.runOnUiThread(() -> {
                 float pullDistance = EdgeEffectCompat.getDistance(mFactory.mRight);
                 assertTrue(pullDistance > 0);
@@ -328,7 +328,7 @@
         // test flinging up
         dragVertically(-1000);
 
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             mActivityRule.runOnUiThread(() -> {
                 float pullDistance = EdgeEffectCompat.getDistance(mFactory.mBottom);
                 assertTrue(pullDistance > 0);
diff --git a/viewpager/viewpager/src/androidTest/java/androidx/viewpager/widget/BaseViewPagerTest.java b/viewpager/viewpager/src/androidTest/java/androidx/viewpager/widget/BaseViewPagerTest.java
index ca37f4c..20a36e7 100644
--- a/viewpager/viewpager/src/androidTest/java/androidx/viewpager/widget/BaseViewPagerTest.java
+++ b/viewpager/viewpager/src/androidTest/java/androidx/viewpager/widget/BaseViewPagerTest.java
@@ -55,6 +55,7 @@
 import android.app.Activity;
 import android.content.Context;
 import android.graphics.Color;
+import android.os.Build;
 import android.support.v4.testutils.TestUtilsMatchers;
 import android.text.TextUtils;
 import android.util.Pair;
@@ -66,7 +67,6 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import androidx.core.os.BuildCompat;
 import androidx.test.espresso.ViewAction;
 import androidx.test.espresso.action.EspressoKey;
 import androidx.test.filters.FlakyTest;
@@ -468,7 +468,7 @@
     @Test
     @MediumTest
     public void testFlingAfterStretchAtLeft() {
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             CaptureOnAbsorb edgeEffect = new CaptureOnAbsorb(mViewPager.getContext());
             mViewPager.mLeftEdge = edgeEffect;
             onView(withId(R.id.pager)).perform(ViewPagerActions.wrap(swipeRight()));
@@ -481,7 +481,7 @@
     @Test
     @MediumTest
     public void testFlingAfterStretchAtRight() throws Throwable {
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             CaptureOnAbsorb edgeEffect = new CaptureOnAbsorb(mViewPager.getContext());
             mViewPager.mRightEdge = edgeEffect;
             mActivityTestRule.runOnUiThread(() -> {
diff --git a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt
index 3a561f2..b1fbac3 100644
--- a/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt
+++ b/work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/ForegroundWorker.kt
@@ -23,7 +23,6 @@
 import android.os.Build
 import androidx.annotation.RequiresApi
 import androidx.core.app.NotificationCompat
-import androidx.core.os.BuildCompat
 import androidx.work.CoroutineWorker
 import androidx.work.Data
 import androidx.work.ForegroundInfo
@@ -47,7 +46,7 @@
             delay(delayTime)
             progress = workDataOf(Progress to i * (100 / range))
             setProgress(progress)
-            if (!BuildCompat.isAtLeastS()) {
+            if (Build.VERSION.SDK_INT < 31) {
                 // No need for notifications starting S.
                 notificationManager.notify(
                     notificationId,
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/WorkForegroundRunnableTest.kt b/work/work-runtime/src/androidTest/java/androidx/work/WorkForegroundRunnableTest.kt
index 96ed737..b464e93 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/WorkForegroundRunnableTest.kt
+++ b/work/work-runtime/src/androidTest/java/androidx/work/WorkForegroundRunnableTest.kt
@@ -18,8 +18,8 @@
 
 import android.app.Notification
 import android.content.Context
+import android.os.Build
 import android.util.Log
-import androidx.core.os.BuildCompat
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
@@ -85,7 +85,7 @@
     @Test
     @MediumTest
     public fun callGetForeground_forExpeditedWork1() {
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             return
         }
         val work = getExpeditedRequest<TestWorker>()
@@ -100,7 +100,7 @@
     @Test
     @SmallTest
     public fun callGetForeground_forExpeditedWork2() {
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             return
         }
 
@@ -125,7 +125,7 @@
 
     @SmallTest
     public fun callGetForeground_forExpeditedWork3() {
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             return
         }
 
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/WorkTest.java b/work/work-runtime/src/androidTest/java/androidx/work/WorkTest.java
index 67c6b6c..9b3b8ff 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/WorkTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/WorkTest.java
@@ -24,7 +24,8 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import androidx.core.os.BuildCompat;
+import android.os.Build;
+
 import androidx.test.filters.SdkSuppress;
 import androidx.test.filters.SmallTest;
 import androidx.work.impl.model.WorkSpec;
@@ -146,7 +147,7 @@
 
     @Test
     public void testBuild_expedited_noConstraints() {
-        if (!BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT < 31) {
             return;
         }
 
@@ -160,7 +161,7 @@
 
     @Test
     public void testBuild_expedited_networkConstraints() {
-        if (!BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT < 31) {
             return;
         }
 
@@ -178,7 +179,7 @@
 
     @Test
     public void testBuild_expedited_networkStorageConstraints() {
-        if (!BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT < 31) {
             return;
         }
 
@@ -197,7 +198,7 @@
 
     @Test
     public void testBuild_expedited_withUnspportedConstraints() {
-        if (!BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT < 31) {
             return;
         }
 
@@ -218,7 +219,7 @@
 
     @Test
     public void testBuild_expedited_withUnspportedConstraints2() {
-        if (!BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT < 31) {
             return;
         }
 
diff --git a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobInfoConverterTest.java b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobInfoConverterTest.java
index e617d84..327bac6 100644
--- a/work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobInfoConverterTest.java
+++ b/work/work-runtime/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobInfoConverterTest.java
@@ -35,7 +35,6 @@
 import android.net.Uri;
 import android.os.Build;
 
-import androidx.core.os.BuildCompat;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SdkSuppress;
@@ -245,7 +244,7 @@
     @Test
     @SmallTest
     public void testConvert_expedited() {
-        if (!BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT < 31) {
             return;
         }
 
@@ -258,7 +257,7 @@
     @Test
     @SmallTest
     public void testConvertExpeditedJobs_retriesAreNotExpedited() {
-        if (!BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT < 31) {
             return;
         }
 
@@ -272,7 +271,7 @@
     @Test
     @SmallTest
     public void testConvertExpeditedJobs_delaysAreNotExpedited() {
-        if (!BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT < 31) {
             return;
         }
 
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImpl.java b/work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImpl.java
index ed8718c..393a553 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImpl.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/WorkManagerImpl.java
@@ -32,7 +32,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.arch.core.util.Function;
-import androidx.core.os.BuildCompat;
 import androidx.lifecycle.LiveData;
 import androidx.work.Configuration;
 import androidx.work.ExistingPeriodicWorkPolicy;
@@ -478,7 +477,7 @@
     public PendingIntent createCancelPendingIntent(@NonNull UUID id) {
         Intent intent = createCancelWorkIntent(mContext, id.toString());
         int flags = FLAG_UPDATE_CURRENT;
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             flags |= FLAG_MUTABLE;
         }
         return PendingIntent.getService(mContext, 0, intent, flags);
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java b/work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java
index e6f605d..527c6d6 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java
@@ -31,7 +31,6 @@
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
-import androidx.core.os.BuildCompat;
 import androidx.work.BackoffPolicy;
 import androidx.work.Constraints;
 import androidx.work.ContentUriTriggers;
@@ -128,7 +127,7 @@
         // Retries cannot be expedited jobs, given they will occur at some point in the future.
         boolean isRetry = workSpec.runAttemptCount > 0;
         boolean isDelayed = offset > 0;
-        if (BuildCompat.isAtLeastS() && workSpec.expedited && !isRetry && !isDelayed) {
+        if (Build.VERSION.SDK_INT >= 31 && workSpec.expedited && !isRetry && !isDelayed) {
             //noinspection NewApi
             builder.setExpedited(true);
         }
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java b/work/work-runtime/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java
index 4643fbf..ec6db5f 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java
@@ -46,7 +46,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
-import androidx.core.os.BuildCompat;
 import androidx.work.Configuration;
 import androidx.work.InitializationExceptionHandler;
 import androidx.work.Logger;
@@ -164,7 +163,7 @@
         // something different.
         try {
             int flags = FLAG_NO_CREATE;
-            if (BuildCompat.isAtLeastS()) {
+            if (Build.VERSION.SDK_INT >= 31) {
                 flags |= FLAG_MUTABLE;
             }
             PendingIntent pendingIntent = getPendingIntent(mContext, flags);
@@ -346,7 +345,7 @@
         AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         // Using FLAG_UPDATE_CURRENT, because we only ever want once instance of this alarm.
         int flags = FLAG_UPDATE_CURRENT;
-        if (BuildCompat.isAtLeastS()) {
+        if (Build.VERSION.SDK_INT >= 31) {
             flags |= FLAG_MUTABLE;
         }
         PendingIntent pendingIntent = getPendingIntent(context, flags);
diff --git a/work/work-runtime/src/main/java/androidx/work/impl/utils/WorkForegroundRunnable.java b/work/work-runtime/src/main/java/androidx/work/impl/utils/WorkForegroundRunnable.java
index d8cd1a5..98a1986 100644
--- a/work/work-runtime/src/main/java/androidx/work/impl/utils/WorkForegroundRunnable.java
+++ b/work/work-runtime/src/main/java/androidx/work/impl/utils/WorkForegroundRunnable.java
@@ -18,10 +18,10 @@
 
 import android.annotation.SuppressLint;
 import android.content.Context;
+import android.os.Build;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
-import androidx.core.os.BuildCompat;
 import androidx.work.ForegroundInfo;
 import androidx.work.ForegroundUpdater;
 import androidx.work.ListenableWorker;
@@ -73,7 +73,7 @@
     @Override
     @SuppressLint("UnsafeExperimentalUsageError")
     public void run() {
-        if (!mWorkSpec.expedited || BuildCompat.isAtLeastS()) {
+        if (!mWorkSpec.expedited || Build.VERSION.SDK_INT >= 31) {
             mFuture.set(null);
             return;
         }