Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>

This commit is contained in:
Matt Bruce 2026-01-04 14:57:09 -06:00
parent a25e414d4e
commit 4ecdb8fbfe

View File

@ -87,10 +87,18 @@ final class SettingsViewModel: RingLightConfigurable {
// MARK: - Premium Manager // MARK: - Premium Manager
/// Premium manager for checking subscription status /// Premium manager for checking subscription status
private let premiumManager = PremiumManager() @ObservationIgnored private let premiumManager = PremiumManager()
/// Whether the user has premium access /// Whether the user has premium access (stored property for proper UI updates)
var isPremiumUnlocked: Bool { premiumManager.isPremiumUnlocked } private var _isPremiumUnlocked: Bool = false
/// Whether the user has premium access (observable for UI updates)
var isPremiumUnlocked: Bool {
get { _isPremiumUnlocked }
set {
_isPremiumUnlocked = newValue
}
}
// MARK: - Cloud Sync Manager // MARK: - Cloud Sync Manager
@ -340,7 +348,64 @@ final class SettingsViewModel: RingLightConfigurable {
/// Debug premium toggle for testing (DEBUG builds only) /// Debug premium toggle for testing (DEBUG builds only)
var isDebugPremiumEnabled: Bool { var isDebugPremiumEnabled: Bool {
get { premiumManager.isDebugPremiumToggleEnabled } get { premiumManager.isDebugPremiumToggleEnabled }
set { premiumManager.isDebugPremiumToggleEnabled = newValue } set {
let wasPremium = premiumManager.isDebugPremiumToggleEnabled
premiumManager.isDebugPremiumToggleEnabled = newValue
// Update premium status for UI refresh
isPremiumUnlocked = premiumManager.isPremiumUnlocked
// Reset premium settings when toggling OFF
if wasPremium && !newValue {
resetPremiumSettingsToDefaults()
}
}
}
/// Reset premium-only settings to their free defaults when debug premium is disabled
private func resetPremiumSettingsToDefaults() {
// Clear cached values that depend on premium status
_cachedRingSize = nil
_cachedLightColorId = nil
_cachedCustomColor = nil
// Reset premium settings to defaults (bypass premium gates for direct reset)
updateSettings { settings in
if settings.lightColorId != Self.defaultFreeColorId {
settings.lightColorId = Self.defaultFreeColorId
}
if settings.isMirrorFlipped {
settings.isMirrorFlipped = false
}
if settings.isSkinSmoothingEnabled {
settings.isSkinSmoothingEnabled = false
}
if settings.isFlashSyncedWithRingLight {
settings.isFlashSyncedWithRingLight = false
}
if settings.hdrModeRaw != CameraHDRMode.off.rawValue {
settings.hdrModeRaw = CameraHDRMode.off.rawValue
}
if settings.photoQualityRaw != PhotoQuality.medium.rawValue {
settings.photoQualityRaw = PhotoQuality.medium.rawValue
}
if settings.selectedTimerRaw != TimerOption.three.rawValue {
settings.selectedTimerRaw = TimerOption.three.rawValue
}
if settings.isCenterStageEnabled {
settings.isCenterStageEnabled = false
}
}
// Force sync to ensure changes are saved
forceSync()
} }
/// Sets the custom color and selects it (PREMIUM) /// Sets the custom color and selects it (PREMIUM)
@ -373,6 +438,8 @@ final class SettingsViewModel: RingLightConfigurable {
// MARK: - Initialization // MARK: - Initialization
init() { init() {
// Initialize premium status
_isPremiumUnlocked = premiumManager.isPremiumUnlocked
// CloudSyncManager handles syncing automatically // CloudSyncManager handles syncing automatically
} }