summaryrefslogtreecommitdiffstats
path: root/luni
diff options
context:
space:
mode:
authorNeil Fuller <nfuller@google.com>2014-03-11 13:32:49 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-03-11 13:32:50 +0000
commit5a692fa8cdeec7eee42482f78187bb76be5a87db (patch)
tree86e6fa11b696461631afb791d0419cc596716fe7 /luni
parent43ec94e3875f31cd1cddb3559afca1bea50ed62a (diff)
parentd627bd4525e41b0503f94c2887c3e01618c73105 (diff)
downloadlibcore-5a692fa8cdeec7eee42482f78187bb76be5a87db.zip
libcore-5a692fa8cdeec7eee42482f78187bb76be5a87db.tar.gz
libcore-5a692fa8cdeec7eee42482f78187bb76be5a87db.tar.bz2
Merge "Add Currency.getNumericCode()"
Diffstat (limited to 'luni')
-rw-r--r--luni/src/main/java/java/util/Currency.java11
-rw-r--r--luni/src/main/java/libcore/icu/ICU.java1
-rw-r--r--luni/src/main/native/libcore_icu_ICU.cpp10
-rw-r--r--luni/src/test/java/libcore/java/util/CurrencyTest.java7
4 files changed, 29 insertions, 0 deletions
diff --git a/luni/src/main/java/java/util/Currency.java b/luni/src/main/java/java/util/Currency.java
index b5b04a0..e8ecdde 100644
--- a/luni/src/main/java/java/util/Currency.java
+++ b/luni/src/main/java/java/util/Currency.java
@@ -127,6 +127,17 @@ public final class Currency implements Serializable {
}
/**
+ * Returns the ISO 4217 numeric code for this currency. If there is no standard numeric code a
+ * zero is returned.
+ *
+ * @since 1.7
+ * @hide Until ready for an API update
+ */
+ public int getNumericCode() {
+ return ICU.getCurrencyNumericCode(currencyCode);
+ }
+
+ /**
* Equivalent to {@code getSymbol(Locale.getDefault())}.
* See "<a href="../util/Locale.html#default_locale">Be wary of the default locale</a>".
*/
diff --git a/luni/src/main/java/libcore/icu/ICU.java b/luni/src/main/java/libcore/icu/ICU.java
index 2c94882..078c83a 100644
--- a/luni/src/main/java/libcore/icu/ICU.java
+++ b/luni/src/main/java/libcore/icu/ICU.java
@@ -453,6 +453,7 @@ public final class ICU {
public static native String getCurrencyCode(String countryCode);
public static native String getCurrencyDisplayName(String locale, String currencyCode);
public static native int getCurrencyFractionDigits(String currencyCode);
+ public static native int getCurrencyNumericCode(String currencyCode);
public static native String getCurrencySymbol(String locale, String currencyCode);
public static native String getDisplayCountryNative(String countryCode, String locale);
diff --git a/luni/src/main/native/libcore_icu_ICU.cpp b/luni/src/main/native/libcore_icu_ICU.cpp
index 8f6e321..c869542 100644
--- a/luni/src/main/native/libcore_icu_ICU.cpp
+++ b/luni/src/main/native/libcore_icu_ICU.cpp
@@ -203,6 +203,15 @@ static jint ICU_getCurrencyFractionDigits(JNIEnv* env, jclass, jstring javaCurre
return ucurr_getDefaultFractionDigits(icuCurrencyCode.getTerminatedBuffer(), &status);
}
+static jint ICU_getCurrencyNumericCode(JNIEnv* env, jclass, jstring javaCurrencyCode) {
+ ScopedJavaUnicodeString currencyCode(env, javaCurrencyCode);
+ if (!currencyCode.valid()) {
+ return 0;
+ }
+ UnicodeString icuCurrencyCode(currencyCode.unicodeString());
+ return ucurr_getNumericCode(icuCurrencyCode.getTerminatedBuffer());
+}
+
// TODO: rewrite this with int32_t ucurr_forLocale(const char* locale, UChar* buff, int32_t buffCapacity, UErrorCode* ec)...
static jstring ICU_getCurrencyCode(JNIEnv* env, jclass, jstring javaCountryCode) {
UErrorCode status = U_ZERO_ERROR;
@@ -764,6 +773,7 @@ static JNINativeMethod gMethods[] = {
NATIVE_METHOD(ICU, getCurrencyCode, "(Ljava/lang/String;)Ljava/lang/String;"),
NATIVE_METHOD(ICU, getCurrencyDisplayName, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"),
NATIVE_METHOD(ICU, getCurrencyFractionDigits, "(Ljava/lang/String;)I"),
+ NATIVE_METHOD(ICU, getCurrencyNumericCode, "(Ljava/lang/String;)I"),
NATIVE_METHOD(ICU, getCurrencySymbol, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"),
NATIVE_METHOD(ICU, getDisplayCountryNative, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"),
NATIVE_METHOD(ICU, getDisplayLanguageNative, "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"),
diff --git a/luni/src/test/java/libcore/java/util/CurrencyTest.java b/luni/src/test/java/libcore/java/util/CurrencyTest.java
index 61a22fd..fb7fbf6 100644
--- a/luni/src/test/java/libcore/java/util/CurrencyTest.java
+++ b/luni/src/test/java/libcore/java/util/CurrencyTest.java
@@ -67,6 +67,13 @@ public class CurrencyTest extends junit.framework.TestCase {
assertEquals(-1, Currency.getInstance("XXX").getDefaultFractionDigits());
}
+ public void test_getNumericCode() throws Exception {
+ assertEquals(840, Currency.getInstance("USD").getNumericCode());
+ assertEquals(826, Currency.getInstance("GBP").getNumericCode());
+ assertEquals(999, Currency.getInstance("XXX").getNumericCode());
+ assertEquals(0, Currency.getInstance("XFU").getNumericCode());
+ }
+
// http://code.google.com/p/android/issues/detail?id=38622
public void test_getSymbol_38622() throws Exception {
// The CLDR data had the Portuguese symbol for "EUR" in pt, not in pt_PT.