extern "C" jobjectArray Java_java_io_File_listImpl(JNIEnv* env, jclass, jstring javaPath) { // Read the directory entries into an intermediate form. DirEntries entries; if (!readDirectory(env, javaPath, entries)) { return NULL; } // Translate the intermediate form into a Java String[]. return toStringArray(env, entries); }
static jobject NativeConverter_charsetForName(JNIEnv* env, jclass, jstring charsetName) { ScopedUtfChars charsetNameChars(env, charsetName); if (charsetNameChars.c_str() == NULL) { return NULL; } // Get ICU's canonical name for this charset. const char* icuCanonicalName = getICUCanonicalName(charsetNameChars.c_str()); if (icuCanonicalName == NULL) { return NULL; } // Get Java's canonical name for this charset. jstring javaCanonicalName = getJavaCanonicalName(env, icuCanonicalName); if (env->ExceptionCheck()) { return NULL; } // Check that this charset is supported. { // ICU doesn't offer any "isSupported", so we just open and immediately close. UErrorCode error = U_ZERO_ERROR; icu::LocalUConverterPointer cnv(ucnv_open(icuCanonicalName, &error)); if (!U_SUCCESS(error)) { return NULL; } } // Get the aliases for this charset. std::vector<std::string> aliases; if (!collectStandardNames(env, icuCanonicalName, "IANA", aliases)) { return NULL; } if (!collectStandardNames(env, icuCanonicalName, "MIME", aliases)) { return NULL; } if (!collectStandardNames(env, icuCanonicalName, "JAVA", aliases)) { return NULL; } if (!collectStandardNames(env, icuCanonicalName, "WINDOWS", aliases)) { return NULL; } jobjectArray javaAliases = toStringArray(env, aliases); if (env->ExceptionCheck()) { return NULL; } // Construct the CharsetICU object. static jmethodID charsetConstructor = env->GetMethodID(JniConstants::charsetICUClass, "<init>", "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V"); if (env->ExceptionCheck()) { return NULL; } return env->NewObject(JniConstants::charsetICUClass, charsetConstructor, javaCanonicalName, env->NewStringUTF(icuCanonicalName), javaAliases); }
static jobjectArray System_specialProperties(JNIEnv* env, jclass) { std::vector<std::string> properties; char path[PATH_MAX]; properties.push_back(std::string("user.dir=") + getcwd(path, sizeof(path))); properties.push_back("android.zlib.version=" ZLIB_VERSION); properties.push_back("android.openssl.version=" OPENSSL_VERSION_TEXT); return toStringArray(env, properties); }
static jobjectArray getISOLanguagesNative(JNIEnv* env, jclass clazz) { return toStringArray(env, Locale::getISOLanguages()); }
static jobjectArray ICU_getAvailableNumberFormatLocalesNative(JNIEnv* env, jclass) { return toStringArray(env, unum_countAvailable, unum_getAvailable); }
static jobjectArray ICU_getAvailableDateFormatLocalesNative(JNIEnv* env, jclass) { return toStringArray(env, udat_countAvailable, udat_getAvailable); }
static jobjectArray ICU_getAvailableCollatorLocalesNative(JNIEnv* env, jclass) { return toStringArray(env, ucol_countAvailable, ucol_getAvailable); }
static jobjectArray ICU_getAvailableBreakIteratorLocalesNative(JNIEnv* env, jclass) { return toStringArray(env, ubrk_countAvailable, ubrk_getAvailable); }
static jobjectArray ICU_getAvailableLocalesNative(JNIEnv* env, jclass) { return toStringArray(env, uloc_countAvailable, uloc_getAvailable); }
static jobjectArray ICU_getISOCountriesNative(JNIEnv* env, jclass) { return toStringArray(env, Locale::getISOCountries()); }
extern "C" jobjectArray Java_libcore_icu_ICU_getAvailableNumberFormatLocalesNative(JNIEnv* env, jclass) { return toStringArray(env, unum_countAvailable, unum_getAvailable); }
extern "C" jobjectArray Java_libcore_icu_ICU_getAvailableCollatorLocalesNative(JNIEnv* env, jclass) { return toStringArray(env, ucol_countAvailable, ucol_getAvailable); }
extern "C" jobjectArray Java_libcore_icu_ICU_getISOLanguagesNative(JNIEnv* env, jclass) { return toStringArray(env, Locale::getISOLanguages()); }
jobjectArray toStringArray(JNIEnv* env, const char* const* strings) { ArrayCounter counter(strings); ArrayGetter getter(strings); return toStringArray(env, &counter, &getter); }