Browse Source

Fix XR Android manifest metadata

- Adds the parameters for supported Meta devices, which is required to access some device specific capabilities
- Remove the 'com.samsung.android.vr.application.mode' metadata when we're not using the VrApi plugin

(cherry picked from commit 5deeb38a7046a3b9b083502884b6a81aef3d90f2)
Fredia Huya-Kouadio 3 years ago
parent
commit
3b4be5741e

+ 2 - 2
platform/android/export/export_plugin.cpp

@@ -987,14 +987,14 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
 
 					if (tname == "meta-data" && attrname == "name" && value == "xr_mode_metadata_name") {
 						// Update the meta-data 'android:name' attribute based on the selected XR mode.
-						if (xr_mode_index == XR_MODE_OVR || xr_mode_index == XR_MODE_OPENXR) {
+						if (xr_mode_index == XR_MODE_OVR) {
 							string_table.write[attr_value] = "com.samsung.android.vr.application.mode";
 						}
 					}
 
 					if (tname == "meta-data" && attrname == "value" && value == "xr_mode_metadata_value") {
 						// Update the meta-data 'android:value' attribute based on the selected XR mode.
-						if (xr_mode_index == XR_MODE_OVR || xr_mode_index == XR_MODE_OPENXR) {
+						if (xr_mode_index == XR_MODE_OVR) {
 							string_table.write[attr_value] = "vr_only";
 						}
 					}

+ 5 - 1
platform/android/export/gradle_export_util.cpp

@@ -287,7 +287,9 @@ String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_
 			bool_to_string(p_has_storage_permission));
 
 	if (uses_xr) {
-		manifest_application_text += "        <meta-data tools:node=\"replace\" android:name=\"com.samsung.android.vr.application.mode\" android:value=\"vr_only\" />\n";
+		if (xr_mode_index == XR_MODE_OVR) {
+			manifest_application_text += "        <meta-data tools:node=\"replace\" android:name=\"com.samsung.android.vr.application.mode\" android:value=\"vr_only\" />\n";
+		}
 
 		bool hand_tracking_enabled = (int)(p_preset->get("xr_features/hand_tracking")) > XR_HAND_TRACKING_NONE;
 		if (hand_tracking_enabled) {
@@ -297,6 +299,8 @@ String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_
 					"        <meta-data tools:node=\"replace\" android:name=\"com.oculus.handtracking.frequency\" android:value=\"%s\" />\n",
 					hand_tracking_frequency);
 		}
+	} else {
+		manifest_application_text += "        <meta-data tools:node=\"remove\" android:name=\"com.oculus.supportedDevices\" />\n";
 	}
 	manifest_application_text += _get_activity_tag(p_preset);
 	manifest_application_text += "    </application>\n";

+ 6 - 0
platform/android/java/app/AndroidManifest.xml

@@ -50,6 +50,12 @@
             android:name="xr_hand_tracking_metadata_name"
             android:value="xr_hand_tracking_metadata_value"/>
 
+        <!-- Supported Meta devices -->
+        <!-- This is removed by the exporter if the xr mode is not VR. -->
+        <meta-data
+            android:name="com.oculus.supportedDevices"
+            android:value="all" />
+
         <activity
             android:name=".GodotApp"
             android:label="@string/godot_project_name_string"