diff options
| -rw-r--r-- | core/java/android/net/NetworkScoreManager.java | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java index 7a832d10bf3e..57cf1a5c20d3 100644 --- a/core/java/android/net/NetworkScoreManager.java +++ b/core/java/android/net/NetworkScoreManager.java @@ -21,6 +21,7 @@ import static android.net.NetworkRecommendationProvider.EXTRA_RECOMMENDATION_RES 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 com.android.internal.util.Preconditions; 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 @@ public class NetworkScoreManager { * * @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 @@ public class NetworkScoreManager { } 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; } } |