diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index fd78ff1..b53cbf1 100644
--- a/PREUPLOAD.cfg
+++ b/PREUPLOAD.cfg
@@ -1,3 +1,12 @@
+[Builtin Hooks]
+bpfmt = true
+clang_format = true
+commit_msg_changeid_field = true
+commit_msg_test_field = true
+
+[Builtin Hooks Options]
+clang_format = --commit ${PREUPLOAD_COMMIT} --style file --extensions c,h,cc,cpp
+
 [Hook Scripts]
 do_not_use_DO_NOT_MERGE = ${REPO_ROOT}/build/soong/scripts/check_do_not_merge.sh ${PREUPLOAD_COMMIT}
 check_java_paths = ${REPO_ROOT}/frameworks/libs/modules-utils/tools/check_java_paths.py
\ No newline at end of file
diff --git a/build/include/android-modules-utils/sdk_level.h b/build/include/android-modules-utils/sdk_level.h
index a373178..102e01f 100644
--- a/build/include/android-modules-utils/sdk_level.h
+++ b/build/include/android-modules-utils/sdk_level.h
@@ -17,32 +17,34 @@
 #pragma once
 
 #include <android-base/properties.h>
+#include <android/api-level.h>
 
 namespace android {
 namespace modules {
 namespace sdklevel {
 
-// Return true iff the running Android SDK is at least "R".
-static inline bool IsAtLeastR() {
-  return android::base::GetIntProperty("ro.build.version.sdk", -1) >= 30;
+// Checks if the codename is a matching or higher version than the device's
+// codename.
+static bool IsAtLeastPreReleaseCodename(const std::string &codename) {
+  const std::string &deviceCodename =
+      android::base::GetProperty("ro.build.version.codename", "");
+  return "REL" != deviceCodename && deviceCodename.compare(codename) >= 0;
 }
 
-// Returns true iff the running Android SDK is pre-release "S" or "T", built
-// based on "R" SDK.
-//
-// If new SDK versions are added > R, then this method needs to be updated to
-// recognise them (e.g. if we add SDK version for R-QPR, the current
-// implementation will not recognise pre-release "S" versions built on that).
+// Checks if the device is running on release version of Android R or newer.
+static inline bool IsAtLeastR() { return android_get_device_api_level() >= 30; }
+
+// Checks if the device is running on a pre-release version of Android S or a
+// release version of Android S or newer.
 static inline bool IsAtLeastS() {
-  // TODO(b/170831689) This should check SDK_INT >= S once S sdk finalised.
-  // Note that removing the current conditions may lead to issues in
-  // mainlinefood (and possibly public beta?).
-  std::string codename =
-    android::base::GetProperty("ro.build.version.codename", "");
-  return android::base::GetIntProperty("ro.build.version.sdk", -1) == 30 &&
-      (codename == "S" || codename == "T");
+  return android_get_device_api_level() >= 31 ||
+         IsAtLeastPreReleaseCodename("S");
 }
 
+// Checks if the device is running on a pre-release version of Android T or a
+// release version of Android T or newer.
+static inline bool IsAtLeastT() { return IsAtLeastPreReleaseCodename("T"); }
+
 } // namespace utils
 } // namespace modules
 } // namespace android
diff --git a/java/com/android/modules/utils/build/SdkLevel.java b/java/com/android/modules/utils/build/SdkLevel.java
index 115b9b9..a87d248 100644
--- a/java/com/android/modules/utils/build/SdkLevel.java
+++ b/java/com/android/modules/utils/build/SdkLevel.java
@@ -16,44 +16,53 @@
 
 package com.android.modules.utils.build;
 
-import android.os.Build;
+import static android.os.Build.VERSION.CODENAME;
+import static android.os.Build.VERSION.SDK_INT;
 
 import androidx.annotation.ChecksSdkIntAtLeast;
+import androidx.annotation.NonNull;
 
 /**
- * Utility class to check SDK level.
+ * Utility class to check SDK level on a device.
  *
  * @hide
  */
-public class SdkLevel {
+public final class SdkLevel {
 
     private SdkLevel() {}
 
-    /** Return true iff the running Android SDK is at least "R". */
-    @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.R)
+    /** Checks if the device is running on release version of Android R or newer. */
+    @ChecksSdkIntAtLeast(api = 30 /* Build.VERSION_CODES.R */)
     public static boolean isAtLeastR() {
-        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R;
+        return SDK_INT >= 30;
     }
 
     /**
-     * Returns true iff the running Android SDK is pre-release "S" or "T", built based on "R" SDK.
-     *
-     * If new SDK versions are added > R, then this method needs to be updated to recognise them
-     * (e.g. if we add SDK version for R-QPR,  the current implementation will not recognise
-     * pre-release "S" versions built on that).
+     * Checks if the device is running on a pre-release version of Android S or a release version of
+     * Android S or newer.
      */
-    @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.CUR_DEVELOPMENT)
+    @ChecksSdkIntAtLeast(api = 31 /* Build.VERSION_CODES.S */, codename = "S")
     public static boolean isAtLeastS() {
-        // TODO(b/170831689) This should check SDK_INT >= S once S sdk finalised. Note that removing the
-        // current conditions may lead to issues in mainlinefood (and possibly public beta?).
+        return SDK_INT >= 31 || isAtLeastPreReleaseCodename("S");
+    }
 
-        // While in development, builds will have R SDK_INT and "S" or "T" codename.
-        // We don't accept SDK_INT > R for now, since R and S may have non-consecutive values.
-        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R
-            && ("S".equals(Build.VERSION.CODENAME) || "T".equals(Build.VERSION.CODENAME))) {
-            return true;
+    /**
+     * Checks if the device is running on a pre-release version of Android T or a release version of
+     * Android T or newer.
+     */
+    @ChecksSdkIntAtLeast(codename = "T")
+    public static boolean isAtLeastT() {
+        return isAtLeastPreReleaseCodename("T");
+    }
+
+    private static boolean isAtLeastPreReleaseCodename(@NonNull String codename) {
+        // Special case "REL", which means the build is not a pre-release build.
+        if ("REL".equals(CODENAME)) {
+            return false;
         }
 
-        return false;
+        // Otherwise lexically compare them. Return true if the build codename is equal to or
+        // greater than the requested codename.
+        return CODENAME.compareTo(codename) >= 0;
     }
 }
