Skip to content

Commit 847042e

Browse files
committed
Merge pull request godotengine#107184 from m4gr3d/cleanup_horizonos_camera_permission_request
Fix the `CAMERA` permission request on HorizonOS devices
2 parents 2a8240b + a0cb645 commit 847042e

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

platform/android/java/editor/src/horizonos/java/org/godotengine/editor/GodotEditor.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,16 @@ package org.godotengine.editor
3737
*/
3838
open class GodotEditor : BaseGodotEditor() {
3939

40+
override fun getExcludedPermissions(): MutableSet<String> {
41+
val excludedPermissions = super.getExcludedPermissions().apply {
42+
// The AVATAR_CAMERA and HEADSET_CAMERA permissions are requested when `CameraFeed.feed_is_active`
43+
// is enabled.
44+
add("horizonos.permission.AVATAR_CAMERA")
45+
add("horizonos.permission.HEADSET_CAMERA")
46+
}
47+
return excludedPermissions
48+
}
49+
4050
override fun getXRRuntimePermissions(): MutableSet<String> {
4151
val xrRuntimePermissions = super.getXRRuntimePermissions()
4252
xrRuntimePermissions.add("com.oculus.permission.USE_SCENE")

platform/android/java/editor/src/main/java/org/godotengine/editor/BaseGodotEditor.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,16 +185,14 @@ abstract class BaseGodotEditor : GodotActivity(), GameMenuFragment.GameMenuListe
185185
*
186186
* The permissions in this set will be requested on demand based on use cases.
187187
*/
188-
private fun getExcludedPermissions(): MutableSet<String> {
188+
@CallSuper
189+
protected open fun getExcludedPermissions(): MutableSet<String> {
189190
val excludedPermissions = mutableSetOf(
190191
// The RECORD_AUDIO permission is requested when the "audio/driver/enable_input" project
191192
// setting is enabled.
192193
Manifest.permission.RECORD_AUDIO,
193194
// The CAMERA permission is requested when `CameraFeed.feed_is_active` is enabled.
194195
Manifest.permission.CAMERA,
195-
)
196-
197-
excludedPermissions.add(
198196
// The REQUEST_INSTALL_PACKAGES permission is requested the first time we attempt to
199197
// open an apk file.
200198
Manifest.permission.REQUEST_INSTALL_PACKAGES,

platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,31 +148,36 @@ public static boolean requestPermission(String permissionName, @NonNull Activity
148148
return true;
149149
}
150150

151+
final List<String> permissions = new ArrayList<>();
152+
151153
final int requestCode;
152-
final String updatedPermissionName;
153154
switch (permissionName) {
154155
case "RECORD_AUDIO":
155-
updatedPermissionName = Manifest.permission.RECORD_AUDIO;
156+
permissions.add(Manifest.permission.RECORD_AUDIO);
156157
requestCode = REQUEST_RECORD_AUDIO_PERMISSION;
157158
break;
158159

159160
case "CAMERA":
160-
updatedPermissionName = Manifest.permission.CAMERA;
161+
permissions.add(Manifest.permission.CAMERA);
162+
if (DeviceUtils.isHorizonOSDevice(activity)) {
163+
// On HorizonOS, these permissions are required to get access to all the device's cameras.
164+
permissions.add("horizonos.permission.AVATAR_CAMERA");
165+
permissions.add("horizonos.permission.HEADSET_CAMERA");
166+
}
161167
requestCode = REQUEST_CAMERA_PERMISSION;
162168
break;
163169

164170
case "VIBRATE":
165-
updatedPermissionName = Manifest.permission.VIBRATE;
171+
permissions.add(Manifest.permission.VIBRATE);
166172
requestCode = REQUEST_VIBRATE_PERMISSION;
167173
break;
168174

169175
default:
170-
updatedPermissionName = permissionName;
176+
permissions.add(permissionName);
171177
requestCode = REQUEST_SINGLE_PERMISSION_REQ_CODE;
172178
break;
173179
}
174180

175-
List<String> permissions = Collections.singletonList(updatedPermissionName);
176181
return requestPermissions(activity, permissions, requestCode);
177182
}
178183

0 commit comments

Comments
 (0)