summaryrefslogtreecommitdiffstats
path: root/core/java/android/text
diff options
context:
space:
mode:
authorRoozbeh Pournader <roozbeh@google.com>2015-07-16 15:28:58 -0700
committerRoozbeh Pournader <roozbeh@google.com>2015-07-17 12:02:22 -0700
commit8d2e0f7898ef7ab9b8775d88a2f8af2eea365c51 (patch)
treef8644fa293aa236280026e0986d32e2413d0639a /core/java/android/text
parent4e9c63cbe1712f750d5eaaa044e957c7f7696bf8 (diff)
downloadframeworks_base-8d2e0f7898ef7ab9b8775d88a2f8af2eea365c51.zip
frameworks_base-8d2e0f7898ef7ab9b8775d88a2f8af2eea365c51.tar.gz
frameworks_base-8d2e0f7898ef7ab9b8775d88a2f8af2eea365c51.tar.bz2
Bidi-wrap the results of format[Short]FileSize().
Previously, users of the results of formatFileSize() and formatShortFileSize() needed to unicodeWrap the results themselves using BidiFormatter, which resulted in several bugs and inconsistencies across the platform when they didn't, especially in Hebrew and Urdu locales: Hebrew and Urdu use Latin abbreviations like 'MB' for file sizes which cause undesired reorderings (or incorrect detection of the string direction when the formatted file size starts the string). With this patch, the results are now bidi-wrapped before being returned if the locale of the context passed in to the formatter is a right-to-left locale. Bug: 22237132 Bug: 22273176 Change-Id: If076636d15828fc810feef6f0fa8806ef52aed5d
Diffstat (limited to 'core/java/android/text')
-rw-r--r--core/java/android/text/format/Formatter.java31
1 files changed, 26 insertions, 5 deletions
diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java
index 82689b9..b5068b2 100644
--- a/core/java/android/text/format/Formatter.java
+++ b/core/java/android/text/format/Formatter.java
@@ -16,12 +16,18 @@
package android.text.format;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Resources;
+import android.text.BidiFormatter;
+import android.text.TextUtils;
+import android.view.View;
import android.net.NetworkUtils;
import android.net.TrafficStats;
+import java.util.Locale;
+
/**
* Utility class to aid in formatting common values that are not covered
* by the {@link java.util.Formatter} class in {@link java.util}
@@ -46,8 +52,23 @@ public final class Formatter {
}
}
+ /* Wraps the source string in bidi formatting characters in RTL locales */
+ private static String bidiWrap(@NonNull Context context, String source) {
+ final Locale locale = context.getResources().getConfiguration().locale;
+ if (TextUtils.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL) {
+ return BidiFormatter.getInstance(true /* RTL*/).unicodeWrap(source);
+ } else {
+ return source;
+ }
+ }
+
/**
- * Formats a content size to be in the form of bytes, kilobytes, megabytes, etc
+ * Formats a content size to be in the form of bytes, kilobytes, megabytes, etc.
+ *
+ * If the context has a right-to-left locale, the returned string is wrapped in bidi formatting
+ * characters to make sure it's displayed correctly if inserted inside a right-to-left string.
+ * (This is useful in cases where the unit strings, like "MB", are left-to-right, but the
+ * locale is right-to-left.)
*
* @param context Context to use to load the localized units
* @param sizeBytes size value to be formatted, in bytes
@@ -58,8 +79,8 @@ public final class Formatter {
return "";
}
final BytesResult res = formatBytes(context.getResources(), sizeBytes, 0);
- return context.getString(com.android.internal.R.string.fileSizeSuffix,
- res.value, res.units);
+ return bidiWrap(context, context.getString(com.android.internal.R.string.fileSizeSuffix,
+ res.value, res.units));
}
/**
@@ -71,8 +92,8 @@ public final class Formatter {
return "";
}
final BytesResult res = formatBytes(context.getResources(), sizeBytes, FLAG_SHORTER);
- return context.getString(com.android.internal.R.string.fileSizeSuffix,
- res.value, res.units);
+ return bidiWrap(context, context.getString(com.android.internal.R.string.fileSizeSuffix,
+ res.value, res.units));
}
/** {@hide} */