From 3697dbeaa39cef617ac200c4bbc69e61546988d0 Mon Sep 17 00:00:00 2001 From: Roozbeh Pournader Date: Wed, 8 Jun 2016 21:55:09 -0700 Subject: [PATCH] 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 --- res/values/strings.xml | 6 +-- .../settings/datausage/DataUsageSummary.java | 43 +++++++++++++++++-- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 41c2dfda887..ad4c670c11b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7238,13 +7238,13 @@ Ethernet - ^1 ^2 cellular data + %1$s cellular data - ^1 ^2 Wi-Fi data + %1$s Wi-Fi data - ^1 ^2 ethernet data + %1$s ethernet data %1$s Data warning diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java index 51804c132de..a1d19c022c6 100644 --- a/src/com/android/settings/datausage/DataUsageSummary.java +++ b/src/com/android/settings/datausage/DataUsageSummary.java @@ -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;