vOOice/VoiceInk/Views/Settings/PowerModeSettingsSection.swift
2025-10-27 16:41:51 +05:45

88 lines
3.3 KiB
Swift

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 {
VStack(alignment: .leading, spacing: 12) {
HStack(spacing: 12) {
Image(systemName: "sparkles.square.fill.on.square")
.font(.system(size: 20))
.foregroundColor(.accentColor)
.frame(width: 24, height: 24)
VStack(alignment: .leading, spacing: 2) {
Text("Power Mode")
.font(.headline)
Text("Enable to automatically apply custom configurations based on the app or website you are using.")
.font(.subheadline)
.foregroundColor(.secondary)
}
Spacer()
Toggle("Enable Power Mode", isOn: toggleBinding)
.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))
.alert("Power Mode Still Active", isPresented: $showDisableAlert) {
Button("Got it", role: .cancel) { }
} message: {
Text("Power Mode can't be disabled while any configuration is still enabled. Disable or remove your Power Modes first.")
}
}
private var toggleBinding: Binding<Bool> {
Binding(
get: { powerModeUIFlag },
set: { newValue in
if newValue {
powerModeUIFlag = true
} else if powerModeManager.configurations.noneEnabled {
powerModeUIFlag = false
} else {
showDisableAlert = true
}
}
)
}
}
private extension Array where Element == PowerModeConfig {
var noneEnabled: Bool {
allSatisfy { !$0.isEnabled }
}
}
enum PowerModeDefaults {
static let autoRestoreKey = "powerModeAutoRestoreEnabled"
}