diff options
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(); |