diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java index 3047d73dddf..c3ddb2eac2d 100644 --- a/src/com/android/settings/datausage/BillingCycleSettings.java +++ b/src/com/android/settings/datausage/BillingCycleSettings.java @@ -22,8 +22,6 @@ import android.app.settings.SettingsEnums; import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; -import android.icu.text.MeasureFormat; -import android.icu.util.MeasureUnit; import android.net.NetworkPolicy; import android.net.NetworkTemplate; import android.os.Bundle; @@ -322,14 +320,10 @@ public class BillingCycleSettings extends DataUsageBaseFragment implements final boolean isLimit = getArguments().getBoolean(EXTRA_LIMIT); final long bytes = isLimit ? editor.getPolicyLimitBytes(template) : editor.getPolicyWarningBytes(template); - final long limitDisabled = isLimit ? LIMIT_DISABLED : WARNING_DISABLED; - final MeasureFormat formatter = MeasureFormat.getInstance( - getContext().getResources().getConfiguration().locale, - MeasureFormat.FormatWidth.SHORT); final String[] unitNames = new String[] { - formatter.getUnitDisplayName(MeasureUnit.MEGABYTE), - formatter.getUnitDisplayName(MeasureUnit.GIGABYTE) + DataUsageFormatter.INSTANCE.getBytesDisplayUnit(getResources(), MIB_IN_BYTES), + DataUsageFormatter.INSTANCE.getBytesDisplayUnit(getResources(), GIB_IN_BYTES), }; final ArrayAdapter adapter = new ArrayAdapter( getContext(), android.R.layout.simple_spinner_item, unitNames); diff --git a/src/com/android/settings/datausage/DataUsageFormatter.kt b/src/com/android/settings/datausage/DataUsageFormatter.kt new file mode 100644 index 00000000000..16a9ae8b6b0 --- /dev/null +++ b/src/com/android/settings/datausage/DataUsageFormatter.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.datausage + +import android.content.res.Resources +import android.text.format.Formatter + +object DataUsageFormatter { + + /** + * Gets the display unit of the given bytes. + * + * Similar to MeasureFormat.getUnitDisplayName(), but with the expected result for the bytes in + * Settings, and align with other places in Settings. + */ + fun Resources.getBytesDisplayUnit(bytes: Long): String = + Formatter.formatBytes(this, bytes, Formatter.FLAG_IEC_UNITS).units +} \ No newline at end of file diff --git a/tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt b/tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt new file mode 100644 index 00000000000..dc6a421b940 --- /dev/null +++ b/tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.datausage + +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.settings.datausage.DataUsageFormatter.getBytesDisplayUnit +import com.google.common.truth.Truth.assertThat + +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class DataUsageFormatterTest { + private val context: Context = ApplicationProvider.getApplicationContext() + + @Test + fun getUnitDisplayName_megaByte() { + val displayName = context.resources.getBytesDisplayUnit(ONE_MEGA_BYTE_IN_BYTES) + + assertThat(displayName).isEqualTo("MB") + } + + @Test + fun getUnitDisplayName_gigaByte() { + val displayName = context.resources.getBytesDisplayUnit(ONE_GIGA_BYTE_IN_BYTES) + + assertThat(displayName).isEqualTo("GB") + } + + private companion object { + const val ONE_MEGA_BYTE_IN_BYTES = 1024L * 1024 + const val ONE_GIGA_BYTE_IN_BYTES = 1024L * 1024 * 1024 + } +} \ No newline at end of file