From a95d62a4a82d9ef5b80fbdd6f63a5e8ccd52ec9f Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Tue, 23 May 2023 14:21:03 +0800 Subject: [PATCH] Fix the bytes displayed unit This used to by MByte and GByte, not used in other places in Settings, and not align with the data summary on the same page. Unify to MB and GB to align with other places in Settings and the data summary on the same page. Fix: 277900792 Test: Visual Test: Unit test Change-Id: I9f8ceac470aede135b7921c391c063ba87da661e --- .../datausage/BillingCycleSettings.java | 10 +--- .../settings/datausage/DataUsageFormatter.kt | 32 ++++++++++++ .../datausage/DataUsageFormatterTest.kt | 50 +++++++++++++++++++ 3 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 src/com/android/settings/datausage/DataUsageFormatter.kt create mode 100644 tests/spa_unit/src/com/android/settings/datausage/DataUsageFormatterTest.kt 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