From 6f6fe75572350217e717d4f5465f3ad5918db436 Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Wed, 21 Mar 2018 16:33:53 -0700 Subject: [PATCH] Update wifi header summary text to show metered state When we detect a network as metered or the user manually overrides the metered state for a network we should show this in the summary text for the network. This CL makes it so that this state overrides the network speed when needed. Test: robotests Bug: 68030417 Change-Id: Ia1f3f0a537b6ff711a430466b83664d8f1cad0b6 --- .../android/settingslib/wifi/AccessPoint.java | 9 +++- .../android/settingslib/wifi/WifiUtils.java | 17 +++++++ .../settingslib/wifi/WifiUtilsTest.java | 49 +++++++++++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java index 78045f9e4f222..50dfc26d6a2b7 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java @@ -43,8 +43,6 @@ import android.net.wifi.WifiManager; import android.net.wifi.WifiNetworkScoreCache; import android.net.wifi.hotspot2.PasspointConfiguration; import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; @@ -896,6 +894,13 @@ public class AccessPoint implements Comparable { summary.append(WifiUtils.buildLoggingSummary(this, config)); } + if (config != null && (WifiUtils.isMeteredOverridden(config) || config.meteredHint)) { + return mContext.getResources().getString( + R.string.preference_summary_default_combination, + WifiUtils.getMeteredLabel(mContext, config), + summary.toString()); + } + // If Speed label and summary are both present, use the preference combination to combine // the two, else return the non-null one. if (getSpeedLabel() != null && summary.length() != 0) { diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiUtils.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiUtils.java index 61efabc0c0aec..bee2fa1359576 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiUtils.java @@ -16,12 +16,15 @@ package com.android.settingslib.wifi; +import android.content.Context; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.os.SystemClock; import android.support.annotation.VisibleForTesting; +import com.android.settingslib.R; + import java.util.Map; public class WifiUtils { @@ -198,4 +201,18 @@ public class WifiUtils { // speed wil be determined by mRssi return timedScore.getScore().calculateBadge(result.level); } + + public static String getMeteredLabel(Context context, WifiConfiguration config) { + // meteredOverride is whether the user manually set the metered setting or not. + // meteredHint is whether the network itself is telling us that it is metered + if (config.meteredOverride == WifiConfiguration.METERED_OVERRIDE_METERED + || (config.meteredHint && !isMeteredOverridden(config))) { + return context.getString(R.string.wifi_metered_label); + } + return context.getString(R.string.wifi_unmetered_label); + } + + public static boolean isMeteredOverridden(WifiConfiguration config) { + return config.meteredOverride != WifiConfiguration.METERED_OVERRIDE_NONE; + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiUtilsTest.java index 91d9f91887a8f..d25adde986942 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/wifi/WifiUtilsTest.java @@ -27,6 +27,7 @@ import android.net.RssiCurve; import android.net.ScoredNetwork; import android.net.WifiKey; import android.net.wifi.ScanResult; +import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiNetworkScoreCache; import android.os.Bundle; import android.os.Parcelable; @@ -61,6 +62,8 @@ public class WifiUtilsTest { private WifiNetworkScoreCache mockWifiNetworkScoreCache; @Mock private AccessPoint mAccessPoint; + @Mock + WifiConfiguration mWifiConfig; @Before public void setUp() { @@ -98,6 +101,52 @@ public class WifiUtilsTest { WifiUtils.getVisibilityStatus(mAccessPoint); } + @Test + public void testGetMeteredLabel_returnsCorrectValues() { + mWifiConfig.meteredHint = true; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_NONE; + assertThat(WifiUtils.getMeteredLabel(mContext, mWifiConfig)).isEqualTo("Metered"); + + mWifiConfig.meteredHint = false; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_METERED; + assertThat(WifiUtils.getMeteredLabel(mContext, mWifiConfig)).isEqualTo("Metered"); + + mWifiConfig.meteredHint = true; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_METERED; + assertThat(WifiUtils.getMeteredLabel(mContext, mWifiConfig)).isEqualTo("Metered"); + + mWifiConfig.meteredHint = false; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_NOT_METERED; + assertThat(WifiUtils.getMeteredLabel(mContext, mWifiConfig)).isEqualTo("Unmetered"); + + mWifiConfig.meteredHint = true; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_NOT_METERED; + assertThat(WifiUtils.getMeteredLabel(mContext, mWifiConfig)).isEqualTo("Unmetered"); + } + + @Test + public void testIsMeteredOverridden_returnsCorrectValues() { + mWifiConfig.meteredHint = true; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_NONE; + assertThat(WifiUtils.isMeteredOverridden(mWifiConfig)).isFalse(); + + mWifiConfig.meteredHint = false; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_METERED; + assertThat(WifiUtils.isMeteredOverridden(mWifiConfig)).isTrue(); + + mWifiConfig.meteredHint = true; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_METERED; + assertThat(WifiUtils.isMeteredOverridden(mWifiConfig)).isTrue(); + + mWifiConfig.meteredHint = false; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_NOT_METERED; + assertThat(WifiUtils.isMeteredOverridden(mWifiConfig)).isTrue(); + + mWifiConfig.meteredHint = true; + mWifiConfig.meteredOverride = WifiConfiguration.METERED_OVERRIDE_NOT_METERED; + assertThat(WifiUtils.isMeteredOverridden(mWifiConfig)).isTrue(); + } + private static ArrayList buildScanResultCache() { ArrayList scanResults = new ArrayList<>(); for (int i = 0; i < 5; i++) {