Add wifi metered controls in wifi settings.

1. Add it in wifi detail page
2. Add it in wifi dialog
2. Remove it in "Mobile network" page

Bug: 68030417
Test: RunSettingsRoboTests
Change-Id: I2e001c55f3c6c75a660e429732dfbece97b0ca9e
diff --git a/res/drawable/ic_attach_money_black_24dp.xml b/res/drawable/ic_attach_money_black_24dp.xml
new file mode 100644
index 0000000..12605fd
--- /dev/null
+++ b/res/drawable/ic_attach_money_black_24dp.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?android:attr/colorControlNormal">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M11.8,10.9c-2.27,-0.59 -3,-1.2 -3,-2.15 0,-1.09 1.01,-1.85 2.7,-1.85 1.78,0 2.44,0.85 2.5,2.1h2.21c-0.07,-1.72 -1.12,-3.3 -3.21,-3.81V3h-3v2.16c-1.94,0.42 -3.5,1.68 -3.5,3.61 0,2.31 1.91,3.46 4.7,4.13 2.5,0.6 3,1.48 3,2.41 0,0.69 -0.49,1.79 -2.7,1.79 -2.06,0 -2.87,-0.92 -2.98,-2.1h-2.2c0.12,2.19 1.76,3.42 3.68,3.83V21h3v-2.15c1.95,-0.37 3.5,-1.5 3.5,-3.55 0,-2.84 -2.43,-3.81 -4.7,-4.4z"/>
+</vector>
\ No newline at end of file
diff --git a/res/layout/wifi_dialog.xml b/res/layout/wifi_dialog.xml
index cfb6d9a..2c4a1ed 100644
--- a/res/layout/wifi_dialog.xml
+++ b/res/layout/wifi_dialog.xml
@@ -316,6 +316,26 @@
                     android:orientation="vertical"
                     android:visibility="gone">
 
+            <LinearLayout android:id="@+id/metered_settings_fields"
+                          android:layout_width="match_parent"
+                          android:layout_height="wrap_content"
+                          style="@style/wifi_item">
+
+                <TextView android:id="@+id/metered_settings_title"
+                          android:layout_width="wrap_content"
+                          android:layout_height="wrap_content"
+                          style="@style/wifi_item_label"
+                          android:text="@string/data_usage_metered_yes" />
+
+                <Spinner android:id="@+id/metered_settings"
+                         android:layout_width="match_parent"
+                         android:layout_height="wrap_content"
+                         style="@style/wifi_item_spinner"
+                         android:prompt="@string/data_usage_metered_yes"
+                         android:entries="@array/wifi_metered_entries"/>
+
+            </LinearLayout>
+
             <LinearLayout android:id="@+id/proxy_settings_fields"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index dbcfee1..64a2788 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1063,4 +1063,16 @@
         <item>zen_mode_from_none</item>
     </string-array>
 
+    <string-array name="wifi_metered_entries">
+        <item>Use network preference</item>
+        <item>Treat as metered</item>
+        <item>Treat as unmetered</item>
+    </string-array>
+
+    <string-array name="wifi_metered_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
+
 </resources>
diff --git a/res/xml/data_usage_wifi.xml b/res/xml/data_usage_wifi.xml
index 607cee1..905b15a 100644
--- a/res/xml/data_usage_wifi.xml
+++ b/res/xml/data_usage_wifi.xml
@@ -27,11 +27,6 @@
             android:key="wifi_data_usage"
             android:title="@string/wifi_data_usage" />
 
-        <com.android.settings.datausage.NetworkRestrictionsPreference
-            android:key="network_restrictions"
-            android:title="@string/network_restrictions"
-            android:fragment="com.android.settings.datausage.DataUsageMeteredSettings" />
-
     </com.android.settings.datausage.TemplatePreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/wifi_network_details_fragment.xml b/res/xml/wifi_network_details_fragment.xml
index 8203bec..5e2745a 100644
--- a/res/xml/wifi_network_details_fragment.xml
+++ b/res/xml/wifi_network_details_fragment.xml
@@ -49,6 +49,13 @@
                 android:icon="@drawable/ic_security_lock_24dp"
                 android:title="@string/wifi_security"
                 android:selectable="false"/>
+
+        <DropDownPreference
+                android:key="metered"
+                android:icon="@drawable/ic_attach_money_black_24dp"
+                android:title="@string/data_usage_metered_yes"
+                android:entries="@array/wifi_metered_entries"
+                android:entryValues="@array/wifi_metered_values"/>
     </PreferenceCategory>
 
     <!-- Network Details -->
diff --git a/src/com/android/settings/datausage/DataUsageMeteredSettings.java b/src/com/android/settings/datausage/DataUsageMeteredSettings.java
deleted file mode 100644
index 8bc7e04..0000000
--- a/src/com/android/settings/datausage/DataUsageMeteredSettings.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-
-package com.android.settings.datausage;
-
-import android.app.backup.BackupManager;
-import android.content.Context;
-import android.net.NetworkPolicyManager;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiManager;
-import android.os.Bundle;
-import android.provider.SearchIndexableResource;
-import android.support.v7.preference.DropDownPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceCategory;
-import android.text.TextUtils;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-import com.android.settingslib.NetworkPolicyEditor;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Panel to configure {@link WifiConfiguration#meteredOverride}.
- */
-public class DataUsageMeteredSettings extends SettingsPreferenceFragment implements Indexable {
-
-    private NetworkPolicyManager mPolicyManager;
-    private WifiManager mWifiManager;
-
-    private NetworkPolicyEditor mPolicyEditor;
-
-    private PreferenceCategory mMobileCategory;
-    private PreferenceCategory mWifiCategory;
-    private Preference mWifiDisabled;
-
-    @Override
-    public int getMetricsCategory() {
-        return MetricsEvent.NET_DATA_USAGE_METERED;
-    }
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        final Context context = getActivity();
-
-        mPolicyManager = NetworkPolicyManager.from(context);
-        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
-
-        mPolicyEditor = new NetworkPolicyEditor(mPolicyManager);
-        mPolicyEditor.read();
-
-        addPreferencesFromResource(R.xml.data_usage_metered_prefs);
-        mMobileCategory = (PreferenceCategory) findPreference("mobile");
-        mWifiCategory = (PreferenceCategory) findPreference("wifi");
-        mWifiDisabled = findPreference("wifi_disabled");
-
-        updateNetworks(context);
-    }
-
-    private void updateNetworks(Context context) {
-        getPreferenceScreen().removePreference(mMobileCategory);
-
-        mWifiCategory.removeAll();
-        if (DataUsageUtils.hasWifiRadio(context) && mWifiManager.isWifiEnabled()) {
-            for (WifiConfiguration config : mWifiManager.getConfiguredNetworks()) {
-                final Preference pref = new MeteredPreference(getPrefContext(), config);
-                if (!TextUtils.isEmpty(pref.getTitle())) {
-                    mWifiCategory.addPreference(pref);
-                }
-            }
-        } else {
-            mWifiCategory.addPreference(mWifiDisabled);
-        }
-    }
-
-    private class MeteredPreference extends DropDownPreference {
-        private final WifiConfiguration mConfig;
-
-        public MeteredPreference(Context context, WifiConfiguration config) {
-            super(context);
-            mConfig = config;
-
-            setPersistent(false);
-            setEntries(new CharSequence[] {
-                    getString(R.string.data_usage_metered_auto),
-                    getString(R.string.data_usage_metered_yes),
-                    getString(R.string.data_usage_metered_no),
-            });
-            setEntryValues(new CharSequence[] {
-                    Integer.toString(WifiConfiguration.METERED_OVERRIDE_NONE),
-                    Integer.toString(WifiConfiguration.METERED_OVERRIDE_METERED),
-                    Integer.toString(WifiConfiguration.METERED_OVERRIDE_NOT_METERED),
-            });
-            setValue(Integer.toString(mConfig.meteredOverride));
-            setTitle(NetworkPolicyManager.resolveNetworkId(mConfig));
-            setSummary(getEntries()[mConfig.meteredOverride]);
-
-            setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-                @Override
-                public boolean onPreferenceChange(Preference preference, Object newValue) {
-                    mConfig.meteredOverride = Integer.parseInt((String) newValue);
-                    setSummary(getEntries()[mConfig.meteredOverride]);
-
-                    mWifiManager.updateNetwork(mConfig);
-                    // Stage the backup of the SettingsProvider package which backs this up
-                    BackupManager.dataChanged("com.android.providers.settings");
-                    return true;
-                }
-            });
-        }
-    }
-
-    /**
-     * For search
-     */
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-        new BaseSearchIndexProvider() {
-            @Override
-            public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
-                    boolean enabled) {
-                final SearchIndexableResource sir = new SearchIndexableResource(context);
-                sir.xmlResId = R.xml.data_usage_metered_prefs;
-                return Arrays.asList(sir);
-            }
-
-            @Override
-            public List<String> getNonIndexableKeys(Context context) {
-                final List<String> result = super.getNonIndexableKeys(context);
-                result.add("mobile");
-                return result;
-            }
-        };
-}
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index fe22022..b4d5f50 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -77,8 +77,6 @@
     // Wifi keys
     public static final String KEY_WIFI_USAGE_TITLE = "wifi_category";
     public static final String KEY_WIFI_DATA_USAGE = "wifi_data_usage";
-    public static final String KEY_NETWORK_RESTRICTIONS = "network_restrictions";
-
 
     private DataUsageController mDataUsageController;
     private DataUsageInfoController mDataInfoController;
@@ -86,8 +84,6 @@
     private Preference mLimitPreference;
     private NetworkTemplate mDefaultTemplate;
     private int mDataUsageTemplate;
-    private NetworkRestrictionsPreference mNetworkRestrictionPreference;
-    private WifiManager mWifiManager;
     private NetworkPolicyEditor mPolicyEditor;
 
     @Override
@@ -101,7 +97,6 @@
 
         final Context context = getContext();
         NetworkPolicyManager policyManager = NetworkPolicyManager.from(context);
-        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
         mPolicyEditor = new NetworkPolicyEditor(policyManager);
 
         boolean hasMobileData = DataUsageUtils.hasMobileData(context);
@@ -203,8 +198,6 @@
         TemplatePreferenceCategory category = (TemplatePreferenceCategory)
                 inflatePreferences(R.xml.data_usage_wifi);
         category.setTemplate(NetworkTemplate.buildTemplateWifiWildcard(), 0, services);
-        mNetworkRestrictionPreference =
-            (NetworkRestrictionsPreference) category.findPreference(KEY_NETWORK_RESTRICTIONS);
     }
 
     private void addEthernetSection() {
@@ -293,8 +286,6 @@
             mLimitPreference.setSummary(null);
         }
 
-        updateNetworkRestrictionSummary(mNetworkRestrictionPreference);
-
         PreferenceScreen screen = getPreferenceScreen();
         for (int i = 1; i < screen.getPreferenceCount(); i++) {
             ((TemplatePreferenceCategory) screen.getPreference(i)).pushTemplates(services);
@@ -321,22 +312,6 @@
         updateState();
     }
 
-    @VisibleForTesting
-    void updateNetworkRestrictionSummary(NetworkRestrictionsPreference preference) {
-        if (preference == null) {
-            return;
-        }
-        mPolicyEditor.read();
-        int count = 0;
-        for (WifiConfiguration config : mWifiManager.getConfiguredNetworks()) {
-            if (WifiConfiguration.isMetered(config, null)) {
-                count++;
-            }
-        }
-        preference.setSummary(getResources().getQuantityString(
-            R.plurals.network_restrictions_summary, count, count));
-    }
-
     private static class SummaryProvider
             implements SummaryLoader.SummaryProvider {
 
@@ -409,7 +384,6 @@
 
                 if (!DataUsageUtils.hasWifiRadio(context)) {
                     keys.add(KEY_WIFI_DATA_USAGE);
-                    keys.add(KEY_NETWORK_RESTRICTIONS);
                 }
 
                 // This title is named Wifi, and will confuse users.
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 0207c94..0376367 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -36,7 +36,6 @@
 import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld;
-import com.android.settings.datausage.DataUsageMeteredSettings;
 import com.android.settings.datausage.DataUsageSummary;
 import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
 import com.android.settings.development.DevelopmentSettingsDashboardFragment;
@@ -110,7 +109,6 @@
         addIndex(BluetoothSettings.class);
         addIndex(SimSettings.class);
         addIndex(DataUsageSummary.class);
-        addIndex(DataUsageMeteredSettings.class);
         addIndex(ScreenZoomSettings.class);
         addIndex(DisplaySettings.class);
         addIndex(AmbientDisplaySettings.class);
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 4da7366..5e5d5ff 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -146,11 +146,11 @@
     private TextView mDns2View;
 
     private Spinner mProxySettingsSpinner;
+    private Spinner mMeteredSettingsSpinner;
     private TextView mProxyHostView;
     private TextView mProxyPortView;
     private TextView mProxyExclusionListView;
     private TextView mProxyPacView;
-
     private CheckBox mSharedCheckBox;
 
     private IpAssignment mIpAssignment = IpAssignment.UNASSIGNED;
@@ -208,6 +208,7 @@
         mProxySettingsSpinner = (Spinner) mView.findViewById(R.id.proxy_settings);
         mProxySettingsSpinner.setOnItemSelectedListener(this);
         mSharedCheckBox = (CheckBox) mView.findViewById(R.id.shared);
+        mMeteredSettingsSpinner = mView.findViewById(R.id.metered_settings);
 
         if (mAccessPoint == null) { // new network
             mConfigUi.setTitle(R.string.wifi_add_network);
@@ -237,6 +238,7 @@
             boolean showAdvancedFields = false;
             if (mAccessPoint.isSaved()) {
                 WifiConfiguration config = mAccessPoint.getConfig();
+                mMeteredSettingsSpinner.setSelection(config.meteredOverride);
                 if (config.getIpAssignment() == IpAssignment.STATIC) {
                     mIpSettingsSpinner.setSelection(STATIC_IP);
                     showAdvancedFields = true;
@@ -671,6 +673,9 @@
         config.setIpConfiguration(
                 new IpConfiguration(mIpAssignment, mProxySettings,
                                     mStaticIpConfiguration, mHttpProxy));
+        if (mMeteredSettingsSpinner != null) {
+            config.meteredOverride = mMeteredSettingsSpinner.getSelectedItemPosition();
+        }
 
         return config;
     }
diff --git a/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
new file mode 100644
index 0000000..1a3d195
--- /dev/null
+++ b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.wifi.details;
+
+import android.app.backup.BackupManager;
+import android.content.Context;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.DropDownPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+/**
+ * {@link AbstractPreferenceController} that controls whether the wifi network is metered or not
+ */
+public class WifiMeteredPreferenceController extends BasePreferenceController implements
+        Preference.OnPreferenceChangeListener {
+
+    private static final String KEY_WIFI_METERED = "metered";
+    private WifiConfiguration mWifiConfiguration;
+    private WifiManager mWifiManager;
+
+    public WifiMeteredPreferenceController(Context context, WifiConfiguration wifiConfiguration) {
+        super(context, KEY_WIFI_METERED);
+        mWifiConfiguration = wifiConfiguration;
+        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        final DropDownPreference dropDownPreference = (DropDownPreference) preference;
+        final int meteredOverride = getMeteredOverride();
+        dropDownPreference.setValue(Integer.toString(meteredOverride));
+        updateSummary(dropDownPreference, meteredOverride);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        mWifiConfiguration.meteredOverride = Integer.parseInt((String) newValue);
+        mWifiManager.updateNetwork(mWifiConfiguration);
+        // Stage the backup of the SettingsProvider package which backs this up
+        BackupManager.dataChanged("com.android.providers.settings");
+        updateSummary((DropDownPreference) preference, getMeteredOverride());
+        return true;
+    }
+
+    @VisibleForTesting
+    int getMeteredOverride() {
+        // Wrap the meteredOverride since robolectric cannot recognize it
+        return mWifiConfiguration.meteredOverride;
+    }
+
+    private void updateSummary(DropDownPreference preference, int meteredOverride) {
+        preference.setSummary(preference.getEntries()[meteredOverride]);
+    }
+}
diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
index ea30b56..9a5430b 100644
--- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
+++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
@@ -20,10 +20,13 @@
 import android.app.Dialog;
 import android.content.Context;
 import android.net.ConnectivityManager;
+import android.net.NetworkPolicyManager;
+import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
+import android.support.v7.preference.DropDownPreference;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -122,6 +125,7 @@
 
     @Override
     protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+        final List<AbstractPreferenceController> controllers = new ArrayList<>();
         ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
         mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance(
                 mAccessPoint,
@@ -133,6 +137,9 @@
                 context.getSystemService(WifiManager.class),
                 mMetricsFeatureProvider);
 
-        return new ArrayList<>(Collections.singletonList(mWifiDetailPreferenceController));
+        controllers.add(mWifiDetailPreferenceController);
+        controllers.add(new WifiMeteredPreferenceController(context, mAccessPoint.getConfig()));
+
+        return controllers;
     }
 }
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
index dc53ca1..c122105 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
@@ -69,23 +69,6 @@
     }
 
     @Test
-    public void testUpdateNetworkRestrictionSummary_shouldSetSummary() {
-        final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary());
-        final NetworkRestrictionsPreference preference = mock(NetworkRestrictionsPreference.class);
-        final NetworkPolicyEditor policyEditor = mock(NetworkPolicyEditor.class);
-        final WifiManager wifiManager = mock(WifiManager.class);
-        ReflectionHelpers.setField(dataUsageSummary, "mPolicyEditor", policyEditor);
-        ReflectionHelpers.setField(dataUsageSummary, "mWifiManager", wifiManager);
-        when(wifiManager.getConfiguredNetworks()).thenReturn(new ArrayList<WifiConfiguration>());
-        doReturn(mContext.getResources()).when(dataUsageSummary).getResources();
-
-        dataUsageSummary.updateNetworkRestrictionSummary(preference);
-
-        verify(preference).setSummary(mContext.getResources().getQuantityString(
-                R.plurals.network_restrictions_summary, 0, 0));
-    }
-
-    @Test
     @Config(shadows = {
             SettingsShadowResources.class,
             SettingsShadowResources.SettingsShadowTheme.class
diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiMeteredPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiMeteredPreferenceControllerTest.java
new file mode 100644
index 0000000..f624bd5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiMeteredPreferenceControllerTest.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.wifi.details;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.content.Context;
+import android.net.wifi.WifiConfiguration;
+import android.support.v7.preference.DropDownPreference;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WifiMeteredPreferenceControllerTest {
+    public static final int METERED_OVERRIDE_NONE = 0;
+    public static final int METERED_OVERRIDE_METERED = 1;
+    public static final int METERED_OVERRIDE_NOT_METERED = 2;
+
+    @Mock
+    private WifiConfiguration mWifiConfiguration;
+
+    private WifiMeteredPreferenceController mPreferenceController;
+    private Context mContext;
+    private DropDownPreference mDropDownPreference;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+
+        mPreferenceController = spy(
+                new WifiMeteredPreferenceController(mContext, mWifiConfiguration));
+        mDropDownPreference = new DropDownPreference(mContext);
+        mDropDownPreference.setEntries(R.array.wifi_metered_entries);
+        mDropDownPreference.setEntryValues(R.array.wifi_metered_values);
+    }
+
+    @Test
+    public void testUpdateState_wifiMetered_setCorrectValue() {
+        doReturn(METERED_OVERRIDE_METERED).when(mPreferenceController).getMeteredOverride();
+
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.getEntry()).isEqualTo("Treat as metered");
+    }
+
+    @Test
+    public void testUpdateState_wifiNotMetered_setCorrectValue() {
+        doReturn(METERED_OVERRIDE_NOT_METERED).when(mPreferenceController).getMeteredOverride();
+
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.getEntry()).isEqualTo("Treat as unmetered");
+    }
+
+    @Test
+    public void testUpdateState_wifiAuto_setCorrectValue() {
+        doReturn(METERED_OVERRIDE_NONE).when(mPreferenceController).getMeteredOverride();
+
+        mPreferenceController.updateState(mDropDownPreference);
+
+        assertThat(mDropDownPreference.getEntry()).isEqualTo("Use network preference");
+    }
+}