Use existing localizations for formatting data usage [DO NOT MERGE]

This partially reverts I5be9bb7ce3b11709117da698d6c03610f4e5e40e in
order to use existing localizations and also avoid hard to localize
strings.

Also, we now bidi wrap the usage value, since it may break in the RTL
locales otherwise.

Bug: 28747101
Change-Id: Ibc03632cccfe671164cfbb670a423ada1177db65
This commit is contained in:
Roozbeh Pournader
2016-06-08 21:55:09 -07:00
parent b43b49c643
commit 3697dbeaa3
2 changed files with 42 additions and 7 deletions

View File

@@ -32,8 +32,12 @@ import android.support.v7.preference.PreferenceScreen;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.BidiFormatter;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.text.style.RelativeSizeSpan;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -183,15 +187,46 @@ public class DataUsageSummary extends DataUsageBase implements Indexable {
updateState();
}
private static void verySmallSpanExcept(SpannableString s, CharSequence exception) {
final float SIZE = 0.8f * 0.8f;
final int FLAGS = Spannable.SPAN_INCLUSIVE_INCLUSIVE;
final int exceptionStart = TextUtils.indexOf(s, exception);
if (exceptionStart == -1) {
s.setSpan(new RelativeSizeSpan(SIZE), 0, s.length(), FLAGS);
} else {
if (exceptionStart > 0) {
s.setSpan(new RelativeSizeSpan(SIZE), 0, exceptionStart, FLAGS);
}
final int exceptionEnd = exceptionStart + exception.length();
if (exceptionEnd < s.length()) {
s.setSpan(new RelativeSizeSpan(SIZE), exceptionEnd, s.length(), FLAGS);
}
}
}
private static CharSequence formatTitle(Context context, String template, long usageLevel) {
final SpannableString amountTemplate = new SpannableString(
context.getString(com.android.internal.R.string.fileSizeSuffix)
.replace("%1$s", "^1").replace("%2$s", "^2"));
verySmallSpanExcept(amountTemplate, "^1");
final Formatter.BytesResult usedResult = Formatter.formatBytes(context.getResources(),
usageLevel, Formatter.FLAG_SHORTER);
final CharSequence formattedUsage = TextUtils.expandTemplate(amountTemplate,
usedResult.value, usedResult.units);
final SpannableString fullTemplate = new SpannableString(template.replace("%1$s", "^1"));
verySmallSpanExcept(fullTemplate, "^1");
return TextUtils.expandTemplate(fullTemplate,
BidiFormatter.getInstance().unicodeWrap(formattedUsage));
}
private void updateState() {
DataUsageController.DataUsageInfo info = mDataUsageController.getDataUsageInfo(
mDefaultTemplate);
Context context = getContext();
if (mSummaryPreference != null) {
Formatter.BytesResult usedResult = Formatter.formatBytes(context.getResources(),
info.usageLevel, Formatter.FLAG_SHORTER);
mSummaryPreference.setTitle(TextUtils.expandTemplate(getText(mDataUsageTemplate),
usedResult.value, usedResult.units));
mSummaryPreference.setTitle(
formatTitle(context, getString(mDataUsageTemplate), info.usageLevel));
long limit = info.limitLevel;
if (limit <= 0) {
limit = info.warningLevel;