summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Makoto Onuki <omakoto@google.com> 2024-02-12 15:36:27 -0800
committer Makoto Onuki <omakoto@google.com> 2024-02-12 15:45:05 -0800
commita2d5162eac642ca542751e53266155f450a24f1e (patch)
tree71451b19995362e51b0c9508ee8a9af2be14486e
parenta60c144b83026e6a95f94aa712ba089eec91d456 (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.cpp26
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;
}