diff options
6 files changed, 64 insertions, 15 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index f96a58b759a6..15939f376909 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -25761,9 +25761,11 @@ package android.net { } public final class RecommendationResult implements android.os.Parcelable { - ctor public RecommendationResult(android.net.wifi.WifiConfiguration); + method public static android.net.RecommendationResult createDoNotConnectRecommendation(); + method public static android.net.RecommendationResult createConnectRecommendation(android.net.wifi.WifiConfiguration); method public int describeContents(); method public android.net.wifi.WifiConfiguration getWifiConfiguration(); + method public boolean hasRecommendation(); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.net.RecommendationResult> CREATOR; } @@ -26812,6 +26814,7 @@ package android.net.wifi { field public int level; field public java.lang.CharSequence operatorFriendlyName; field public long timestamp; + field public boolean untrusted; field public java.lang.CharSequence venueName; } diff --git a/core/java/android/net/RecommendationResult.java b/core/java/android/net/RecommendationResult.java index a330d8445151..70cf09c7df5b 100644 --- a/core/java/android/net/RecommendationResult.java +++ b/core/java/android/net/RecommendationResult.java @@ -16,6 +16,7 @@ package android.net; +import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.net.wifi.WifiConfiguration; @@ -23,6 +24,7 @@ import android.os.Parcel; import android.os.Parcelable; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.Preconditions; /** * The result of a network recommendation. @@ -34,7 +36,32 @@ import com.android.internal.annotations.VisibleForTesting; public final class RecommendationResult implements Parcelable { private final WifiConfiguration mWifiConfiguration; - public RecommendationResult(@Nullable WifiConfiguration wifiConfiguration) { + /** + * Create a {@link RecommendationResult} that indicates that no network connection should be + * attempted at this time. + * + * @return a {@link RecommendationResult} + */ + public static RecommendationResult createDoNotConnectRecommendation() { + return new RecommendationResult((WifiConfiguration) null); + } + + /** + * Create a {@link RecommendationResult} that indicates that a connection attempt should be + * made for the given Wi-Fi network. + * + * @param wifiConfiguration {@link WifiConfiguration} with at least SSID and BSSID set. + * @return a {@link RecommendationResult} + */ + public static RecommendationResult createConnectRecommendation( + @NonNull WifiConfiguration wifiConfiguration) { + Preconditions.checkNotNull(wifiConfiguration, "wifiConfiguration must not be null"); + Preconditions.checkNotNull(wifiConfiguration.SSID, "SSID must not be null"); + Preconditions.checkNotNull(wifiConfiguration.BSSID, "BSSID must not be null"); + return new RecommendationResult(wifiConfiguration); + } + + private RecommendationResult(@Nullable WifiConfiguration wifiConfiguration) { mWifiConfiguration = wifiConfiguration; } @@ -43,14 +70,29 @@ public final class RecommendationResult implements Parcelable { } /** + * @return {@code true} if a network recommendation exists. {@code false} indicates that + * no connection should be attempted at this time. + */ + public boolean hasRecommendation() { + return mWifiConfiguration != null; + } + + /** * @return The recommended {@link WifiConfiguration} to connect to. A {@code null} value - * indicates that no WiFi connection should be attempted at this time. + * is returned if {@link #hasRecommendation} returns {@code false}. */ - public WifiConfiguration getWifiConfiguration() { + @Nullable public WifiConfiguration getWifiConfiguration() { return mWifiConfiguration; } @Override + public String toString() { + return "RecommendationResult{" + + "mWifiConfiguration=" + mWifiConfiguration + + "}"; + } + + @Override public int describeContents() { return 0; } diff --git a/core/tests/coretests/src/android/net/NetworkRecommendationProviderTest.java b/core/tests/coretests/src/android/net/NetworkRecommendationProviderTest.java index 9a81401e535e..bdc0200bc6d9 100644 --- a/core/tests/coretests/src/android/net/NetworkRecommendationProviderTest.java +++ b/core/tests/coretests/src/android/net/NetworkRecommendationProviderTest.java @@ -77,7 +77,7 @@ public class NetworkRecommendationProviderTest extends InstrumentationTestCase { final NetworkRecommendationProvider.ResultCallback callback = new NetworkRecommendationProvider.ResultCallback(mMockRemoteCallback, sequence); - final RecommendationResult result = new RecommendationResult(null); + final RecommendationResult result = RecommendationResult.createDoNotConnectRecommendation(); callback.onResult(result); final ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class); @@ -93,7 +93,7 @@ public class NetworkRecommendationProviderTest extends InstrumentationTestCase { final NetworkRecommendationProvider.ResultCallback callback = new NetworkRecommendationProvider.ResultCallback(mMockRemoteCallback, sequence); - final RecommendationResult result = new RecommendationResult(null); + final RecommendationResult result = RecommendationResult.createDoNotConnectRecommendation(); callback.onResult(result); try { diff --git a/services/core/java/com/android/server/NetworkScoreService.java b/services/core/java/com/android/server/NetworkScoreService.java index f712f121f1d7..0c2173340a50 100644 --- a/services/core/java/com/android/server/NetworkScoreService.java +++ b/services/core/java/com/android/server/NetworkScoreService.java @@ -478,11 +478,11 @@ public class NetworkScoreService extends INetworkScoreService.Stub { Log.d(TAG, "Returning the default network recommendation."); } - WifiConfiguration selectedConfig = null; - if (request != null) { - selectedConfig = request.getCurrentSelectedConfig(); + if (request != null && request.getCurrentSelectedConfig() != null) { + return RecommendationResult.createConnectRecommendation( + request.getCurrentSelectedConfig()); } - return new RecommendationResult(selectedConfig); + return RecommendationResult.createDoNotConnectRecommendation(); } @Override diff --git a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java index c653b8eecffa..f8b322021b10 100644 --- a/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/NetworkScoreServiceTest.java @@ -232,9 +232,10 @@ public class NetworkScoreServiceTest { injectProvider(); when(mContext.getMainLooper()).thenReturn(Looper.getMainLooper()); final WifiConfiguration wifiConfiguration = new WifiConfiguration(); - wifiConfiguration.SSID = "testRequestRecommendation_resultReturned"; - final RecommendationResult providerResult = - new RecommendationResult(wifiConfiguration); + wifiConfiguration.SSID = "testRequestRecommendation_resultReturned_SSID"; + wifiConfiguration.BSSID = "testRequestRecommendation_resultReturned_BSSID"; + final RecommendationResult providerResult = RecommendationResult + .createConnectRecommendation(wifiConfiguration); final Bundle bundle = new Bundle(); bundle.putParcelable(EXTRA_RECOMMENDATION_RESULT, providerResult); doAnswer(invocation -> { @@ -250,6 +251,8 @@ public class NetworkScoreServiceTest { assertNotNull(result); assertEquals(providerResult.getWifiConfiguration().SSID, result.getWifiConfiguration().SSID); + assertEquals(providerResult.getWifiConfiguration().BSSID, + result.getWifiConfiguration().BSSID); } @Test diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java index da8713555889..da9aa06918c1 100644 --- a/wifi/java/android/net/wifi/ScanResult.java +++ b/wifi/java/android/net/wifi/ScanResult.java @@ -16,6 +16,7 @@ package android.net.wifi; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; @@ -259,10 +260,10 @@ public class ScanResult implements Parcelable { public long blackListTimestamp; /** - * Status: indicating the scan result is not a result - * that is part of user's saved configurations + * Status indicating the scan result does not correspond to a user's saved configuration * @hide */ + @SystemApi public boolean untrusted; /** |