summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcore/java/android/text/format/DateFormat.java135
1 files changed, 54 insertions, 81 deletions
diff --git a/core/java/android/text/format/DateFormat.java b/core/java/android/text/format/DateFormat.java
index b5a8acaf674f..34fe07bc1f01 100755
--- a/core/java/android/text/format/DateFormat.java
+++ b/core/java/android/text/format/DateFormat.java
@@ -177,43 +177,38 @@ public class DateFormat {
* @hide
*/
public static boolean is24HourFormat(Context context, int userHandle) {
- String value = Settings.System.getStringForUser(context.getContentResolver(),
+ final String value = Settings.System.getStringForUser(context.getContentResolver(),
Settings.System.TIME_12_24, userHandle);
+ if (value != null) {
+ return value.equals("24");
+ }
- if (value == null) {
- Locale locale = context.getResources().getConfiguration().locale;
+ final Locale locale = context.getResources().getConfiguration().locale;
- synchronized (sLocaleLock) {
- if (sIs24HourLocale != null && sIs24HourLocale.equals(locale)) {
- return sIs24Hour;
- }
+ synchronized (sLocaleLock) {
+ if (sIs24HourLocale != null && sIs24HourLocale.equals(locale)) {
+ return sIs24Hour;
}
+ }
- java.text.DateFormat natural =
- java.text.DateFormat.getTimeInstance(java.text.DateFormat.LONG, locale);
-
- if (natural instanceof SimpleDateFormat) {
- SimpleDateFormat sdf = (SimpleDateFormat) natural;
- String pattern = sdf.toPattern();
+ final java.text.DateFormat natural =
+ java.text.DateFormat.getTimeInstance(java.text.DateFormat.LONG, locale);
- if (pattern.indexOf('H') >= 0) {
- value = "24";
- } else {
- value = "12";
- }
- } else {
- value = "12";
- }
-
- synchronized (sLocaleLock) {
- sIs24HourLocale = locale;
- sIs24Hour = value.equals("24");
- }
+ final boolean is24Hour;
+ if (natural instanceof SimpleDateFormat) {
+ final SimpleDateFormat sdf = (SimpleDateFormat) natural;
+ final String pattern = sdf.toPattern();
+ is24Hour = hasDesignator(pattern, 'H');
+ } else {
+ is24Hour = false;
+ }
- return sIs24Hour;
+ synchronized (sLocaleLock) {
+ sIs24HourLocale = locale;
+ sIs24Hour = is24Hour;
}
- return value.equals("24");
+ return is24Hour;
}
/**
@@ -249,17 +244,18 @@ public class DateFormat {
/**
* Returns a {@link java.text.DateFormat} object that can format the time according
- * to the current locale and the user's 12-/24-hour clock preference.
+ * to the context's locale and the user's 12-/24-hour clock preference.
* @param context the application context
* @return the {@link java.text.DateFormat} object that properly formats the time.
*/
public static java.text.DateFormat getTimeFormat(Context context) {
- return new java.text.SimpleDateFormat(getTimeFormatString(context));
+ final Locale locale = context.getResources().getConfiguration().locale;
+ return new java.text.SimpleDateFormat(getTimeFormatString(context), locale);
}
/**
* Returns a String pattern that can be used to format the time according
- * to the current locale and the user's 12-/24-hour clock preference.
+ * to the context's locale and the user's 12-/24-hour clock preference.
* @param context the application context
* @hide
*/
@@ -269,45 +265,48 @@ public class DateFormat {
/**
* Returns a String pattern that can be used to format the time according
- * to the current locale and the user's 12-/24-hour clock preference.
+ * to the context's locale and the user's 12-/24-hour clock preference.
* @param context the application context
* @param userHandle the user handle of the user to query the format for
* @hide
*/
public static String getTimeFormatString(Context context, int userHandle) {
- LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale);
+ final LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale);
return is24HourFormat(context, userHandle) ? d.timeFormat_Hm : d.timeFormat_hm;
}
/**
* Returns a {@link java.text.DateFormat} object that can format the date
- * in short form according to the current locale.
+ * in short form according to the context's locale.
*
* @param context the application context
* @return the {@link java.text.DateFormat} object that properly formats the date.
*/
public static java.text.DateFormat getDateFormat(Context context) {
- return java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT);
+ final Locale locale = context.getResources().getConfiguration().locale;
+ return java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT, locale);
}
/**
* Returns a {@link java.text.DateFormat} object that can format the date
- * in long form (such as {@code Monday, January 3, 2000}) for the current locale.
+ * in long form (such as {@code Monday, January 3, 2000}) for the context's locale.
* @param context the application context
* @return the {@link java.text.DateFormat} object that formats the date in long form.
*/
public static java.text.DateFormat getLongDateFormat(Context context) {
- return java.text.DateFormat.getDateInstance(java.text.DateFormat.LONG);
+ final Locale locale = context.getResources().getConfiguration().locale;
+ return java.text.DateFormat.getDateInstance(java.text.DateFormat.LONG, locale);
}
/**
* Returns a {@link java.text.DateFormat} object that can format the date
- * in medium form (such as {@code Jan 3, 2000}) for the current locale.
+ * in medium form (such as {@code Jan 3, 2000}) for the context's locale.
* @param context the application context
* @return the {@link java.text.DateFormat} object that formats the date in long form.
*/
public static java.text.DateFormat getMediumDateFormat(Context context) {
- return java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM);
+ final Locale locale = context.getResources().getConfiguration().locale;
+ return java.text.DateFormat.getDateInstance(java.text.DateFormat.MEDIUM, locale);
}
/**
@@ -320,11 +319,13 @@ public class DateFormat {
* order returned here.
*/
public static char[] getDateFormatOrder(Context context) {
- return ICU.getDateFormatOrder(getDateFormatString());
+ return ICU.getDateFormatOrder(getDateFormatString(context));
}
- private static String getDateFormatString() {
- java.text.DateFormat df = java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT);
+ private static String getDateFormatString(Context context) {
+ final Locale locale = context.getResources().getConfiguration().locale;
+ java.text.DateFormat df = java.text.DateFormat.getDateInstance(
+ java.text.DateFormat.SHORT, locale);
if (df instanceof SimpleDateFormat) {
return ((SimpleDateFormat) df).toPattern();
}
@@ -375,6 +376,9 @@ public class DateFormat {
* Test if a format string contains the given designator. Always returns
* {@code false} if the input format is {@code null}.
*
+ * Note that this is intended for searching for designators, not arbitrary
+ * characters. So searching for a literal single quote would not work correctly.
+ *
* @hide
*/
public static boolean hasDesignator(CharSequence inFormat, char designator) {
@@ -382,50 +386,19 @@ public class DateFormat {
final int length = inFormat.length();
- int c;
- int count;
-
- for (int i = 0; i < length; i += count) {
- count = 1;
- c = inFormat.charAt(i);
-
- if (c == QUOTE) {
- count = skipQuotedText(inFormat, i, length);
- } else if (c == designator) {
- return true;
- }
- }
-
- return false;
- }
-
- private static int skipQuotedText(CharSequence s, int i, int len) {
- if (i + 1 < len && s.charAt(i + 1) == QUOTE) {
- return 2;
- }
-
- int count = 1;
- // skip leading quote
- i++;
-
- while (i < len) {
- char c = s.charAt(i);
-
+ boolean insideQuote = false;
+ for (int i = 0; i < length; i++) {
+ final char c = inFormat.charAt(i);
if (c == QUOTE) {
- count++;
- // QUOTEQUOTE -> QUOTE
- if (i + 1 < len && s.charAt(i + 1) == QUOTE) {
- i++;
- } else {
- break;
+ insideQuote = !insideQuote;
+ } else if (!insideQuote) {
+ if (c == designator) {
+ return true;
}
- } else {
- i++;
- count++;
}
}
- return count;
+ return false;
}
/**