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
This commit is contained in:
Matt Bruce 2026-01-04 15:05:40 -06:00
parent 55c4d7e05a
commit 9c88590926
2 changed files with 20 additions and 11 deletions

View File

@ -21,8 +21,8 @@ struct ContentView: View {
/// Incrementing this value creates a new camera session with fresh AVCapturePhotoOutput /// Incrementing this value creates a new camera session with fresh AVCapturePhotoOutput
@State private var cameraSessionKey = UUID() @State private var cameraSessionKey = UUID()
/// Track camera position to detect changes when settings sheet closes /// Track camera position (as string) to detect changes when settings sheet closes
@State private var lastCameraPosition: CameraPosition = .front @State private var lastCameraPositionRaw: String = "front"
var body: some View { var body: some View {
ZStack { ZStack {
@ -75,7 +75,7 @@ struct ContentView: View {
.animation(.easeInOut(duration: Design.Animation.quick), value: showPhotoReview) .animation(.easeInOut(duration: Design.Animation.quick), value: showPhotoReview)
.onAppear { .onAppear {
// Initialize tracking of camera position // Initialize tracking of camera position
lastCameraPosition = settings.cameraPosition lastCameraPositionRaw = settings.cameraPositionRaw
} }
.onChange(of: settings.isRingLightEnabled) { _, newValue in .onChange(of: settings.isRingLightEnabled) { _, newValue in
if settings.isFlashSyncedWithRingLight { if settings.isFlashSyncedWithRingLight {
@ -89,8 +89,11 @@ struct ContentView: View {
} }
.sheet(isPresented: $showSettings, onDismiss: { .sheet(isPresented: $showSettings, onDismiss: {
// Check if camera position changed while settings was open // Check if camera position changed while settings was open
if settings.cameraPosition != lastCameraPosition { let currentRaw = settings.cameraPositionRaw
lastCameraPosition = settings.cameraPosition 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 // Force camera session recreation with new position
cameraSessionKey = UUID() cameraSessionKey = UUID()
} }

View File

@ -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 { var cameraPosition: CameraPosition {
get { get {
if cloudSync.data.cameraPositionRaw == "front" { let raw = cloudSync.data.cameraPositionRaw
return .front let position: CameraPosition = raw == "front" ? .front : .back
} else { Design.debugLog("cameraPosition getter: raw='\(raw)' -> \(position)")
return .back return position
}
} }
set { 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 }
} }
} }