summaryrefslogtreecommitdiffstats
path: root/luni
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-08-22 21:13:38 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-08-22 21:13:38 +0000
commit17cfd09990c2918b2caacac39cdec4d6786913b4 (patch)
treecad58f7d7fd66f3ffb45e4101ff662cc891d8abe /luni
parent48e59bcca274461141fe44919163d8c1ebca2b81 (diff)
parent2d6b952b2a8fbc3f2637bd6b8ede1f3e931b2e1a (diff)
downloadlibcore-17cfd09990c2918b2caacac39cdec4d6786913b4.zip
libcore-17cfd09990c2918b2caacac39cdec4d6786913b4.tar.gz
libcore-17cfd09990c2918b2caacac39cdec4d6786913b4.tar.bz2
am 2d6b952b: am 014531bf: Merge "Support narrow am/pm markers in LocaleData." into lmp-dev
* commit '2d6b952b2a8fbc3f2637bd6b8ede1f3e931b2e1a': Support narrow am/pm markers in LocaleData.
Diffstat (limited to 'luni')
-rw-r--r--luni/src/main/java/libcore/icu/LocaleData.java4
-rw-r--r--luni/src/main/native/libcore_icu_ICU.cpp40
-rw-r--r--luni/src/test/java/libcore/icu/LocaleDataTest.java2
3 files changed, 44 insertions, 2 deletions
diff --git a/luni/src/main/java/libcore/icu/LocaleData.java b/luni/src/main/java/libcore/icu/LocaleData.java
index 6f59257..9e07244 100644
--- a/luni/src/main/java/libcore/icu/LocaleData.java
+++ b/luni/src/main/java/libcore/icu/LocaleData.java
@@ -79,6 +79,10 @@ public final class LocaleData {
public String mediumDateFormat;
public String shortDateFormat;
+ // Used by TimePicker. Not currently used by UTS#35.
+ public String narrowAm; // "a".
+ public String narrowPm; // "p".
+
// shortDateFormat, but guaranteed to have 4-digit years.
// Used by android.text.format.DateFormat.getDateFormatStringForSetting.
public String shortDateFormat4;
diff --git a/luni/src/main/native/libcore_icu_ICU.cpp b/luni/src/main/native/libcore_icu_ICU.cpp
index df26b39..1528a2d 100644
--- a/luni/src/main/native/libcore_icu_ICU.cpp
+++ b/luni/src/main/native/libcore_icu_ICU.cpp
@@ -450,6 +450,29 @@ class LocaleNameIterator {
DISALLOW_COPY_AND_ASSIGN(LocaleNameIterator);
};
+static bool getAmPmMarkersNarrow(JNIEnv* env, jobject localeData, const char* locale_name) {
+ UErrorCode status = U_ZERO_ERROR;
+ ScopedResourceBundle root(ures_open(NULL, locale_name, &status));
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ ScopedResourceBundle calendar(ures_getByKey(root.get(), "calendar", NULL, &status));
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ ScopedResourceBundle gregorian(ures_getByKey(calendar.get(), "gregorian", NULL, &status));
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ ScopedResourceBundle amPmMarkersNarrow(ures_getByKey(gregorian.get(), "AmPmMarkersNarrow", NULL, &status));
+ if (U_FAILURE(status)) {
+ return false;
+ }
+ setStringField(env, localeData, "narrowAm", amPmMarkersNarrow.get(), 0);
+ setStringField(env, localeData, "narrowPm", amPmMarkersNarrow.get(), 1);
+ return true;
+}
+
static bool getDateTimePatterns(JNIEnv* env, jobject localeData, const char* locale_name) {
UErrorCode status = U_ZERO_ERROR;
ScopedResourceBundle root(ures_open(NULL, locale_name, &status));
@@ -493,14 +516,14 @@ static bool getYesterdayTodayAndTomorrow(JNIEnv* env, jobject localeData, const
UnicodeString today(ures_getUnicodeStringByKey(relative.get(), "0", &status));
UnicodeString tomorrow(ures_getUnicodeStringByKey(relative.get(), "1", &status));
if (U_FAILURE(status)) {
- ALOGE("Error getting yesterday/today/tomorrow: %s", u_errorName(status));
+ ALOGE("Error getting yesterday/today/tomorrow for %s: %s", locale_name, u_errorName(status));
return false;
}
// We title-case the strings so they have consistent capitalization (http://b/14493853).
UniquePtr<BreakIterator> brk(BreakIterator::createSentenceInstance(locale, status));
if (U_FAILURE(status)) {
- ALOGE("Error getting yesterday/today/tomorrow break iterator: %s", u_errorName(status));
+ ALOGE("Error getting yesterday/today/tomorrow break iterator for %s: %s", locale_name, u_errorName(status));
return false;
}
yesterday.toTitle(brk.get(), locale, U_TITLECASE_NO_LOWERCASE | U_TITLECASE_NO_BREAK_ADJUSTMENT);
@@ -554,6 +577,19 @@ static jboolean ICU_initLocaleDataNative(JNIEnv* env, jclass, jstring javaLangua
return JNI_FALSE;
}
+ // Get the narrow "AM" and "PM" strings.
+ bool foundAmPmMarkersNarrow = false;
+ for (LocaleNameIterator it(icuLocale.locale().getBaseName(), status); it.HasNext(); it.Up()) {
+ if (getAmPmMarkersNarrow(env, localeData, it.Get())) {
+ foundAmPmMarkersNarrow = true;
+ break;
+ }
+ }
+ if (!foundAmPmMarkersNarrow) {
+ ALOGE("Couldn't find ICU AmPmMarkersNarrow for %s", languageTag.c_str());
+ return JNI_FALSE;
+ }
+
status = U_ZERO_ERROR;
UniquePtr<Calendar> cal(Calendar::createInstance(icuLocale.locale(), status));
if (U_FAILURE(status)) {
diff --git a/luni/src/test/java/libcore/icu/LocaleDataTest.java b/luni/src/test/java/libcore/icu/LocaleDataTest.java
index b692f34..0a83c53 100644
--- a/luni/src/test/java/libcore/icu/LocaleDataTest.java
+++ b/luni/src/test/java/libcore/icu/LocaleDataTest.java
@@ -31,6 +31,8 @@ public class LocaleDataTest extends junit.framework.TestCase {
public void test_en_US() throws Exception {
LocaleData l = LocaleData.get(Locale.US);
assertEquals("AM", l.amPm[0]);
+ assertEquals("a", l.narrowAm);
+
assertEquals("BC", l.eras[0]);
assertEquals("January", l.longMonthNames[0]);