diff options
-rw-r--r-- | service/java/com/android/server/wifi/WifiNetworkFactory.java | 22 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java | 56 |
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); + } } |