The open source OpenXR runtime
at main 83 lines 1.8 kB view raw
1// Copyright 2020, Collabora, Ltd. 2// SPDX-License-Identifier: BSL-1.0 3/*! 4 * @file 5 * @brief Functions for Android-specific global state. 6 * @author Rylie Pavlik <rylie.pavlik@collabora.com> 7 * @ingroup aux_android 8 */ 9 10#include "android_globals.h" 11 12#include <stddef.h> 13#include <wrap/android.app.h> 14 15/*! 16 * @todo Do we need locking here? 17 */ 18static struct 19{ 20 struct _JavaVM *vm = nullptr; 21 jni::Object activity = {}; 22 jni::Object context = {}; 23 struct _ANativeWindow *window = nullptr; 24} android_globals; 25 26void 27android_globals_store_vm_and_activity(struct _JavaVM *vm, void *activity) 28{ 29 jni::init(vm); 30 android_globals.vm = vm; 31 android_globals.activity = jni::Object((jobject)activity); 32} 33 34void 35android_globals_store_vm_and_context(struct _JavaVM *vm, void *context) 36{ 37 jni::init(vm); 38 android_globals.vm = vm; 39 android_globals.context = jni::Object((jobject)context); 40 if (android_globals_is_instance_of_activity(vm, context)) { 41 android_globals.activity = jni::Object((jobject)context); 42 } 43} 44 45bool 46android_globals_is_instance_of_activity(struct _JavaVM *vm, void *obj) 47{ 48 jni::init(vm); 49 50 auto activity_cls = jni::Class(wrap::android::app::Activity::getTypeName()); 51 return JNI_TRUE == jni::env()->IsInstanceOf((jobject)obj, activity_cls.getHandle()); 52} 53 54void 55android_globals_store_window(struct _ANativeWindow *window) 56{ 57 android_globals.window = window; 58} 59 60struct _ANativeWindow * 61android_globals_get_window() 62{ 63 return android_globals.window; 64} 65 66struct _JavaVM * 67android_globals_get_vm() 68{ 69 return android_globals.vm; 70} 71 72void * 73android_globals_get_activity() 74{ 75 return android_globals.activity.getHandle(); 76} 77 78void * 79android_globals_get_context() 80{ 81 return android_globals.context.isNull() ? android_globals.activity.getHandle() 82 : android_globals.context.getHandle(); 83}