Merge "Have requestRecommendation return a CompletableFuture."
diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java
index 7a832d1..57cf1a5 100644
--- a/core/java/android/net/NetworkScoreManager.java
+++ b/core/java/android/net/NetworkScoreManager.java
@@ -21,6 +21,7 @@
import android.Manifest;
import android.annotation.IntDef;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.annotation.SystemApi;
@@ -36,6 +37,7 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.concurrent.CompletableFuture;
/**
* Class that manages communication between network subsystems and a network scorer.
@@ -370,25 +372,26 @@
*
* @param request a {@link RecommendationRequest} instance containing additional
* request details
- * @param callback a {@link RecommendationCallback} instance that will be invoked when
- * the {@link RecommendationResult} is available
- * @param handler a {@link Handler} instance representing the thread to run the callback on.
+ * @param handler a {@link Handler} instance representing the thread to complete the future on.
+ * If null the responding binder thread will be used.
+ * @return a {@link CompletableFuture} instance that will eventually receive the
+ * {@link RecommendationResult}.
* @throws SecurityException
* @hide
*/
- public void requestRecommendation(
+ public CompletableFuture<RecommendationResult> requestRecommendation(
final @NonNull RecommendationRequest request,
- final @NonNull RecommendationCallback callback,
- final @NonNull Handler handler) {
+ final @Nullable Handler handler) {
Preconditions.checkNotNull(request, "RecommendationRequest cannot be null.");
- Preconditions.checkNotNull(callback, "RecommendationCallback cannot be null.");
- Preconditions.checkNotNull(handler, "Handler cannot be null.");
+
+ final CompletableFuture<RecommendationResult> futureResult =
+ new CompletableFuture<>();
RemoteCallback remoteCallback = new RemoteCallback(new RemoteCallback.OnResultListener() {
@Override
public void onResult(Bundle data) {
RecommendationResult result = data.getParcelable(EXTRA_RECOMMENDATION_RESULT);
- callback.onRecommendationAvailable(result);
+ futureResult.complete(result);
}
}, handler);
@@ -397,18 +400,7 @@
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
- }
- /**
- * Callers of {@link #requestRecommendation(RecommendationRequest, RecommendationCallback, Handler)}
- * must pass in an implementation of this class.
- * @hide
- */
- public abstract static class RecommendationCallback {
- /**
- * Invoked when a {@link RecommendationResult} is available.
- * @param result a {@link RecommendationResult} instance.
- */
- public abstract void onRecommendationAvailable(RecommendationResult result);
+ return futureResult;
}
}