diff options
| author | 2024-02-12 15:36:27 -0800 | |
|---|---|---|
| committer | 2024-02-12 15:45:05 -0800 | |
| commit | a2d5162eac642ca542751e53266155f450a24f1e (patch) | |
| tree | 71451b19995362e51b0c9508ee8a9af2be14486e | |
| parent | a60c144b83026e6a95f94aa712ba089eec91d456 (diff) | |
[LayoutlibLoader] Allow to skip ICU / Keyboard initialization
ICU and keyboard configuration parameters are passed from the Java side
using java properties.
We now skip these initializations if the properties are "**n/a**",
and do this on Ravenwood, where ICU and keyboard couldn't be initialized
as of now.
We use a magic value "**n/a**" rather than "", in case "" is already
special cased somehow somewhere.
Bug: 318393625
Test: tree hugger
Test: Tested on the ravenwood prototype branch
Change-Id: Ib3e8925222daf4f092ecf391fe70999a91edd6c0
| -rw-r--r-- | core/jni/LayoutlibLoader.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/core/jni/LayoutlibLoader.cpp b/core/jni/LayoutlibLoader.cpp index 200ddefc3bbc..01e9f437a79f 100644 --- a/core/jni/LayoutlibLoader.cpp +++ b/core/jni/LayoutlibLoader.cpp @@ -416,11 +416,17 @@ JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) { env->NewStringUTF("icu.data.path"), env->NewStringUTF("")); const char* path = env->GetStringUTFChars(stringPath, 0); - bool icuInitialized = init_icu(path); - env->ReleaseStringUTFChars(stringPath, path); - if (!icuInitialized) { - return JNI_ERR; + + if (strcmp(path, "**n/a**") != 0) { + bool icuInitialized = init_icu(path); + if (!icuInitialized) { + fprintf(stderr, "Failed to initialize ICU\n"); + return JNI_ERR; + } + } else { + fprintf(stderr, "Skip initializing ICU\n"); } + env->ReleaseStringUTFChars(stringPath, path); jstring useJniProperty = (jstring)env->CallStaticObjectMethod(system, getPropertyMethod, @@ -449,12 +455,18 @@ JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) { // Use English locale for number format to ensure correct parsing of floats when using strtof setlocale(LC_NUMERIC, "en_US.UTF-8"); - auto keyboardPathsString = + auto keyboardPathsJString = (jstring)env->CallStaticObjectMethod(system, getPropertyMethod, env->NewStringUTF("keyboard_paths"), env->NewStringUTF("")); - vector<string> keyboardPaths = parseCsv(env, keyboardPathsString); - init_keyboard(env, keyboardPaths); + const char* keyboardPathsString = env->GetStringUTFChars(keyboardPathsJString, 0); + if (strcmp(keyboardPathsString, "**n/a**") != 0) { + vector<string> keyboardPaths = parseCsv(env, keyboardPathsJString); + init_keyboard(env, keyboardPaths); + } else { + fprintf(stderr, "Skip initializing keyboard\n"); + } + env->ReleaseStringUTFChars(keyboardPathsJString, keyboardPathsString); return JNI_VERSION_1_6; } |