diff --git a/packages/expo-camera/CHANGELOG.md b/packages/expo-camera/CHANGELOG.md index 8d6a3a1b00f048..93c8c741a69b99 100644 --- a/packages/expo-camera/CHANGELOG.md +++ b/packages/expo-camera/CHANGELOG.md @@ -8,6 +8,8 @@ ### 🐛 Bug fixes +- Resolved an issue on Android where recording a video, even with the mute: true option, would still result in an audio permission exception. Furthermore, the mute flag was incorrectly referred to as muteValue, causing it to be consistently ignored ([#23145](https://github.com/expo/expo/pull/23145) by [@hirbod](https://github.com/hirbod)) + ### 💡 Others ## 13.4.0 — 2023-06-13 diff --git a/packages/expo-camera/android/src/main/java/expo/modules/camera/CameraViewModule.kt b/packages/expo-camera/android/src/main/java/expo/modules/camera/CameraViewModule.kt index b4ad7a7e5e6be1..e52168d16d079d 100644 --- a/packages/expo-camera/android/src/main/java/expo/modules/camera/CameraViewModule.kt +++ b/packages/expo-camera/android/src/main/java/expo/modules/camera/CameraViewModule.kt @@ -83,7 +83,7 @@ class CameraViewModule : Module() { }.runOnQueue(Queues.MAIN) AsyncFunction("record") { options: RecordingOptions, viewTag: Int, promise: Promise -> - if (!permissionsManager.hasGrantedPermissions(Manifest.permission.RECORD_AUDIO)) { + if (!options.mute && !permissionsManager.hasGrantedPermissions(Manifest.permission.RECORD_AUDIO)) { throw Exceptions.MissingPermissions(Manifest.permission.RECORD_AUDIO) } diff --git a/packages/expo-camera/android/src/main/java/expo/modules/camera/ExpoCameraView.kt b/packages/expo-camera/android/src/main/java/expo/modules/camera/ExpoCameraView.kt index ddf4c340f60a1a..b3591cdccaa224 100644 --- a/packages/expo-camera/android/src/main/java/expo/modules/camera/ExpoCameraView.kt +++ b/packages/expo-camera/android/src/main/java/expo/modules/camera/ExpoCameraView.kt @@ -165,7 +165,7 @@ class ExpoCameraView( val path = FileSystemUtils.generateOutputPath(cacheDirectory, "Camera", ".mp4") val profile = getCamcorderProfile(cameraView.cameraId, options.quality) options.videoBitrate?.let { profile.videoBitRate = it } - if (cameraView.record(path, options.maxDuration * 1000, options.maxFileSize, !options.muteValue, profile)) { + if (cameraView.record(path, options.maxDuration * 1000, options.maxFileSize, !options.mute, profile)) { videoRecordedPromise = promise } else { promise.reject("E_RECORDING_FAILED", "Starting video recording failed. Another recording might be in progress.", null) diff --git a/packages/expo-camera/android/src/main/java/expo/modules/camera/Options.kt b/packages/expo-camera/android/src/main/java/expo/modules/camera/Options.kt index e45fcd0ebb6a1b..d81e6526f08ace 100644 --- a/packages/expo-camera/android/src/main/java/expo/modules/camera/Options.kt +++ b/packages/expo-camera/android/src/main/java/expo/modules/camera/Options.kt @@ -19,6 +19,6 @@ class RecordingOptions : Record { @Field val maxDuration: Int = -1 @Field val maxFileSize: Int = -1 @Field val quality: Int = CamcorderProfile.QUALITY_HIGH - @Field val muteValue: Boolean = false + @Field val mute: Boolean = false @Field val videoBitrate: Int? = null }