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++) {