Loading src/com/android/settings/wifi/NetworkRequestDialogFragment.java +31 −12 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ package com.android.settings.wifi; import static com.android.settings.wifi.WifiUtils.getWifiEntrySecurity; import static com.android.wifitrackerlib.Utils.getSecurityTypesFromScanResult; import static java.util.stream.Collectors.toList; Loading Loading @@ -77,8 +77,12 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme private static final int MAX_NUMBER_LIST_ITEM = 5; private boolean mShowLimitedItem = true; private static class MatchWifi { String mSsid; List<Integer> mSecurityTypes; } private List<MatchWifi> mMatchWifis = new ArrayList<>(); @VisibleForTesting List<WifiEntry> mFilteredWifiEntries = new ArrayList<>(); @VisibleForTesting List<ScanResult> mMatchedScanResults = new ArrayList<>(); private WifiEntryAdapter mDialogAdapter; private NetworkRequestUserSelectionCallback mUserSelectionCallback; Loading Loading @@ -237,7 +241,7 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme /** Called when the state of Wifi has changed. */ @Override public void onWifiStateChanged() { if (mMatchedScanResults.size() == 0) { if (mMatchWifis.size() == 0) { return; } updateWifiEntries(); Loading @@ -249,7 +253,7 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme */ @Override public void onWifiEntriesChanged() { if (mMatchedScanResults.size() == 0) { if (mMatchWifis.size() == 0) { return; } updateWifiEntries(); Loading @@ -275,16 +279,24 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme wifiEntries.addAll(mWifiPickerTracker.getWifiEntries()); mFilteredWifiEntries.clear(); mFilteredWifiEntries.addAll(wifiEntries.stream().filter(entry -> { for (ScanResult matchedScanResult : mMatchedScanResults) { if (TextUtils.equals(entry.getSsid(), matchedScanResult.SSID) && entry.getSecurity() == getWifiEntrySecurity(matchedScanResult)) { mFilteredWifiEntries.addAll(wifiEntries.stream() .filter(entry -> isMatchedWifiEntry(entry)) .limit(mShowLimitedItem ? MAX_NUMBER_LIST_ITEM : Long.MAX_VALUE) .collect(toList())); } private boolean isMatchedWifiEntry(WifiEntry entry) { for (MatchWifi wifi : mMatchWifis) { if (!TextUtils.equals(entry.getSsid(), wifi.mSsid)) { continue; } for (Integer security : wifi.mSecurityTypes) { if (entry.getSecurityTypes().contains(security)) { return true; } } } return false; }).limit(mShowLimitedItem ? MAX_NUMBER_LIST_ITEM : Long.MAX_VALUE) .collect(toList())); } private class WifiEntryAdapter extends ArrayAdapter<WifiEntry> { Loading Loading @@ -350,7 +362,14 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme @Override public void onMatch(List<ScanResult> scanResults) { mMatchedScanResults = scanResults; mMatchWifis.clear(); for (ScanResult scanResult : scanResults) { MatchWifi matchWifi = new MatchWifi(); matchWifi.mSsid = scanResult.SSID; matchWifi.mSecurityTypes = getSecurityTypesFromScanResult(scanResult); mMatchWifis.add(matchWifi); } updateWifiEntries(); updateUi(); } Loading tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java +66 −14 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package com.android.settings.wifi; import static com.android.wifitrackerlib.WifiEntry.SECURITY_PSK; import static com.android.wifitrackerlib.WifiEntry.SECURITY_SAE; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; Loading Loading @@ -47,16 +50,20 @@ import com.android.wifitrackerlib.WifiPickerTracker; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.MockitoAnnotations; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @RunWith(RobolectricTestRunner.class) Loading @@ -64,15 +71,34 @@ import java.util.List; public class NetworkRequestDialogFragmentTest { private static final String KEY_SSID = "key_ssid"; private static final String KEY_SECURITY = "key_security"; private static final String TEST_CAPABILITIES_OPEN = "[ESS]"; private static final String TEST_CAPABILITIES_WPA2_PSK = "[WPA2-PSK-CCMP][ESS]"; private static final String TEST_CAPABILITIES_WPA3_SAE = "[RSN-PSK+SAE-CCMP][ESS]"; private static final String TEST_APP_NAME = "TestAppName"; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Mock WifiPickerTracker mWifiPickerTracker; @Mock WifiEntry mWifiEntry; private FragmentActivity mActivity; private NetworkRequestDialogFragment networkRequestDialogFragment; ScanResult mScanResult = new ScanResult(); @Before public void setUp() { MockitoAnnotations.initMocks(this); when(mWifiEntry.getSsid()).thenReturn(KEY_SSID); when(mWifiEntry.getSecurityTypes()).thenReturn(Arrays.asList(SECURITY_PSK, SECURITY_SAE)); when(mWifiEntry.getSecurity()).thenReturn(SECURITY_PSK); when(mWifiPickerTracker.getConnectedWifiEntry()).thenReturn(null); when(mWifiPickerTracker.getWifiEntries()).thenReturn(Arrays.asList(mWifiEntry)); mScanResult.SSID = KEY_SSID; mScanResult.capabilities = TEST_CAPABILITIES_OPEN; FakeFeatureFactory fakeFeatureFactory = FakeFeatureFactory.setupForTest(); when(fakeFeatureFactory.wifiTrackerLibProvider.createWifiPickerTracker( any(), any(), any(), any(), any(), anyLong(), anyLong(), any())) Loading @@ -82,7 +108,7 @@ public class NetworkRequestDialogFragmentTest { new Intent().putExtra(NetworkRequestDialogFragment.EXTRA_APP_NAME, TEST_APP_NAME)).setup().get(); networkRequestDialogFragment = spy(NetworkRequestDialogFragment.newInstance()); networkRequestDialogFragment.mWifiPickerTracker = mock(WifiPickerTracker.class); networkRequestDialogFragment.mWifiPickerTracker = mWifiPickerTracker; } @Ignore Loading Loading @@ -151,12 +177,10 @@ public class NetworkRequestDialogFragmentTest { @Test public void onWifiStateChanged_nonEmptyMatchedScanResults_shouldUpdateWifiEntries() { final InOrder inOrder = inOrder(networkRequestDialogFragment); mScanResult.capabilities = TEST_CAPABILITIES_OPEN; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); final List<ScanResult> scanResults = new ArrayList<>(); networkRequestDialogFragment.mMatchedScanResults = scanResults; ScanResult scanResult = mock(ScanResult.class); networkRequestDialogFragment.mMatchedScanResults.add(scanResult); networkRequestDialogFragment.onMatch(scanResults); networkRequestDialogFragment.onWifiStateChanged(); inOrder.verify(networkRequestDialogFragment).updateWifiEntries(); inOrder.verify(networkRequestDialogFragment).updateUi(); Loading @@ -165,12 +189,10 @@ public class NetworkRequestDialogFragmentTest { @Test public void onWifiEntriesChanged_nonEmptyMatchedScanResults_shouldUpdateWifiEntries() { final InOrder inOrder = inOrder(networkRequestDialogFragment); mScanResult.capabilities = TEST_CAPABILITIES_OPEN; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); final List<ScanResult> scanResults = new ArrayList<>(); networkRequestDialogFragment.mMatchedScanResults = scanResults; ScanResult scanResult = mock(ScanResult.class); networkRequestDialogFragment.mMatchedScanResults.add(scanResult); networkRequestDialogFragment.onMatch(scanResults); networkRequestDialogFragment.onWifiEntriesChanged(); inOrder.verify(networkRequestDialogFragment).updateWifiEntries(); inOrder.verify(networkRequestDialogFragment).updateUi(); Loading Loading @@ -288,4 +310,34 @@ public class NetworkRequestDialogFragmentTest { // Check verify(selectionCallback, times(1)).reject(); } @Test public void updateWifiEntries_noMatchSecurityWifi_filteredWifiIsEmpty() { mScanResult.capabilities = TEST_CAPABILITIES_OPEN; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); networkRequestDialogFragment.updateWifiEntries(); assertThat(networkRequestDialogFragment.mFilteredWifiEntries.size()).isEqualTo(0); } @Test public void updateWifiEntries_matchWpa2Wifi_filteredWifiNotEmpty() { mScanResult.capabilities = TEST_CAPABILITIES_WPA2_PSK; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); networkRequestDialogFragment.updateWifiEntries(); assertThat(networkRequestDialogFragment.mFilteredWifiEntries.size()).isNotEqualTo(0); } @Test public void updateWifiEntries_matchWpa3Wifi_filteredWifiNotEmpty() { mScanResult.capabilities = TEST_CAPABILITIES_WPA3_SAE; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); networkRequestDialogFragment.updateWifiEntries(); assertThat(networkRequestDialogFragment.mFilteredWifiEntries.size()).isNotEqualTo(0); } } Loading
src/com/android/settings/wifi/NetworkRequestDialogFragment.java +31 −12 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ package com.android.settings.wifi; import static com.android.settings.wifi.WifiUtils.getWifiEntrySecurity; import static com.android.wifitrackerlib.Utils.getSecurityTypesFromScanResult; import static java.util.stream.Collectors.toList; Loading Loading @@ -77,8 +77,12 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme private static final int MAX_NUMBER_LIST_ITEM = 5; private boolean mShowLimitedItem = true; private static class MatchWifi { String mSsid; List<Integer> mSecurityTypes; } private List<MatchWifi> mMatchWifis = new ArrayList<>(); @VisibleForTesting List<WifiEntry> mFilteredWifiEntries = new ArrayList<>(); @VisibleForTesting List<ScanResult> mMatchedScanResults = new ArrayList<>(); private WifiEntryAdapter mDialogAdapter; private NetworkRequestUserSelectionCallback mUserSelectionCallback; Loading Loading @@ -237,7 +241,7 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme /** Called when the state of Wifi has changed. */ @Override public void onWifiStateChanged() { if (mMatchedScanResults.size() == 0) { if (mMatchWifis.size() == 0) { return; } updateWifiEntries(); Loading @@ -249,7 +253,7 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme */ @Override public void onWifiEntriesChanged() { if (mMatchedScanResults.size() == 0) { if (mMatchWifis.size() == 0) { return; } updateWifiEntries(); Loading @@ -275,16 +279,24 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme wifiEntries.addAll(mWifiPickerTracker.getWifiEntries()); mFilteredWifiEntries.clear(); mFilteredWifiEntries.addAll(wifiEntries.stream().filter(entry -> { for (ScanResult matchedScanResult : mMatchedScanResults) { if (TextUtils.equals(entry.getSsid(), matchedScanResult.SSID) && entry.getSecurity() == getWifiEntrySecurity(matchedScanResult)) { mFilteredWifiEntries.addAll(wifiEntries.stream() .filter(entry -> isMatchedWifiEntry(entry)) .limit(mShowLimitedItem ? MAX_NUMBER_LIST_ITEM : Long.MAX_VALUE) .collect(toList())); } private boolean isMatchedWifiEntry(WifiEntry entry) { for (MatchWifi wifi : mMatchWifis) { if (!TextUtils.equals(entry.getSsid(), wifi.mSsid)) { continue; } for (Integer security : wifi.mSecurityTypes) { if (entry.getSecurityTypes().contains(security)) { return true; } } } return false; }).limit(mShowLimitedItem ? MAX_NUMBER_LIST_ITEM : Long.MAX_VALUE) .collect(toList())); } private class WifiEntryAdapter extends ArrayAdapter<WifiEntry> { Loading Loading @@ -350,7 +362,14 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme @Override public void onMatch(List<ScanResult> scanResults) { mMatchedScanResults = scanResults; mMatchWifis.clear(); for (ScanResult scanResult : scanResults) { MatchWifi matchWifi = new MatchWifi(); matchWifi.mSsid = scanResult.SSID; matchWifi.mSecurityTypes = getSecurityTypesFromScanResult(scanResult); mMatchWifis.add(matchWifi); } updateWifiEntries(); updateUi(); } Loading
tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java +66 −14 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package com.android.settings.wifi; import static com.android.wifitrackerlib.WifiEntry.SECURITY_PSK; import static com.android.wifitrackerlib.WifiEntry.SECURITY_SAE; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; Loading Loading @@ -47,16 +50,20 @@ import com.android.wifitrackerlib.WifiPickerTracker; import org.junit.Before; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.MockitoAnnotations; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @RunWith(RobolectricTestRunner.class) Loading @@ -64,15 +71,34 @@ import java.util.List; public class NetworkRequestDialogFragmentTest { private static final String KEY_SSID = "key_ssid"; private static final String KEY_SECURITY = "key_security"; private static final String TEST_CAPABILITIES_OPEN = "[ESS]"; private static final String TEST_CAPABILITIES_WPA2_PSK = "[WPA2-PSK-CCMP][ESS]"; private static final String TEST_CAPABILITIES_WPA3_SAE = "[RSN-PSK+SAE-CCMP][ESS]"; private static final String TEST_APP_NAME = "TestAppName"; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Mock WifiPickerTracker mWifiPickerTracker; @Mock WifiEntry mWifiEntry; private FragmentActivity mActivity; private NetworkRequestDialogFragment networkRequestDialogFragment; ScanResult mScanResult = new ScanResult(); @Before public void setUp() { MockitoAnnotations.initMocks(this); when(mWifiEntry.getSsid()).thenReturn(KEY_SSID); when(mWifiEntry.getSecurityTypes()).thenReturn(Arrays.asList(SECURITY_PSK, SECURITY_SAE)); when(mWifiEntry.getSecurity()).thenReturn(SECURITY_PSK); when(mWifiPickerTracker.getConnectedWifiEntry()).thenReturn(null); when(mWifiPickerTracker.getWifiEntries()).thenReturn(Arrays.asList(mWifiEntry)); mScanResult.SSID = KEY_SSID; mScanResult.capabilities = TEST_CAPABILITIES_OPEN; FakeFeatureFactory fakeFeatureFactory = FakeFeatureFactory.setupForTest(); when(fakeFeatureFactory.wifiTrackerLibProvider.createWifiPickerTracker( any(), any(), any(), any(), any(), anyLong(), anyLong(), any())) Loading @@ -82,7 +108,7 @@ public class NetworkRequestDialogFragmentTest { new Intent().putExtra(NetworkRequestDialogFragment.EXTRA_APP_NAME, TEST_APP_NAME)).setup().get(); networkRequestDialogFragment = spy(NetworkRequestDialogFragment.newInstance()); networkRequestDialogFragment.mWifiPickerTracker = mock(WifiPickerTracker.class); networkRequestDialogFragment.mWifiPickerTracker = mWifiPickerTracker; } @Ignore Loading Loading @@ -151,12 +177,10 @@ public class NetworkRequestDialogFragmentTest { @Test public void onWifiStateChanged_nonEmptyMatchedScanResults_shouldUpdateWifiEntries() { final InOrder inOrder = inOrder(networkRequestDialogFragment); mScanResult.capabilities = TEST_CAPABILITIES_OPEN; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); final List<ScanResult> scanResults = new ArrayList<>(); networkRequestDialogFragment.mMatchedScanResults = scanResults; ScanResult scanResult = mock(ScanResult.class); networkRequestDialogFragment.mMatchedScanResults.add(scanResult); networkRequestDialogFragment.onMatch(scanResults); networkRequestDialogFragment.onWifiStateChanged(); inOrder.verify(networkRequestDialogFragment).updateWifiEntries(); inOrder.verify(networkRequestDialogFragment).updateUi(); Loading @@ -165,12 +189,10 @@ public class NetworkRequestDialogFragmentTest { @Test public void onWifiEntriesChanged_nonEmptyMatchedScanResults_shouldUpdateWifiEntries() { final InOrder inOrder = inOrder(networkRequestDialogFragment); mScanResult.capabilities = TEST_CAPABILITIES_OPEN; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); final List<ScanResult> scanResults = new ArrayList<>(); networkRequestDialogFragment.mMatchedScanResults = scanResults; ScanResult scanResult = mock(ScanResult.class); networkRequestDialogFragment.mMatchedScanResults.add(scanResult); networkRequestDialogFragment.onMatch(scanResults); networkRequestDialogFragment.onWifiEntriesChanged(); inOrder.verify(networkRequestDialogFragment).updateWifiEntries(); inOrder.verify(networkRequestDialogFragment).updateUi(); Loading Loading @@ -288,4 +310,34 @@ public class NetworkRequestDialogFragmentTest { // Check verify(selectionCallback, times(1)).reject(); } @Test public void updateWifiEntries_noMatchSecurityWifi_filteredWifiIsEmpty() { mScanResult.capabilities = TEST_CAPABILITIES_OPEN; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); networkRequestDialogFragment.updateWifiEntries(); assertThat(networkRequestDialogFragment.mFilteredWifiEntries.size()).isEqualTo(0); } @Test public void updateWifiEntries_matchWpa2Wifi_filteredWifiNotEmpty() { mScanResult.capabilities = TEST_CAPABILITIES_WPA2_PSK; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); networkRequestDialogFragment.updateWifiEntries(); assertThat(networkRequestDialogFragment.mFilteredWifiEntries.size()).isNotEqualTo(0); } @Test public void updateWifiEntries_matchWpa3Wifi_filteredWifiNotEmpty() { mScanResult.capabilities = TEST_CAPABILITIES_WPA3_SAE; networkRequestDialogFragment.onMatch(Arrays.asList(mScanResult)); networkRequestDialogFragment.updateWifiEntries(); assertThat(networkRequestDialogFragment.mFilteredWifiEntries.size()).isNotEqualTo(0); } }