Merge "Update wifi header summary text to show metered state" into pi-dev
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 78045f9..50dfc26 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.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 @@
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 61efabc..bee2fa1 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 @@
// 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 91d9f91..d25adde 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.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 @@
private WifiNetworkScoreCache mockWifiNetworkScoreCache;
@Mock
private AccessPoint mAccessPoint;
+ @Mock
+ WifiConfiguration mWifiConfig;
@Before
public void setUp() {
@@ -98,6 +101,52 @@
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<ScanResult> buildScanResultCache() {
ArrayList<ScanResult> scanResults = new ArrayList<>();
for (int i = 0; i < 5; i++) {