summaryrefslogtreecommitdiffstats
path: root/luni
diff options
context:
space:
mode:
authorNeil Fuller <nfuller@google.com>2014-03-10 11:31:32 +0000
committerNeil Fuller <nfuller@google.com>2014-03-11 13:21:48 +0000
commitd627bd4525e41b0503f94c2887c3e01618c73105 (patch)
treeb6a32112fc819c4b27f0b228e62932b85283e0d1 /luni
parent4189a6e183e8c38992df6de29321733fad06e50a (diff)
downloadlibcore-d627bd4525e41b0503f94c2887c3e01618c73105.zip
libcore-d627bd4525e41b0503f94c2887c3e01618c73105.tar.gz
libcore-d627bd4525e41b0503f94c2887c3e01618c73105.tar.bz2
Add Currency.getNumericCode()
getNumericCode() was added in Java 1.7. It returns the ISO 4217 numeric code for a currency. Change-Id: I8404703e749b3324bbcb89ecf6d8d64b95a030a3
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.