Migrate all data usage format use case

Now they are all aligned.

Bug: 321861088
Flag: EXEMPT bug fix
Test: unit test
Change-Id: I1981fd32fd24de7c9eff93e0cd638e862f01b9b9
This commit is contained in:
Chaohui Wang
2025-01-02 06:32:26 -08:00
parent 2fdbe30929
commit d3448f3a91
11 changed files with 47 additions and 58 deletions

View File

@@ -21,6 +21,7 @@ import android.widget.ProgressBar;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
import com.android.settings.datausage.lib.DataUsageFormatter;
import com.android.settingslib.AppItem;
import com.android.settingslib.net.UidDetail;
import com.android.settingslib.net.UidDetailProvider;
@@ -46,7 +47,7 @@ public class AppDataUsagePreference extends AppPreference {
if (item.restricted && item.total <= 0) {
setSummary(com.android.settings.R.string.data_usage_app_restricted);
} else {
setSummary(DataUsageUtils.formatDataUsage(context, item.total));
setSummary(new DataUsageFormatter(context).formatDataUsage(item.total));
}
mDetail = provider.getUidDetail(item.key, false /* blocking */);
if (mDetail != null) {

View File

@@ -152,8 +152,9 @@ public class BillingCycleSettings extends DataUsageBaseFragment implements
void updatePrefs() {
mBillingCycle.setSummary(null);
final long warningBytes = services.mPolicyEditor.getPolicyWarningBytes(mNetworkTemplate);
DataUsageFormatter dataUsageFormatter = new DataUsageFormatter(requireContext());
if (warningBytes != WARNING_DISABLED) {
mDataWarning.setSummary(DataUsageUtils.formatDataUsage(getContext(), warningBytes));
mDataWarning.setSummary(dataUsageFormatter.formatDataUsage(warningBytes));
mDataWarning.setEnabled(true);
mEnableDataWarning.setChecked(true);
} else {
@@ -163,7 +164,7 @@ public class BillingCycleSettings extends DataUsageBaseFragment implements
}
final long limitBytes = services.mPolicyEditor.getPolicyLimitBytes(mNetworkTemplate);
if (limitBytes != LIMIT_DISABLED) {
mDataLimit.setSummary(DataUsageUtils.formatDataUsage(getContext(), limitBytes));
mDataLimit.setSummary(dataUsageFormatter.formatDataUsage(limitBytes));
mDataLimit.setEnabled(true);
mEnableDataLimit.setChecked(true);
} else {

View File

@@ -20,7 +20,6 @@ import android.net.NetworkPolicy;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.format.Formatter;
import android.text.style.ForegroundColorSpan;
import android.util.AttributeSet;
import android.util.DataUnit;
@@ -34,9 +33,11 @@ import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.datausage.lib.DataUsageFormatter;
import com.android.settings.datausage.lib.NetworkCycleChartData;
import com.android.settings.datausage.lib.NetworkUsageData;
import com.android.settings.widget.UsageView;
import com.android.settingslib.spaprivileged.framework.common.BytesFormatter;
import java.util.ArrayList;
import java.util.Comparator;
@@ -279,10 +280,10 @@ public class ChartDataUsagePreference extends Preference {
}
private CharSequence getLabel(long bytes, int str, int mLimitColor) {
Formatter.BytesResult result = Formatter.formatBytes(mResources, bytes,
Formatter.FLAG_SHORTER | Formatter.FLAG_IEC_UNITS);
DataUsageFormatter dataUsageFormatter = new DataUsageFormatter(getContext());
BytesFormatter.Result result = dataUsageFormatter.formatDataUsageWithUnits(bytes);
CharSequence label = TextUtils.expandTemplate(getContext().getText(str),
result.value, result.units);
result.getNumber(), result.getUnits());
return new SpannableStringBuilder().append(label, new ForegroundColorSpan(mLimitColor), 0);
}

View File

@@ -28,6 +28,7 @@ import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.datausage.lib.DataUsageFormatter;
import com.android.settingslib.net.DataUsageController;
public class DataUsagePreference extends Preference implements TemplatePreference {
@@ -58,8 +59,9 @@ public class DataUsagePreference extends Preference implements TemplatePreferenc
final DataUsageController.DataUsageInfo usageInfo =
controller.getDataUsageInfo(mTemplate);
setTitle(mTitleRes);
DataUsageFormatter dataUsageFormatter = new DataUsageFormatter(getContext());
setSummary(getContext().getString(R.string.data_usage_template,
DataUsageUtils.formatDataUsage(getContext(), usageInfo.usageLevel),
dataUsageFormatter.formatDataUsage(usageInfo.usageLevel),
usageInfo.period));
}
final long usageLevel = controller.getHistoricalUsageLevel(template);

View File

@@ -24,7 +24,6 @@ import android.telephony.SubscriptionPlan;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.text.style.AbsoluteSizeSpan;
import android.util.AttributeSet;
import android.view.View;
@@ -39,7 +38,9 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
import com.android.settings.datausage.lib.DataUsageFormatter;
import com.android.settingslib.Utils;
import com.android.settingslib.spaprivileged.framework.common.BytesFormatter;
import com.android.settingslib.utils.StringUtil;
import java.util.HashMap;
@@ -165,11 +166,12 @@ public class DataUsageSummaryPreference extends Preference {
}
private void updateDataUsageLabels(PreferenceViewHolder holder) {
TextView usageNumberField = getDataUsed(holder);
DataUsageFormatter dataUsageFormatter = new DataUsageFormatter(getContext());
final Formatter.BytesResult usedResult = Formatter.formatBytes(getContext().getResources(),
mDataplanUse, Formatter.FLAG_CALCULATE_ROUNDED | Formatter.FLAG_IEC_UNITS);
final SpannableString usageNumberText = new SpannableString(usedResult.value);
TextView usageNumberField = getDataUsed(holder);
final BytesFormatter.Result usedResult =
dataUsageFormatter.formatDataUsageWithUnits(mDataplanUse);
final SpannableString usageNumberText = new SpannableString(usedResult.getNumber());
final int textSize =
getContext().getResources().getDimensionPixelSize(R.dimen.usage_number_text_size);
usageNumberText.setSpan(new AbsoluteSizeSpan(textSize), 0, usageNumberText.length(),
@@ -177,7 +179,7 @@ public class DataUsageSummaryPreference extends Preference {
CharSequence template = getContext().getText(R.string.data_used_formatted);
CharSequence usageText =
TextUtils.expandTemplate(template, usageNumberText, usedResult.units);
TextUtils.expandTemplate(template, usageNumberText, usedResult.getUnits());
usageNumberField.setText(usageText);
final MeasurableLinearLayout layout = getLayout(holder);
@@ -188,13 +190,13 @@ public class DataUsageSummaryPreference extends Preference {
if (dataRemaining >= 0) {
usageRemainingField.setText(
TextUtils.expandTemplate(getContext().getText(R.string.data_remaining),
DataUsageUtils.formatDataUsage(getContext(), dataRemaining)));
dataUsageFormatter.formatDataUsage(dataRemaining)));
usageRemainingField.setTextColor(
Utils.getColorAttr(getContext(), android.R.attr.colorAccent));
} else {
usageRemainingField.setText(
TextUtils.expandTemplate(getContext().getText(R.string.data_overusage),
DataUsageUtils.formatDataUsage(getContext(), -dataRemaining)));
dataUsageFormatter.formatDataUsage(-dataRemaining)));
usageRemainingField.setTextColor(
Utils.getColorAttr(getContext(), android.R.attr.colorError));
}

View File

@@ -24,6 +24,7 @@ import android.util.Log
import androidx.lifecycle.LifecycleOwner
import androidx.preference.PreferenceScreen
import com.android.settings.R
import com.android.settings.datausage.lib.DataUsageFormatter
import com.android.settings.datausage.lib.DataUsageLib.getMobileTemplate
import com.android.settings.datausage.lib.INetworkCycleDataRepository
import com.android.settings.datausage.lib.NetworkCycleDataRepository
@@ -72,6 +73,8 @@ open class DataUsageSummaryPreferenceController @JvmOverloads constructor(
private lateinit var preference: DataUsageSummaryPreference
private val dataUsageFormatter = DataUsageFormatter(mContext)
override fun getAvailabilityStatus(subId: Int) =
if (subInfo != null) AVAILABLE else CONDITIONALLY_UNAVAILABLE
@@ -120,8 +123,8 @@ open class DataUsageSummaryPreferenceController @JvmOverloads constructor(
private fun setDataBarSize(dataBarSize: Long) {
preference.setLabels(
DataUsageUtils.formatDataUsage(mContext, /* byteValue = */ 0),
DataUsageUtils.formatDataUsage(mContext, dataBarSize)
dataUsageFormatter.formatDataUsage(/* byteValue = */ 0),
dataUsageFormatter.formatDataUsage(dataBarSize)
)
}
@@ -129,22 +132,22 @@ open class DataUsageSummaryPreferenceController @JvmOverloads constructor(
warningBytes > 0 && limitBytes > 0 -> {
TextUtils.expandTemplate(
mContext.getText(R.string.cell_data_warning_and_limit),
DataUsageUtils.formatDataUsage(mContext, warningBytes),
DataUsageUtils.formatDataUsage(mContext, limitBytes),
dataUsageFormatter.formatDataUsage(warningBytes),
dataUsageFormatter.formatDataUsage(limitBytes),
)
}
warningBytes > 0 -> {
TextUtils.expandTemplate(
mContext.getText(R.string.cell_data_warning),
DataUsageUtils.formatDataUsage(mContext, warningBytes),
dataUsageFormatter.formatDataUsage(warningBytes),
)
}
limitBytes > 0 -> {
TextUtils.expandTemplate(
mContext.getText(R.string.cell_data_limit),
DataUsageUtils.formatDataUsage(mContext, limitBytes),
dataUsageFormatter.formatDataUsage(limitBytes),
)
}

View File

@@ -31,9 +31,6 @@ import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.BidiFormatter;
import android.text.format.Formatter;
import android.text.format.Formatter.BytesResult;
import android.util.Log;
import com.android.settings.datausage.lib.DataUsageLib;
@@ -54,19 +51,6 @@ public final class DataUsageUtils {
private DataUsageUtils() {
}
/**
* Format byte value to readable string using IEC units.
*
* @deprecated Use {@link com.android.settings.datausage.lib.DataUsageFormatter} instead.
*/
@Deprecated
public static CharSequence formatDataUsage(Context context, long byteValue) {
final BytesResult res = Formatter.formatBytes(context.getResources(), byteValue,
Formatter.FLAG_IEC_UNITS);
return BidiFormatter.getInstance().unicodeWrap(context.getString(
com.android.internal.R.string.fileSizeSuffix, res.value, res.units));
}
/**
* Test if device has an ethernet network connection.
*/

View File

@@ -18,14 +18,18 @@ package com.android.settings.datausage.lib
import android.content.Context
import android.content.res.Resources
import android.text.format.Formatter
import com.android.settingslib.spaprivileged.framework.common.BytesFormatter
class DataUsageFormatter(private val context: Context) {
class DataUsageFormatter(context: Context) {
private val bytesFormatter = BytesFormatter(context)
/** Formats the data usage. */
fun formatDataUsage(sizeBytes: Long): String =
BytesFormatter(context).format(sizeBytes, BytesFormatter.UseCase.DataUsage)
bytesFormatter.format(sizeBytes, BytesFormatter.UseCase.DataUsage)
fun formatDataUsageWithUnits(sizeBytes: Long): BytesFormatter.Result =
bytesFormatter.formatWithUnits(sizeBytes, BytesFormatter.UseCase.DataUsage)
companion object {
/**
@@ -35,6 +39,6 @@ class DataUsageFormatter(private val context: Context) {
* in Settings, and align with other places in Settings.
*/
fun Resources.getBytesDisplayUnit(bytes: Long): String =
Formatter.formatBytes(this, bytes, Formatter.FLAG_IEC_UNITS).units
BytesFormatter(this).formatWithUnits(bytes, BytesFormatter.UseCase.DataUsage).units
}
}

View File

@@ -29,7 +29,6 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.telephony.TelephonyManager;
import android.util.DataUnit;
import org.junit.Before;
import org.junit.Test;
@@ -74,14 +73,6 @@ public final class DataUsageUtilsTest {
assertThat(hasMobileData).isFalse();
}
@Test
public void formatDataUsage_useIECUnit() {
final CharSequence formattedDataUsage = DataUsageUtils.formatDataUsage(
mContext, DataUnit.GIBIBYTES.toBytes(1));
assertThat(formattedDataUsage).isEqualTo("1.00 GB");
}
@Test
public void hasEthernet_shouldQueryEthernetSummaryForUser() throws Exception {
ShadowPackageManager pm = shadowOf(RuntimeEnvironment.application.getPackageManager());

View File

@@ -182,8 +182,8 @@ class DataUsageSummaryPreferenceControllerTest {
val limitInfo = argumentCaptor {
verify(preference).setLimitInfo(capture())
}.firstValue.toString()
assertThat(limitInfo).isEqualTo("1 B data warning")
verify(preference).setLabels("0 B", "1 B")
assertThat(limitInfo).isEqualTo("1 byte data warning")
verify(preference).setLabels("0 byte", "1 byte")
}
@Test
@@ -200,8 +200,8 @@ class DataUsageSummaryPreferenceControllerTest {
val limitInfo = argumentCaptor {
verify(preference).setLimitInfo(capture())
}.firstValue.toString()
assertThat(limitInfo).isEqualTo("1 B data limit")
verify(preference).setLabels("0 B", "1 B")
assertThat(limitInfo).isEqualTo("1 byte data limit")
verify(preference).setLabels("0 byte", "1 byte")
}
@Test
@@ -219,7 +219,7 @@ class DataUsageSummaryPreferenceControllerTest {
verify(preference).setLimitInfo(capture())
}.firstValue.toString()
assertThat(limitInfo).isEqualTo("512 MB data warning / 1.00 GB data limit")
verify(preference).setLabels("0 B", "1.00 GB")
verify(preference).setLabels("0 byte", "1.00 GB")
}
@Test
@@ -256,7 +256,7 @@ class DataUsageSummaryPreferenceControllerTest {
POSITIVE_DATA_PLAN_INFO.dataPlanSize,
)
verify(preference).setChartEnabled(true)
verify(preference).setLabels("0 B", "9 B")
verify(preference).setLabels("0 byte", "9 byte")
val progress = argumentCaptor {
verify(preference).setProgress(capture())
}.firstValue

View File

@@ -134,7 +134,7 @@ class AppDataUsagePreferenceTest {
setContent()
composeTestRule.waitUntilExists(hasText("123 B used since Oct 25, 2022"))
composeTestRule.waitUntilExists(hasText("123 byte used since Oct 25, 2022"))
}
@Test