From 9c885909265597e63960d6db4d2ffc6c3328da6b Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Sun, 4 Jan 2026 15:05:40 -0600 Subject: [PATCH] Add debug logging for camera position switch troubleshooting - Use raw string comparison instead of CameraPosition enum - Add debug logs to trace setting changes and sheet dismiss - Add cameraPositionRaw accessor to SettingsViewModel --- SelfieCam/Features/Camera/ContentView.swift | 13 ++++++++----- .../Features/Settings/SettingsViewModel.swift | 18 ++++++++++++------ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/SelfieCam/Features/Camera/ContentView.swift b/SelfieCam/Features/Camera/ContentView.swift index 4e68edf..61576ec 100644 --- a/SelfieCam/Features/Camera/ContentView.swift +++ b/SelfieCam/Features/Camera/ContentView.swift @@ -21,8 +21,8 @@ struct ContentView: View { /// Incrementing this value creates a new camera session with fresh AVCapturePhotoOutput @State private var cameraSessionKey = UUID() - /// Track camera position to detect changes when settings sheet closes - @State private var lastCameraPosition: CameraPosition = .front + /// Track camera position (as string) to detect changes when settings sheet closes + @State private var lastCameraPositionRaw: String = "front" var body: some View { ZStack { @@ -75,7 +75,7 @@ struct ContentView: View { .animation(.easeInOut(duration: Design.Animation.quick), value: showPhotoReview) .onAppear { // Initialize tracking of camera position - lastCameraPosition = settings.cameraPosition + lastCameraPositionRaw = settings.cameraPositionRaw } .onChange(of: settings.isRingLightEnabled) { _, newValue in if settings.isFlashSyncedWithRingLight { @@ -89,8 +89,11 @@ struct ContentView: View { } .sheet(isPresented: $showSettings, onDismiss: { // Check if camera position changed while settings was open - if settings.cameraPosition != lastCameraPosition { - lastCameraPosition = settings.cameraPosition + let currentRaw = settings.cameraPositionRaw + Design.debugLog("Settings dismissed - current raw: '\(currentRaw)', last raw: '\(lastCameraPositionRaw)'") + if currentRaw != lastCameraPositionRaw { + Design.debugLog("Camera position changed! Recreating camera session...") + lastCameraPositionRaw = currentRaw // Force camera session recreation with new position cameraSessionKey = UUID() } diff --git a/SelfieCam/Features/Settings/SettingsViewModel.swift b/SelfieCam/Features/Settings/SettingsViewModel.swift index 656e83a..37b4061 100644 --- a/SelfieCam/Features/Settings/SettingsViewModel.swift +++ b/SelfieCam/Features/Settings/SettingsViewModel.swift @@ -288,16 +288,22 @@ final class SettingsViewModel: RingLightConfigurable { } } + /// Raw camera position string for comparison (avoids MijickCamera enum issues) + var cameraPositionRaw: String { + cloudSync.data.cameraPositionRaw + } + var cameraPosition: CameraPosition { get { - if cloudSync.data.cameraPositionRaw == "front" { - return .front - } else { - return .back - } + let raw = cloudSync.data.cameraPositionRaw + let position: CameraPosition = raw == "front" ? .front : .back + Design.debugLog("cameraPosition getter: raw='\(raw)' -> \(position)") + return position } set { - updateSettings { $0.cameraPositionRaw = newValue == .front ? "front" : "back" } + let rawValue = newValue == .front ? "front" : "back" + Design.debugLog("cameraPosition setter: \(newValue) -> raw='\(rawValue)'") + updateSettings { $0.cameraPositionRaw = rawValue } } }