Merge "Pass more data through the recommendation request."

This commit is contained in:
Treehugger Robot
2017-01-20 01:44:19 +00:00
committed by Gerrit Code Review
5 changed files with 158 additions and 56 deletions

View File

@@ -25759,9 +25759,12 @@ package android.net {
public final class RecommendationRequest implements android.os.Parcelable {
ctor protected RecommendationRequest(android.os.Parcel);
method public int describeContents();
method public android.net.wifi.WifiConfiguration getCurrentSelectedConfig();
method public android.net.NetworkCapabilities getRequiredCapabilities();
method public android.net.wifi.WifiConfiguration[] getConnectableConfigs();
method public android.net.wifi.WifiConfiguration getConnectedConfig();
method public android.net.wifi.WifiConfiguration getDefaultWifiConfig();
method public android.net.wifi.ScanResult[] getScanResults();
method public void setConnectableConfigs(android.net.wifi.WifiConfiguration[]);
method public void setConnectedConfig(android.net.wifi.WifiConfiguration);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.net.RecommendationRequest> CREATOR;
}
@@ -25769,8 +25772,9 @@ package android.net {
public static final class RecommendationRequest.Builder {
ctor public RecommendationRequest.Builder();
method public android.net.RecommendationRequest build();
method public android.net.RecommendationRequest.Builder setCurrentRecommendedWifiConfig(android.net.wifi.WifiConfiguration);
method public android.net.RecommendationRequest.Builder setNetworkCapabilities(android.net.NetworkCapabilities);
method public android.net.RecommendationRequest.Builder setConnectableConfigs(android.net.wifi.WifiConfiguration[]);
method public android.net.RecommendationRequest.Builder setConnectedWifiConfig(android.net.wifi.WifiConfiguration);
method public android.net.RecommendationRequest.Builder setDefaultWifiConfig(android.net.wifi.WifiConfiguration);
method public android.net.RecommendationRequest.Builder setScanResults(android.net.wifi.ScanResult[]);
}

View File

@@ -34,8 +34,9 @@ import com.android.internal.annotations.VisibleForTesting;
@SystemApi
public final class RecommendationRequest implements Parcelable {
private final ScanResult[] mScanResults;
private final WifiConfiguration mCurrentSelectedConfig;
private final NetworkCapabilities mRequiredCapabilities;
private final WifiConfiguration mDefaultConfig;
private WifiConfiguration mConnectedConfig;
private WifiConfiguration[] mConnectableConfigs;
/**
* Builder class for constructing {@link RecommendationRequest} instances.
@@ -44,26 +45,62 @@ public final class RecommendationRequest implements Parcelable {
@SystemApi
public static final class Builder {
private ScanResult[] mScanResults;
private WifiConfiguration mCurrentConfig;
private NetworkCapabilities mNetworkCapabilities;
private WifiConfiguration mDefaultConfig;
private WifiConfiguration mConnectedConfig;
private WifiConfiguration[] mConnectableConfigs;
/**
* @param scanResults the array of {@link ScanResult}s the recommendation must be
* constrained to i.e. if a non-null wifi config recommendation is
* returned then it must be able to connect to one of the networks in
* the results list.
*
* If the array is {@code null} or empty then there is no constraint.
*
* @return this
*/
public Builder setScanResults(ScanResult[] scanResults) {
mScanResults = scanResults;
return this;
}
public Builder setCurrentRecommendedWifiConfig(WifiConfiguration config) {
this.mCurrentConfig = config;
/**
* @param config the {@link WifiConfiguration} to return if no recommendation is available.
* @return this
*/
public Builder setDefaultWifiConfig(WifiConfiguration config) {
this.mDefaultConfig = config;
return this;
}
public Builder setNetworkCapabilities(NetworkCapabilities capabilities) {
mNetworkCapabilities = capabilities;
/**
* @param config the {@link WifiConfiguration} of the connected network at the time the
* this request was made.
* @return this
*/
public Builder setConnectedWifiConfig(WifiConfiguration config) {
this.mConnectedConfig = config;
return this;
}
/**
* @param connectableConfigs the set of saved {@link WifiConfiguration}s that can be
* connected to based on the current set of {@link ScanResult}s.
* @return this
*/
public Builder setConnectableConfigs(WifiConfiguration[] connectableConfigs) {
mConnectableConfigs = connectableConfigs;
return this;
}
/**
* @return a new {@link RecommendationRequest} instance
*/
public RecommendationRequest build() {
return new RecommendationRequest(mScanResults, mCurrentConfig, mNetworkCapabilities);
return new RecommendationRequest(mScanResults,
mDefaultConfig,
mConnectedConfig,
mConnectableConfigs);
}
}
@@ -79,45 +116,80 @@ public final class RecommendationRequest implements Parcelable {
}
/**
* @return The best recommendation at the time this {@code RecommendationRequest} instance
* was created. This may be null which indicates that no recommendation is available.
* @return the {@link WifiConfiguration} to return if no recommendation is available.
*/
public WifiConfiguration getCurrentSelectedConfig() {
return mCurrentSelectedConfig;
public WifiConfiguration getDefaultWifiConfig() {
return mDefaultConfig;
}
/**
*
* @return The set of {@link NetworkCapabilities} the recommendation must be constrained to.
* This may be {@code null} which indicates that there are no constraints on the
* capabilities of the recommended network.
* @return the {@link WifiConfiguration} of the connected network at the time the this request
* was made.
*/
public NetworkCapabilities getRequiredCapabilities() {
return mRequiredCapabilities;
public WifiConfiguration getConnectedConfig() {
return mConnectedConfig;
}
/**
* @return the set of saved {@link WifiConfiguration}s that can be connected to based on the
* current set of {@link ScanResult}s.
*/
public WifiConfiguration[] getConnectableConfigs() {
return mConnectableConfigs;
}
/**
* @param connectedConfig the {@link WifiConfiguration} of the connected network at the time
* the this request was made.
*/
public void setConnectedConfig(WifiConfiguration connectedConfig) {
mConnectedConfig = connectedConfig;
}
/**
* @param connectableConfigs the set of saved {@link WifiConfiguration}s that can be connected
* to based on the current set of {@link ScanResult}s.
*/
public void setConnectableConfigs(WifiConfiguration[] connectableConfigs) {
mConnectableConfigs = connectableConfigs;
}
@VisibleForTesting
RecommendationRequest(ScanResult[] scanResults,
WifiConfiguration currentSelectedConfig,
NetworkCapabilities requiredCapabilities) {
WifiConfiguration defaultWifiConfig,
WifiConfiguration connectedWifiConfig,
WifiConfiguration[] connectableConfigs) {
mScanResults = scanResults;
mCurrentSelectedConfig = currentSelectedConfig;
mRequiredCapabilities = requiredCapabilities;
mDefaultConfig = defaultWifiConfig;
mConnectedConfig = connectedWifiConfig;
mConnectableConfigs = connectableConfigs;
}
protected RecommendationRequest(Parcel in) {
final int resultCount = in.readInt();
if (resultCount > 0) {
mScanResults = new ScanResult[resultCount];
final ClassLoader classLoader = ScanResult.class.getClassLoader();
for (int i = 0; i < resultCount; i++) {
mScanResults[i] = in.readParcelable(ScanResult.class.getClassLoader());
mScanResults[i] = in.readParcelable(classLoader);
}
} else {
mScanResults = null;
}
mCurrentSelectedConfig = in.readParcelable(WifiConfiguration.class.getClassLoader());
mRequiredCapabilities = in.readParcelable(NetworkCapabilities.class.getClassLoader());
mDefaultConfig = in.readParcelable(WifiConfiguration.class.getClassLoader());
mConnectedConfig = in.readParcelable(WifiConfiguration.class.getClassLoader());
final int configCount = in.readInt();
if (configCount > 0) {
mConnectableConfigs = new WifiConfiguration[configCount];
final ClassLoader classLoader = WifiConfiguration.class.getClassLoader();
for (int i = 0; i < configCount; i++) {
mConnectableConfigs[i] = in.readParcelable(classLoader);
}
} else {
mConnectableConfigs = null;
}
}
@Override
@@ -135,8 +207,20 @@ public final class RecommendationRequest implements Parcelable {
} else {
dest.writeInt(0);
}
dest.writeParcelable(mCurrentSelectedConfig, flags);
dest.writeParcelable(mRequiredCapabilities, flags);
dest.writeParcelable(mDefaultConfig, flags);
dest.writeParcelable(mConnectedConfig, flags);
if (mConnectableConfigs != null) {
dest.writeInt(mConnectableConfigs.length);
for (int i = 0; i < mConnectableConfigs.length; i++) {
dest.writeParcelable(mConnectableConfigs[i], flags);
}
} else {
dest.writeInt(0);
}
}
public static final Creator<RecommendationRequest> CREATOR =

View File

@@ -7,8 +7,9 @@ import android.test.AndroidTestCase;
public class RecommendationRequestTest extends AndroidTestCase {
private ScanResult[] mScanResults;
private WifiConfiguration mConfiguration;
private NetworkCapabilities mCapabilities;
private WifiConfiguration mDefaultConfig;
private WifiConfiguration mConnectedConfig;
private WifiConfiguration[] mConnectableConfigs;
@Override
public void setUp() throws Exception {
@@ -29,45 +30,58 @@ public class RecommendationRequestTest extends AndroidTestCase {
8 /*centerFreq0*/,
9 /*centerFreq1*/,
false /*is80211McRTTResponder*/);
mConfiguration = new WifiConfiguration();
mConfiguration.SSID = "RecommendationRequestTest";
mCapabilities = new NetworkCapabilities()
.removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED);
mDefaultConfig = new WifiConfiguration();
mDefaultConfig.SSID = "default_config";
mConnectedConfig = new WifiConfiguration();
mConnectedConfig.SSID = "connected_config";
mConnectableConfigs = new WifiConfiguration[] {mDefaultConfig, mConnectedConfig};
}
public void testParceling() throws Exception {
RecommendationRequest request = new RecommendationRequest.Builder()
.setCurrentRecommendedWifiConfig(mConfiguration)
.setDefaultWifiConfig(mDefaultConfig)
.setScanResults(mScanResults)
.setNetworkCapabilities(mCapabilities)
.setConnectedWifiConfig(mConnectedConfig)
.setConnectableConfigs(mConnectableConfigs)
.build();
RecommendationRequest parceled = passThroughParcel(request);
assertEquals(request.getCurrentSelectedConfig().SSID,
parceled.getCurrentSelectedConfig().SSID);
assertEquals(request.getRequiredCapabilities(), parceled.getRequiredCapabilities());
assertEquals(request.getDefaultWifiConfig().SSID,
parceled.getDefaultWifiConfig().SSID);
assertEquals(request.getConnectedConfig().SSID,
parceled.getConnectedConfig().SSID);
ScanResult[] parceledScanResults = parceled.getScanResults();
assertNotNull(parceledScanResults);
assertEquals(mScanResults.length, parceledScanResults.length);
for (int i = 0; i < mScanResults.length; i++) {
assertEquals(mScanResults[i].SSID, parceledScanResults[i].SSID);
}
WifiConfiguration[] parceledConfigs = parceled.getConnectableConfigs();
for (int i = 0; i < parceledConfigs.length; i++) {
assertEquals(mConnectableConfigs[i].SSID, parceledConfigs[i].SSID);
}
}
public void testParceling_nullScanResults() throws Exception {
RecommendationRequest request = new RecommendationRequest.Builder()
.setCurrentRecommendedWifiConfig(mConfiguration)
.setNetworkCapabilities(mCapabilities)
.setDefaultWifiConfig(mDefaultConfig)
.build();
RecommendationRequest parceled = passThroughParcel(request);
assertEquals(request.getCurrentSelectedConfig().SSID,
parceled.getCurrentSelectedConfig().SSID);
assertEquals(request.getRequiredCapabilities(), parceled.getRequiredCapabilities());
ScanResult[] parceledScanResults = parceled.getScanResults();
assertNull(parceledScanResults);
}
public void testParceling_nullWifiConfigArray() throws Exception {
RecommendationRequest request = new RecommendationRequest.Builder()
.setDefaultWifiConfig(mDefaultConfig)
.build();
RecommendationRequest parceled = passThroughParcel(request);
WifiConfiguration[] parceledConfigs = parceled.getConnectableConfigs();
assertNull(parceledConfigs);
}
private RecommendationRequest passThroughParcel(RecommendationRequest request) {
Parcel p = Parcel.obtain();
RecommendationRequest output = null;

View File

@@ -582,9 +582,9 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
Log.d(TAG, "Returning the default network recommendation.");
}
if (request != null && request.getCurrentSelectedConfig() != null) {
if (request != null && request.getDefaultWifiConfig() != null) {
return RecommendationResult.createConnectRecommendation(
request.getCurrentSelectedConfig());
request.getDefaultWifiConfig());
}
return RecommendationResult.createDoNotConnectRecommendation();
} finally {
@@ -887,9 +887,9 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
}
final RecommendationResult result;
if (request != null && request.getCurrentSelectedConfig() != null) {
if (request != null && request.getDefaultWifiConfig() != null) {
result = RecommendationResult.createConnectRecommendation(
request.getCurrentSelectedConfig());
request.getDefaultWifiConfig());
} else {
result = RecommendationResult.createDoNotConnectRecommendation();
}

View File

@@ -144,7 +144,7 @@ public class NetworkScoreServiceTest {
configuration.SSID = "NetworkScoreServiceTest_SSID";
configuration.BSSID = "NetworkScoreServiceTest_BSSID";
mRecommendationRequest = new RecommendationRequest.Builder()
.setCurrentRecommendedWifiConfig(configuration).build();
.setDefaultWifiConfig(configuration).build();
mOnResultListener = new OnResultListener();
mRemoteCallback = new RemoteCallback(mOnResultListener);
Settings.Global.putLong(mContentResolver,
@@ -240,7 +240,7 @@ public class NetworkScoreServiceTest {
final RecommendationResult result =
mNetworkScoreService.requestRecommendation(mRecommendationRequest);
assertNotNull(result);
assertEquals(mRecommendationRequest.getCurrentSelectedConfig(),
assertEquals(mRecommendationRequest.getDefaultWifiConfig(),
result.getWifiConfiguration());
}
@@ -255,7 +255,7 @@ public class NetworkScoreServiceTest {
final RecommendationResult result =
mNetworkScoreService.requestRecommendation(mRecommendationRequest);
assertNotNull(result);
assertEquals(mRecommendationRequest.getCurrentSelectedConfig(),
assertEquals(mRecommendationRequest.getDefaultWifiConfig(),
result.getWifiConfiguration());
}
@@ -327,7 +327,7 @@ public class NetworkScoreServiceTest {
RecommendationResult result =
mOnResultListener.receivedBundle.getParcelable(EXTRA_RECOMMENDATION_RESULT);
assertTrue(result.hasRecommendation());
assertEquals(mRecommendationRequest.getCurrentSelectedConfig().SSID,
assertEquals(mRecommendationRequest.getDefaultWifiConfig().SSID,
result.getWifiConfiguration().SSID);
}