From 758e3828b3c8b4807f67325132f9bee7cf043018 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Wed, 28 Feb 2024 12:12:53 +0800 Subject: [PATCH] Disable app data usage if all time usage is 0 Otherwise user can open an empty App data usage page. Bug: 292346951 Test: manual - on Mobile Settings Test: unit test Change-Id: I63c3e06af2606c3e2017f2440addb2ac2d9d775b --- res/values/strings.xml | 2 -- res/xml/mobile_network_settings.xml | 2 +- .../DataUsagePreferenceController.kt | 24 +++++++++---------- .../DataUsagePreferenceControllerTest.kt | 22 ++++++++++++++++- 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index c5d0017e7d0..e8a0408c453 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11467,8 +11467,6 @@ Check with your network provider for pricing. - - App data usage Invalid Network Mode %1$d. Ignore. diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml index a29e12385ba..1e43ef06f7e 100644 --- a/res/xml/mobile_network_settings.xml +++ b/res/xml/mobile_network_settings.xml @@ -95,7 +95,7 @@ { + val repository = createNetworkCycleDataRepository() ?: return null to false + repository.loadFirstCycle()?.let { usageData -> return mContext.getString( R.string.data_usage_template, usageData.formatUsage(mContext), usageData.formatDateRange(mContext), - ) + ) to (usageData.usage > 0 || repository.queryUsage(AllTimeRange).usage > 0) } - return repository.queryUsage(AllTimeRange).takeIf { it.usage > 0 } - ?.getDataUsedString(mContext) + val allTimeUsage = repository.queryUsage(AllTimeRange) + if (allTimeUsage.usage > 0) return allTimeUsage.getDataUsedString(mContext) to true + return null to false } } diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.kt index 6cd9151fa6f..5f80855f604 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.kt @@ -33,6 +33,7 @@ import com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE import com.android.settings.datausage.DataUsageUtils import com.android.settings.datausage.lib.DataUsageLib import com.android.settings.datausage.lib.NetworkCycleDataRepository +import com.android.settings.datausage.lib.NetworkStatsRepository.Companion.AllTimeRange import com.android.settings.datausage.lib.NetworkUsageData import com.android.settingslib.spa.testutils.waitUntil import com.google.common.truth.Truth.assertThat @@ -140,11 +141,14 @@ class DataUsagePreferenceControllerTest { } @Test - fun updateState_noUsageData_shouldEnablePreference() = runBlocking { + fun updateState_noFistCycleUsageButOtherUsage_shouldEnablePreference() = runBlocking { val usageData = NetworkUsageData(START_TIME, END_TIME, 0L) repository.stub { on { loadFirstCycle() } doReturn usageData + on { queryUsage(AllTimeRange) } doReturn + NetworkUsageData(AllTimeRange.lower, AllTimeRange.upper, 1L) } + preference.isEnabled = false controller.onViewCreated(TestLifecycleOwner()) @@ -152,6 +156,22 @@ class DataUsagePreferenceControllerTest { waitUntil { preference.summary?.contains("0 B used") == true } } + @Test + fun updateState_noDataUsage_shouldDisablePreference() = runBlocking { + val usageData = NetworkUsageData(START_TIME, END_TIME, 0L) + repository.stub { + on { loadFirstCycle() } doReturn usageData + on { queryUsage(AllTimeRange) } doReturn + NetworkUsageData(AllTimeRange.lower, AllTimeRange.upper, 0L) + } + preference.isEnabled = true + + controller.onViewCreated(TestLifecycleOwner()) + + waitUntil { !preference.isEnabled } + waitUntil { preference.summary?.contains("0 B used") == true } + } + @Test fun updateState_shouldUseIecUnit() = runBlocking { val usageData = NetworkUsageData(START_TIME, END_TIME, DataUnit.MEBIBYTES.toBytes(1))