diff --git a/CHANGELOG.md b/CHANGELOG.md index 432c7c4c..f4edfae4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), - We fixed an issue on iOS where a deep link that cold started the app was not delivered to React Native, causing `Linking.getInitialURL()` to return `null`. - We removed some unused Android Permissions coming in from Manifest mergers. +- We patched react native vision camera library to fix the issue of barcodes not getting scanned correctly with patterned backgrounds on Android. ## [19.1.6] - 2026-09-16 diff --git a/intermediary-patches/react-native-vision-camera+4.7.3.patch b/intermediary-patches/react-native-vision-camera+4.7.3.patch new file mode 100644 index 00000000..3f3c7c47 --- /dev/null +++ b/intermediary-patches/react-native-vision-camera+4.7.3.patch @@ -0,0 +1,37 @@ +diff --git a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession+Configuration.kt b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession+Configuration.kt +index 1e9c0de..bbd8a91 100644 +--- a/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession+Configuration.kt ++++ b/node_modules/react-native-vision-camera/android/src/main/java/com/mrousavy/camera/core/CameraSession+Configuration.kt +@@ -2,6 +2,7 @@ package com.mrousavy.camera.core + + import android.annotation.SuppressLint + import android.util.Log ++import android.util.Size + import androidx.annotation.OptIn + import androidx.camera.core.CameraSelector + import androidx.camera.core.CameraState +@@ -13,6 +14,7 @@ import androidx.camera.core.MirrorMode + import androidx.camera.core.Preview + import androidx.camera.core.TorchState + import androidx.camera.core.resolutionselector.ResolutionSelector ++import androidx.camera.core.resolutionselector.ResolutionStrategy + import androidx.camera.extensions.ExtensionMode + import androidx.camera.lifecycle.ProcessCameraProvider + import androidx.camera.video.Recorder +@@ -220,7 +222,15 @@ internal fun CameraSession.configureOutputs(configuration: CameraConfiguration) + val codeScannerConfig = configuration.codeScanner as? CameraConfiguration.Output.Enabled + if (codeScannerConfig != null) { + Log.i(CameraSession.TAG, "Creating CodeScanner output...") +- val analyzer = ImageAnalysis.Builder().build() ++ // Request a higher analysis resolution than the CameraX default (640x480), so ML Kit can read ++ // barcodes on patterned backgrounds. Size is in sensor (landscape) orientation. ++ val analyzer = ImageAnalysis.Builder() ++ .setResolutionSelector( ++ ResolutionSelector.Builder() ++ .setResolutionStrategy(ResolutionStrategy(Size(1920, 1440), ResolutionStrategy.FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER)) ++ .build() ++ ) ++ .build() + val pipeline = CodeScannerPipeline(codeScannerConfig.config, callback) + analyzer.setAnalyzer(CameraQueues.analyzerExecutor, pipeline) + codeScannerOutput = analyzer diff --git a/patches/apply-patches.js b/patches/apply-patches.js index ced81bc1..a9097b50 100755 --- a/patches/apply-patches.js +++ b/patches/apply-patches.js @@ -7,6 +7,10 @@ const patchOperations = [ { dependency: "react-native-geocoder", patchFile: "react-native-geocoder+0.5.0.patch" + }, + { + dependency: "react-native-vision-camera", + patchFile: "react-native-vision-camera+4.7.3.patch" } ];