Add static field to set custom Sdk version

This is to be accessed from user or library code when running inside
Studio. That will be used instead of the SDK_INT version coming from
layoutlib.

Bug: 250806506
Test: N/A
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:42294a5111ae4ee6a788865b9b286d197a0971c8)
Merged-In: I8527e918569f5b60102ba2f6bbae4789ba01f17a
Change-Id: I8527e918569f5b60102ba2f6bbae4789ba01f17a
diff --git a/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java b/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java
index c2430a8..4288c9f 100644
--- a/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java
+++ b/bridge/src/com/android/layoutlib/bridge/impl/RenderAction.java
@@ -51,6 +51,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantLock;
 
+import static android.os._Original_Build.VERSION.SDK_INT;
 import static com.android.ide.common.rendering.api.Result.Status.ERROR_LOCK_INTERRUPTED;
 import static com.android.ide.common.rendering.api.Result.Status.ERROR_TIMEOUT;
 import static com.android.ide.common.rendering.api.Result.Status.SUCCESS;
@@ -68,6 +69,12 @@
  *
  */
 public abstract class RenderAction<T extends RenderParams> {
+    /**
+     * Static field to store an SDK version coming from the render configuration.
+     * This is to be accessed when wanting to know the simulated SDK version instead
+     * of Build.VERSION.SDK_INT.
+     */
+    public static int sSimulatedSdk;
 
     private static final Set<String> COMPOSE_CLASS_FQNS =
             Set.of("androidx.compose.ui.tooling.ComposeViewAdapter",
@@ -99,6 +106,7 @@
      */
     protected RenderAction(T params) {
         mParams = params;
+        sSimulatedSdk = SDK_INT;
     }
 
     /**
diff --git a/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
index 25aab92..082ea14 100644
--- a/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
+++ b/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java
@@ -94,6 +94,7 @@
 import java.util.Map;
 import java.util.function.Function;
 
+import static android.os._Original_Build.VERSION.SDK_INT;
 import static com.android.ide.common.rendering.api.Result.Status.ERROR_INFLATION;
 import static com.android.ide.common.rendering.api.Result.Status.ERROR_NOT_INFLATED;
 import static com.android.ide.common.rendering.api.Result.Status.ERROR_UNKNOWN;
@@ -311,6 +312,9 @@
             SessionParams params = getParams();
             BridgeContext context = getContext();
 
+            int simulatedVersion = params.getSimulatedPlatformVersion();
+            sSimulatedSdk = simulatedVersion > 0 ? simulatedVersion : SDK_INT;
+
             if (Bridge.isLocaleRtl(params.getLocale())) {
                 if (!params.isRtlSupported()) {
                     Bridge.getLog().warning(ILayoutLog.TAG_RTL_NOT_ENABLED,
@@ -480,6 +484,9 @@
 
         SessionParams params = getParams();
 
+        int simulatedVersion = params.getSimulatedPlatformVersion();
+        sSimulatedSdk = simulatedVersion > 0 ? simulatedVersion : SDK_INT;
+
         try {
             if (mViewRoot == null) {
                 return ERROR_NOT_INFLATED.createResult();