summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkFactory.java22
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java56
2 files changed, 55 insertions, 23 deletions
diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java
index 98f72c2e2..174379e33 100644
--- a/service/java/com/android/server/wifi/WifiNetworkFactory.java
+++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java
@@ -92,6 +92,9 @@ public class WifiNetworkFactory extends NetworkFactory {
@VisibleForTesting
public static final String UI_START_INTENT_EXTRA_APP_NAME =
"com.android.settings.wifi.extra.APP_NAME";
+ @VisibleForTesting
+ public static final String UI_START_INTENT_EXTRA_REQUEST_IS_FOR_SINGLE_NETWORK =
+ "com.android.settings.wifi.extra.REQUEST_IS_FOR_SINGLE_NETWORK";
private final Context mContext;
private final ActivityManager mActivityManager;
@@ -1123,6 +1126,8 @@ public class WifiNetworkFactory extends NetworkFactory {
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(UI_START_INTENT_EXTRA_APP_NAME,
getAppName(mActiveSpecificNetworkRequestSpecifier.requestorPackageName));
+ intent.putExtra(UI_START_INTENT_EXTRA_REQUEST_IS_FOR_SINGLE_NETWORK,
+ isActiveRequestForSingleNetwork());
mContext.startActivityAsUser(intent, UserHandle.getUserHandleForUid(
mActiveSpecificNetworkRequestSpecifier.requestorUid));
}
@@ -1144,6 +1149,23 @@ public class WifiNetworkFactory extends NetworkFactory {
return true;
}
+ // Helper method to determine if the specifier does not contain any patterns and matches
+ // a single network.
+ private boolean isActiveRequestForSingleNetwork() {
+ if (mActiveSpecificNetworkRequestSpecifier == null) return false;
+
+ if (mActiveSpecificNetworkRequestSpecifier.ssidPatternMatcher.getType()
+ == PatternMatcher.PATTERN_LITERAL) {
+ return true;
+ }
+ if (Objects.equals(
+ mActiveSpecificNetworkRequestSpecifier.bssidPatternMatcher.second,
+ MacAddress.BROADCAST_ADDRESS)) {
+ return true;
+ }
+ return false;
+ }
+
private @Nullable ScanResult
findUserApprovedAccessPointForActiveRequestFromActiveMatchedScanResults() {
if (mActiveSpecificNetworkRequestSpecifier == null
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
index 5a41ae90e..0091ae106 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
@@ -487,17 +487,7 @@ public class WifiNetworkFactoryTest {
mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
// Verify UI start.
- ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mContext).startActivityAsUser(
- intentArgumentCaptor.capture(), eq(UserHandle.getUserHandleForUid(TEST_UID_1)));
- Intent intent = intentArgumentCaptor.getValue();
- assertNotNull(intent);
- assertEquals(intent.getAction(), WifiNetworkFactory.UI_START_INTENT_ACTION);
- assertEquals(intent.getStringExtra(WifiNetworkFactory.UI_START_INTENT_EXTRA_APP_NAME),
- TEST_APP_NAME);
- assertTrue(intent.getCategories().contains(WifiNetworkFactory.UI_START_INTENT_CATEGORY));
- assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0);
- assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0);
+ validateUiStartParams(true);
// Verify scan settings.
verify(mWifiScanner).startScan(mScanSettingsArgumentCaptor.capture(), any(),
@@ -517,17 +507,7 @@ public class WifiNetworkFactoryTest {
mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
// Verify UI start.
- ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mContext).startActivityAsUser(
- intentArgumentCaptor.capture(), eq(UserHandle.getUserHandleForUid(TEST_UID_1)));
- Intent intent = intentArgumentCaptor.getValue();
- assertNotNull(intent);
- assertEquals(intent.getAction(), WifiNetworkFactory.UI_START_INTENT_ACTION);
- assertTrue(intent.getCategories().contains(WifiNetworkFactory.UI_START_INTENT_CATEGORY));
- assertEquals(intent.getStringExtra(WifiNetworkFactory.UI_START_INTENT_EXTRA_APP_NAME),
- TEST_APP_NAME);
- assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0);
- assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0);
+ validateUiStartParams(true);
// Verify scan settings.
verify(mWifiScanner).startScan(mScanSettingsArgumentCaptor.capture(), any(),
@@ -696,6 +676,8 @@ public class WifiNetworkFactoryTest {
mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier);
mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
+ validateUiStartParams(true);
+
mWifiNetworkFactory.addCallback(mAppBinder, mNetworkRequestMatchCallback,
TEST_CALLBACK_IDENTIFIER);
@@ -737,6 +719,8 @@ public class WifiNetworkFactoryTest {
mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier);
mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
+ validateUiStartParams(false);
+
mWifiNetworkFactory.addCallback(mAppBinder, mNetworkRequestMatchCallback,
TEST_CALLBACK_IDENTIFIER);
@@ -779,6 +763,8 @@ public class WifiNetworkFactoryTest {
mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier);
mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
+ validateUiStartParams(true);
+
mWifiNetworkFactory.addCallback(mAppBinder, mNetworkRequestMatchCallback,
TEST_CALLBACK_IDENTIFIER);
@@ -821,6 +807,8 @@ public class WifiNetworkFactoryTest {
mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier);
mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
+ validateUiStartParams(false);
+
mWifiNetworkFactory.addCallback(mAppBinder, mNetworkRequestMatchCallback,
TEST_CALLBACK_IDENTIFIER);
@@ -864,6 +852,8 @@ public class WifiNetworkFactoryTest {
mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier);
mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
+ validateUiStartParams(true);
+
mWifiNetworkFactory.addCallback(mAppBinder, mNetworkRequestMatchCallback,
TEST_CALLBACK_IDENTIFIER);
@@ -909,6 +899,8 @@ public class WifiNetworkFactoryTest {
mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier);
mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
+ validateUiStartParams(true);
+
mWifiNetworkFactory.addCallback(mAppBinder, mNetworkRequestMatchCallback,
TEST_CALLBACK_IDENTIFIER);
@@ -940,7 +932,7 @@ public class WifiNetworkFactoryTest {
// Setup network specifier for open networks.
PatternMatcher ssidPatternMatch =
- new PatternMatcher(TEST_SSID_1, PatternMatcher.PATTERN_PREFIX);
+ new PatternMatcher(TEST_SSID_1, PatternMatcher.PATTERN_LITERAL);
Pair<MacAddress, MacAddress> bssidPatternMatch =
Pair.create(MacAddress.ALL_ZEROS_ADDRESS, MacAddress.ALL_ZEROS_ADDRESS);
WifiConfiguration wifiConfiguration = new WifiConfiguration();
@@ -952,6 +944,8 @@ public class WifiNetworkFactoryTest {
mNetworkRequest.networkCapabilities.setNetworkSpecifier(specifier);
mWifiNetworkFactory.needNetworkFor(mNetworkRequest, 0);
+ validateUiStartParams(true);
+
mWifiNetworkFactory.addCallback(mAppBinder, mNetworkRequestMatchCallback,
TEST_CALLBACK_IDENTIFIER);
@@ -2453,4 +2447,20 @@ public class WifiNetworkFactoryTest {
verify(messenger, atLeastOnce()).send(messageCaptor.capture());
assertEquals(NetworkFactory.EVENT_UNFULFILLABLE_REQUEST, messageCaptor.getValue().what);
}
+
+ private void validateUiStartParams(boolean expectedIsReqForSingeNetwork) {
+ ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
+ verify(mContext).startActivityAsUser(
+ intentArgumentCaptor.capture(), eq(UserHandle.getUserHandleForUid(TEST_UID_1)));
+ Intent intent = intentArgumentCaptor.getValue();
+ assertNotNull(intent);
+ assertEquals(intent.getAction(), WifiNetworkFactory.UI_START_INTENT_ACTION);
+ assertTrue(intent.getCategories().contains(WifiNetworkFactory.UI_START_INTENT_CATEGORY));
+ assertEquals(intent.getStringExtra(WifiNetworkFactory.UI_START_INTENT_EXTRA_APP_NAME),
+ TEST_APP_NAME);
+ assertEquals(expectedIsReqForSingeNetwork, intent.getBooleanExtra(
+ WifiNetworkFactory.UI_START_INTENT_EXTRA_REQUEST_IS_FOR_SINGLE_NETWORK, false));
+ assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0);
+ assertTrue((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0);
+ }
}