Files
RecipesCam/patches/vision-camera-shutter-silent.patch
T
admin ca3532023a Startup mode default/last-session; GPS watermark default OFF; shutter OFF truly silent
- Settings STARTUP MODE chips (AsyncStorage startup_mode): default = clean camera
  + PROVIA neutral 4:3, last = restore full session look.
- initSession: resolve sim-* recipe ids via FILM_SIMS (fix clobber of session
  ratio/adjustments to 4:3 canonical); restore via setSelectedRecipe not
  applyRecipe so user tweaks (frame/geotag/ratio) survive restore.
- applyDefaultStartup turns GPS watermark OFF (user-requested default).
- Shutter: OFF must not play click on must-play-policy devices. VisionCamera
  v5.2.3 HybridPhotoOutput.kt plays MediaActionSound itself gated by
  (enableShutterSound ?: true) || mustPlayShutterSound — on Xiaomi mustPlay=true
  so OFF still clicked. Both capture paths now gate on enableShutterSound != false.
  node_modules patch not trackable -> artifacts/patches/vision-camera-shutter-silent.patch.
  Verified on Xiaomi 12S Ultra: log SND user=false -> play=false; cold-start
  DEFAULT shows GPS WATERMARK OFF.
2026-09-09 17:59:15 +07:00

44 lines
2.2 KiB
Diff

diff --git a/node_modules/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/hybrids/outputs/HybridPhotoOutput.kt b/node_modules/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/hybrids/outputs/HybridPhotoOutput.kt
index f3bdfe3..883fa50 100644
--- a/node_modules/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/hybrids/outputs/HybridPhotoOutput.kt
+++ b/node_modules/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/hybrids/outputs/HybridPhotoOutput.kt
@@ -2,7 +2,6 @@ package com.margelo.nitro.camera.hybrids.outputs
import android.media.MediaActionSound
import android.util.Log
-import androidx.camera.core.CameraInfo
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageCapture
import androidx.camera.core.resolutionselector.ResolutionSelector
@@ -161,7 +160,11 @@ class HybridPhotoOutput(
// 1. Get settings
val isMirrored = shouldMirror()
- val enableShutterSound = (settings.enableShutterSound ?: true) || CameraInfo.mustPlayShutterSound()
+ // The click is played by THIS app via MediaActionSound below —
+ // CameraInfo.mustPlayShutterSound() only reports device/region policy, it
+ // does not make the OS play anything. Honor the user toggle: OFF stays
+ // silent even on devices CameraX flags as must-play.
+ val enableShutterSound = settings.enableShutterSound != false
imageCapture.flashMode = settings.flashMode?.toFlashMode() ?: ImageCapture.FLASH_MODE_OFF
val location =
if (settings.location != null) {
@@ -170,7 +173,6 @@ class HybridPhotoOutput(
} else {
null
}
-
// 2. Perform Capture
var didFireOnDidCapturePhoto = false
val image =
@@ -228,8 +230,7 @@ class HybridPhotoOutput(
// 1. Get settings
val isMirrored = shouldMirror()
- val enableShutterSound =
- (settings.enableShutterSound ?: true) || CameraInfo.mustPlayShutterSound()
+ val enableShutterSound = settings.enableShutterSound != false
imageCapture.flashMode = settings.flashMode?.toFlashMode() ?: ImageCapture.FLASH_MODE_OFF
val location =
if (settings.location != null) {