From 5c6af383afe5b96abb55ba6a054e85a94b83bf1c 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. Change-Id: I2097a3ac4ffd714b60299c07b29c81f246e414eb Merged-In: I7bb3cdb0f11772bbaefb6c21c61eb63bd0b17c7e Fixes: 64193449 Test: robotests --- .../settings/datausage/DataUsageSummary.java | 45 ++++++++++++------- .../datausage/DataUsageSummaryTest.java | 34 +++++++++++--- .../shadow/ShadowDataUsageSummary.java | 24 ++++++++++ 3 files changed, 83 insertions(+), 20 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataUsageSummary.java diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java index 5a84d13fa3e..417d74b616c 100644 --- a/src/com/android/settings/datausage/DataUsageSummary.java +++ b/src/com/android/settings/datausage/DataUsageSummary.java @@ -72,11 +72,21 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs public static final String TEST_RADIOS_PROP = "test.radios"; 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_WIFI_USAGE_TITLE = "wifi_category"; + + // Mobile data keys + public static final String KEY_MOBILE_CATEGORY = "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; @@ -471,16 +481,14 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs resource.xmlResId = R.xml.data_usage; resources.add(resource); - if (hasMobileData(context)) { - resource = new SearchIndexableResource(context); - resource.xmlResId = R.xml.data_usage_cellular; - resources.add(resource); - } - if (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; } @@ -488,12 +496,19 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs public List getNonIndexableKeys(Context context) { List keys = super.getNonIndexableKeys(context); - if (hasMobileData(context)) { - keys.add(KEY_RESTRICT_BACKGROUND); + if (!hasMobileData(context)) { + keys.add(KEY_MOBILE_CATEGORY); + keys.add(KEY_MOBILE_DATA_USAGE_TOGGLE); + keys.add(KEY_MOBILE_DATA_USAGE); + keys.add(KEY_MOBILE_BILLING_CYCLE); } - if (hasWifiRadio(context)) { + + if (!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/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java index 77e0fe9ad9d..e4ad5b59984 100644 --- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java @@ -27,6 +27,7 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.XmlTestUtils; import com.android.settings.testutils.shadow.ShadowConnectivityManager; +import com.android.settings.testutils.shadow.ShadowDataUsageSummary; import com.android.settingslib.NetworkPolicyEditor; import org.junit.Before; @@ -149,27 +150,50 @@ public class DataUsageSummaryTest { } @Test + @Config(shadows = ShadowDataUsageSummary.class) public void testNonIndexableKeys_existInXmlLayout() { final Context context = RuntimeEnvironment.application; + ShadowDataUsageSummary.IS_WIFI_SUPPORTED = true; + ShadowDataUsageSummary.IS_MOBILE_DATA_SUPPORTED = true; 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)); + keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage_cellular)); assertThat(keys).containsAllIn(niks); } @Test - @Config(shadows = ShadowConnectivityManager.class) - public void testNonIndexableKeys_hasMobileData_restrictedAccessesAdded() { - ShadowConnectivityManager.setIsNetworkSupported(true); + @Config(shadows = ShadowDataUsageSummary.class) + public void testNonIndexableKeys_hasMobileData_hasWifi_allNonIndexableKeysAdded() { + ShadowDataUsageSummary.IS_WIFI_SUPPORTED = false; + ShadowDataUsageSummary.IS_MOBILE_DATA_SUPPORTED = false; List keys = DataUsageSummary.SEARCH_INDEX_DATA_PROVIDER .getNonIndexableKeys(mContext); - assertThat(keys).contains(DataUsageSummary.KEY_RESTRICT_BACKGROUND); + // Mobile data keys + assertThat(keys).contains(DataUsageSummary.KEY_MOBILE_CATEGORY); + assertThat(keys).contains(DataUsageSummary.KEY_MOBILE_DATA_USAGE_TOGGLE); + assertThat(keys).contains(DataUsageSummary.KEY_MOBILE_DATA_USAGE); + assertThat(keys).contains(DataUsageSummary.KEY_MOBILE_BILLING_CYCLE); + + // Wifi keys + assertThat(keys).contains(DataUsageSummary.KEY_WIFI_DATA_USAGE); assertThat(keys).contains(DataUsageSummary.KEY_NETWORK_RESTRICTIONS); - ShadowConnectivityManager.setIsNetworkSupported(false); + assertThat(keys).contains(DataUsageSummary.KEY_WIFI_USAGE_TITLE); + } + + @Test + @Config(shadows = ShadowDataUsageSummary.class) + public void testNonIndexableKeys_noMobile_noWifi_limitedNonIndexableKeys() { + ShadowDataUsageSummary.IS_WIFI_SUPPORTED = true; + ShadowDataUsageSummary.IS_MOBILE_DATA_SUPPORTED = true; + List keys = DataUsageSummary.SEARCH_INDEX_DATA_PROVIDER + .getNonIndexableKeys(mContext); + + assertThat(keys).containsExactly(DataUsageSummary.KEY_WIFI_USAGE_TITLE); } } diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataUsageSummary.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataUsageSummary.java new file mode 100644 index 00000000000..c5fc601191a --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDataUsageSummary.java @@ -0,0 +1,24 @@ +package com.android.settings.testutils.shadow; + +import android.content.Context; + +import com.android.settings.datausage.DataUsageSummary; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; + +@Implements(DataUsageSummary.class) +public class ShadowDataUsageSummary { + + 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; + } +}