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 {