From 62b2b6ef33e37df926ad0093a7292a431d486167 Mon Sep 17 00:00:00 2001 From: Marc Rousavy Date: Thu, 23 Jul 2026 16:46:51 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Apply=20`adaptiveness`=20metering=20mode?= =?UTF-8?q?s=20before=20resolving=20`focusTo(=E2=80=A6)`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../react-native-vision-camera/ios/Utils/MeteringTask.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/react-native-vision-camera/ios/Utils/MeteringTask.swift b/packages/react-native-vision-camera/ios/Utils/MeteringTask.swift index ea13af310e..7a579aa4dd 100644 --- a/packages/react-native-vision-camera/ios/Utils/MeteringTask.swift +++ b/packages/react-native-vision-camera/ios/Utils/MeteringTask.swift @@ -157,16 +157,17 @@ final class MeteringTask { logger.info( "All metering operations have been settled for at least \(self.minStableFocusDurationUntilResolve) seconds - completed!" ) - onComplete?() isFinished = true destroy() - // After completion, update AE/AF/AWB to locked or continuous tracking + // Update AE/AF/AWB to locked or continuous tracking *before* resolving, + // so callers observe the final modes as soon as the Promise resolves. switch adaptiveness { case .continuous: try? setMeteringValuesToContinuous() case .locked: try? setMeteringValuesToLocked() } + onComplete?() // Start the timer for auto reset (if enabled) if case .after(let seconds) = self.autoReset { self.queue.asyncAfter(deadline: .now() + seconds) { [weak self] in