From b876b7397290c81df72cd9fb2cda41b0c2ab75c5 Mon Sep 17 00:00:00 2001 From: Hirbod <504909+hirbod@users.noreply.github.com> Date: Tue, 27 Jun 2023 23:27:34 +0200 Subject: [PATCH] fix: [Android][expo-camera] - Recording video with {mute: true} option without audio permission throws exception (#23145) --- packages/expo-camera/CHANGELOG.md | 2 ++ .../src/main/java/expo/modules/camera/CameraViewModule.kt | 2 +- .../android/src/main/java/expo/modules/camera/ExpoCameraView.kt | 2 +- .../android/src/main/java/expo/modules/camera/Options.kt | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/expo-camera/CHANGELOG.md b/packages/expo-camera/CHANGELOG.md index 8d6a3a1b00f04..93c8c741a69b9 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 b4ad7a7e5e6be..e52168d16d079 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 ddf4c340f60a1..b3591cdccaa22 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 e45fcd0ebb6a1..d81e6526f08ac 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 }