From 353c871160ae62385e646eb99e5a0be85dedadbb Mon Sep 17 00:00:00 2001 From: Fredia Huya-Kouadio Date: Thu, 19 Dec 2024 12:56:17 -0800 Subject: [PATCH] Add support for Android XR devices to the Godot XR Editor --- platform/android/java/app/config.gradle | 2 +- platform/android/java/editor/build.gradle | 2 + .../editor/src/android/AndroidManifest.xml | 42 +++++++++++++++++++ .../org/godotengine/editor/GodotEditor.kt | 14 ++++++- .../java/editor/src/main/AndroidManifest.xml | 1 + .../org/godotengine/editor/BaseGodotEditor.kt | 14 ++----- .../org/godotengine/editor/BaseGodotGame.kt | 3 +- .../java/org/godotengine/editor/GodotGame.kt | 5 +-- 8 files changed, 63 insertions(+), 20 deletions(-) create mode 100644 platform/android/java/editor/src/android/AndroidManifest.xml diff --git a/platform/android/java/app/config.gradle b/platform/android/java/app/config.gradle index 51e179897b3..77cf8a589d7 100644 --- a/platform/android/java/app/config.gradle +++ b/platform/android/java/app/config.gradle @@ -15,7 +15,7 @@ ext.versions = [ // Also update 'platform/android/detect.py#get_ndk_version()' when this is updated. ndkVersion : '28.1.13356709', splashscreenVersion: '1.0.1', - openxrVendorsVersion: '4.1.1-stable', + openxrVendorsVersion: '4.2.0-stable', junitVersion : '1.3.0', espressoCoreVersion: '3.7.0', kotlinTestVersion : '1.3.11', diff --git a/platform/android/java/editor/build.gradle b/platform/android/java/editor/build.gradle index bbe9227a9f8..666a14784b9 100644 --- a/platform/android/java/editor/build.gradle +++ b/platform/android/java/editor/build.gradle @@ -203,6 +203,8 @@ dependencies { implementation "androidx.constraintlayout:constraintlayout:2.2.1" implementation "org.bouncycastle:bcprov-jdk15to18:1.78" + // Android XR dependencies + androidImplementation "org.godotengine:godot-openxr-vendors-androidxr:$versions.openxrVendorsVersion" // Meta dependencies horizonosImplementation "org.godotengine:godot-openxr-vendors-meta:$versions.openxrVendorsVersion" // Pico dependencies diff --git a/platform/android/java/editor/src/android/AndroidManifest.xml b/platform/android/java/editor/src/android/AndroidManifest.xml new file mode 100644 index 00000000000..8d47735c7ea --- /dev/null +++ b/platform/android/java/editor/src/android/AndroidManifest.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/android/java/editor/src/android/java/org/godotengine/editor/GodotEditor.kt b/platform/android/java/editor/src/android/java/org/godotengine/editor/GodotEditor.kt index 4b0d4ecb053..52ee12f76cb 100644 --- a/platform/android/java/editor/src/android/java/org/godotengine/editor/GodotEditor.kt +++ b/platform/android/java/editor/src/android/java/org/godotengine/editor/GodotEditor.kt @@ -33,6 +33,16 @@ package org.godotengine.editor /** * Primary window of the Godot Editor. * - * This is the implementation of the editor used when running on regular Android devices. + * This is the implementation of the editor used when running on Android devices. */ -open class GodotEditor : BaseGodotEditor() +open class GodotEditor : BaseGodotEditor() { + + override fun getXRRuntimePermissions(): MutableSet { + val xrRuntimePermissions = super.getXRRuntimePermissions() + + xrRuntimePermissions.add("android.permission.EYE_TRACKING_FINE") + xrRuntimePermissions.add("android.permission.HAND_TRACKING") + + return xrRuntimePermissions + } +} diff --git a/platform/android/java/editor/src/main/AndroidManifest.xml b/platform/android/java/editor/src/main/AndroidManifest.xml index 151ad227b8f..f47f6cb9638 100644 --- a/platform/android/java/editor/src/main/AndroidManifest.xml +++ b/platform/android/java/editor/src/main/AndroidManifest.xml @@ -115,6 +115,7 @@ android:configChanges="layoutDirection|locale|orientation|keyboardHidden|screenSize|smallestScreenSize|density|keyboard|navigation|screenLayout|uiMode" android:process=":GodotXRGame" android:launchMode="singleTask" + android:taskAffinity=":xr" android:icon="@mipmap/ic_play_window" android:label="@string/godot_game_activity_name" android:exported="false" diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/BaseGodotEditor.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/BaseGodotEditor.kt index f095a93d220..e4d49e23bba 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/BaseGodotEditor.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/BaseGodotEditor.kt @@ -69,11 +69,7 @@ import org.godotengine.godot.error.Error import org.godotengine.godot.utils.DialogUtils import org.godotengine.godot.utils.PermissionsUtil import org.godotengine.godot.utils.ProcessPhoenix -import org.godotengine.godot.utils.isNativeXRDevice -import org.godotengine.godot.xr.HybridMode -import org.godotengine.godot.xr.getHybridAppLaunchMode -import org.godotengine.godot.xr.HYBRID_APP_PANEL_CATEGORY -import org.godotengine.godot.xr.HYBRID_APP_IMMERSIVE_CATEGORY +import org.godotengine.openxr.vendors.utils.* import kotlin.math.min /** @@ -743,12 +739,8 @@ abstract class BaseGodotEditor : GodotActivity(), GameMenuFragment.GameMenuListe return isNativeXRDevice(applicationContext) } - if (featureTag == "horizonos") { - return BuildConfig.FLAVOR == "horizonos" - } - - if (featureTag == "picoos") { - return BuildConfig.FLAVOR == "picoos" + if (featureTag == BuildConfig.FLAVOR) { + return true } return super.supportsFeature(featureTag) diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/BaseGodotGame.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/BaseGodotGame.kt index 392c26b8743..7e4c70c4fcc 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/BaseGodotGame.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/BaseGodotGame.kt @@ -38,8 +38,7 @@ import org.godotengine.godot.GodotLib import org.godotengine.godot.editor.utils.GameMenuUtils import org.godotengine.godot.utils.PermissionsUtil import org.godotengine.godot.utils.ProcessPhoenix -import org.godotengine.godot.xr.HYBRID_APP_FEATURE -import org.godotengine.godot.xr.isHybridAppEnabled +import org.godotengine.openxr.vendors.utils.* /** * Base class for the Godot play windows. diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt index 066e88ea6a2..45c8f5050df 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotGame.kt @@ -43,11 +43,8 @@ import org.godotengine.editor.embed.GameMenuFragment import org.godotengine.godot.GodotLib import org.godotengine.godot.editor.utils.GameMenuUtils import org.godotengine.godot.utils.ProcessPhoenix -import org.godotengine.godot.utils.isHorizonOSDevice -import org.godotengine.godot.utils.isNativeXRDevice -import org.godotengine.godot.xr.HYBRID_APP_PANEL_FEATURE import org.godotengine.godot.xr.XRMode -import org.godotengine.godot.xr.isHybridAppEnabled +import org.godotengine.openxr.vendors.utils.* /** * Drives the 'run project' window of the Godot Editor.