diff options
Diffstat (limited to 'android_icu4j/libcore_bridge')
3 files changed, 114 insertions, 0 deletions
diff --git a/android_icu4j/libcore_bridge/src/java/com/android/icu/util/Icu4cMetadata.java b/android_icu4j/libcore_bridge/src/java/com/android/icu/util/Icu4cMetadata.java new file mode 100644 index 000000000..0a7d45a4b --- /dev/null +++ b/android_icu4j/libcore_bridge/src/java/com/android/icu/util/Icu4cMetadata.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.icu.util; + +public class Icu4cMetadata { + + /** Returns the TZData version as reported by ICU4C. */ + @libcore.api.IntraCoreApi + public static native String getTzdbVersion(); + + /** + * Returns the version of the CLDR data in use, such as "22.1.1". + */ + @libcore.api.IntraCoreApi + public static native String getCldrVersion(); + + /** + * Returns the icu4c version in use, such as "50.1.1". + */ + @libcore.api.IntraCoreApi + public static native String getIcuVersion(); + + /** + * Returns the Unicode version our ICU supports, such as "6.2". + */ + @libcore.api.IntraCoreApi + public static native String getUnicodeVersion(); + +} diff --git a/android_icu4j/libcore_bridge/src/native/Register.cpp b/android_icu4j/libcore_bridge/src/native/Register.cpp index 0df2e7e65..012d6efce 100644 --- a/android_icu4j/libcore_bridge/src/native/Register.cpp +++ b/android_icu4j/libcore_bridge/src/native/Register.cpp @@ -34,6 +34,7 @@ jint JNI_OnLoad(JavaVM* vm, void*) { ScopedLocalFrame localFrame(env); #define REGISTER(FN) extern void FN(JNIEnv*); FN(env) + REGISTER(register_com_android_icu_util_Icu4cMetadata); REGISTER(register_com_android_icu_util_regex_NativePattern); REGISTER(register_com_android_icu_util_regex_NativeMatcher); REGISTER(register_com_android_icu_util_charset_NativeConverter); diff --git a/android_icu4j/libcore_bridge/src/native/com_android_icu_util_ICU4CMetadata.cpp b/android_icu4j/libcore_bridge/src/native/com_android_icu_util_ICU4CMetadata.cpp new file mode 100644 index 000000000..23753175a --- /dev/null +++ b/android_icu4j/libcore_bridge/src/native/com_android_icu_util_ICU4CMetadata.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <nativehelper/JNIHelp.h> +#include <nativehelper/jni_macros.h> + +#include "IcuUtilities.h" + +#include "unicode/uchar.h" +#include "unicode/ulocdata.h" +#include "unicode/uversion.h" +#include "unicode/timezone.h" + +static jstring versionString(JNIEnv* env, const UVersionInfo& version) { + char versionString[U_MAX_VERSION_STRING_LENGTH]; + u_versionToString(const_cast<UVersionInfo&>(version), &versionString[0]); + return env->NewStringUTF(versionString); +} + +static jstring Icu4cMetadata_getCldrVersion(JNIEnv* env, jclass) { + UErrorCode status = U_ZERO_ERROR; + UVersionInfo cldrVersion; + ulocdata_getCLDRVersion(cldrVersion, &status); + return versionString(env, cldrVersion); +} + +static jstring Icu4cMetadata_getIcuVersion(JNIEnv* env, jclass) { + UVersionInfo icuVersion; + u_getVersion(icuVersion); + return versionString(env, icuVersion); +} + +static jstring Icu4cMetadata_getUnicodeVersion(JNIEnv* env, jclass) { + UVersionInfo unicodeVersion; + u_getUnicodeVersion(unicodeVersion); + return versionString(env, unicodeVersion); +} + +static jstring Icu4cMetadata_getTzdbVersion(JNIEnv* env, jclass) { + UErrorCode status = U_ZERO_ERROR; + const char* version = icu::TimeZone::getTZDataVersion(status); + if (maybeThrowIcuException(env, "icu::TimeZone::getTZDataVersion", status)) { + return NULL; + } + return env->NewStringUTF(version); +} + +static JNINativeMethod gMethods[] = { + NATIVE_METHOD(Icu4cMetadata, getCldrVersion, "()Ljava/lang/String;"), + NATIVE_METHOD(Icu4cMetadata, getIcuVersion, "()Ljava/lang/String;"), + NATIVE_METHOD(Icu4cMetadata, getUnicodeVersion, "()Ljava/lang/String;"), + NATIVE_METHOD(Icu4cMetadata, getTzdbVersion, "()Ljava/lang/String;"), +}; + +void register_com_android_icu_util_Icu4cMetadata(JNIEnv* env) { + jniRegisterNativeMethods(env, "com/android/icu/util/Icu4cMetadata", gMethods, NELEM(gMethods)); +} |