From 621c24861c7ca09df7ce6da77fceb3d9f2d675c9 Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Mon, 31 Jul 2017 09:44:57 -0700 Subject: [PATCH] Fix DataUsageSummary non-indexable keys Indexing in DataUsage was not conventional, since it blocked adding XML based on current sim status rather than indexing everything and changing non-indexabe keys. Manual merge for: ag/2631595 Change-Id: I7bb3cdb0f11772bbaefb6c21c61eb63bd0b17c7e Fixes: 64193449 Test: robotests --- .../datausage/DataPlanUsageSummary.java | 48 +++++++++++-------- .../settings/datausage/DataUsageSummary.java | 46 +++++++++++------- .../settings/datausage/DataUsageUtils.java | 2 +- .../datausage/DataPlanUsageSummaryTest.java | 39 +++++++++++---- .../datausage/DataUsageSummaryTest.java | 25 ---------- .../shadow/ShadowDataUsageUtils.java | 24 ++++++++++ 6 files changed, 114 insertions(+), 70 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataUsageUtils.java diff --git a/src/com/android/settings/datausage/DataPlanUsageSummary.java b/src/com/android/settings/datausage/DataPlanUsageSummary.java index 5132d553b1b..074374916c7 100644 --- a/src/com/android/settings/datausage/DataPlanUsageSummary.java +++ b/src/com/android/settings/datausage/DataPlanUsageSummary.java @@ -54,13 +54,19 @@ import java.util.List; public class DataPlanUsageSummary extends DataUsageBase implements Indexable { public static final String KEY_RESTRICT_BACKGROUND = "restrict_background"; - public static final String KEY_NETWORK_RESTRICTIONS = "network_restrictions"; - private static final String KEY_DATA_PLAN_USAGE = "data_plan_usage"; + public static final String KEY_DATA_PLAN_USAGE = "data_plan_usage"; - private static final String KEY_STATUS_HEADER = "status_header"; - private static final String KEY_LIMIT_SUMMARY = "plan_summary"; - private static final String KEY_MOBILE_USAGE_TITLE = "data_usage_mobile_category"; - private static final String KEY_WIFI_USAGE_TITLE = "wifi_category"; + public static final String KEY_STATUS_HEADER = "status_header"; + public static final String KEY_LIMIT_SUMMARY = "plan_summary"; + + // Mobile data keys + public static final String KEY_MOBILE_USAGE_TITLE = "data_usage_mobile_category"; + public static final String KEY_MOBILE_DATA_USAGE_TOGGLE = "data_usage_enable"; + + // 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; @@ -364,19 +370,17 @@ public class DataPlanUsageSummary extends DataUsageBase implements Indexable { boolean enabled) { List resources = new ArrayList<>(); SearchIndexableResource resource = new SearchIndexableResource(context); - resource.xmlResId = R.xml.data_plan_usage; + resource.xmlResId = R.xml.data_usage; + resources.add(resource); + + resource = new SearchIndexableResource(context); + resource.xmlResId = R.xml.data_plan_usage_cell_data_preference_screen; + resources.add(resource); + + resource = new SearchIndexableResource(context); + resource.xmlResId = R.xml.data_usage_wifi; resources.add(resource); - if (DataUsageUtils.hasMobileData(context)) { - resource = new SearchIndexableResource(context); - resource.xmlResId = R.xml.data_plan_usage_cell_data_preference_screen; - resources.add(resource); - } - if (DataUsageUtils.hasWifiRadio(context)) { - resource = new SearchIndexableResource(context); - resource.xmlResId = R.xml.data_usage_wifi; - resources.add(resource); - } return resources; } @@ -384,12 +388,16 @@ public class DataPlanUsageSummary extends DataUsageBase implements Indexable { public List getNonIndexableKeys(Context context) { List keys = super.getNonIndexableKeys(context); - if (DataUsageUtils.hasMobileData(context)) { - keys.add(KEY_RESTRICT_BACKGROUND); + if (!DataUsageUtils.hasMobileData(context)) { + keys.add(KEY_MOBILE_USAGE_TITLE); + keys.add(KEY_MOBILE_DATA_USAGE_TOGGLE); } - if (DataUsageUtils.hasWifiRadio(context)) { + + if (!DataUsageUtils.hasWifiRadio(context)) { + keys.add(KEY_WIFI_DATA_USAGE); keys.add(KEY_NETWORK_RESTRICTIONS); } + keys.add(KEY_WIFI_USAGE_TITLE); return keys; diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java index ec47a4d1cff..e37cc4a6c6a 100644 --- a/src/com/android/settings/datausage/DataUsageSummary.java +++ b/src/com/android/settings/datausage/DataUsageSummary.java @@ -69,12 +69,21 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs static final boolean LOGD = false; public static final String KEY_RESTRICT_BACKGROUND = "restrict_background"; - public static final String KEY_NETWORK_RESTRICTIONS = "network_restrictions"; private static final String KEY_STATUS_HEADER = "status_header"; private static final String KEY_LIMIT_SUMMARY = "limit_summary"; - private static final String KEY_MOBILE_USAGE_TITLE = "mobile_category"; - private static final String KEY_WIFI_USAGE_TITLE = "wifi_category"; + + // Mobile data keys + public static final String KEY_MOBILE_USAGE_TITLE = "mobile_category"; + public static final String KEY_MOBILE_DATA_USAGE_TOGGLE = "data_usage_enable"; + public static final String KEY_MOBILE_DATA_USAGE = "cellular_data_usage"; + public static final String KEY_MOBILE_BILLING_CYCLE = "billing_preference"; + + // 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; @@ -381,16 +390,14 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs resource.xmlResId = R.xml.data_usage; resources.add(resource); - if (DataUsageUtils.hasMobileData(context)) { - resource = new SearchIndexableResource(context); - resource.xmlResId = R.xml.data_usage_cellular; - resources.add(resource); - } - if (DataUsageUtils.hasWifiRadio(context)) { - resource = new SearchIndexableResource(context); - resource.xmlResId = R.xml.data_usage_wifi; - resources.add(resource); - } + resource = new SearchIndexableResource(context); + resource.xmlResId = R.xml.data_usage_cellular; + resources.add(resource); + + resource = new SearchIndexableResource(context); + resource.xmlResId = R.xml.data_usage_wifi; + resources.add(resource); + return resources; } @@ -398,12 +405,19 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs public List getNonIndexableKeys(Context context) { List keys = super.getNonIndexableKeys(context); - if (DataUsageUtils.hasMobileData(context)) { - keys.add(KEY_RESTRICT_BACKGROUND); + if (!DataUsageUtils.hasMobileData(context)) { + keys.add(KEY_MOBILE_USAGE_TITLE); + keys.add(KEY_MOBILE_DATA_USAGE_TOGGLE); + keys.add(KEY_MOBILE_DATA_USAGE); + keys.add(KEY_MOBILE_BILLING_CYCLE); } - if (DataUsageUtils.hasWifiRadio(context)) { + + if (!DataUsageUtils.hasWifiRadio(context)) { + keys.add(KEY_WIFI_DATA_USAGE); keys.add(KEY_NETWORK_RESTRICTIONS); } + + // This title is named Wifi, and will confuse users. keys.add(KEY_WIFI_USAGE_TITLE); return keys; diff --git a/src/com/android/settings/datausage/DataUsageUtils.java b/src/com/android/settings/datausage/DataUsageUtils.java index a5d12230018..af2d257b4b1 100644 --- a/src/com/android/settings/datausage/DataUsageUtils.java +++ b/src/com/android/settings/datausage/DataUsageUtils.java @@ -39,7 +39,7 @@ public final class DataUsageUtils { * Returns whether device has mobile data. * TODO: This is the opposite to Utils.isWifiOnly(), it should be refactored into 1 method. */ - static boolean hasMobileData(Context context) { + public static boolean hasMobileData(Context context) { ConnectivityManager connectivityManager = ConnectivityManager.from(context); return connectivityManager != null && connectivityManager .isNetworkSupported(ConnectivityManager.TYPE_MOBILE); diff --git a/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java index d2af22b6226..30c77365e53 100644 --- a/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java @@ -35,6 +35,7 @@ import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.XmlTestUtils; import com.android.settings.testutils.shadow.ShadowConnectivityManager; +import com.android.settings.testutils.shadow.ShadowDataUsageUtils; import com.android.settingslib.NetworkPolicyEditor; import java.util.ArrayList; import java.util.List; @@ -129,28 +130,50 @@ public class DataPlanUsageSummaryTest { } @Test + @Config(shadows = ShadowDataUsageUtils.class) public void testNonIndexableKeys_existInXmlLayout() { - Context context = RuntimeEnvironment.application; - List niks = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER + final Context context = RuntimeEnvironment.application; + ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; + ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true; + final List niks = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER .getNonIndexableKeys(context); - List keys = new ArrayList<>(); + final List keys = new ArrayList<>(); keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage_wifi)); keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage)); + keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, + R.xml.data_plan_usage_cell_data_preference_screen)); assertThat(keys).containsAllIn(niks); } @Test - @Config(shadows = ShadowConnectivityManager.class) - public void testNonIndexableKeys_hasMobileData_restrictedAccessesAdded() { - ShadowConnectivityManager.setIsNetworkSupported(true); + @Config(shadows = ShadowDataUsageUtils.class) + public void testNonIndexableKeys_hasMobileData_hasWifi_allNonIndexableKeysAdded() { + ShadowDataUsageUtils.IS_WIFI_SUPPORTED = false; + ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = false; List keys = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER .getNonIndexableKeys(mContext); - assertThat(keys).contains(DataPlanUsageSummary.KEY_RESTRICT_BACKGROUND); + // Mobile data keys + assertThat(keys).contains(DataPlanUsageSummary.KEY_MOBILE_USAGE_TITLE); + assertThat(keys).contains(DataPlanUsageSummary.KEY_MOBILE_DATA_USAGE_TOGGLE); + + // Wifi keys + assertThat(keys).contains(DataPlanUsageSummary.KEY_WIFI_DATA_USAGE); assertThat(keys).contains(DataPlanUsageSummary.KEY_NETWORK_RESTRICTIONS); - ShadowConnectivityManager.setIsNetworkSupported(false); + assertThat(keys).contains(DataPlanUsageSummary.KEY_WIFI_USAGE_TITLE); + } + + @Test + @Config(shadows = ShadowDataUsageUtils.class) + public void testNonIndexableKeys_noMobile_noWifi_limitedNonIndexableKeys() { + ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true; + ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true; + List keys = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER + .getNonIndexableKeys(mContext); + + assertThat(keys).containsExactly(DataPlanUsageSummary.KEY_WIFI_USAGE_TITLE); } private void initTest() { diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java index 6ee802b57c7..431796acd45 100644 --- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java @@ -82,29 +82,4 @@ public class DataUsageSummaryTest { verify(preference).setSummary(mContext.getResources().getQuantityString( R.plurals.network_restrictions_summary, 0, 0)); } - - @Test - public void testNonIndexableKeys_existInXmlLayout() { - final Context context = RuntimeEnvironment.application; - final List niks = DataUsageSummary.SEARCH_INDEX_DATA_PROVIDER - .getNonIndexableKeys(context); - final List keys = new ArrayList<>(); - - keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage_wifi)); - keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage)); - - assertThat(keys).containsAllIn(niks); - } - - @Test - @Config(shadows = ShadowConnectivityManager.class) - public void testNonIndexableKeys_hasMobileData_restrictedAccessesAdded() { - ShadowConnectivityManager.setIsNetworkSupported(true); - List keys = DataUsageSummary.SEARCH_INDEX_DATA_PROVIDER - .getNonIndexableKeys(mContext); - - assertThat(keys).contains(DataUsageSummary.KEY_RESTRICT_BACKGROUND); - assertThat(keys).contains(DataUsageSummary.KEY_NETWORK_RESTRICTIONS); - ShadowConnectivityManager.setIsNetworkSupported(false); - } } diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataUsageUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataUsageUtils.java new file mode 100644 index 00000000000..fecceb6b90a --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataUsageUtils.java @@ -0,0 +1,24 @@ +package com.android.settings.testutils.shadow; + +import android.content.Context; + +import com.android.settings.datausage.DataUsageUtils; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@Implements(DataUsageUtils.class) +public class ShadowDataUsageUtils { + + public static boolean IS_MOBILE_DATA_SUPPORTED = true; + public static boolean IS_WIFI_SUPPORTED = true; + + @Implementation + public static boolean hasMobileData(Context context) { + return IS_MOBILE_DATA_SUPPORTED; + } + + @Implementation + public static boolean hasWifiRadio(Context context) { + return IS_WIFI_SUPPORTED; + } +}