uwb(framework): Compile against Android U SDK

This allows us to use Android U specific constants like build version.

Bug: b/260387438
Test: Compiles
Change-Id: Id30b2e72e8c98ba180976c5d45f462237cbd7f8d
diff --git a/framework/Android.bp b/framework/Android.bp
index 7f75ec6..4bb8c06 100644
--- a/framework/Android.bp
+++ b/framework/Android.bp
@@ -58,8 +58,10 @@
     defaults: ["uwb-module-sdk-version-defaults"],
     static_libs : [
         "modules-utils-preconditions",
+        "modules-utils-build",
     ],
     libs: [
+        "androidx.annotation_annotation",
         "unsupportedappusage", // for android.compat.annotation.UnsupportedAppUsage
     ],
     srcs: [
@@ -72,7 +74,7 @@
 java_library {
     name: "framework-uwb-pre-jarjar",
     defaults: ["framework-uwb-defaults"],
-    sdk_version: "module_Tiramisu",
+    sdk_version: "module_current",
     libs: ["framework-annotations-lib",],
     installable: false,
 }
@@ -114,7 +116,7 @@
 // defaults for tests that need to build against framework-uwb's @hide APIs
 java_defaults {
     name: "framework-uwb-test-defaults",
-    sdk_version: "module_Tiramisu",
+    sdk_version: "module_current",
     libs: [
         "framework-uwb.impl",
     ],
diff --git a/framework/java/android/uwb/RangingSession.java b/framework/java/android/uwb/RangingSession.java
index ab1a3bd..d8c33ef 100644
--- a/framework/java/android/uwb/RangingSession.java
+++ b/framework/java/android/uwb/RangingSession.java
@@ -22,10 +22,15 @@
 import android.annotation.RequiresPermission;
 import android.annotation.SystemApi;
 import android.os.Binder;
+import android.os.Build;
 import android.os.PersistableBundle;
 import android.os.RemoteException;
 import android.util.Log;
 
+import androidx.annotation.RequiresApi;
+
+import com.android.modules.utils.build.SdkLevel;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.concurrent.Executor;
@@ -424,7 +429,7 @@
          * @param parameters bundle of ranging rounds update status
          * {@link com.google.uwb.support.dltdoa.DlTDoARangingRoundsUpdateStatus}
          */
-        //TODO(b/260387438): Add @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+        @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
         default void onRangingRoundsUpdateDtTagStatus(@NonNull PersistableBundle parameters) {}
     }
 
@@ -745,7 +750,7 @@
      * @param params Parameters to configure active ranging rounds
      * {@link com.google.uwb.support.dltdoa.DlTDoARangingRoundsUpdate}
      */
-    //TODO(b/260387438): Add @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+    @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
     @RequiresPermission(Manifest.permission.UWB_PRIVILEGED)
     public void onRangingRoundsUpdateDtTag(@NonNull PersistableBundle params) {
         if (mState != State.ACTIVE) {
@@ -1097,7 +1102,9 @@
         }
 
         Log.v(mTag, "onDlTDoARangingRoundsUpdateStatus - sessionHandle: " + mSessionHandle);
-        executeCallback(() -> mCallback.onRangingRoundsUpdateDtTagStatus(params));
+        if (SdkLevel.isAtLeastU()) {
+            executeCallback(() -> mCallback.onRangingRoundsUpdateDtTagStatus(params));
+        }
     }
 
     /**
diff --git a/framework/java/android/uwb/UwbManager.java b/framework/java/android/uwb/UwbManager.java
index d287129..5d65f60 100644
--- a/framework/java/android/uwb/UwbManager.java
+++ b/framework/java/android/uwb/UwbManager.java
@@ -30,11 +30,14 @@
 import android.annotation.SystemService;
 import android.content.Context;
 import android.os.Binder;
+import android.os.Build;
 import android.os.CancellationSignal;
 import android.os.PersistableBundle;
 import android.os.RemoteException;
 import android.util.Log;
 
+import androidx.annotation.RequiresApi;
+
 import com.android.internal.annotations.GuardedBy;
 
 import java.lang.annotation.Retention;
@@ -341,7 +344,7 @@
     /**
      * Interface for Oem extensions on ongoing session
      */
-    // TODO: Add @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) after ag/19901449
+    @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
     public interface UwbOemExtensionCallback {
         /**
          * Invoked when session status changes
@@ -462,7 +465,7 @@
      * @param executor an {@link Executor} to execute given callback
      * @param callback oem implementation of {@link UwbOemExtensionCallback}
      */
-    // TODO: Add @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) after ag/19901449
+    @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
     @RequiresPermission(permission.UWB_PRIVILEGED)
     public void registerUwbOemExtensionCallback(@NonNull @CallbackExecutor Executor executor,
             @NonNull UwbOemExtensionCallback callback) {
@@ -479,7 +482,7 @@
      *
      * @param callback oem implementation of {@link UwbOemExtensionCallback}
      */
-    // TODO: Add @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) after ag/19901449
+    @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
     @RequiresPermission(permission.UWB_PRIVILEGED)
     public void unregisterUwbOemExtensionCallback(@NonNull UwbOemExtensionCallback callback) {
         mUwbOemExtensionCallbackListener.unregister(callback);
diff --git a/framework/java/android/uwb/UwbOemExtensionCallbackListener.java b/framework/java/android/uwb/UwbOemExtensionCallbackListener.java
index 08a089a..955e603 100644
--- a/framework/java/android/uwb/UwbOemExtensionCallbackListener.java
+++ b/framework/java/android/uwb/UwbOemExtensionCallbackListener.java
@@ -22,6 +22,8 @@
 import android.os.RemoteException;
 import android.util.Log;
 
+import com.android.modules.utils.build.SdkLevel;
+
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
@@ -88,8 +90,10 @@
         synchronized (this) {
             final long identity = Binder.clearCallingIdentity();
             try {
-                mExecutor.execute(() ->
-                        mCallback.onSessionStatusNotificationReceived(sessionStatusBundle));
+                if (SdkLevel.isAtLeastU()) {
+                    mExecutor.execute(() ->
+                            mCallback.onSessionStatusNotificationReceived(sessionStatusBundle));
+                }
             } finally {
                 Binder.restoreCallingIdentity(identity);
             }
@@ -102,8 +106,10 @@
         synchronized (this) {
             final long identity = Binder.clearCallingIdentity();
             try {
-                mExecutor.execute(() ->
-                        mCallback.onDeviceStatusNotificationReceived(deviceStateBundle));
+                if (SdkLevel.isAtLeastU()) {
+                    mExecutor.execute(() ->
+                            mCallback.onDeviceStatusNotificationReceived(deviceStateBundle));
+                }
             } finally {
                 Binder.restoreCallingIdentity(identity);
             }
@@ -118,19 +124,21 @@
             int status = 0;
             final long identity = Binder.clearCallingIdentity();
             try {
-                ExecutorService executor = Executors.newSingleThreadExecutor();
-                FutureTask<Integer> p = new FutureTask<>(
-                        () -> mCallback.onSessionConfigurationComplete(openSessionBundle));
-                executor.submit(p);
-                try {
-                    status = p.get(OEM_EXTENSION_RESPONSE_THRESHOLD_MS, TimeUnit.MILLISECONDS);
-                } catch (ExecutionException | InterruptedException e) {
-                    e.printStackTrace();
-                } catch (TimeoutException e) {
-                    Log.w(TAG,
-                            "Failed to get response for session config from vendor - status :"
-                                    + " TIMEOUT");
-                    e.printStackTrace();
+                if (SdkLevel.isAtLeastU()) {
+                    ExecutorService executor = Executors.newSingleThreadExecutor();
+                    FutureTask<Integer> p = new FutureTask<>(
+                            () -> mCallback.onSessionConfigurationComplete(openSessionBundle));
+                    executor.submit(p);
+                    try {
+                        status = p.get(OEM_EXTENSION_RESPONSE_THRESHOLD_MS, TimeUnit.MILLISECONDS);
+                    } catch (ExecutionException | InterruptedException e) {
+                        e.printStackTrace();
+                    } catch (TimeoutException e) {
+                        Log.w(TAG,
+                                "Failed to get response for session config from vendor - status :"
+                                        + " TIMEOUT");
+                        e.printStackTrace();
+                    }
                 }
             } finally {
                 Binder.restoreCallingIdentity(identity);
@@ -146,21 +154,23 @@
             final long identity = Binder.clearCallingIdentity();
             RangingReport vendorRangingReport = rangingReport;
             try {
-                ExecutorService executor = Executors.newSingleThreadExecutor();
-                FutureTask<RangingReport> getOemRangingReport = new FutureTask<RangingReport>(
-                        () -> mCallback.onRangingReportReceived(rangingReport)
-                );
-                executor.submit(getOemRangingReport);
-                try {
-                    vendorRangingReport = getOemRangingReport.get(
-                            OEM_EXTENSION_RESPONSE_THRESHOLD_MS, TimeUnit.MILLISECONDS);
-                    return vendorRangingReport == null ? rangingReport
-                            : vendorRangingReport;
-                } catch (ExecutionException | InterruptedException e) {
-                    e.printStackTrace();
-                } catch (TimeoutException e) {
-                    Log.w(TAG, "Failed to get ranging report from vendor: TIMEOUT");
-                    e.printStackTrace();
+                if (SdkLevel.isAtLeastU()) {
+                    ExecutorService executor = Executors.newSingleThreadExecutor();
+                    FutureTask<RangingReport> getOemRangingReport = new FutureTask<RangingReport>(
+                            () -> mCallback.onRangingReportReceived(rangingReport)
+                    );
+                    executor.submit(getOemRangingReport);
+                    try {
+                        vendorRangingReport = getOemRangingReport.get(
+                                OEM_EXTENSION_RESPONSE_THRESHOLD_MS, TimeUnit.MILLISECONDS);
+                        return vendorRangingReport == null ? rangingReport
+                                : vendorRangingReport;
+                    } catch (ExecutionException | InterruptedException e) {
+                        e.printStackTrace();
+                    } catch (TimeoutException e) {
+                        Log.w(TAG, "Failed to get ranging report from vendor: TIMEOUT");
+                        e.printStackTrace();
+                    }
                 }
             } finally {
                 Binder.restoreCallingIdentity(identity);
diff --git a/service/java/com/android/server/uwb/UwbServiceImpl.java b/service/java/com/android/server/uwb/UwbServiceImpl.java
index 653a6d8..10bc2e8 100644
--- a/service/java/com/android/server/uwb/UwbServiceImpl.java
+++ b/service/java/com/android/server/uwb/UwbServiceImpl.java
@@ -191,7 +191,6 @@
         mUwbServiceCore.unregisterAdapterStateCallbacks(adapterStateCallbacks);
     }
 
-    // TODO: Add @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) after ag/19901449
     @Override
     public void registerOemExtensionCallback(IUwbOemExtensionCallback callbacks)
             throws RemoteException {
@@ -203,7 +202,6 @@
         mUwbServiceCore.registerOemExtensionCallback(callbacks);
     }
 
-    // TODO: Add @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) after ag/19901449
     @Override
     public void unregisterOemExtensionCallback(IUwbOemExtensionCallback callbacks)
             throws RemoteException {
@@ -314,7 +312,6 @@
         mUwbServiceCore.sendData(sessionHandle, remoteDeviceAddress, params, data);
     }
 
-    // TODO: Add @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) after ag/19901449
     @Override
     public void onRangingRoundsUpdateDtTag(SessionHandle sessionHandle,
             PersistableBundle parameters) throws RemoteException {