1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Fix the CAMERA permission request on HorizonOS devices

This commit is contained in:
Fredia Huya-Kouadio
2025-06-05 13:33:43 -07:00
parent 5dd76968d8
commit a0cb64569b
3 changed files with 23 additions and 10 deletions

View File

@@ -37,6 +37,16 @@ package org.godotengine.editor
*/
open class GodotEditor : BaseGodotEditor() {
override fun getExcludedPermissions(): MutableSet<String> {
val excludedPermissions = super.getExcludedPermissions().apply {
// The AVATAR_CAMERA and HEADSET_CAMERA permissions are requested when `CameraFeed.feed_is_active`
// is enabled.
add("horizonos.permission.AVATAR_CAMERA")
add("horizonos.permission.HEADSET_CAMERA")
}
return excludedPermissions
}
override fun getXRRuntimePermissions(): MutableSet<String> {
val xrRuntimePermissions = super.getXRRuntimePermissions()
xrRuntimePermissions.add("com.oculus.permission.USE_SCENE")

View File

@@ -185,16 +185,14 @@ abstract class BaseGodotEditor : GodotActivity(), GameMenuFragment.GameMenuListe
*
* The permissions in this set will be requested on demand based on use cases.
*/
private fun getExcludedPermissions(): MutableSet<String> {
@CallSuper
protected open fun getExcludedPermissions(): MutableSet<String> {
val excludedPermissions = mutableSetOf(
// The RECORD_AUDIO permission is requested when the "audio/driver/enable_input" project
// setting is enabled.
Manifest.permission.RECORD_AUDIO,
// The CAMERA permission is requested when `CameraFeed.feed_is_active` is enabled.
Manifest.permission.CAMERA,
)
excludedPermissions.add(
// The REQUEST_INSTALL_PACKAGES permission is requested the first time we attempt to
// open an apk file.
Manifest.permission.REQUEST_INSTALL_PACKAGES,

View File

@@ -148,31 +148,36 @@ public final class PermissionsUtil {
return true;
}
final List<String> permissions = new ArrayList<>();
final int requestCode;
final String updatedPermissionName;
switch (permissionName) {
case "RECORD_AUDIO":
updatedPermissionName = Manifest.permission.RECORD_AUDIO;
permissions.add(Manifest.permission.RECORD_AUDIO);
requestCode = REQUEST_RECORD_AUDIO_PERMISSION;
break;
case "CAMERA":
updatedPermissionName = Manifest.permission.CAMERA;
permissions.add(Manifest.permission.CAMERA);
if (DeviceUtils.isHorizonOSDevice(activity)) {
// On HorizonOS, these permissions are required to get access to all the device's cameras.
permissions.add("horizonos.permission.AVATAR_CAMERA");
permissions.add("horizonos.permission.HEADSET_CAMERA");
}
requestCode = REQUEST_CAMERA_PERMISSION;
break;
case "VIBRATE":
updatedPermissionName = Manifest.permission.VIBRATE;
permissions.add(Manifest.permission.VIBRATE);
requestCode = REQUEST_VIBRATE_PERMISSION;
break;
default:
updatedPermissionName = permissionName;
permissions.add(permissionName);
requestCode = REQUEST_SINGLE_PERMISSION_REQ_CODE;
break;
}
List<String> permissions = Collections.singletonList(updatedPermissionName);
return requestPermissions(activity, permissions, requestCode);
}