From e88f5efeb94bd19b0f6453c622b6e333852b4414 Mon Sep 17 00:00:00 2001 From: govenliu Date: Mon, 3 Feb 2020 11:25:41 +0800 Subject: [PATCH] [Wi-Fi] Apply cache in WifiTracker to update the signal icon immediatelly. issue: Signal icon on the add wifi network feature need to wait for the scan result. Solution: Apply the cache in the WifiTracker to update signal icon for shortening the waiting time of new scan result. Bug: 146842198 Test: Add following unit test cases to test signal level has been updated correctly: 1. withOneSuggestion_whenScanResultChangedButWifiOff_uiListShouldHaveZeroLevel. Change-Id: Id72e2b43e020f2cafa2af4af5ffb1c28529002bd --- .../AddAppNetworksFragment.java | 31 ++++++++++----- .../AddAppNetworksFragmentTest.java | 39 ++++++++++++++++--- 2 files changed, 56 insertions(+), 14 deletions(-) diff --git a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java index b584ea1b778..05c7b4eb847 100644 --- a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java +++ b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java @@ -715,7 +715,7 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements } @VisibleForTesting - void updateScanResults(List allAccessPoints) { + void updateScanResultsToUi(List allAccessPoints) { if (mUiToRequestedList == null) { // Nothing need to be updated. return; @@ -723,13 +723,16 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements // Update the signal level of the UI networks. for (UiConfigurationItem uiConfigurationItem : mUiToRequestedList) { - final Optional matchedAccessPoint = allAccessPoints - .stream() - .filter(accesspoint -> accesspoint.matches( - uiConfigurationItem.mWifiNetworkSuggestion.getWifiConfiguration())) - .findFirst(); - uiConfigurationItem.mLevel = - matchedAccessPoint.isPresent() ? matchedAccessPoint.get().getLevel() : 0; + uiConfigurationItem.mLevel = 0; + if (allAccessPoints != null) { + final Optional matchedAccessPoint = allAccessPoints + .stream() + .filter(accesspoint -> accesspoint.matches( + uiConfigurationItem.mWifiNetworkSuggestion.getWifiConfiguration())) + .findFirst(); + uiConfigurationItem.mLevel = + matchedAccessPoint.isPresent() ? matchedAccessPoint.get().getLevel() : 0; + } } if (mIsSingleNetwork) { @@ -741,8 +744,18 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements } } + @Override + public void onResume() { + super.onResume(); + onAccessPointsChanged(); + } + + /** + * Update the results when data changes + */ @Override public void onAccessPointsChanged() { - updateScanResults(mWifiTracker.getAccessPoints()); + updateScanResultsToUi( + mWifiTracker.getManager().isWifiEnabled() ? mWifiTracker.getAccessPoints() : null); } } diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java index ae236bfa53e..955b721634b 100644 --- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java +++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java @@ -26,6 +26,7 @@ import static org.mockito.Mockito.when; import android.app.settings.SettingsEnums; import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiManager; import android.net.wifi.WifiNetworkSuggestion; import android.os.Bundle; import android.os.Parcelable; @@ -59,7 +60,8 @@ public class AddAppNetworksFragmentTest { private static final String FAKE_NEW_SAVED_WPA_SSID = "\"fake_new_wpa_ssid\""; private static final String KEY_SSID = "key_ssid"; private static final String KEY_SECURITY = "key_security"; - private static final int SCANED_LEVEL = 4; + private static final int SCANED_LEVEL0 = 0; + private static final int SCANED_LEVEL4 = 4; private AddAppNetworksFragment mAddAppNetworksFragment; private List mFakedSpecifiedNetworksList; @@ -76,6 +78,9 @@ public class AddAppNetworksFragmentTest { @Mock private WifiTracker mMockWifiTracker; + @Mock + private WifiManager mMockWifiManager; + @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -86,10 +91,13 @@ public class AddAppNetworksFragmentTest { WifiConfiguration.KeyMgmt.NONE, null); mSavedWpaConfigurationEntry = generateRegularWifiConfiguration(FAKE_NEW_SAVED_WPA_SSID, WifiConfiguration.KeyMgmt.WPA_PSK, "\"1234567890\""); + when(mMockWifiTracker.getManager()).thenReturn(mMockWifiManager); + when(mMockWifiManager.isWifiEnabled()).thenReturn(true); + mAddAppNetworksFragment.mWifiTracker = mMockWifiTracker; WifiTrackerFactory.setTestingWifiTracker(mMockWifiTracker); - setUpOneScannedNetworkWithScanedLevel(); + setUpOneScannedNetworkWithScanedLevel4(); } @Test @@ -208,6 +216,7 @@ public class AddAppNetworksFragmentTest { @Test public void withOneSuggestion_whenScanResultChanged_uiListShouldHaveNewLevel() { // Arrange + when(mAddAppNetworksFragment.mWifiTracker.getManager().isWifiEnabled()).thenReturn(true); // Setup a fake saved network list and assign to fragment. addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry); // Setup one specified networks and its results and assign to fragment. @@ -221,16 +230,36 @@ public class AddAppNetworksFragmentTest { // Assert assertThat(mAddAppNetworksFragment.mUiToRequestedList.get(0).mLevel).isEqualTo( - SCANED_LEVEL); + SCANED_LEVEL4); } - private void setUpOneScannedNetworkWithScanedLevel() { + @Test + public void withOneSuggestion_whenScanResultChangedButWifiOff_uiListShouldHaveZeroLevel() { + // Arrange + when(mAddAppNetworksFragment.mWifiTracker.getManager().isWifiEnabled()).thenReturn(false); + // Setup a fake saved network list and assign to fragment. + addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry); + // Setup one specified networks and its results and assign to fragment. + addOneSpecifiedRegularNetworkSuggestion(mNewOpenSuggestionEntry); + mAddAppNetworksFragment.mAllSpecifiedNetworksList = mFakedSpecifiedNetworksList; + // Call filterSavedNetworks to generate necessary objects. + mAddAppNetworksFragment.filterSavedNetworks(mFakeSavedNetworksList); + + // Act + mAddAppNetworksFragment.onAccessPointsChanged(); + + // Assert + assertThat(mAddAppNetworksFragment.mUiToRequestedList.get(0).mLevel).isEqualTo( + SCANED_LEVEL0); + } + + private void setUpOneScannedNetworkWithScanedLevel4() { final ArrayList list = new ArrayList<>(); list.add(mMockAccessPoint); when(mMockWifiTracker.getAccessPoints()).thenReturn(list); when(mMockAccessPoint.getSsidStr()).thenReturn(FAKE_NEW_OPEN_SSID); when(mMockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(true); - when(mMockAccessPoint.getLevel()).thenReturn(SCANED_LEVEL); + when(mMockAccessPoint.getLevel()).thenReturn(SCANED_LEVEL4); } private void addOneSavedNetworkConfiguration(@NonNull WifiConfiguration wifiConfiguration) {