diff options
| author | Treehugger Robot <treehugger-gerrit@google.com> | 2017-01-19 22:55:16 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-01-19 22:55:16 +0000 |
| commit | 5d942c1352d72951c2ea2b2dbe67e69b0616b797 (patch) | |
| tree | 3ac6d2d8c877bd1ff8e0340f0525c390769d7efc /core/java | |
| parent | a5f968806ee4e01a898b57fe93abe09162946a74 (diff) | |
| parent | 44e2b84b27dea139796299528e5cdd3abc4640f7 (diff) | |
Merge changes I6ff80178,I03875cf1,I8d210b68
* changes:
New setting for recommendation request timeout.
Implemented the async recommendation request call.
Async network recommendation requests.
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/net/INetworkScoreService.aidl | 13 | ||||
| -rw-r--r-- | core/java/android/net/NetworkScoreManager.java | 56 | ||||
| -rwxr-xr-x | core/java/android/provider/Settings.java | 10 |
3 files changed, 79 insertions, 0 deletions
diff --git a/core/java/android/net/INetworkScoreService.aidl b/core/java/android/net/INetworkScoreService.aidl index 9573953e6e13..82432c758fa6 100644 --- a/core/java/android/net/INetworkScoreService.aidl +++ b/core/java/android/net/INetworkScoreService.aidl @@ -21,6 +21,7 @@ import android.net.NetworkKey; import android.net.RecommendationRequest; import android.net.RecommendationResult; import android.net.ScoredNetwork; +import android.os.RemoteCallback; /** * A service for updating network scores from a network scorer application. @@ -117,4 +118,16 @@ interface INetworkScoreService * scorer. */ String getActiveScorerPackage(); + + /** + * Request a recommendation for the best network to connect to + * taking into account the inputs from the {@link RecommendationRequest}. + * + * @param request a {@link RecommendationRequest} instance containing the details of the request + * @param remoteCallback a {@link RemoteCallback} instance to invoke when the recommendation + * is available. + * @throws SecurityException if the caller is not the system + */ + oneway void requestRecommendationAsync(in RecommendationRequest request, + in RemoteCallback remoteCallback); } diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java index a6854dcb8eb3..c57145f69d2f 100644 --- a/core/java/android/net/NetworkScoreManager.java +++ b/core/java/android/net/NetworkScoreManager.java @@ -16,17 +16,24 @@ package android.net; +import static android.net.NetworkRecommendationProvider.EXTRA_RECOMMENDATION_RESULT; + import android.Manifest; import android.annotation.IntDef; +import android.annotation.NonNull; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.content.Context; import android.content.Intent; import android.net.NetworkScorerAppManager.NetworkScorerAppData; +import android.os.Bundle; +import android.os.Handler; import android.os.IBinder; +import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; +import com.android.internal.util.Preconditions; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -356,4 +363,53 @@ public class NetworkScoreManager { throw e.rethrowFromSystemServer(); } } + + /** + * Request a recommendation for which network to connect to. + * + * <p>The callback will be run on the thread associated with provided {@link Handler}. + * + * @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. + * @throws SecurityException + * @hide + */ + public void requestRecommendation( + final @NonNull RecommendationRequest request, + final @NonNull RecommendationCallback callback, + final @NonNull Handler handler) { + Preconditions.checkNotNull(request, "RecommendationRequest cannot be null."); + Preconditions.checkNotNull(callback, "RecommendationCallback cannot be null."); + Preconditions.checkNotNull(handler, "Handler cannot be null."); + + RemoteCallback remoteCallback = new RemoteCallback(new RemoteCallback.OnResultListener() { + @Override + public void onResult(Bundle data) { + RecommendationResult result = data.getParcelable(EXTRA_RECOMMENDATION_RESULT); + callback.onRecommendationAvailable(result); + } + }, handler); + + try { + mService.requestRecommendationAsync(request, remoteCallback); + } 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); + } } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 3ea5dcba815d..35fa2108d8aa 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -7672,6 +7672,16 @@ public final class Settings { public static final String NETWORK_RECOMMENDATIONS_ENABLED = "network_recommendations_enabled"; + /** + * The number of milliseconds the {@link com.android.server.NetworkScoreService} + * will give a recommendation request to complete before returning a default response. + * + * Type: long + * @hide + */ + public static final String NETWORK_RECOMMENDATION_REQUEST_TIMEOUT_MS = + "network_recommendation_request_timeout_ms"; + /** * Settings to allow BLE scans to be enabled even when Bluetooth is turned off for * connectivity. |
