diff --git a/core/api/system-current.txt b/core/api/system-current.txt index ca3b24ad3cf092f983a4d878819645c18c47aa95..07dec52acbf3478c91a758edd68c81beacafcfd5 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -239,6 +239,7 @@ package android { field public static final String UPGRADE_RUNTIME_PERMISSIONS = "android.permission.UPGRADE_RUNTIME_PERMISSIONS"; field public static final String USER_ACTIVITY = "android.permission.USER_ACTIVITY"; field public static final String USE_RESERVED_DISK = "android.permission.USE_RESERVED_DISK"; + field public static final String UWB_PRIVILEGED = "android.permission.UWB_PRIVILEGED"; field public static final String WHITELIST_AUTO_REVOKE_PERMISSIONS = "android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS"; field public static final String WHITELIST_RESTRICTED_PERMISSIONS = "android.permission.WHITELIST_RESTRICTED_PERMISSIONS"; field public static final String WIFI_ACCESS_COEX_UNSAFE_CHANNELS = "android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS"; @@ -12695,10 +12696,10 @@ package android.uwb { } public final class RangingSession implements java.lang.AutoCloseable { - method public void close(); - method public void reconfigure(@NonNull android.os.PersistableBundle); - method public void start(@NonNull android.os.PersistableBundle); - method public void stop(); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void close(); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void reconfigure(@NonNull android.os.PersistableBundle); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void start(@NonNull android.os.PersistableBundle); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void stop(); } public static interface RangingSession.Callback { @@ -12734,18 +12735,18 @@ package android.uwb { } public final class UwbManager { - method public long elapsedRealtimeResolutionNanos(); - method public int getAngleOfArrivalSupport(); - method public int getMaxRemoteDevicesPerInitiatorSession(); - method public int getMaxRemoteDevicesPerResponderSession(); - method public int getMaxSimultaneousSessions(); - method @NonNull public android.os.PersistableBundle getSpecificationInfo(); - method @NonNull public java.util.List<java.lang.Integer> getSupportedChannelNumbers(); - method @NonNull public java.util.Set<java.lang.Integer> getSupportedPreambleCodeIndices(); - method public boolean isRangingSupported(); - method @NonNull public AutoCloseable openRangingSession(@NonNull android.os.PersistableBundle, @NonNull java.util.concurrent.Executor, @NonNull android.uwb.RangingSession.Callback); - method public void registerAdapterStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.uwb.UwbManager.AdapterStateCallback); - method public void unregisterAdapterStateCallback(@NonNull android.uwb.UwbManager.AdapterStateCallback); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public long elapsedRealtimeResolutionNanos(); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public int getAngleOfArrivalSupport(); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public int getMaxRemoteDevicesPerInitiatorSession(); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public int getMaxRemoteDevicesPerResponderSession(); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public int getMaxSimultaneousSessions(); + method @NonNull @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public android.os.PersistableBundle getSpecificationInfo(); + method @NonNull @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public java.util.List<java.lang.Integer> getSupportedChannelNumbers(); + method @NonNull @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public java.util.Set<java.lang.Integer> getSupportedPreambleCodeIndices(); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public boolean isRangingSupported(); + method @NonNull @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public AutoCloseable openRangingSession(@NonNull android.os.PersistableBundle, @NonNull java.util.concurrent.Executor, @NonNull android.uwb.RangingSession.Callback); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void registerAdapterStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.uwb.UwbManager.AdapterStateCallback); + method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void unregisterAdapterStateCallback(@NonNull android.uwb.UwbManager.AdapterStateCallback); field public static final int ANGLE_OF_ARRIVAL_SUPPORT_TYPE_2D = 2; // 0x2 field public static final int ANGLE_OF_ARRIVAL_SUPPORT_TYPE_3D_HEMISPHERICAL = 3; // 0x3 field public static final int ANGLE_OF_ARRIVAL_SUPPORT_TYPE_3D_SPHERICAL = 4; // 0x4 diff --git a/core/java/android/uwb/RangingSession.java b/core/java/android/uwb/RangingSession.java index bfa8bf21ec6a01a4079281538e6ace147bf073df..52ec5bde0dacf8459207527475ca943e715cbedc 100644 --- a/core/java/android/uwb/RangingSession.java +++ b/core/java/android/uwb/RangingSession.java @@ -16,8 +16,10 @@ package android.uwb; +import android.Manifest; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.os.Binder; import android.os.PersistableBundle; @@ -247,6 +249,7 @@ public final class RangingSession implements AutoCloseable { * * @param params configuration parameters for starting the session */ + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public void start(@NonNull PersistableBundle params) { if (mState != State.IDLE) { throw new IllegalStateException(); @@ -271,6 +274,7 @@ public final class RangingSession implements AutoCloseable { * * @param params the parameters to reconfigure and their new values */ + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public void reconfigure(@NonNull PersistableBundle params) { if (mState != State.ACTIVE && mState != State.IDLE) { throw new IllegalStateException(); @@ -302,6 +306,7 @@ public final class RangingSession implements AutoCloseable { * <p>On failure to stop the session, * {@link RangingSession.Callback#onStopFailed(int, PersistableBundle)} is invoked. */ + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public void stop() { if (mState != State.ACTIVE) { throw new IllegalStateException(); @@ -333,6 +338,7 @@ public final class RangingSession implements AutoCloseable { * {@link #close()}, even if the {@link RangingSession} is already closed. */ @Override + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public void close() { if (mState == State.CLOSED) { mExecutor.execute(() -> mCallback.onClosed( diff --git a/core/java/android/uwb/UwbManager.java b/core/java/android/uwb/UwbManager.java index 8adfe0601b1483836b32a801b257d640b6aea7d1..2dc0ba0b9b80510cb4e9d009295c24202bf433b2 100644 --- a/core/java/android/uwb/UwbManager.java +++ b/core/java/android/uwb/UwbManager.java @@ -16,9 +16,11 @@ package android.uwb; +import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; +import android.annotation.RequiresPermission; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.SystemService; @@ -154,6 +156,7 @@ public final class UwbManager { * @param executor an {@link Executor} to execute given callback * @param callback user implementation of the {@link AdapterStateCallback} */ + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public void registerAdapterStateCallback(@NonNull @CallbackExecutor Executor executor, @NonNull AdapterStateCallback callback) { mAdapterStateListener.register(executor, callback); @@ -168,6 +171,7 @@ public final class UwbManager { * * @param callback user implementation of the {@link AdapterStateCallback} */ + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public void unregisterAdapterStateCallback(@NonNull AdapterStateCallback callback) { mAdapterStateListener.unregister(callback); } @@ -181,6 +185,7 @@ public final class UwbManager { * @return {@link PersistableBundle} of the device's supported UWB protocols and parameters */ @NonNull + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public PersistableBundle getSpecificationInfo() { try { return mUwbAdapter.getSpecificationInfo(); @@ -194,6 +199,7 @@ public final class UwbManager { * * @return true if ranging is supported */ + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public boolean isRangingSupported() { try { return mUwbAdapter.isRangingSupported(); @@ -250,6 +256,7 @@ public final class UwbManager { * @return angle of arrival type supported */ @AngleOfArrivalSupportType + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public int getAngleOfArrivalSupport() { try { switch (mUwbAdapter.getAngleOfArrivalSupport()) { @@ -281,6 +288,7 @@ public final class UwbManager { * @return {@link List} of supported channel numbers ordered by preference */ @NonNull + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public List<Integer> getSupportedChannelNumbers() { List<Integer> channels = new ArrayList<>(); try { @@ -300,6 +308,7 @@ public final class UwbManager { * @return {@link List} of supported preamble code indices */ @NonNull + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public Set<Integer> getSupportedPreambleCodeIndices() { Set<Integer> preambles = new HashSet<>(); try { @@ -320,6 +329,7 @@ public final class UwbManager { * @return the timestamp resolution in nanoseconds */ @SuppressLint("MethodNameUnits") + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public long elapsedRealtimeResolutionNanos() { try { return mUwbAdapter.getTimestampResolutionNanos(); @@ -333,6 +343,7 @@ public final class UwbManager { * * @return the maximum allowed number of simultaneously open {@link RangingSession} instances. */ + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public int getMaxSimultaneousSessions() { try { return mUwbAdapter.getMaxSimultaneousSessions(); @@ -347,6 +358,7 @@ public final class UwbManager { * * @return the maximum number of remote devices per {@link RangingSession} */ + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public int getMaxRemoteDevicesPerInitiatorSession() { try { return mUwbAdapter.getMaxRemoteDevicesPerInitiatorSession(); @@ -361,6 +373,7 @@ public final class UwbManager { * * @return the maximum number of remote devices per {@link RangingSession} */ + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public int getMaxRemoteDevicesPerResponderSession() { try { return mUwbAdapter.getMaxRemoteDevicesPerResponderSession(); @@ -396,6 +409,7 @@ public final class UwbManager { * {@link RangingSession.Callback#onOpened(RangingSession)}. */ @NonNull + @RequiresPermission(Manifest.permission.UWB_PRIVILEGED) public AutoCloseable openRangingSession(@NonNull PersistableBundle parameters, @NonNull @CallbackExecutor Executor executor, @NonNull RangingSession.Callback callbacks) { diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 24539b724f70b4421e00eaa7802fffb4da5b489f..c5eb185b135ab6975562227edd8ea9127c4948d9 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -1922,6 +1922,12 @@ <permission android:name="android.permission.ENABLE_TEST_HARNESS_MODE" android:protectionLevel="signature" /> + <!-- @SystemApi Allows access to ultra wideband device. + <p>Not for use by third-party applications. + @hide --> + <permission android:name="android.permission.UWB_PRIVILEGED" + android:protectionLevel="signature|privileged" /> + <!-- ================================== --> <!-- Permissions for accessing accounts --> <!-- ================================== -->