Merge "Disable app data usage if all time usage is 0" into main

This commit is contained in:
Chaohui Wang
2024-02-28 12:10:43 +00:00
committed by Android (Google) Code Review
4 changed files with 33 additions and 17 deletions

View File

@@ -11483,8 +11483,6 @@
<!-- Mobile network settings screen, message asking the user to check their pricing with their Carrier, when enabling Data roaming. [CHAR LIMIT=NONE] -->
<string name="roaming_check_price_warning">Check with your network provider for pricing.</string>
<!-- Title for mobile data preference, to display the mobile data usage for each app. [CHAR LIMIT=NONE]-->
<string name="mobile_data_usage_title">App data usage</string>
<!-- Summary to show the current network mode is invalid. [CHAR LIMIT=NONE]-->
<string name="mobile_network_mode_error">Invalid Network Mode <xliff:g id="networkModeId" example="0">%1$d</xliff:g>. Ignore.</string>
<!-- Title for _satellite_setting_preference_layout in mobile network settings [CHAR LIMIT=60] -->

View File

@@ -95,7 +95,7 @@
<Preference
android:key="data_usage_summary"
android:title="@string/mobile_data_usage_title"
android:title="@string/app_cellular_data_usage"
settings:controller="com.android.settings.network.telephony.DataUsagePreferenceController"/>
<com.android.settings.datausage.BillingCyclePreference

View File

@@ -81,16 +81,12 @@ class DataUsagePreferenceController(context: Context, key: String) :
}
private suspend fun update() {
val summary = withContext(Dispatchers.Default) {
val (summary, enabled) = withContext(Dispatchers.Default) {
networkTemplate = getNetworkTemplate()
getDataUsageSummary()
}
if (summary == null) {
preference.isEnabled = false
} else {
preference.isEnabled = true
preference.summary = summary
getDataUsageSummaryAndEnabled()
}
preference.isEnabled = enabled
preference.summary = summary
}
private fun getNetworkTemplate(): NetworkTemplate? = when {
@@ -105,17 +101,19 @@ class DataUsagePreferenceController(context: Context, key: String) :
fun createNetworkCycleDataRepository(): NetworkCycleDataRepository? =
networkTemplate?.let { NetworkCycleDataRepository(mContext, it) }
private fun getDataUsageSummary(): String? {
val repository = createNetworkCycleDataRepository() ?: return null
private fun getDataUsageSummaryAndEnabled(): Pair<String?, Boolean> {
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
}
}

View File

@@ -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))