From 3ff95ef12a954c622be57b556a74e9d6ae84ae40 Mon Sep 17 00:00:00 2001 From: Fredia Huya-Kouadio Date: Sun, 8 Sep 2024 13:34:23 -0700 Subject: [PATCH] Only request OpenXR permissions for a XR game running off the Android editor when the `xr/openxr/extensions/automatically_request_runtime_permissions` project setting is enabled --- .../meta/java/org/godotengine/editor/GodotEditor.kt | 6 ++---- .../meta/java/org/godotengine/editor/GodotXRGame.kt | 13 ++++++++++--- platform/android/java_godot_lib_jni.cpp | 11 +++++++---- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/platform/android/java/editor/src/meta/java/org/godotengine/editor/GodotEditor.kt b/platform/android/java/editor/src/meta/java/org/godotengine/editor/GodotEditor.kt index 9f0440e87d9..328ff9a3bdf 100644 --- a/platform/android/java/editor/src/meta/java/org/godotengine/editor/GodotEditor.kt +++ b/platform/android/java/editor/src/meta/java/org/godotengine/editor/GodotEditor.kt @@ -45,15 +45,13 @@ open class GodotEditor : BaseGodotEditor() { internal val XR_RUN_GAME_INFO = EditorWindowInfo(GodotXRGame::class.java, 1667, ":GodotXRGame") - internal const val USE_ANCHOR_API_PERMISSION = "com.oculus.permission.USE_ANCHOR_API" internal const val USE_SCENE_PERMISSION = "com.oculus.permission.USE_SCENE" } override fun getExcludedPermissions(): MutableSet { val excludedPermissions = super.getExcludedPermissions() - // The USE_ANCHOR_API and USE_SCENE permissions are requested when the "xr/openxr/enabled" - // project setting is enabled. - excludedPermissions.add(USE_ANCHOR_API_PERMISSION) + // The USE_SCENE permission is requested when the "xr/openxr/enabled" project setting + // is enabled. excludedPermissions.add(USE_SCENE_PERMISSION) return excludedPermissions } diff --git a/platform/android/java/editor/src/meta/java/org/godotengine/editor/GodotXRGame.kt b/platform/android/java/editor/src/meta/java/org/godotengine/editor/GodotXRGame.kt index d71fbb53f21..5db2879aad3 100644 --- a/platform/android/java/editor/src/meta/java/org/godotengine/editor/GodotXRGame.kt +++ b/platform/android/java/editor/src/meta/java/org/godotengine/editor/GodotXRGame.kt @@ -31,7 +31,6 @@ package org.godotengine.editor import org.godotengine.godot.GodotLib -import org.godotengine.godot.utils.PermissionsUtil import org.godotengine.godot.xr.XRMode /** @@ -62,8 +61,16 @@ open class GodotXRGame: GodotGame() { val openxrEnabled = GodotLib.getGlobal("xr/openxr/enabled").toBoolean() if (openxrEnabled) { - permissionsToEnable.add(USE_ANCHOR_API_PERMISSION) - permissionsToEnable.add(USE_SCENE_PERMISSION) + // We only request permissions when the `automatically_request_runtime_permissions` + // project setting is enabled. + // If the project setting is not defined, we fall-back to the default behavior which is + // to automatically request permissions. + val automaticallyRequestPermissionsSetting = GodotLib.getGlobal("xr/openxr/extensions/automatically_request_runtime_permissions") + val automaticPermissionsRequestEnabled = automaticallyRequestPermissionsSetting.isNullOrEmpty() || + automaticallyRequestPermissionsSetting.toBoolean() + if (automaticPermissionsRequestEnabled) { + permissionsToEnable.add(USE_SCENE_PERMISSION) + } } return permissionsToEnable diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp index 390677df22c..6086f67a1e7 100644 --- a/platform/android/java_godot_lib_jni.cpp +++ b/platform/android/java_godot_lib_jni.cpp @@ -472,19 +472,22 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv *env, JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv *env, jclass clazz, jstring path) { String js = jstring_to_string(path, env); - return env->NewStringUTF(GLOBAL_GET(js).operator String().utf8().get_data()); + Variant setting_with_override = GLOBAL_GET(js); + String setting_value = (setting_with_override.get_type() == Variant::NIL) ? "" : setting_with_override; + return env->NewStringUTF(setting_value.utf8().get_data()); } JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getEditorSetting(JNIEnv *env, jclass clazz, jstring p_setting_key) { - String editor_setting = ""; + String editor_setting_value = ""; #ifdef TOOLS_ENABLED String godot_setting_key = jstring_to_string(p_setting_key, env); - editor_setting = EDITOR_GET(godot_setting_key).operator String(); + Variant editor_setting = EDITOR_GET(godot_setting_key); + editor_setting_value = (editor_setting.get_type() == Variant::NIL) ? "" : editor_setting; #else WARN_PRINT("Access to the Editor Settings in only available on Editor builds"); #endif - return env->NewStringUTF(editor_setting.utf8().get_data()); + return env->NewStringUTF(editor_setting_value.utf8().get_data()); } JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv *env, jclass clazz, jlong ID, jstring method, jobjectArray params) {