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;