diff --git a/VoiceInk/Views/Settings/ExperimentalFeaturesSection.swift b/VoiceInk/Views/Settings/ExperimentalFeaturesSection.swift index b0479b9..b4d1d01 100644 --- a/VoiceInk/Views/Settings/ExperimentalFeaturesSection.swift +++ b/VoiceInk/Views/Settings/ExperimentalFeaturesSection.swift @@ -32,10 +32,11 @@ struct ExperimentalFeaturesSection: View { } } - Divider() - .padding(.vertical, 4) - if isExperimentalFeaturesEnabled { + Divider() + .padding(.vertical, 4) + .transition(.opacity.combined(with: .move(edge: .top))) + Toggle(isOn: $playbackController.isPauseMediaEnabled) { Text("Pause Media during recording") } @@ -50,5 +51,3 @@ struct ExperimentalFeaturesSection: View { .background(CardBackground(isSelected: false, useAccentGradientWhenSelected: true)) } } - - diff --git a/VoiceInk/Views/Settings/PowerModeSettingsSection.swift b/VoiceInk/Views/Settings/PowerModeSettingsSection.swift index 6ff2ab5..fb169da 100644 --- a/VoiceInk/Views/Settings/PowerModeSettingsSection.swift +++ b/VoiceInk/Views/Settings/PowerModeSettingsSection.swift @@ -3,6 +3,7 @@ import SwiftUI struct PowerModeSettingsSection: View { @ObservedObject private var powerModeManager = PowerModeManager.shared @AppStorage("powerModeUIFlag") private var powerModeUIFlag = false + @AppStorage(PowerModeDefaults.autoRestoreKey) private var powerModeAutoRestoreEnabled = false @State private var showDisableAlert = false var body: some View { @@ -27,7 +28,27 @@ struct PowerModeSettingsSection: View { .labelsHidden() .toggleStyle(.switch) } + + if powerModeUIFlag { + Divider() + .padding(.vertical, 4) + .transition(.opacity.combined(with: .move(edge: .top))) + + HStack(spacing: 8) { + Toggle(isOn: $powerModeAutoRestoreEnabled) { + Text("Auto-Restore Preferences") + } + .toggleStyle(.switch) + + InfoTip( + title: "Auto-Restore Preferences", + message: "After each recording session, revert enhancement and transcription preferences to whatever was configured before Power Mode was activated." + ) + } + .transition(.opacity.combined(with: .move(edge: .top))) + } } + .animation(.easeInOut(duration: 0.25), value: powerModeUIFlag) .padding(16) .frame(maxWidth: .infinity, alignment: .leading) .background(CardBackground(isSelected: false, useAccentGradientWhenSelected: true)) @@ -60,3 +81,7 @@ private extension Array where Element == PowerModeConfig { allSatisfy { !$0.isEnabled } } } + +enum PowerModeDefaults { + static let autoRestoreKey = "powerModeAutoRestoreEnabled" +} diff --git a/VoiceInk/Whisper/WhisperState+UI.swift b/VoiceInk/Whisper/WhisperState+UI.swift index fb471b5..3ad5623 100644 --- a/VoiceInk/Whisper/WhisperState+UI.swift +++ b/VoiceInk/Whisper/WhisperState+UI.swift @@ -80,6 +80,10 @@ extension WhisperState { await cleanupModelResources() + if UserDefaults.standard.bool(forKey: PowerModeDefaults.autoRestoreKey) { + await PowerModeSessionManager.shared.endSession() + } + await MainActor.run { recordingState = .idle }