LadybirdServiceBaseJNI.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (c) 2023, Andrew Kaster <akaster@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "LadybirdServiceBase.h"
  7. #include <AK/Atomic.h>
  8. #include <AK/Format.h>
  9. #include <LibCore/ResourceImplementationFile.h>
  10. #include <UI/Utilities.h>
  11. #include <jni.h>
  12. JavaVM* global_vm;
  13. extern "C" JNIEXPORT void JNICALL
  14. Java_org_serenityos_ladybird_LadybirdServiceBase_nativeThreadLoop(JNIEnv*, jobject /* thiz */, jint);
  15. extern "C" JNIEXPORT void JNICALL
  16. Java_org_serenityos_ladybird_LadybirdServiceBase_nativeThreadLoop(JNIEnv*, jobject /* thiz */, jint ipc_socket)
  17. {
  18. auto ret = service_main(ipc_socket);
  19. if (ret.is_error()) {
  20. warnln("Runtime Error: {}", ret.release_error());
  21. } else {
  22. outln("Thread exited with code {}", ret.release_value());
  23. }
  24. }
  25. extern "C" JNIEXPORT void JNICALL
  26. Java_org_serenityos_ladybird_LadybirdServiceBase_initNativeCode(JNIEnv*, jobject /* thiz */, jstring, jstring);
  27. extern "C" JNIEXPORT void JNICALL
  28. Java_org_serenityos_ladybird_LadybirdServiceBase_initNativeCode(JNIEnv* env, jobject /* thiz */, jstring resource_dir, jstring tag_name)
  29. {
  30. static Atomic<bool> s_initialized_flag { false };
  31. if (s_initialized_flag.exchange(true) == true) {
  32. // Skip initializing if someone else already started the process at some point in the past
  33. return;
  34. }
  35. env->GetJavaVM(&global_vm);
  36. char const* raw_resource_dir = env->GetStringUTFChars(resource_dir, nullptr);
  37. s_ladybird_resource_root = raw_resource_dir;
  38. env->ReleaseStringUTFChars(resource_dir, raw_resource_dir);
  39. // FIXME: Use a custom Android version that uses AssetManager to load files.
  40. Core::ResourceImplementation::install(make<Core::ResourceImplementationFile>(MUST(String::formatted("{}/res", s_ladybird_resource_root))));
  41. char const* raw_tag_name = env->GetStringUTFChars(tag_name, nullptr);
  42. AK::set_log_tag_name(raw_tag_name);
  43. env->ReleaseStringUTFChars(tag_name, raw_tag_name);
  44. }