OSDN Git Service

Add Wi-Fi data usage field
authorclownshen <clownshen@google.com>
Mon, 1 Apr 2019 13:27:14 +0000 (21:27 +0800)
committerClown SHEN <clownshen@google.com>
Wed, 3 Apr 2019 17:04:36 +0000 (17:04 +0000)
Add Wi-Fi data usage field at Wi-Fi Setting to show out the total Wi-Fi
data usage for user.

Bug: 129474341
Test: atest WifiSettingsTest
Test: manual test
Change-Id: Iad5bee47bd83ed143a2730f042d77907344f4017

res/xml/data_usage_wifi.xml
res/xml/wifi_settings.xml
src/com/android/settings/wifi/WifiSettings.java
tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java

index 693a931..4b7620d 100644 (file)
@@ -16,6 +16,7 @@
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="data_usage_wifi_screen">
 
     <com.android.settings.datausage.TemplatePreferenceCategory
@@ -24,7 +25,8 @@
 
         <com.android.settings.datausage.DataUsagePreference
             android:key="wifi_data_usage"
-            android:title="@string/wifi_data_usage" />
+            android:title="@string/wifi_data_usage"
+            settings:searchable="false"/>
 
     </com.android.settings.datausage.TemplatePreferenceCategory>
 
index 516ac0a..d7c299e 100644 (file)
@@ -41,4 +41,8 @@
         android:key="saved_networks"
         android:title="@string/wifi_saved_access_points_label"
         android:fragment="com.android.settings.wifi.savedaccesspoints.SavedAccessPointsWifiSettings"/>
+
+    <com.android.settings.datausage.DataUsagePreference
+        android:key="wifi_data_usage"
+        android:title="@string/wifi_data_usage"/>
 </PreferenceScreen>
index 7e1a36d..da10148 100644 (file)
@@ -33,6 +33,7 @@ import android.net.Network;
 import android.net.NetworkInfo;
 import android.net.NetworkInfo.State;
 import android.net.NetworkRequest;
+import android.net.NetworkTemplate;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
@@ -60,6 +61,8 @@ import com.android.settings.SettingsActivity;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.datausage.DataUsageUtils;
+import com.android.settings.datausage.DataUsagePreference;
 import com.android.settings.location.ScanningSettings;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
@@ -115,6 +118,8 @@ public class WifiSettings extends RestrictedSettingsFragment
     private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_settings";
     private static final String PREF_KEY_SAVED_NETWORKS = "saved_networks";
     private static final String PREF_KEY_STATUS_MESSAGE = "wifi_status_message";
+    @VisibleForTesting
+    static final String PREF_KEY_DATA_USAGE = "wifi_data_usage";
 
     private static final int REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER = 0;
 
@@ -181,6 +186,8 @@ public class WifiSettings extends RestrictedSettingsFragment
     Preference mConfigureWifiSettingsPreference;
     @VisibleForTesting
     Preference mSavedNetworksPreference;
+    @VisibleForTesting
+    DataUsagePreference mDataUsagePreference;
     private LinkablePreference mStatusMessagePreference;
 
     // For Search
@@ -237,6 +244,11 @@ public class WifiSettings extends RestrictedSettingsFragment
         mAddWifiNetworkPreference = new AddWifiNetworkPreference(getPrefContext());
         mStatusMessagePreference = (LinkablePreference) findPreference(PREF_KEY_STATUS_MESSAGE);
         mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager());
+        mDataUsagePreference = findPreference(PREF_KEY_DATA_USAGE);
+        mDataUsagePreference.setVisible(DataUsageUtils.hasWifiRadio(getContext()));
+        mDataUsagePreference.setTemplate(NetworkTemplate.buildTemplateWifiWildcard(),
+                0 /*subId*/,
+                null /*service*/);
     }
 
     @Override
index c811b0c..82e6717 100644 (file)
@@ -19,8 +19,10 @@ import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -29,13 +31,19 @@ import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
 import android.os.PowerManager;
+import android.os.UserManager;
 import android.provider.Settings;
 
+import androidx.fragment.app.FragmentActivity;
 import androidx.preference.Preference;
 
 import com.android.settings.R;
+import com.android.settings.datausage.DataUsagePreference;
 import com.android.settings.search.SearchIndexableRaw;
+import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
 import com.android.settingslib.wifi.WifiTracker;
 
 import org.junit.Before;
@@ -58,6 +66,8 @@ public class WifiSettingsTest {
     private WifiTracker mWifiTracker;
     @Mock
     private PowerManager mPowerManager;
+    @Mock
+    private DataUsagePreference mDataUsagePreference;
     private Context mContext;
     private WifiSettings mWifiSettings;
 
@@ -159,4 +169,40 @@ public class WifiSettingsTest {
         assertThat(mWifiSettings.mAddWifiNetworkPreference.getTitle()).isEqualTo(
                 mContext.getString(R.string.wifi_add_network));
     }
+
+    private void setUpForOnCreate() {
+        final FragmentActivity activity = mock(FragmentActivity.class);
+        when(mWifiSettings.getActivity()).thenReturn(activity);
+        final Resources.Theme theme = mContext.getTheme();
+        when(activity.getTheme()).thenReturn(theme);
+        UserManager userManager = mock(UserManager.class);
+        when(activity.getSystemService(Context.USER_SERVICE))
+                .thenReturn(userManager);
+
+        when(mWifiSettings.findPreference(WifiSettings.PREF_KEY_DATA_USAGE))
+                .thenReturn(mDataUsagePreference);
+    }
+
+    @Test
+    @Config(shadows = {ShadowDataUsageUtils.class})
+    public void checkDataUsagePreference_perferenceInvisibleIfWifiNotSupported() {
+        setUpForOnCreate();
+        ShadowDataUsageUtils.IS_WIFI_SUPPORTED = false;
+
+        mWifiSettings.onCreate(Bundle.EMPTY);
+
+        verify(mDataUsagePreference).setVisible(false);
+    }
+
+    @Test
+    @Config(shadows = {ShadowDataUsageUtils.class})
+    public void checkDataUsagePreference_perferenceVisibleIfWifiSupported() {
+        setUpForOnCreate();
+        ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true;
+
+        mWifiSettings.onCreate(Bundle.EMPTY);
+
+        verify(mDataUsagePreference).setVisible(true);
+        verify(mDataUsagePreference).setTemplate(any(), eq(0) /*subId*/, eq(null) /*service*/);
+    }
 }