From b50ade8bb0737ef9677c7e8fac82338dde8d68c7 Mon Sep 17 00:00:00 2001 From: Amin Shaikh Date: Thu, 19 Jan 2017 17:24:41 -0800 Subject: [PATCH] Add additional fields to RecommendationRequest. - Add networkId and timestamp for the last user selected network Bug: 34467596 Test: runtest --path core/tests/coretests/src/android/net/RecommendationRequestTest.java Change-Id: Ic81c1beede1a643cd428b6e5c57ed430a6b1ccc0 Merged-In: Ic81c1beede1a643cd428b6e5c57ed430a6b1ccc0 --- api/system-current.txt | 3 + .../android/net/RecommendationRequest.java | 63 ++++++++++++++----- .../net/RecommendationRequestTest.java | 18 ++++++ 3 files changed, 67 insertions(+), 17 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index 586bcfb7f1b76..70651db07cb8b 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -25762,6 +25762,8 @@ package android.net { method public android.net.wifi.WifiConfiguration[] getConnectableConfigs(); method public android.net.wifi.WifiConfiguration getConnectedConfig(); method public android.net.wifi.WifiConfiguration getDefaultWifiConfig(); + method public int getLastSelectedNetworkId(); + method public long getLastSelectedNetworkTimestamp(); method public android.net.wifi.ScanResult[] getScanResults(); method public void setConnectableConfigs(android.net.wifi.WifiConfiguration[]); method public void setConnectedConfig(android.net.wifi.WifiConfiguration); @@ -25775,6 +25777,7 @@ package android.net { 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 setLastSelectedNetwork(int, long); method public android.net.RecommendationRequest.Builder setScanResults(android.net.wifi.ScanResult[]); } diff --git a/core/java/android/net/RecommendationRequest.java b/core/java/android/net/RecommendationRequest.java index a227f18fe2bf1..b89a245623eef 100644 --- a/core/java/android/net/RecommendationRequest.java +++ b/core/java/android/net/RecommendationRequest.java @@ -37,6 +37,8 @@ public final class RecommendationRequest implements Parcelable { private final WifiConfiguration mDefaultConfig; private WifiConfiguration mConnectedConfig; private WifiConfiguration[] mConnectableConfigs; + private final int mLastSelectedNetworkId; + private final long mLastSelectedNetworkTimestamp; /** * Builder class for constructing {@link RecommendationRequest} instances. @@ -48,17 +50,9 @@ public final class RecommendationRequest implements Parcelable { private WifiConfiguration mDefaultConfig; private WifiConfiguration mConnectedConfig; private WifiConfiguration[] mConnectableConfigs; + private int mLastSelectedNetworkId; + private long mLastSelectedTimestamp; - /** - * @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; @@ -89,7 +83,20 @@ public final class RecommendationRequest implements Parcelable { * @return this */ public Builder setConnectableConfigs(WifiConfiguration[] connectableConfigs) { - mConnectableConfigs = connectableConfigs; + this.mConnectableConfigs = connectableConfigs; + return this; + } + + /** + * @param networkId The {@link WifiConfiguration#networkId} of the last user selected + * network. + * @param timestamp The {@link android.os.SystemClock#elapsedRealtime()} when the user + * selected {@code networkId}. + * @return this + */ + public Builder setLastSelectedNetwork(int networkId, long timestamp) { + this.mLastSelectedNetworkId = networkId; + this.mLastSelectedTimestamp = timestamp; return this; } @@ -97,10 +104,8 @@ public final class RecommendationRequest implements Parcelable { * @return a new {@link RecommendationRequest} instance */ public RecommendationRequest build() { - return new RecommendationRequest(mScanResults, - mDefaultConfig, - mConnectedConfig, - mConnectableConfigs); + return new RecommendationRequest(mScanResults, mDefaultConfig, mConnectedConfig, + mConnectableConfigs, mLastSelectedNetworkId, mLastSelectedTimestamp); } } @@ -154,15 +159,35 @@ public final class RecommendationRequest implements Parcelable { mConnectableConfigs = connectableConfigs; } + /** + * @return The {@link WifiConfiguration#networkId} of the last user selected network. + * {@code 0} if not set. + */ + public int getLastSelectedNetworkId() { + return mLastSelectedNetworkId; + } + + /** + * @return The {@link android.os.SystemClock#elapsedRealtime()} when the user selected + * {@link #getLastSelectedNetworkId()}. {@code 0} if not set. + */ + public long getLastSelectedNetworkTimestamp() { + return mLastSelectedNetworkTimestamp; + } + @VisibleForTesting RecommendationRequest(ScanResult[] scanResults, WifiConfiguration defaultWifiConfig, WifiConfiguration connectedWifiConfig, - WifiConfiguration[] connectableConfigs) { + WifiConfiguration[] connectableConfigs, + int lastSelectedNetworkId, + long lastSelectedNetworkTimestamp) { mScanResults = scanResults; mDefaultConfig = defaultWifiConfig; mConnectedConfig = connectedWifiConfig; mConnectableConfigs = connectableConfigs; + mLastSelectedNetworkId = lastSelectedNetworkId; + mLastSelectedNetworkTimestamp = lastSelectedNetworkTimestamp; } protected RecommendationRequest(Parcel in) { @@ -190,6 +215,9 @@ public final class RecommendationRequest implements Parcelable { } else { mConnectableConfigs = null; } + + mLastSelectedNetworkId = in.readInt(); + mLastSelectedNetworkTimestamp = in.readLong(); } @Override @@ -220,7 +248,8 @@ public final class RecommendationRequest implements Parcelable { dest.writeInt(0); } - + dest.writeInt(mLastSelectedNetworkId); + dest.writeLong(mLastSelectedNetworkTimestamp); } public static final Creator CREATOR = diff --git a/core/tests/coretests/src/android/net/RecommendationRequestTest.java b/core/tests/coretests/src/android/net/RecommendationRequestTest.java index 39c1691b09a7c..bd2550073dd30 100644 --- a/core/tests/coretests/src/android/net/RecommendationRequestTest.java +++ b/core/tests/coretests/src/android/net/RecommendationRequestTest.java @@ -3,6 +3,7 @@ package android.net; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.os.Parcel; +import android.os.SystemClock; import android.test.AndroidTestCase; public class RecommendationRequestTest extends AndroidTestCase { @@ -10,6 +11,8 @@ public class RecommendationRequestTest extends AndroidTestCase { private WifiConfiguration mDefaultConfig; private WifiConfiguration mConnectedConfig; private WifiConfiguration[] mConnectableConfigs; + private int mLastSelectedNetworkId; + private long mLastSelectedNetworkTimestamp; @Override public void setUp() throws Exception { @@ -35,6 +38,8 @@ public class RecommendationRequestTest extends AndroidTestCase { mConnectedConfig = new WifiConfiguration(); mConnectedConfig.SSID = "connected_config"; mConnectableConfigs = new WifiConfiguration[] {mDefaultConfig, mConnectedConfig}; + mLastSelectedNetworkId = 5; + mLastSelectedNetworkTimestamp = SystemClock.elapsedRealtime(); } public void testParceling() throws Exception { @@ -43,6 +48,7 @@ public class RecommendationRequestTest extends AndroidTestCase { .setScanResults(mScanResults) .setConnectedWifiConfig(mConnectedConfig) .setConnectableConfigs(mConnectableConfigs) + .setLastSelectedNetwork(mLastSelectedNetworkId, mLastSelectedNetworkTimestamp) .build(); RecommendationRequest parceled = passThroughParcel(request); @@ -60,6 +66,8 @@ public class RecommendationRequestTest extends AndroidTestCase { for (int i = 0; i < parceledConfigs.length; i++) { assertEquals(mConnectableConfigs[i].SSID, parceledConfigs[i].SSID); } + assertEquals(mLastSelectedNetworkId, parceled.getLastSelectedNetworkId()); + assertEquals(mLastSelectedNetworkTimestamp, parceled.getLastSelectedNetworkTimestamp()); } public void testParceling_nullScanResults() throws Exception { @@ -82,6 +90,16 @@ public class RecommendationRequestTest extends AndroidTestCase { assertNull(parceledConfigs); } + public void testParceling_unsetLastSelectedNetwork() throws Exception { + RecommendationRequest request = new RecommendationRequest.Builder() + .build(); + + RecommendationRequest parceled = passThroughParcel(request); + + assertEquals(0, parceled.getLastSelectedNetworkId()); + assertEquals(0, parceled.getLastSelectedNetworkTimestamp()); + } + private RecommendationRequest passThroughParcel(RecommendationRequest request) { Parcel p = Parcel.obtain(); RecommendationRequest output = null;