summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Oscar Shu <xshu@google.com> 2025-02-07 00:35:14 +0000
committer Oscar Shu <xshu@google.com> 2025-02-07 20:37:17 +0000
commit0befec7e14fe5c9fdce05c5ccff98bf247a1b0fb (patch)
treeb75dc23996702604f5b639655cd2f0ba65c5b627
parentd2e6d4ad0ef559166200f27f2b3326212653ec65 (diff)
Allow WifiNetworkSpecifier to hint preference to secondary
When setPreferSecondarySta is true, the wifi framework will try to use secondary STA for this connection when possible. Flag: EXEMPT bugfix Bug: 391440945 Test: atest android.net.wifi Test: atest com.android.server.wifi Change-Id: I3d68c52b66b6ccf389e3e005abfdd026a723827a
-rw-r--r--framework/java/android/net/wifi/WifiNetworkSpecifier.java44
-rw-r--r--framework/tests/src/android/net/wifi/WifiNetworkAgentSpecifierTest.java32
-rw-r--r--framework/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java40
-rw-r--r--service/java/com/android/server/wifi/ActiveModeWarden.java16
-rw-r--r--service/java/com/android/server/wifi/MultiInternetWifiNetworkFactory.java3
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkFactory.java16
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java55
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java20
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java20
9 files changed, 152 insertions, 94 deletions
diff --git a/framework/java/android/net/wifi/WifiNetworkSpecifier.java b/framework/java/android/net/wifi/WifiNetworkSpecifier.java
index 199969d9c7..e00e7e6b7b 100644
--- a/framework/java/android/net/wifi/WifiNetworkSpecifier.java
+++ b/framework/java/android/net/wifi/WifiNetworkSpecifier.java
@@ -192,6 +192,8 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
private int[] mChannels;
+ private boolean mPreferSecondarySta;
+
public Builder() {
mSsidPatternMatcher = null;
mBssidPatternMatcher = null;
@@ -480,6 +482,19 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
return this;
}
+ /**
+ * Hint the Wifi service to prefer using secondary STA for this connection.
+ *
+ * @param value - true to prefer this connection to be started on a secondary STA.
+ * false to let the wifi framework decide
+ * @return Instance of {@link Builder} to enable chaining of the builder method.
+ * @hide
+ */
+ @NonNull public Builder setPreferSecondarySta(boolean value) {
+ mPreferSecondarySta = value;
+ return this;
+ }
+
private void setSecurityParamsInWifiConfiguration(
@NonNull WifiConfiguration configuration) {
if (!TextUtils.isEmpty(mWpa2PskPassphrase)) { // WPA-PSK network.
@@ -684,7 +699,8 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
mBssidPatternMatcher,
mBand,
buildWifiConfiguration(),
- mChannels);
+ mChannels,
+ mPreferSecondarySta);
}
}
@@ -707,6 +723,7 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
@WifiBand private final int mBand;
private final int[] mChannelFreqs;
+ private boolean mPreferSecondarySta;
/**
* Security credentials for the network.
@@ -729,7 +746,8 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
@NonNull Pair<MacAddress, MacAddress> bssidPatternMatcher,
@WifiBand int band,
@NonNull WifiConfiguration wifiConfiguration,
- @NonNull int[] channelFreqs) {
+ @NonNull int[] channelFreqs,
+ boolean preferSecondarySta) {
checkNotNull(ssidPatternMatcher);
checkNotNull(bssidPatternMatcher);
checkNotNull(wifiConfiguration);
@@ -739,6 +757,7 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
this.mBand = band;
this.wifiConfiguration = wifiConfiguration;
this.mChannelFreqs = channelFreqs;
+ this.mPreferSecondarySta = preferSecondarySta;
}
/**
@@ -756,6 +775,14 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
return mChannelFreqs.clone();
}
+ /**
+ * @see Builder#setPreferSecondarySta(boolean)
+ * @hide
+ */
+ public boolean isPreferSecondarySta() {
+ return mPreferSecondarySta;
+ }
+
public static final @NonNull Creator<WifiNetworkSpecifier> CREATOR =
new Creator<WifiNetworkSpecifier>() {
@Override
@@ -767,9 +794,10 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
Pair.create(baseAddress, mask);
int band = in.readInt();
WifiConfiguration wifiConfiguration = in.readParcelable(null);
- int[] mChannels = in.createIntArray();
+ int[] channels = in.createIntArray();
+ boolean preferSecondarySta = in.readBoolean();
return new WifiNetworkSpecifier(ssidPatternMatcher, bssidPatternMatcher, band,
- wifiConfiguration, mChannels);
+ wifiConfiguration, channels, preferSecondarySta);
}
@Override
@@ -791,13 +819,15 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
dest.writeInt(mBand);
dest.writeParcelable(wifiConfiguration, flags);
dest.writeIntArray(mChannelFreqs);
+ dest.writeBoolean(mPreferSecondarySta);
}
@Override
public int hashCode() {
return Objects.hash(
ssidPatternMatcher.getPath(), ssidPatternMatcher.getType(), bssidPatternMatcher,
- mBand, wifiConfiguration.allowedKeyManagement, Arrays.hashCode(mChannelFreqs));
+ mBand, wifiConfiguration.allowedKeyManagement, Arrays.hashCode(mChannelFreqs),
+ mPreferSecondarySta);
}
@Override
@@ -818,7 +848,8 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
&& this.mBand == lhs.mBand
&& Objects.equals(this.wifiConfiguration.allowedKeyManagement,
lhs.wifiConfiguration.allowedKeyManagement)
- && Arrays.equals(mChannelFreqs, lhs.mChannelFreqs);
+ && Arrays.equals(mChannelFreqs, lhs.mChannelFreqs)
+ && mPreferSecondarySta == lhs.mPreferSecondarySta;
}
@Override
@@ -831,6 +862,7 @@ public final class WifiNetworkSpecifier extends NetworkSpecifier implements Parc
.append(", BSSID=").append(wifiConfiguration.BSSID)
.append(", channels=").append(Arrays.toString(mChannelFreqs))
.append(", band=").append(mBand)
+ .append(", preferSecondarySta=").append(mPreferSecondarySta)
.append("]")
.toString();
}
diff --git a/framework/tests/src/android/net/wifi/WifiNetworkAgentSpecifierTest.java b/framework/tests/src/android/net/wifi/WifiNetworkAgentSpecifierTest.java
index bc22b808c5..a6718c1f11 100644
--- a/framework/tests/src/android/net/wifi/WifiNetworkAgentSpecifierTest.java
+++ b/framework/tests/src/android/net/wifi/WifiNetworkAgentSpecifierTest.java
@@ -195,7 +195,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_5_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertTrue(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertTrue(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -224,7 +224,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_5_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertTrue(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertTrue(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -253,7 +253,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_5_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertTrue(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertTrue(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -285,7 +285,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_24_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertFalse(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertFalse(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -316,7 +316,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_5_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertTrue(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertTrue(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -325,7 +325,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_24_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertFalse(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertFalse(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -334,7 +334,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.UNSPECIFIED,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertTrue(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertTrue(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
}
@@ -373,17 +373,17 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_5_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
WifiNetworkSpecifier wifi5GLowNetworkSpecifier = new WifiNetworkSpecifier(
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_5_GHZ_LOW,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
WifiNetworkSpecifier wifi5GHighNetworkSpecifier = new WifiNetworkSpecifier(
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_5_GHZ_HIGH,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
// mBand = WIFI_BAND_5_GHZ_LOW
// Same band matches.
@@ -435,7 +435,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_5_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertFalse(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertFalse(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -454,7 +454,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_24_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertFalse(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertFalse(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -464,7 +464,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.UNSPECIFIED,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertFalse(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertFalse(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
}
@@ -496,7 +496,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_5_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertFalse(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertFalse(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -529,7 +529,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.WIFI_BAND_24_GHZ,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertFalse(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertFalse(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
@@ -557,7 +557,7 @@ public class WifiNetworkAgentSpecifierTest {
ssidPattern,
bssidPattern,
ScanResult.UNSPECIFIED,
- wificonfigurationNetworkSpecifier, new int[0]);
+ wificonfigurationNetworkSpecifier, new int[0], false);
assertFalse(wifiNetworkSpecifier.canBeSatisfiedBy(wifiNetworkAgentSpecifier));
assertFalse(wifiNetworkAgentSpecifier.canBeSatisfiedBy(wifiNetworkSpecifier));
diff --git a/framework/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java b/framework/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java
index 12dfd6e9a5..cc6d008cb2 100644
--- a/framework/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java
+++ b/framework/tests/src/android/net/wifi/WifiNetworkSpecifierTest.java
@@ -657,7 +657,7 @@ public class WifiNetworkSpecifierTest {
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
WIFI_BAND_5_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
Parcel parcelW = Parcel.obtain();
specifier.writeToParcel(parcelW, 0);
@@ -689,7 +689,7 @@ public class WifiNetworkSpecifierTest {
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
ScanResult.UNSPECIFIED, /* band */
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
assertFalse(specifier.canBeSatisfiedBy(null));
assertFalse(specifier.canBeSatisfiedBy(new MatchAllNetworkSpecifier()));
@@ -712,14 +712,14 @@ public class WifiNetworkSpecifierTest {
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
WIFI_BAND_5_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
WifiNetworkSpecifier specifier2 =
new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
WIFI_BAND_5_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
assertTrue(specifier2.canBeSatisfiedBy(specifier1));
}
@@ -741,7 +741,7 @@ public class WifiNetworkSpecifierTest {
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
ScanResult.WIFI_BAND_24_GHZ,
- wifiConfiguration1, new int[0]);
+ wifiConfiguration1, new int[0], false);
WifiConfiguration wifiConfiguration2 = new WifiConfiguration();
wifiConfiguration2.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
@@ -750,7 +750,7 @@ public class WifiNetworkSpecifierTest {
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
ScanResult.WIFI_BAND_24_GHZ,
- wifiConfiguration2, new int[0]);
+ wifiConfiguration2, new int[0], false);
assertFalse(specifier2.canBeSatisfiedBy(specifier1));
}
@@ -772,14 +772,14 @@ public class WifiNetworkSpecifierTest {
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
WIFI_BAND_5_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
WifiNetworkSpecifier specifier2 =
new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
WIFI_BAND_5_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
assertFalse(specifier2.canBeSatisfiedBy(specifier1));
}
@@ -801,14 +801,14 @@ public class WifiNetworkSpecifierTest {
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
ScanResult.WIFI_BAND_24_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
WifiNetworkSpecifier specifier2 =
new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS,
WifiManager.ALL_ZEROS_MAC_ADDRESS),
ScanResult.WIFI_BAND_24_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
assertFalse(specifier2.canBeSatisfiedBy(specifier1));
}
@@ -827,14 +827,14 @@ public class WifiNetworkSpecifierTest {
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
ScanResult.WIFI_BAND_24_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
WifiNetworkSpecifier specifier2 =
new WifiNetworkSpecifier(new PatternMatcher(TEST_SSID, PATTERN_LITERAL),
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
ScanResult.WIFI_BAND_24_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
// Same band matches.
assertTrue(specifier2.canBeSatisfiedBy(specifier1));
@@ -845,7 +845,7 @@ public class WifiNetworkSpecifierTest {
Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS,
WifiManager.ALL_ZEROS_MAC_ADDRESS),
WIFI_BAND_5_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
// Different band does not match.
assertFalse(specifier2.canBeSatisfiedBy(specifier1));
@@ -856,7 +856,7 @@ public class WifiNetworkSpecifierTest {
Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS,
WifiManager.ALL_ZEROS_MAC_ADDRESS),
ScanResult.UNSPECIFIED,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
// An UNSPECIFIED band does not match a specified band, because a WifiNetworkSpecifier
// satisfies another only if they are equal.
@@ -878,7 +878,7 @@ public class WifiNetworkSpecifierTest {
Pair.create(MacAddress.fromString(TEST_BSSID_OUI_BASE_ADDRESS),
MacAddress.fromString(TEST_BSSID_OUI_MASK)),
WIFI_BAND_5_GHZ,
- wifiConfiguration, new int[0]);
+ wifiConfiguration, new int[0], false);
final NetworkSpecifier redacted = specifier.redact();
if (SdkLevel.isAtLeastS()) {
@@ -902,4 +902,14 @@ public class WifiNetworkSpecifierTest {
builder.setBand(WIFI_BAND_5_GHZ);
assertThrows(IllegalStateException.class, builder::build);
}
+
+ @Test
+ public void testSetPreferSecondarySta() {
+ WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder()
+ .setSsidPattern(new PatternMatcher(TEST_SSID, PATTERN_PREFIX));
+ // By default this should be false
+ assertEquals(false, builder.build().isPreferSecondarySta());
+ // It should be true if set to true
+ assertEquals(true, builder.setPreferSecondarySta(true).build().isPreferSecondarySta());
+ }
}
diff --git a/service/java/com/android/server/wifi/ActiveModeWarden.java b/service/java/com/android/server/wifi/ActiveModeWarden.java
index 9e6845f47b..7f16ec46d7 100644
--- a/service/java/com/android/server/wifi/ActiveModeWarden.java
+++ b/service/java/com/android/server/wifi/ActiveModeWarden.java
@@ -932,6 +932,7 @@ public class ActiveModeWarden {
@NonNull public final String ssid;
@Nullable public final String bssid;
public final boolean didUserApprove;
+ public boolean preferSecondarySta = false;
AdditionalClientModeManagerRequestInfo(
@NonNull ExternalClientModeManagerRequestListener listener,
@@ -947,7 +948,6 @@ public class ActiveModeWarden {
this.ssid = ssid;
this.bssid = bssid;
this.didUserApprove = didUserApprove;
-
}
}
@@ -960,11 +960,12 @@ public class ActiveModeWarden {
* 3. The new ClientModeManager - if it was created successfully.
* @param requestorWs the WorkSource for this request
* @param didUserApprove if user explicitly approve on this request
+ * @param preferSecondarySta prefer to use secondary CMM for this request if possible
*/
public void requestLocalOnlyClientModeManager(
@NonNull ExternalClientModeManagerRequestListener listener,
@NonNull WorkSource requestorWs, @NonNull String ssid, @NonNull String bssid,
- boolean didUserApprove) {
+ boolean didUserApprove, boolean preferSecondarySta) {
if (listener == null) {
Log.wtf(TAG, "Cannot provide a null ExternalClientModeManagerRequestListener");
return;
@@ -974,10 +975,14 @@ public class ActiveModeWarden {
return;
}
+ AdditionalClientModeManagerRequestInfo additionalClientModeManagerRequestInfo =
+ new AdditionalClientModeManagerRequestInfo(listener, requestorWs,
+ ROLE_CLIENT_LOCAL_ONLY, ssid, bssid, didUserApprove);
+ additionalClientModeManagerRequestInfo.preferSecondarySta = preferSecondarySta;
+
mWifiController.sendMessage(
WifiController.CMD_REQUEST_ADDITIONAL_CLIENT_MODE_MANAGER,
- new AdditionalClientModeManagerRequestInfo(listener, requestorWs,
- ROLE_CLIENT_LOCAL_ONLY, ssid, bssid, didUserApprove));
+ additionalClientModeManagerRequestInfo);
}
/**
@@ -2487,7 +2492,8 @@ public class ActiveModeWarden {
// Special case for holders with ENTER_CAR_MODE_PRIORITIZED. Only give them the
// primary STA to avoid the device getting into STA+STA state.
// In STA+STA wifi scans will result in high latency in the secondary STA.
- if (requestInfo.clientRole == ROLE_CLIENT_LOCAL_ONLY
+ if (!requestInfo.preferSecondarySta
+ && requestInfo.clientRole == ROLE_CLIENT_LOCAL_ONLY
&& requestInfo.requestorWs != null) {
WorkSource workSource = requestInfo.requestorWs;
for (int i = 0; i < workSource.size(); i++) {
diff --git a/service/java/com/android/server/wifi/MultiInternetWifiNetworkFactory.java b/service/java/com/android/server/wifi/MultiInternetWifiNetworkFactory.java
index cb149b7bc5..88aa3c6e29 100644
--- a/service/java/com/android/server/wifi/MultiInternetWifiNetworkFactory.java
+++ b/service/java/com/android/server/wifi/MultiInternetWifiNetworkFactory.java
@@ -182,7 +182,8 @@ public class MultiInternetWifiNetworkFactory extends NetworkFactory {
NetworkRequestState nrs = new NetworkRequestState(networkRequest,
new WifiNetworkSpecifier(
wns.ssidPatternMatcher, wns.bssidPatternMatcher, wns.getBand(),
- wns.wifiConfiguration, wns.getPreferredChannelFrequenciesMhz()),
+ wns.wifiConfiguration, wns.getPreferredChannelFrequenciesMhz(),
+ wns.isPreferSecondarySta()),
isFromSetting,
isFromForegroundApp,
isFromForegroundAppOrService);
diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java
index 6deb4bd6b5..a4b876dfb0 100644
--- a/service/java/com/android/server/wifi/WifiNetworkFactory.java
+++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java
@@ -909,7 +909,8 @@ public class WifiNetworkFactory extends NetworkFactory {
WifiNetworkSpecifier wns = (WifiNetworkSpecifier) ns;
mActiveSpecificNetworkRequestSpecifier = new WifiNetworkSpecifier(
wns.ssidPatternMatcher, wns.bssidPatternMatcher, wns.getBand(),
- wns.wifiConfiguration, wns.getPreferredChannelFrequenciesMhz());
+ wns.wifiConfiguration, wns.getPreferredChannelFrequenciesMhz(),
+ wns.isPreferSecondarySta());
mSkipUserDialogue = false;
mWifiMetrics.incrementNetworkRequestApiNumRequest();
@@ -1156,7 +1157,7 @@ public class WifiNetworkFactory extends NetworkFactory {
}
private void handleConnectToNetworkUserSelectionInternal(WifiConfiguration network,
- boolean didUserSeeUi) {
+ boolean didUserSeeUi, boolean preferSecondarySta) {
// Copy over the credentials from the app's request and then copy the ssid from user
// selection.
WifiConfiguration networkToConnect =
@@ -1202,8 +1203,10 @@ public class WifiNetworkFactory extends NetworkFactory {
}
WorkSource ws = new WorkSource(mActiveSpecificNetworkRequest.getRequestorUid(),
mActiveSpecificNetworkRequest.getRequestorPackageName());
+ // mPreferSecondarySta
mActiveModeWarden.requestLocalOnlyClientModeManager(new ClientModeManagerRequestListener(),
- ws, networkToConnect.SSID, networkToConnect.BSSID, didUserSeeUi);
+ ws, networkToConnect.SSID, networkToConnect.BSSID, didUserSeeUi,
+ preferSecondarySta);
}
private boolean hasNetworkForInternet(WifiConfiguration network) {
@@ -1222,9 +1225,11 @@ public class WifiNetworkFactory extends NetworkFactory {
// Cancel the ongoing scans after user selection.
cancelPeriodicScans();
mIsPeriodicScanEnabled = false;
+ boolean preferSecondarySta = mActiveSpecificNetworkRequestSpecifier == null
+ ? false : mActiveSpecificNetworkRequestSpecifier.isPreferSecondarySta();
// Trigger connection attempts.
- handleConnectToNetworkUserSelectionInternal(network, didUserSeeUi);
+ handleConnectToNetworkUserSelectionInternal(network, didUserSeeUi, preferSecondarySta);
// Add the network to the approved access point map for the app.
addNetworkToUserApprovedAccessPointMap(mUserSelectedNetwork);
@@ -1996,7 +2001,8 @@ public class WifiNetworkFactory extends NetworkFactory {
WifiConfiguration config = mActiveSpecificNetworkRequestSpecifier.wifiConfiguration;
config.SSID = "\"" + ssid + "\"";
config.BSSID = bssid.toString();
- handleConnectToNetworkUserSelectionInternal(config, false);
+ handleConnectToNetworkUserSelectionInternal(config, false,
+ mActiveSpecificNetworkRequestSpecifier.isPreferSecondarySta());
mWifiMetrics.incrementNetworkRequestApiNumUserApprovalBypass();
return true;
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java b/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java
index 424ceb69ed..a093a85f11 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java
@@ -3192,7 +3192,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
// request for ssid2/bssid2
if (additionaClientModeManagerRole == ROLE_CLIENT_LOCAL_ONLY) {
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, ssid, bssid, false);
+ externalRequestListener, TEST_WORKSOURCE, ssid, bssid, false, false);
} else if (additionaClientModeManagerRole == ROLE_CLIENT_SECONDARY_LONG_LIVED) {
mActiveModeWarden.requestSecondaryLongLivedClientModeManager(
externalRequestListener, TEST_WORKSOURCE, ssid, bssid);
@@ -3307,7 +3307,8 @@ public class ActiveModeWardenTest extends WifiBaseTest {
// request for ssid2/bssid2
if (role == ROLE_CLIENT_LOCAL_ONLY) {
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false,
+ false);
} else if (role == ROLE_CLIENT_SECONDARY_LONG_LIVED) {
mActiveModeWarden.requestSecondaryLongLivedClientModeManager(
externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2);
@@ -3338,7 +3339,8 @@ public class ActiveModeWardenTest extends WifiBaseTest {
ExternalClientModeManagerRequestListener.class);
if (role == ROLE_CLIENT_LOCAL_ONLY) {
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_1, TEST_BSSID_1, false);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_1, TEST_BSSID_1, false,
+ false);
} else if (role == ROLE_CLIENT_SECONDARY_LONG_LIVED) {
mActiveModeWarden.requestSecondaryLongLivedClientModeManager(
externalRequestListener, TEST_WORKSOURCE, TEST_SSID_1, TEST_BSSID_1);
@@ -3370,7 +3372,8 @@ public class ActiveModeWardenTest extends WifiBaseTest {
// request for one more CMM (returns the existing one).
if (role == ROLE_CLIENT_LOCAL_ONLY) {
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_3, TEST_BSSID_3, false);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_3, TEST_BSSID_3, false,
+ false);
} else if (role == ROLE_CLIENT_SECONDARY_LONG_LIVED) {
mActiveModeWarden.requestSecondaryLongLivedClientModeManager(
externalRequestListener, TEST_WORKSOURCE, TEST_SSID_3, TEST_BSSID_3);
@@ -3413,7 +3416,8 @@ public class ActiveModeWardenTest extends WifiBaseTest {
// request for the same SSID/BSSID and expect the existing CMM to get returned twice.
if (role == ROLE_CLIENT_LOCAL_ONLY) {
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false,
+ false);
} else if (role == ROLE_CLIENT_SECONDARY_LONG_LIVED) {
mActiveModeWarden.requestSecondaryLongLivedClientModeManager(
externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2);
@@ -3460,7 +3464,8 @@ public class ActiveModeWardenTest extends WifiBaseTest {
// request for same ssid1/bssid1
if (role == ROLE_CLIENT_LOCAL_ONLY) {
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_1, TEST_BSSID_1, false);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_1, TEST_BSSID_1, false,
+ false);
} else if (role == ROLE_CLIENT_SECONDARY_LONG_LIVED) {
mActiveModeWarden.requestSecondaryLongLivedClientModeManager(
externalRequestListener, TEST_WORKSOURCE, TEST_SSID_1, TEST_BSSID_1);
@@ -3526,7 +3531,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
ExternalClientModeManagerRequestListener externalRequestListener = mock(
ExternalClientModeManagerRequestListener.class);
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_1, TEST_BSSID_1, false);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_1, TEST_BSSID_1, false, false);
mLooper.dispatchAll();
verify(externalRequestListener).onAnswer(null);
@@ -3901,7 +3906,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
ExternalClientModeManagerRequestListener.class);
// request for ssid2/bssid2
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false, false);
mLooper.dispatchAll();
verify(mWifiInjector).makeClientModeManager(
any(), eq(TEST_WORKSOURCE), eq(ROLE_CLIENT_LOCAL_ONLY), anyBoolean());
@@ -3986,7 +3991,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
ExternalClientModeManagerRequestListener.class);
// request for ssid2/bssid2
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false, false);
mLooper.dispatchAll();
verify(mWifiInjector).makeClientModeManager(
any(), eq(TEST_WORKSOURCE), eq(ROLE_CLIENT_LOCAL_ONLY), anyBoolean());
@@ -4124,7 +4129,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
// mock requesting local only secondary
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false, false);
mLooper.dispatchAll();
// Verify the primary is given to the externalRequestListener
verify(externalRequestListener).onAnswer(requestedClientModeManager.capture());
@@ -4132,20 +4137,18 @@ public class ActiveModeWardenTest extends WifiBaseTest {
any(), any(), eq(ROLE_CLIENT_LOCAL_ONLY), anyBoolean());
assertEquals(ROLE_CLIENT_PRIMARY, requestedClientModeManager.getValue().getRole());
- // Request for non local-only STA and verify the secondary STA is provided instead.
- when(additionalClientModeManager.getRole()).thenReturn(ROLE_CLIENT_SECONDARY_LONG_LIVED);
- mActiveModeWarden.requestSecondaryLongLivedClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2);
+ // mock requesting local only secondary, but with preference for secondary STA.
+ // This should bypass the enterCarMode permission check and still give secondary STA.
+ mActiveModeWarden.requestLocalOnlyClientModeManager(
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false, true);
mLooper.dispatchAll();
- verify(mWifiInjector).makeClientModeManager(any(), any(),
- eq(ROLE_CLIENT_SECONDARY_LONG_LIVED), anyBoolean());
-
additionalClientListener.value.onStarted(additionalClientModeManager);
mLooper.dispatchAll();
- verify(externalRequestListener, times(2)).onAnswer(
- requestedClientModeManager.capture());
- assertEquals(ROLE_CLIENT_SECONDARY_LONG_LIVED,
- requestedClientModeManager.getValue().getRole());
+ // Verify secondary is given to the externalRequestListener
+ verify(externalRequestListener, times(2)).onAnswer(requestedClientModeManager.capture());
+ verify(mWifiInjector).makeClientModeManager(
+ any(), any(), eq(ROLE_CLIENT_LOCAL_ONLY), anyBoolean());
+ assertEquals(ROLE_CLIENT_LOCAL_ONLY, requestedClientModeManager.getValue().getRole());
}
@Test
@@ -4182,10 +4185,10 @@ public class ActiveModeWardenTest extends WifiBaseTest {
when(additionalClientModeManager.getInterfaceName()).thenReturn(WIFI_IFACE_NAME_1);
when(additionalClientModeManager.getRole()).thenReturn(ROLE_CLIENT_LOCAL_ONLY);
- // Request will shell uid for local-only STA and verify the secondary is provided instead.
+ // Request with shell uid for local-only STA and verify the secondary is provided instead.
WorkSource shellWs = new WorkSource(0, "shell");
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, shellWs, TEST_SSID_2, TEST_BSSID_2, false);
+ externalRequestListener, shellWs, TEST_SSID_2, TEST_BSSID_2, false, false);
mLooper.dispatchAll();
verify(mWifiInjector).makeClientModeManager(any(), any(),
eq(ROLE_CLIENT_LOCAL_ONLY), anyBoolean());
@@ -4567,7 +4570,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
mActiveModeWarden.requestLocalOnlyClientModeManager(
mock(ExternalClientModeManagerRequestListener.class),
- TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false);
+ TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, false, false);
mLooper.dispatchAll();
// No role set, should be ignored.
@@ -4898,7 +4901,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
// mock requesting local only secondary
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, true);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, true, false);
mLooper.dispatchAll();
// Verify the primary is given to the externalRequestListener
verify(externalRequestListener).onAnswer(requestedClientModeManager.capture());
@@ -4956,7 +4959,7 @@ public class ActiveModeWardenTest extends WifiBaseTest {
// mock requesting local only secondary
mActiveModeWarden.requestLocalOnlyClientModeManager(
- externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, true);
+ externalRequestListener, TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2, true, false);
mLooper.dispatchAll();
WorkSource ws = new WorkSource(TEST_WORKSOURCE);
ws.add(SETTINGS_WORKSOURCE);
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java
index 5aa28c451b..0ff24270f1 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiConfigurationUtilTest.java
@@ -773,7 +773,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher(TEST_SSID, PatternMatcher.PATTERN_LITERAL),
Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS, WifiManager.ALL_ZEROS_MAC_ADDRESS),
ScanResult.UNSPECIFIED,
- WifiConfigurationTestUtil.createOpenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenNetwork(), new int[0], false);
assertTrue(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
@@ -787,7 +787,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher(".*", PatternMatcher.PATTERN_SIMPLE_GLOB),
Pair.create(MacAddress.fromString(TEST_BSSID), MacAddress.BROADCAST_ADDRESS),
ScanResult.UNSPECIFIED,
- WifiConfigurationTestUtil.createOpenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenNetwork(), new int[0], false);
assertTrue(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
@@ -801,7 +801,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher(TEST_SSID, PatternMatcher.PATTERN_LITERAL),
Pair.create(MacAddress.fromString(TEST_BSSID), MacAddress.BROADCAST_ADDRESS),
ScanResult.UNSPECIFIED,
- WifiConfigurationTestUtil.createOpenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenNetwork(), new int[0], false);
assertTrue(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
@@ -816,7 +816,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher(TEST_SSID, PatternMatcher.PATTERN_LITERAL),
Pair.create(MacAddress.fromString(TEST_BSSID), MacAddress.BROADCAST_ADDRESS),
ScanResult.WIFI_BAND_5_GHZ,
- WifiConfigurationTestUtil.createOpenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenNetwork(), new int[0], false);
assertTrue(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
@@ -831,7 +831,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher(".*", PatternMatcher.PATTERN_SIMPLE_GLOB),
Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS, WifiManager.ALL_ZEROS_MAC_ADDRESS),
ScanResult.UNSPECIFIED,
- WifiConfigurationTestUtil.createOpenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenNetwork(), new int[0], false);
assertFalse(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
@@ -845,7 +845,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher("", PatternMatcher.PATTERN_LITERAL),
Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS, WifiManager.ALL_ZEROS_MAC_ADDRESS),
ScanResult.UNSPECIFIED,
- WifiConfigurationTestUtil.createOpenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenNetwork(), new int[0], false);
assertFalse(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
@@ -859,7 +859,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher(TEST_SSID, PatternMatcher.PATTERN_LITERAL),
Pair.create(MacAddress.BROADCAST_ADDRESS, MacAddress.BROADCAST_ADDRESS),
ScanResult.UNSPECIFIED,
- WifiConfigurationTestUtil.createOpenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenNetwork(), new int[0], false);
assertFalse(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
@@ -873,7 +873,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher(TEST_SSID, PatternMatcher.PATTERN_LITERAL),
Pair.create(MacAddress.fromString(TEST_BSSID), WifiManager.ALL_ZEROS_MAC_ADDRESS),
ScanResult.UNSPECIFIED,
- WifiConfigurationTestUtil.createOpenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenNetwork(), new int[0], false);
assertFalse(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
@@ -887,7 +887,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher(TEST_SSID, PatternMatcher.PATTERN_PREFIX),
Pair.create(WifiManager.ALL_ZEROS_MAC_ADDRESS, WifiManager.ALL_ZEROS_MAC_ADDRESS),
ScanResult.UNSPECIFIED,
- WifiConfigurationTestUtil.createOpenHiddenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenHiddenNetwork(), new int[0], false);
assertFalse(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
@@ -900,7 +900,7 @@ public class WifiConfigurationUtilTest extends WifiBaseTest {
new PatternMatcher(TEST_SSID, PatternMatcher.PATTERN_LITERAL),
Pair.create(MacAddress.fromString(TEST_BSSID), MacAddress.BROADCAST_ADDRESS),
42, // invalid
- WifiConfigurationTestUtil.createOpenNetwork(), new int[0]);
+ WifiConfigurationTestUtil.createOpenNetwork(), new int[0], false);
assertFalse(WifiConfigurationUtil.validateNetworkSpecifier(specifier, 5));
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
index 24aa961169..cebb2b6864 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
@@ -294,7 +294,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
requestListener.onAnswer(mClientModeManager);
return null;
}).when(mActiveModeWarden).requestLocalOnlyClientModeManager(any(), any(), any(), any(),
- anyBoolean());
+ anyBoolean(), anyBoolean());
when(mClientModeManager.getRole()).thenReturn(ActiveModeManager.ROLE_CLIENT_PRIMARY);
when(mFrameworkFacade.getSettingsWorkSource(any())).thenReturn(
new WorkSource(Process.SYSTEM_UID, "system-service"));
@@ -2444,7 +2444,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
@Test
public void testHandleNewNetworkRequestWithSpecifierWhenAwaitingCmRetrieval() throws Exception {
doNothing().when(mActiveModeWarden).requestLocalOnlyClientModeManager(
- any(), any(), any(), any(), anyBoolean());
+ any(), any(), any(), any(), anyBoolean(), anyBoolean());
WorkSource ws = new WorkSource(TEST_UID_1, TEST_PACKAGE_NAME_1);
when(mClock.getElapsedSinceBootMillis()).thenReturn(0L);
@@ -2466,7 +2466,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
ActiveModeWarden.ExternalClientModeManagerRequestListener.class);
verify(mActiveModeWarden).requestLocalOnlyClientModeManager(
cmListenerCaptor.capture(), eq(ws),
- eq("\"" + TEST_SSID_1 + "\""), eq(TEST_BSSID_1), eq(true));
+ eq("\"" + TEST_SSID_1 + "\""), eq(TEST_BSSID_1), eq(true), eq(false));
assertNotNull(cmListenerCaptor.getValue());
NetworkRequest oldRequest = new NetworkRequest(mNetworkRequest);
@@ -2491,7 +2491,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
// Ensure we request a new ClientModeManager.
verify(mActiveModeWarden, times(2)).requestLocalOnlyClientModeManager(
- any(), any(), any(), any(), anyBoolean());
+ any(), any(), any(), any(), anyBoolean(), anyBoolean());
// Now return the CM instance for the previous request.
cmListenerCaptor.getValue().onAnswer(mClientModeManager);
@@ -2559,7 +2559,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
// Ensure we don't request a new ClientModeManager.
verify(mActiveModeWarden, never()).requestLocalOnlyClientModeManager(
- any(), any(), any(), any(), anyBoolean());
+ any(), any(), any(), any(), anyBoolean(), anyBoolean());
// Ignore stale callbacks.
WifiConfiguration selectedNetwork = WifiConfigurationTestUtil.createOpenNetwork();
@@ -2600,7 +2600,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
// Ensure we don't request a new ClientModeManager.
verify(mActiveModeWarden, times(1)).requestLocalOnlyClientModeManager(
- any(), any(), any(), any(), anyBoolean());
+ any(), any(), any(), any(), anyBoolean(), anyBoolean());
verify(mNetworkRequestMatchCallback).onAbort();
verify(mNetworkRequestMatchCallback, atLeastOnce()).asBinder();
@@ -2648,7 +2648,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
// Ensure we do request a new ClientModeManager.
verify(mActiveModeWarden, times(1)).requestLocalOnlyClientModeManager(
- any(), any(), any(), any(), anyBoolean());
+ any(), any(), any(), any(), anyBoolean(), anyBoolean());
verify(mWifiConnectivityManager, times(1)).setSpecificNetworkRequestInProgress(true);
verify(mWifiScanner, times(2)).getSingleScanResults();
@@ -3734,7 +3734,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
mLooper.dispatchAll();
verify(mActiveModeWarden, never()).requestLocalOnlyClientModeManager(
- any(), any(), any(), any(), anyBoolean());
+ any(), any(), any(), any(), anyBoolean(), anyBoolean());
verify(mActiveModeWarden, atLeastOnce()).getPrimaryClientModeManager();
if (SdkLevel.isAtLeastS()) {
verify(mPrimaryClientModeManager, atLeastOnce()).getConnectedWifiConfiguration();
@@ -3797,7 +3797,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
mLooper.dispatchAll();
verify(mActiveModeWarden, atLeastOnce()).requestLocalOnlyClientModeManager(
- any(), any(), any(), any(), anyBoolean());
+ any(), any(), any(), any(), anyBoolean(), anyBoolean());
if (SdkLevel.isAtLeastS()) {
verify(mClientModeManager, atLeastOnce()).getConnectedWifiConfiguration();
verify(mClientModeManager, atLeastOnce()).getConnectingWifiConfiguration();
@@ -3975,7 +3975,7 @@ public class WifiNetworkFactoryTest extends WifiBaseTest {
mNetworkCapabilities.setRequestorPackageName(packageName);
mNetworkCapabilities.setNetworkSpecifier(
new WifiNetworkSpecifier(ssidPatternMatch, bssidPatternMatch,
- ScanResult.UNSPECIFIED, wifiConfiguration, channels));
+ ScanResult.UNSPECIFIED, wifiConfiguration, channels, false));
mNetworkRequest = new NetworkRequest.Builder()
.setCapabilities(mNetworkCapabilities)
.build();