Loading packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +17 −10 Original line number Diff line number Diff line Loading @@ -985,25 +985,32 @@ public class AccessPoint implements Comparable<AccessPoint> { return false; } /** Attempt to update the AccessPoint and return true if an update occurred. */ public boolean update(WifiConfiguration config, WifiInfo info, NetworkInfo networkInfo) { boolean reorder = false; boolean updated = false; final int oldLevel = getLevel(); if (info != null && isInfoForThisAccessPoint(config, info)) { reorder = (mInfo == null); updated = (mInfo == null); if (mRssi != info.getRssi()) { mRssi = info.getRssi(); updated = true; } mInfo = info; // TODO(b/37289220): compare NetworkInfo states and set updated = true if necessary mNetworkInfo = networkInfo; if (mAccessPointListener != null) { mAccessPointListener.onAccessPointChanged(this); } } else if (mInfo != null) { reorder = true; updated = true; mInfo = null; mNetworkInfo = null; if (mAccessPointListener != null) { } if (updated && mAccessPointListener != null) { mAccessPointListener.onAccessPointChanged(this); if (oldLevel != getLevel() /* current level */) { mAccessPointListener.onLevelChanged(this); } } return reorder; return updated; } void update(WifiConfiguration config) { Loading packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +13 −6 Original line number Diff line number Diff line Loading @@ -203,6 +203,7 @@ public class WifiTracker { mFilter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION); mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION); mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION); mNetworkRequest = new NetworkRequest.Builder() .clearCapabilities() Loading Loading @@ -640,20 +641,24 @@ public class WifiTracker { (System.currentTimeMillis() - before) + "ms."); } boolean reorder = false; boolean updated = false; boolean reorder = false; // Only reorder if connected AP was changed for (int i = mInternalAccessPoints.size() - 1; i >= 0; --i) { AccessPoint ap = mInternalAccessPoints.get(i); boolean previouslyConnected = ap.isActive(); if (ap.update(connectionConfig, mLastInfo, mLastNetworkInfo)) { reorder = true; updated = true; if (previouslyConnected != ap.isActive()) reorder = true; } if (ap.update(mScoreCache, mNetworkScoringUiEnabled)) { reorder = true; updated = true; } } if (reorder) { Collections.sort(mInternalAccessPoints); mMainHandler.scheduleAPCopyingAndCloseWriteLock(); } if (reorder) Collections.sort(mInternalAccessPoints); if (updated) mMainHandler.scheduleAPCopyingAndCloseWriteLock(); } /** Loading Loading @@ -718,6 +723,8 @@ public class WifiTracker { mWorkHandler.obtainMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO, info) .sendToTarget(); mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS); } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) { mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO); } } }; Loading packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +41 −11 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doThrow; Loading Loading @@ -100,6 +101,16 @@ public class WifiTrackerTest { private static final byte SCORE_2 = 15; private static final int BADGE_2 = NetworkBadging.BADGING_HD; private static final int CONNECTED_NETWORK_ID = 123; private static final int CONNECTED_RSSI = -50; private static final WifiInfo CONNECTED_AP_1_INFO = new WifiInfo(); static { CONNECTED_AP_1_INFO.setSSID(WifiSsid.createFromAsciiEncoded(SSID_1)); CONNECTED_AP_1_INFO.setBSSID(BSSID_1); CONNECTED_AP_1_INFO.setNetworkId(CONNECTED_NETWORK_ID); CONNECTED_AP_1_INFO.setRssi(CONNECTED_RSSI); } @Captor ArgumentCaptor<WifiNetworkScoreCache> mScoreCacheCaptor; @Mock private ConnectivityManager mockConnectivityManager; @Mock private NetworkScoreManager mockNetworkScoreManager; Loading Loading @@ -312,18 +323,12 @@ public class WifiTrackerTest { private WifiTracker createTrackerWithScanResultsAndAccessPoint1Connected() throws InterruptedException { int networkId = 123; WifiInfo wifiInfo = new WifiInfo(); wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(SSID_1)); wifiInfo.setBSSID(BSSID_1); wifiInfo.setNetworkId(networkId); when(mockWifiManager.getConnectionInfo()).thenReturn(wifiInfo); when(mockWifiManager.getConnectionInfo()).thenReturn(CONNECTED_AP_1_INFO); WifiConfiguration configuration = new WifiConfiguration(); configuration.SSID = SSID_1; configuration.BSSID = BSSID_1; configuration.networkId = networkId; configuration.networkId = CONNECTED_NETWORK_ID; when(mockWifiManager.getConfiguredNetworks()).thenReturn(Arrays.asList(configuration)); NetworkInfo networkInfo = new NetworkInfo( Loading Loading @@ -445,7 +450,8 @@ public class WifiTrackerTest { } @Test public void scoreCacheUpdateScoresShouldTriggerOnAccessPointsChanged() throws InterruptedException { public void scoreCacheUpdateScoresShouldTriggerOnAccessPointsChanged() throws InterruptedException { WifiTracker tracker = createMockedWifiTracker(); startTracking(tracker); sendScanResultsAndProcess(tracker); Loading Loading @@ -636,4 +642,28 @@ public class WifiTrackerTest { tracker.forceUpdate(); verify(mockWifiManager).getMatchingWifiConfig(any(ScanResult.class)); } @Test public void rssiChangeBroadcastShouldUpdateConnectedAp() throws Exception { WifiTracker tracker = createTrackerWithScanResultsAndAccessPoint1Connected(); assertThat(tracker.getAccessPoints().get(0).isActive()).isTrue(); WifiConfiguration configuration = new WifiConfiguration(); configuration.SSID = SSID_1; configuration.BSSID = BSSID_1; configuration.networkId = CONNECTED_NETWORK_ID; when(mockWifiManager.getConfiguredNetworks()).thenReturn(Arrays.asList(configuration)); int newRssi = CONNECTED_RSSI + 10; WifiInfo info = new WifiInfo(CONNECTED_AP_1_INFO); info.setRssi(newRssi); when(mockWifiManager.getConnectionInfo()).thenReturn(info); mAccessPointsChangedLatch = new CountDownLatch(1); tracker.mReceiver.onReceive(mContext, new Intent(WifiManager.RSSI_CHANGED_ACTION)); assertTrue(mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); verify(mockWifiManager, atLeast(2)).getConnectionInfo(); assertThat(tracker.getAccessPoints().get(0).getRssi()).isEqualTo(newRssi); } } No newline at end of file Loading
packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +17 −10 Original line number Diff line number Diff line Loading @@ -985,25 +985,32 @@ public class AccessPoint implements Comparable<AccessPoint> { return false; } /** Attempt to update the AccessPoint and return true if an update occurred. */ public boolean update(WifiConfiguration config, WifiInfo info, NetworkInfo networkInfo) { boolean reorder = false; boolean updated = false; final int oldLevel = getLevel(); if (info != null && isInfoForThisAccessPoint(config, info)) { reorder = (mInfo == null); updated = (mInfo == null); if (mRssi != info.getRssi()) { mRssi = info.getRssi(); updated = true; } mInfo = info; // TODO(b/37289220): compare NetworkInfo states and set updated = true if necessary mNetworkInfo = networkInfo; if (mAccessPointListener != null) { mAccessPointListener.onAccessPointChanged(this); } } else if (mInfo != null) { reorder = true; updated = true; mInfo = null; mNetworkInfo = null; if (mAccessPointListener != null) { } if (updated && mAccessPointListener != null) { mAccessPointListener.onAccessPointChanged(this); if (oldLevel != getLevel() /* current level */) { mAccessPointListener.onLevelChanged(this); } } return reorder; return updated; } void update(WifiConfiguration config) { Loading
packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +13 −6 Original line number Diff line number Diff line Loading @@ -203,6 +203,7 @@ public class WifiTracker { mFilter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION); mFilter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION); mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION); mNetworkRequest = new NetworkRequest.Builder() .clearCapabilities() Loading Loading @@ -640,20 +641,24 @@ public class WifiTracker { (System.currentTimeMillis() - before) + "ms."); } boolean reorder = false; boolean updated = false; boolean reorder = false; // Only reorder if connected AP was changed for (int i = mInternalAccessPoints.size() - 1; i >= 0; --i) { AccessPoint ap = mInternalAccessPoints.get(i); boolean previouslyConnected = ap.isActive(); if (ap.update(connectionConfig, mLastInfo, mLastNetworkInfo)) { reorder = true; updated = true; if (previouslyConnected != ap.isActive()) reorder = true; } if (ap.update(mScoreCache, mNetworkScoringUiEnabled)) { reorder = true; updated = true; } } if (reorder) { Collections.sort(mInternalAccessPoints); mMainHandler.scheduleAPCopyingAndCloseWriteLock(); } if (reorder) Collections.sort(mInternalAccessPoints); if (updated) mMainHandler.scheduleAPCopyingAndCloseWriteLock(); } /** Loading Loading @@ -718,6 +723,8 @@ public class WifiTracker { mWorkHandler.obtainMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO, info) .sendToTarget(); mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_ACCESS_POINTS); } else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) { mWorkHandler.sendEmptyMessage(WorkHandler.MSG_UPDATE_NETWORK_INFO); } } }; Loading
packages/SettingsLib/tests/integ/src/com/android/settingslib/wifi/WifiTrackerTest.java +41 −11 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doThrow; Loading Loading @@ -100,6 +101,16 @@ public class WifiTrackerTest { private static final byte SCORE_2 = 15; private static final int BADGE_2 = NetworkBadging.BADGING_HD; private static final int CONNECTED_NETWORK_ID = 123; private static final int CONNECTED_RSSI = -50; private static final WifiInfo CONNECTED_AP_1_INFO = new WifiInfo(); static { CONNECTED_AP_1_INFO.setSSID(WifiSsid.createFromAsciiEncoded(SSID_1)); CONNECTED_AP_1_INFO.setBSSID(BSSID_1); CONNECTED_AP_1_INFO.setNetworkId(CONNECTED_NETWORK_ID); CONNECTED_AP_1_INFO.setRssi(CONNECTED_RSSI); } @Captor ArgumentCaptor<WifiNetworkScoreCache> mScoreCacheCaptor; @Mock private ConnectivityManager mockConnectivityManager; @Mock private NetworkScoreManager mockNetworkScoreManager; Loading Loading @@ -312,18 +323,12 @@ public class WifiTrackerTest { private WifiTracker createTrackerWithScanResultsAndAccessPoint1Connected() throws InterruptedException { int networkId = 123; WifiInfo wifiInfo = new WifiInfo(); wifiInfo.setSSID(WifiSsid.createFromAsciiEncoded(SSID_1)); wifiInfo.setBSSID(BSSID_1); wifiInfo.setNetworkId(networkId); when(mockWifiManager.getConnectionInfo()).thenReturn(wifiInfo); when(mockWifiManager.getConnectionInfo()).thenReturn(CONNECTED_AP_1_INFO); WifiConfiguration configuration = new WifiConfiguration(); configuration.SSID = SSID_1; configuration.BSSID = BSSID_1; configuration.networkId = networkId; configuration.networkId = CONNECTED_NETWORK_ID; when(mockWifiManager.getConfiguredNetworks()).thenReturn(Arrays.asList(configuration)); NetworkInfo networkInfo = new NetworkInfo( Loading Loading @@ -445,7 +450,8 @@ public class WifiTrackerTest { } @Test public void scoreCacheUpdateScoresShouldTriggerOnAccessPointsChanged() throws InterruptedException { public void scoreCacheUpdateScoresShouldTriggerOnAccessPointsChanged() throws InterruptedException { WifiTracker tracker = createMockedWifiTracker(); startTracking(tracker); sendScanResultsAndProcess(tracker); Loading Loading @@ -636,4 +642,28 @@ public class WifiTrackerTest { tracker.forceUpdate(); verify(mockWifiManager).getMatchingWifiConfig(any(ScanResult.class)); } @Test public void rssiChangeBroadcastShouldUpdateConnectedAp() throws Exception { WifiTracker tracker = createTrackerWithScanResultsAndAccessPoint1Connected(); assertThat(tracker.getAccessPoints().get(0).isActive()).isTrue(); WifiConfiguration configuration = new WifiConfiguration(); configuration.SSID = SSID_1; configuration.BSSID = BSSID_1; configuration.networkId = CONNECTED_NETWORK_ID; when(mockWifiManager.getConfiguredNetworks()).thenReturn(Arrays.asList(configuration)); int newRssi = CONNECTED_RSSI + 10; WifiInfo info = new WifiInfo(CONNECTED_AP_1_INFO); info.setRssi(newRssi); when(mockWifiManager.getConnectionInfo()).thenReturn(info); mAccessPointsChangedLatch = new CountDownLatch(1); tracker.mReceiver.onReceive(mContext, new Intent(WifiManager.RSSI_CHANGED_ACTION)); assertTrue(mAccessPointsChangedLatch.await(LATCH_TIMEOUT, TimeUnit.MILLISECONDS)); verify(mockWifiManager, atLeast(2)).getConnectionInfo(); assertThat(tracker.getAccessPoints().get(0).getRssi()).isEqualTo(newRssi); } } No newline at end of file