From 241cb0db023a9e9f12791e968f2494e0a265b4f1 Mon Sep 17 00:00:00 2001 From: Eric Schwarzenbach Date: Wed, 16 Aug 2017 11:52:17 -0700 Subject: [PATCH] Update detail icon only if its signal level changed. Changes behavior to only render the wifi pie icon if the new rssi has resulted in a new signal level. Bug: 64712237 Test: make -j40 ROBOTEST_FILTER=WifiDetailPreferenceControllerTest RunSettingsRoboTests Change-Id: I01be2f87d61489242d646ff2003db13c9268ea14 --- .../WifiDetailPreferenceController.java | 16 ++++++++------- .../WifiDetailPreferenceControllerTest.java | 20 +++++++++++++++++++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java index 35d60336d40..72fc981355b 100644 --- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java +++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java @@ -117,7 +117,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController private Network mNetwork; private NetworkInfo mNetworkInfo; private NetworkCapabilities mNetworkCapabilities; - private int mRssi; + private int mRssiSignalLevel = -1; private String[] mSignalStr; private final WifiConfiguration mWifiConfig; private WifiInfo mWifiInfo; @@ -338,7 +338,6 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController refreshNetworkState(); // Update Connection Header icon and Signal Strength Preference - mRssi = mWifiInfo.getRssi(); refreshRssiViews(); // MAC Address Pref @@ -381,9 +380,13 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController } private void refreshRssiViews() { - int iconSignalLevel = WifiManager.calculateSignalLevel( - mRssi, WifiManager.RSSI_LEVELS); - Drawable wifiIcon = mIconInjector.getIcon(iconSignalLevel); + int signalLevel = mAccessPoint.getLevel(); + + if (mRssiSignalLevel == signalLevel) { + return; + } + mRssiSignalLevel = signalLevel; + Drawable wifiIcon = mIconInjector.getIcon(mRssiSignalLevel); wifiIcon.setTint(Utils.getColorAccent(mContext)); mEntityHeaderController.setIcon(wifiIcon).done(mFragment.getActivity(), true /* rebind */); @@ -393,8 +396,7 @@ public class WifiDetailPreferenceController extends AbstractPreferenceController R.color.wifi_details_icon_color, mContext.getTheme())); mSignalStrengthPref.setIcon(wifiIconDark); - int summarySignalLevel = mAccessPoint.getLevel(); - mSignalStrengthPref.setDetailText(mSignalStr[summarySignalLevel]); + mSignalStrengthPref.setDetailText(mSignalStr[mRssiSignalLevel]); } private void updatePreference(WifiDetailPreference pref, String detailText) { diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java index dc51fd83547..2a7f0ccce31 100644 --- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java @@ -745,4 +745,24 @@ public class WifiDetailPreferenceControllerTest { verify(mockMetricsFeatureProvider) .action(mockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_SIGNIN); } + + @Test + public void testRefreshRssiViews_shouldNotUpdateIfLevelIsSame() { + displayAndResume(); + + mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION)); + + verify(mockAccessPoint, times(2)).getLevel(); + verify(mockIconInjector, times(1)).getIcon(anyInt()); + } + @Test + public void testRefreshRssiViews_shouldUpdateOnLevelChange() { + displayAndResume(); + + when(mockAccessPoint.getLevel()).thenReturn(0); + mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION)); + + verify(mockAccessPoint, times(2)).getLevel(); + verify(mockIconInjector, times(2)).getIcon(anyInt()); + } }