summaryrefslogtreecommitdiff
path: root/wifi/java/android/net/wifi/rtt/WifiRttManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'wifi/java/android/net/wifi/rtt/WifiRttManager.java')
-rw-r--r--wifi/java/android/net/wifi/rtt/WifiRttManager.java69
1 files changed, 27 insertions, 42 deletions
diff --git a/wifi/java/android/net/wifi/rtt/WifiRttManager.java b/wifi/java/android/net/wifi/rtt/WifiRttManager.java
index ec6c46ec4a7d..d119579f51b2 100644
--- a/wifi/java/android/net/wifi/rtt/WifiRttManager.java
+++ b/wifi/java/android/net/wifi/rtt/WifiRttManager.java
@@ -21,6 +21,7 @@ import static android.Manifest.permission.ACCESS_WIFI_STATE;
import static android.Manifest.permission.CHANGE_WIFI_STATE;
import static android.Manifest.permission.LOCATION_HARDWARE;
+import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
@@ -29,13 +30,12 @@ import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.content.Context;
import android.os.Binder;
-import android.os.Handler;
-import android.os.Looper;
import android.os.RemoteException;
import android.os.WorkSource;
import android.util.Log;
import java.util.List;
+import java.util.concurrent.Executor;
/**
* This class provides the primary API for measuring distance (range) to other devices using the
@@ -46,7 +46,7 @@ import java.util.List;
* <li>Wi-Fi Aware peers
* <p>
* Ranging requests are triggered using
- * {@link #startRanging(RangingRequest, RangingResultCallback, Handler)}. Results (in case of
+ * {@link #startRanging(RangingRequest, Executor, RangingResultCallback)}. Results (in case of
* successful operation) are returned in the {@link RangingResultCallback#onRangingResults(List)}
* callback.
* <p>
@@ -106,15 +106,13 @@ public class WifiRttManager {
*
* @param request A request specifying a set of devices whose distance measurements are
* requested.
+ * @param executor The Executor on which to run the callback.
* @param callback A callback for the result of the ranging request.
- * @param handler The Handler on whose thread to execute the callbacks of the {@code
- * callback} object. If a null is provided then the application's main thread
- * will be used.
*/
@RequiresPermission(allOf = {ACCESS_COARSE_LOCATION, CHANGE_WIFI_STATE, ACCESS_WIFI_STATE})
public void startRanging(@NonNull RangingRequest request,
- @NonNull RangingResultCallback callback, @Nullable Handler handler) {
- startRanging(null, request, callback, handler);
+ @NonNull @CallbackExecutor Executor executor, @NonNull RangingResultCallback callback) {
+ startRanging(null, request, executor, callback);
}
/**
@@ -124,10 +122,8 @@ public class WifiRttManager {
* @param workSource A mechanism to specify an alternative work-source for the request.
* @param request A request specifying a set of devices whose distance measurements are
* requested.
+ * @param executor The Executor on which to run the callback.
* @param callback A callback for the result of the ranging request.
- * @param handler The Handler on whose thread to execute the callbacks of the {@code
- * callback} object. If a null is provided then the application's main thread
- * will be used.
*
* @hide
*/
@@ -135,21 +131,36 @@ public class WifiRttManager {
@RequiresPermission(allOf = {LOCATION_HARDWARE, ACCESS_COARSE_LOCATION, CHANGE_WIFI_STATE,
ACCESS_WIFI_STATE})
public void startRanging(@Nullable WorkSource workSource, @NonNull RangingRequest request,
- @NonNull RangingResultCallback callback, @Nullable Handler handler) {
+ @NonNull @CallbackExecutor Executor executor, @NonNull RangingResultCallback callback) {
if (VDBG) {
Log.v(TAG, "startRanging: workSource=" + workSource + ", request=" + request
- + ", callback=" + callback + ", handler=" + handler);
+ + ", callback=" + callback + ", executor=" + executor);
}
+ if (executor == null) {
+ throw new IllegalArgumentException("Null executor provided");
+ }
if (callback == null) {
throw new IllegalArgumentException("Null callback provided");
}
- Looper looper = (handler == null) ? Looper.getMainLooper() : handler.getLooper();
Binder binder = new Binder();
try {
mService.startRanging(binder, mContext.getOpPackageName(), workSource, request,
- new RttCallbackProxy(looper, callback));
+ new IRttCallback.Stub() {
+ @Override
+ public void onRangingFailure(int status) throws RemoteException {
+ clearCallingIdentity();
+ executor.execute(() -> callback.onRangingFailure(status));
+ }
+
+ @Override
+ public void onRangingResults(List<RangingResult> results)
+ throws RemoteException {
+ clearCallingIdentity();
+ executor.execute(() -> callback.onRangingResults(results));
+ }
+ });
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -157,7 +168,7 @@ public class WifiRttManager {
/**
* Cancel all ranging requests for the specified work sources. The requests have been requested
- * using {@link #startRanging(WorkSource, RangingRequest, RangingResultCallback, Handler)}.
+ * using {@link #startRanging(WorkSource, RangingRequest, Executor, RangingResultCallback)}.
*
* @param workSource The work-sources of the requesters.
*
@@ -176,30 +187,4 @@ public class WifiRttManager {
throw e.rethrowFromSystemServer();
}
}
-
- private static class RttCallbackProxy extends IRttCallback.Stub {
- private final Handler mHandler;
- private final RangingResultCallback mCallback;
-
- RttCallbackProxy(Looper looper, RangingResultCallback callback) {
- mHandler = new Handler(looper);
- mCallback = callback;
- }
-
- @Override
- public void onRangingFailure(int status) throws RemoteException {
- if (VDBG) Log.v(TAG, "RttCallbackProxy: onRangingFailure: status=" + status);
- mHandler.post(() -> {
- mCallback.onRangingFailure(status);
- });
- }
-
- @Override
- public void onRangingResults(List<RangingResult> results) throws RemoteException {
- if (VDBG) Log.v(TAG, "RttCallbackProxy: onRanginResults: results=" + results);
- mHandler.post(() -> {
- mCallback.onRangingResults(results);
- });
- }
- }
}