diff --git a/src/com/android/settings/datausage/AppDataUsageSummaryController.kt b/src/com/android/settings/datausage/AppDataUsageSummaryController.kt index fb7101dba9b..1cab87f42bf 100644 --- a/src/com/android/settings/datausage/AppDataUsageSummaryController.kt +++ b/src/com/android/settings/datausage/AppDataUsageSummaryController.kt @@ -37,8 +37,7 @@ class AppDataUsageSummaryController(context: Context, preferenceKey: String) : private val dataFlow = MutableStateFlow(NetworkUsageDetailsData.AllZero) private val dataUsageFormatter = DataUsageFormatter(context) - private val emptyDataUsage = - DataUsageFormatter.FormattedDataUsage(context.getPlaceholder(), context.getPlaceholder()) + private val emptyDataUsage = context.getPlaceholder() private val totalUsageFlow = dataFlow.map { dataUsageFormatter.formatDataUsage(it.totalUsage) @@ -66,18 +65,15 @@ class AppDataUsageSummaryController(context: Context, preferenceKey: String) : val backgroundUsage by backgroundUsageFlow.collectAsStateWithLifecycle(emptyDataUsage) Preference(object : PreferenceModel { override val title = stringResource(R.string.total_size_label) - override val summary = { totalUsage.displayText } - override val summaryContentDescription = { totalUsage.contentDescription } + override val summary = { totalUsage } }) Preference(object : PreferenceModel { override val title = stringResource(R.string.data_usage_label_foreground) - override val summary = { foregroundUsage.displayText } - override val summaryContentDescription = { foregroundUsage.contentDescription } + override val summary = { foregroundUsage } }) Preference(object : PreferenceModel { override val title = stringResource(R.string.data_usage_label_background) - override val summary = { backgroundUsage.displayText } - override val summaryContentDescription = { backgroundUsage.contentDescription } + override val summary = { backgroundUsage } }) } } diff --git a/src/com/android/settings/datausage/DataUsageList.kt b/src/com/android/settings/datausage/DataUsageList.kt index a2932776669..8636c56de69 100644 --- a/src/com/android/settings/datausage/DataUsageList.kt +++ b/src/com/android/settings/datausage/DataUsageList.kt @@ -172,7 +172,7 @@ open class DataUsageList : DashboardFragment() { private fun updateSelectedCycle(usageData: NetworkUsageData) { Log.d(TAG, "showing cycle $usageData") - usageAmount?.title = usageData.getDataUsedString(requireContext()).displayText + usageAmount?.title = usageData.getDataUsedString(requireContext()) viewModel.selectedCycleFlow.value = usageData updateApps(usageData) diff --git a/src/com/android/settings/datausage/lib/DataUsageFormatter.kt b/src/com/android/settings/datausage/lib/DataUsageFormatter.kt index 0a4c06b264b..849ff0dc89c 100644 --- a/src/com/android/settings/datausage/lib/DataUsageFormatter.kt +++ b/src/com/android/settings/datausage/lib/DataUsageFormatter.kt @@ -16,40 +16,16 @@ package com.android.settings.datausage.lib -import android.annotation.StringRes import android.content.Context import android.content.res.Resources -import android.icu.text.UnicodeSet -import android.icu.text.UnicodeSetSpanner -import android.text.BidiFormatter import android.text.format.Formatter -import com.android.internal.R +import com.android.settingslib.spaprivileged.framework.common.BytesFormatter class DataUsageFormatter(private val context: Context) { - data class FormattedDataUsage( - val displayText: String, - val contentDescription: String, - ) { - fun format(context: Context, @StringRes resId: Int, vararg formatArgs: Any?) = - FormattedDataUsage( - displayText = context.getString(resId, displayText, *formatArgs), - contentDescription = context.getString(resId, contentDescription, *formatArgs), - ) - } - /** Formats the data usage. */ - fun formatDataUsage(sizeBytes: Long): FormattedDataUsage { - val result = Formatter.formatBytes(context.resources, sizeBytes, Formatter.FLAG_IEC_UNITS) - return FormattedDataUsage( - displayText = BidiFormatter.getInstance().unicodeWrap( - context.getString(R.string.fileSizeSuffix, result.value, result.units) - ), - contentDescription = context.getString( - R.string.fileSizeSuffix, result.value, result.unitsContentDescription - ), - ) - } + fun formatDataUsage(sizeBytes: Long): String = + BytesFormatter(context).format(sizeBytes, BytesFormatter.UseCase.DataUsage) companion object { /** diff --git a/src/com/android/settings/datausage/lib/NetworkUsageData.kt b/src/com/android/settings/datausage/lib/NetworkUsageData.kt index 26578e325b4..0c34edf1059 100644 --- a/src/com/android/settings/datausage/lib/NetworkUsageData.kt +++ b/src/com/android/settings/datausage/lib/NetworkUsageData.kt @@ -20,7 +20,6 @@ import android.content.Context import android.text.format.DateUtils import android.util.Range import com.android.settings.R -import com.android.settings.datausage.lib.DataUsageFormatter.FormattedDataUsage /** * Base data structure representing usage data in a period. @@ -38,11 +37,11 @@ data class NetworkUsageData( fun formatDateRange(context: Context): String = DateUtils.formatDateRange(context, startTime, endTime, DATE_FORMAT) - fun formatUsage(context: Context): FormattedDataUsage = + fun formatUsage(context: Context): String = DataUsageFormatter(context).formatDataUsage(usage) - fun getDataUsedString(context: Context): FormattedDataUsage = - formatUsage(context).format(context, R.string.data_used_template) + fun getDataUsedString(context: Context): String = + context.getString(R.string.data_used_template, formatUsage(context)) companion object { val AllZero = NetworkUsageData( diff --git a/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt b/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt index aa113b692dc..2d8c0f77024 100644 --- a/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt +++ b/src/com/android/settings/network/telephony/DataUsagePreferenceController.kt @@ -31,7 +31,6 @@ import androidx.preference.PreferenceScreen import com.android.settings.R import com.android.settings.core.BasePreferenceController import com.android.settings.datausage.DataUsageUtils -import com.android.settings.datausage.lib.DataUsageFormatter.FormattedDataUsage import com.android.settings.datausage.lib.DataUsageLib import com.android.settings.datausage.lib.NetworkCycleDataRepository import com.android.settings.datausage.lib.NetworkStatsRepository.Companion.AllTimeRange @@ -88,7 +87,7 @@ class DataUsagePreferenceController(context: Context, key: String) : getDataUsageSummaryAndEnabled() } preference.isEnabled = enabled - preference.summary = summary?.displayText + preference.summary = summary } private fun getNetworkTemplate(): NetworkTemplate? = @@ -100,12 +99,16 @@ class DataUsagePreferenceController(context: Context, key: String) : fun createNetworkCycleDataRepository(): NetworkCycleDataRepository? = networkTemplate?.let { NetworkCycleDataRepository(mContext, it) } - private fun getDataUsageSummaryAndEnabled(): Pair { + private fun getDataUsageSummaryAndEnabled(): Pair { val repository = createNetworkCycleDataRepository() ?: return null to false repository.loadFirstCycle()?.let { usageData -> - val formattedDataUsage = usageData.formatUsage(mContext) - .format(mContext, R.string.data_usage_template, usageData.formatDateRange(mContext)) + val formattedDataUsage = + mContext.getString( + R.string.data_usage_template, + usageData.formatUsage(mContext), + usageData.formatDateRange(mContext), + ) val hasUsage = usageData.usage > 0 || repository.queryUsage(AllTimeRange).usage > 0 return formattedDataUsage to hasUsage } diff --git a/src/com/android/settings/spa/app/appinfo/AppDataUsagePreference.kt b/src/com/android/settings/spa/app/appinfo/AppDataUsagePreference.kt index 7b8cf8c8b55..7e6e72613b7 100644 --- a/src/com/android/settings/spa/app/appinfo/AppDataUsagePreference.kt +++ b/src/com/android/settings/spa/app/appinfo/AppDataUsagePreference.kt @@ -113,7 +113,7 @@ private class AppDataUsagePresenter( } else { context.getString( R.string.data_summary_format, - appUsageData.formatUsage(context).displayText, + appUsageData.formatUsage(context), appUsageData.formatStartDate(context), ) } diff --git a/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageSummaryControllerTest.kt b/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageSummaryControllerTest.kt index be839dd416f..9323a4a7759 100644 --- a/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageSummaryControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/datausage/AppDataUsageSummaryControllerTest.kt @@ -56,13 +56,10 @@ class AppDataUsageSummaryControllerTest { composeTestRule.onNode(hasTextExactly("Total", "6.75 kB")).assertIsDisplayed() composeTestRule.onNode(hasTextExactly("Foreground", "5.54 kB")).assertIsDisplayed() composeTestRule.onNode(hasTextExactly("Background", "1.21 kB")).assertIsDisplayed() - composeTestRule.onNodeWithContentDescription("6.75 kB").assertIsDisplayed() - composeTestRule.onNodeWithContentDescription("5.54 kB").assertIsDisplayed() - composeTestRule.onNodeWithContentDescription("1.21 kB").assertIsDisplayed() } @Test - fun summary_zero() { + fun summary_smallByte() { val appUsage = NetworkUsageDetailsData( range = Range(1L, 2L), totalUsage = 3, @@ -75,12 +72,9 @@ class AppDataUsageSummaryControllerTest { controller.Content() } - composeTestRule.onNode(hasTextExactly("Total", "3 B")).assertIsDisplayed() - composeTestRule.onNode(hasTextExactly("Foreground", "1 B")).assertIsDisplayed() - composeTestRule.onNode(hasTextExactly("Background", "2 B")).assertIsDisplayed() - composeTestRule.onNodeWithContentDescription("3 byte").assertIsDisplayed() - composeTestRule.onNodeWithContentDescription("1 byte").assertIsDisplayed() - composeTestRule.onNodeWithContentDescription("2 byte").assertIsDisplayed() + composeTestRule.onNode(hasTextExactly("Total", "3 byte")).assertIsDisplayed() + composeTestRule.onNode(hasTextExactly("Foreground", "1 byte")).assertIsDisplayed() + composeTestRule.onNode(hasTextExactly("Background", "2 byte")).assertIsDisplayed() } private companion object { diff --git a/tests/spa_unit/src/com/android/settings/datausage/lib/DataUsageFormatterTest.kt b/tests/spa_unit/src/com/android/settings/datausage/lib/DataUsageFormatterTest.kt index 071234dcd65..97a6c0f7fd2 100644 --- a/tests/spa_unit/src/com/android/settings/datausage/lib/DataUsageFormatterTest.kt +++ b/tests/spa_unit/src/com/android/settings/datausage/lib/DataUsageFormatterTest.kt @@ -21,7 +21,6 @@ import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settings.datausage.lib.DataUsageFormatter.Companion.getBytesDisplayUnit import com.google.common.truth.Truth.assertThat - import org.junit.Test import org.junit.runner.RunWith @@ -33,26 +32,23 @@ class DataUsageFormatterTest { @Test fun formatDataUsage_0() { - val (displayText, contentDescription) = dataUsageFormatter.formatDataUsage(0) + val displayText = dataUsageFormatter.formatDataUsage(0) - assertThat(displayText).isEqualTo("0 B") - assertThat(contentDescription).isEqualTo("0 byte") + assertThat(displayText).isEqualTo("0 byte") } @Test fun formatDataUsage_1000() { - val (displayText, contentDescription) = dataUsageFormatter.formatDataUsage(1000) + val displayText = dataUsageFormatter.formatDataUsage(1000) assertThat(displayText).isEqualTo("0.98 kB") - assertThat(contentDescription).isEqualTo("0.98 kB") } @Test fun formatDataUsage_2000000() { - val (displayText, contentDescription) = dataUsageFormatter.formatDataUsage(2000000) + val displayText = dataUsageFormatter.formatDataUsage(2000000) assertThat(displayText).isEqualTo("1.91 MB") - assertThat(contentDescription).isEqualTo("1.91 MB") } @Test 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 f4974e9cd8e..f16c9fae017 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 @@ -143,7 +143,7 @@ class DataUsagePreferenceControllerTest { controller.onViewCreated(TestLifecycleOwner()) waitUntil { preference.isEnabled } - waitUntil { preference.summary?.contains("0 B used") == true } + waitUntil { preference.summary?.contains("0 byte used") == true } } @Test @@ -159,7 +159,7 @@ class DataUsagePreferenceControllerTest { controller.onViewCreated(TestLifecycleOwner()) waitUntil { !preference.isEnabled } - waitUntil { preference.summary?.contains("0 B used") == true } + waitUntil { preference.summary?.contains("0 byte used") == true } } @Test