Make iCloud sync available to all users (remove from premium)
- Remove PremiumGate from iCloudEnabled property - Update SettingsView to use regular toggle instead of premiumToggle - Remove premium section header for iCloud sync - Update proSection description to remove 'sync' - Remove iCloud Settings Sync from ProPaywallView benefits
This commit is contained in:
parent
53170a1de4
commit
f73da42a3d
@ -29,7 +29,6 @@ struct ProPaywallView: View {
|
|||||||
BenefitRow(image: "person.crop.rectangle.fill", text: String(localized: "Center Stage Auto-Framing"))
|
BenefitRow(image: "person.crop.rectangle.fill", text: String(localized: "Center Stage Auto-Framing"))
|
||||||
BenefitRow(image: "timer", text: String(localized: "Extended Self-Timers (5s, 10s)"))
|
BenefitRow(image: "timer", text: String(localized: "Extended Self-Timers (5s, 10s)"))
|
||||||
BenefitRow(image: "star.fill", text: String(localized: "High Quality Photo Export"))
|
BenefitRow(image: "star.fill", text: String(localized: "High Quality Photo Export"))
|
||||||
BenefitRow(image: "icloud.fill", text: String(localized: "iCloud Settings Sync"))
|
|
||||||
}
|
}
|
||||||
.frame(maxWidth: .infinity, alignment: .leading)
|
.frame(maxWidth: .infinity, alignment: .leading)
|
||||||
|
|
||||||
|
|||||||
@ -129,9 +129,9 @@ struct SettingsView: View {
|
|||||||
|
|
||||||
proSection
|
proSection
|
||||||
|
|
||||||
// MARK: - Sync Section (Premium)
|
// MARK: - Sync Section
|
||||||
|
|
||||||
premiumSectionHeader(title: "iCloud Sync", systemImage: "icloud")
|
SettingsSectionHeader(title: String(localized: "iCloud Sync"), systemImage: "icloud")
|
||||||
|
|
||||||
iCloudSyncSection
|
iCloudSyncSection
|
||||||
|
|
||||||
@ -543,7 +543,7 @@ struct SettingsView: View {
|
|||||||
.font(.system(size: Design.BaseFontSize.medium, weight: .semibold))
|
.font(.system(size: Design.BaseFontSize.medium, weight: .semibold))
|
||||||
.foregroundStyle(.white)
|
.foregroundStyle(.white)
|
||||||
|
|
||||||
Text(String(localized: "Premium colors, HDR, timers, sync & more"))
|
Text(String(localized: "Premium colors, HDR, timers & more"))
|
||||||
.font(.system(size: Design.BaseFontSize.caption))
|
.font(.system(size: Design.BaseFontSize.caption))
|
||||||
.foregroundStyle(.white.opacity(Design.Opacity.medium))
|
.foregroundStyle(.white.opacity(Design.Opacity.medium))
|
||||||
}
|
}
|
||||||
@ -566,24 +566,31 @@ struct SettingsView: View {
|
|||||||
.accessibilityHint(String(localized: "Opens upgrade options"))
|
.accessibilityHint(String(localized: "Opens upgrade options"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - iCloud Sync Section (Premium)
|
// MARK: - iCloud Sync Section
|
||||||
|
|
||||||
private var iCloudSyncSection: some View {
|
private var iCloudSyncSection: some View {
|
||||||
VStack(alignment: .leading, spacing: Design.Spacing.small) {
|
VStack(alignment: .leading, spacing: Design.Spacing.small) {
|
||||||
// Sync toggle (premium)
|
// Sync toggle
|
||||||
premiumToggle(
|
Toggle(isOn: $viewModel.iCloudEnabled) {
|
||||||
title: String(localized: "Sync Settings"),
|
VStack(alignment: .leading, spacing: Design.Spacing.xxSmall) {
|
||||||
subtitle: !isPremiumUnlocked
|
Text(String(localized: "Sync Settings"))
|
||||||
? String(localized: "Upgrade to sync settings across devices")
|
.font(.system(size: Design.BaseFontSize.medium, weight: .medium))
|
||||||
: (viewModel.iCloudAvailable
|
.foregroundStyle(.white)
|
||||||
|
|
||||||
|
Text(viewModel.iCloudAvailable
|
||||||
? String(localized: "Sync settings across all your devices")
|
? String(localized: "Sync settings across all your devices")
|
||||||
: String(localized: "Sign in to iCloud to enable sync")),
|
: String(localized: "Sign in to iCloud to enable sync"))
|
||||||
isOn: $viewModel.iCloudEnabled,
|
.font(.system(size: Design.BaseFontSize.body))
|
||||||
accessibilityHint: String(localized: "Syncs settings across all your devices via iCloud")
|
.foregroundStyle(.white.opacity(Design.Opacity.medium))
|
||||||
)
|
}
|
||||||
|
}
|
||||||
|
.tint(Color.Accent.primary)
|
||||||
|
.padding(.vertical, Design.Spacing.xSmall)
|
||||||
|
.disabled(!viewModel.iCloudAvailable)
|
||||||
|
.accessibilityHint(String(localized: "Syncs settings across all your devices via iCloud"))
|
||||||
|
|
||||||
// Sync status (only show when premium and enabled)
|
// Sync status (show when enabled and available)
|
||||||
if isPremiumUnlocked && viewModel.iCloudEnabled && viewModel.iCloudAvailable {
|
if viewModel.iCloudEnabled && viewModel.iCloudAvailable {
|
||||||
HStack(spacing: Design.Spacing.small) {
|
HStack(spacing: Design.Spacing.small) {
|
||||||
Image(systemName: syncStatusIcon)
|
Image(systemName: syncStatusIcon)
|
||||||
.font(.system(size: Design.BaseFontSize.body))
|
.font(.system(size: Design.BaseFontSize.body))
|
||||||
|
|||||||
@ -347,13 +347,10 @@ final class SettingsViewModel: RingLightConfigurable {
|
|||||||
/// Whether iCloud sync is available
|
/// Whether iCloud sync is available
|
||||||
var iCloudAvailable: Bool { cloudSync.iCloudAvailable }
|
var iCloudAvailable: Bool { cloudSync.iCloudAvailable }
|
||||||
|
|
||||||
/// Whether iCloud sync is enabled (PREMIUM)
|
/// Whether iCloud sync is enabled (available to all users)
|
||||||
var iCloudEnabled: Bool {
|
var iCloudEnabled: Bool {
|
||||||
get { PremiumGate.get(cloudSync.iCloudEnabled, default: false, isPremium: isPremiumUnlocked) }
|
get { cloudSync.iCloudEnabled }
|
||||||
set {
|
set { cloudSync.iCloudEnabled = newValue }
|
||||||
guard PremiumGate.canSet(isPremium: isPremiumUnlocked) else { return }
|
|
||||||
cloudSync.iCloudEnabled = newValue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Last sync date
|
/// Last sync date
|
||||||
|
|||||||
@ -242,8 +242,8 @@
|
|||||||
"comment" : "Name of a ring light color preset.",
|
"comment" : "Name of a ring light color preset.",
|
||||||
"isCommentAutoGenerated" : true
|
"isCommentAutoGenerated" : true
|
||||||
},
|
},
|
||||||
"iCloud Settings Sync" : {
|
"iCloud Sync" : {
|
||||||
"comment" : "Description of a benefit when the user has the premium membership and can sync their iCloud settings.",
|
"comment" : "Title of the section that allows users to enable or disable iCloud sync of their photos and videos.",
|
||||||
"isCommentAutoGenerated" : true
|
"isCommentAutoGenerated" : true
|
||||||
},
|
},
|
||||||
"Last synced %@" : {
|
"Last synced %@" : {
|
||||||
@ -292,8 +292,9 @@
|
|||||||
"comment" : "Benefit description for the \"Premium Colors + Custom Color Picker\" benefit.",
|
"comment" : "Benefit description for the \"Premium Colors + Custom Color Picker\" benefit.",
|
||||||
"isCommentAutoGenerated" : true
|
"isCommentAutoGenerated" : true
|
||||||
},
|
},
|
||||||
"Premium colors, HDR, timers, sync & more" : {
|
"Premium colors, HDR, timers & more" : {
|
||||||
|
"comment" : "A description of the additional features available in the Pro version of the app.",
|
||||||
|
"isCommentAutoGenerated" : true
|
||||||
},
|
},
|
||||||
"Purchase successful! Pro features unlocked." : {
|
"Purchase successful! Pro features unlocked." : {
|
||||||
"comment" : "Announcement read out to the user when a premium purchase is successful.",
|
"comment" : "Announcement read out to the user when a premium purchase is successful.",
|
||||||
@ -483,10 +484,6 @@
|
|||||||
"comment" : "A button label that prompts users to upgrade to the premium version of the app.",
|
"comment" : "A button label that prompts users to upgrade to the premium version of the app.",
|
||||||
"isCommentAutoGenerated" : true
|
"isCommentAutoGenerated" : true
|
||||||
},
|
},
|
||||||
"Upgrade to sync settings across devices" : {
|
|
||||||
"comment" : "A description of the benefit of upgrading to sync settings across devices.",
|
|
||||||
"isCommentAutoGenerated" : true
|
|
||||||
},
|
|
||||||
"Upgrade to unlock 5s and 10s timers" : {
|
"Upgrade to unlock 5s and 10s timers" : {
|
||||||
"comment" : "A message displayed to users who want to upgrade to unlock longer self-timer durations.",
|
"comment" : "A message displayed to users who want to upgrade to unlock longer self-timer durations.",
|
||||||
"isCommentAutoGenerated" : true
|
"isCommentAutoGenerated" : true
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user