summaryrefslogtreecommitdiffstats
path: root/core/java/android/text
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2012-09-20 10:05:43 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-09-20 10:05:44 -0700
commit3d5be42eaa35914d9b37fe052fa7222dc1992dc0 (patch)
treeef34fbdf9980e6df972d2c5db29fd5211faf4a5f /core/java/android/text
parent5ca88a103c2841b64bfa01b4848aec4b8aa64687 (diff)
parent9ccf13cd6b7c840105fbcd6b2a8bd61d4e634653 (diff)
downloadframeworks_base-3d5be42eaa35914d9b37fe052fa7222dc1992dc0.zip
frameworks_base-3d5be42eaa35914d9b37fe052fa7222dc1992dc0.tar.gz
frameworks_base-3d5be42eaa35914d9b37fe052fa7222dc1992dc0.tar.bz2
Merge changes I87c2ab9e,I2dafcc34,I731c96c2 into jb-mr1-dev
* changes: Fix formatDateRange month names for Farsi. Use localized digits for Time formatting. Use proper digits in formatElapsedTime and format3339
Diffstat (limited to 'core/java/android/text')
-rw-r--r--core/java/android/text/format/DateUtils.java68
-rw-r--r--core/java/android/text/format/Time.java28
2 files changed, 60 insertions, 36 deletions
diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java
index 0babcc5..1060bd8 100644
--- a/core/java/android/text/format/DateUtils.java
+++ b/core/java/android/text/format/DateUtils.java
@@ -45,7 +45,6 @@ public class DateUtils
private static final String FAST_FORMAT_HMMSS = "%1$d:%2$02d:%3$02d";
private static final String FAST_FORMAT_MMSS = "%1$02d:%2$02d";
- private static final char TIME_PADDING = '0';
private static final char TIME_SEPARATOR = ':';
@@ -648,33 +647,36 @@ public class DateUtils
}
}
+ private static void append(StringBuilder sb, long value, boolean pad, char zeroDigit) {
+ if (value < 10) {
+ if (pad) {
+ sb.append(zeroDigit);
+ }
+ } else {
+ sb.append((char) (zeroDigit + (value / 10)));
+ }
+ sb.append((char) (zeroDigit + (value % 10)));
+ }
+
/**
- * Fast formatting of h:mm:ss
+ * Fast formatting of h:mm:ss.
*/
private static String formatElapsedTime(StringBuilder recycle, String format, long hours,
long minutes, long seconds) {
if (FAST_FORMAT_HMMSS.equals(format)) {
+ char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit;
+
StringBuilder sb = recycle;
if (sb == null) {
sb = new StringBuilder(8);
} else {
sb.setLength(0);
}
- sb.append(hours);
+ append(sb, hours, false, zeroDigit);
sb.append(TIME_SEPARATOR);
- if (minutes < 10) {
- sb.append(TIME_PADDING);
- } else {
- sb.append(toDigitChar(minutes / 10));
- }
- sb.append(toDigitChar(minutes % 10));
+ append(sb, minutes, true, zeroDigit);
sb.append(TIME_SEPARATOR);
- if (seconds < 10) {
- sb.append(TIME_PADDING);
- } else {
- sb.append(toDigitChar(seconds / 10));
- }
- sb.append(toDigitChar(seconds % 10));
+ append(sb, seconds, true, zeroDigit);
return sb.toString();
} else {
return String.format(format, hours, minutes, seconds);
@@ -682,40 +684,28 @@ public class DateUtils
}
/**
- * Fast formatting of m:ss
+ * Fast formatting of mm:ss.
*/
private static String formatElapsedTime(StringBuilder recycle, String format, long minutes,
long seconds) {
if (FAST_FORMAT_MMSS.equals(format)) {
+ char zeroDigit = LocaleData.get(Locale.getDefault()).zeroDigit;
+
StringBuilder sb = recycle;
if (sb == null) {
sb = new StringBuilder(8);
} else {
sb.setLength(0);
}
- if (minutes < 10) {
- sb.append(TIME_PADDING);
- } else {
- sb.append(toDigitChar(minutes / 10));
- }
- sb.append(toDigitChar(minutes % 10));
+ append(sb, minutes, false, zeroDigit);
sb.append(TIME_SEPARATOR);
- if (seconds < 10) {
- sb.append(TIME_PADDING);
- } else {
- sb.append(toDigitChar(seconds / 10));
- }
- sb.append(toDigitChar(seconds % 10));
+ append(sb, seconds, true, zeroDigit);
return sb.toString();
} else {
return String.format(format, minutes, seconds);
}
}
- private static char toDigitChar(long digit) {
- return (char) (digit + '0');
- }
-
/**
* Format a date / time such that if the then is on the same day as now, it shows
* just the time and if it's a different day, it shows just the date.
@@ -1387,6 +1377,14 @@ public class DateUtils
String endMonthDayString = isInstant ? null : endDate.format(MONTH_DAY_FORMAT);
String endYearString = isInstant ? null : endDate.format(YEAR_FORMAT);
+ String startStandaloneMonthString = startMonthString;
+ String endStandaloneMonthString = endMonthString;
+ // We need standalone months for these strings in Persian (fa): http://b/6811327
+ if (!numericDate && !abbrevMonth && Locale.getDefault().getLanguage().equals("fa")) {
+ startStandaloneMonthString = startDate.format("%-B");
+ endStandaloneMonthString = endDate.format("%-B");
+ }
+
if (startMonthNum != endMonthNum) {
// Same year, different month.
// Example: "October 28 - November 3"
@@ -1407,7 +1405,8 @@ public class DateUtils
startWeekDayString, startMonthString, startMonthDayString,
startYearString, startTimeString,
endWeekDayString, endMonthString, endMonthDayString,
- endYearString, endTimeString);
+ endYearString, endTimeString,
+ startStandaloneMonthString, endStandaloneMonthString);
}
if (startDay != endDay) {
@@ -1426,7 +1425,8 @@ public class DateUtils
startWeekDayString, startMonthString, startMonthDayString,
startYearString, startTimeString,
endWeekDayString, endMonthString, endMonthDayString,
- endYearString, endTimeString);
+ endYearString, endTimeString,
+ startStandaloneMonthString, endStandaloneMonthString);
}
// Same start and end day
diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java
index 45d5a70..5ef86b1 100644
--- a/core/java/android/text/format/Time.java
+++ b/core/java/android/text/format/Time.java
@@ -151,6 +151,9 @@ public class Time {
private static String sDateTimeFormat;
private static String sAm;
private static String sPm;
+ private static char sZeroDigit;
+
+ // Referenced by native code.
private static String sDateCommand = "%a %b %e %H:%M:%S %Z %Y";
/**
@@ -323,6 +326,7 @@ public class Time {
sAm = localeData.amPm[0];
sPm = localeData.amPm[1];
+ sZeroDigit = localeData.zeroDigit;
sShortMonths = localeData.shortMonthNames;
sLongMonths = localeData.longMonthNames;
@@ -338,12 +342,32 @@ public class Time {
sLocale = locale;
}
- return format1(format);
+ String result = format1(format);
+ if (sZeroDigit != '0') {
+ result = localizeDigits(result);
+ }
+ return result;
}
}
native private String format1(String format);
+ // TODO: unify this with java.util.Formatter's copy.
+ private String localizeDigits(String s) {
+ int length = s.length();
+ int offsetToLocalizedDigits = sZeroDigit - '0';
+ StringBuilder result = new StringBuilder(length);
+ for (int i = 0; i < length; ++i) {
+ char ch = s.charAt(i);
+ if (ch >= '0' && ch <= '9') {
+ ch += offsetToLocalizedDigits;
+ }
+ result.append(ch);
+ }
+ return result.toString();
+ }
+
+
/**
* Return the current time in YYYYMMDDTHHMMSS<tz> format
*/
@@ -673,7 +697,7 @@ public class Time {
int minutes = (offset % 3600) / 60;
int hours = offset / 3600;
- return String.format("%s%s%02d:%02d", base, sign, hours, minutes);
+ return String.format(Locale.US, "%s%s%02d:%02d", base, sign, hours, minutes);
}
}