Commit 716fa334 by Demid Merzlyakov

IOS-200: shared user defaults for the widget and the app + migrate old user…

IOS-200: shared user defaults for the widget and the app + migrate old user defaults to the new ones.
parent dc481cce
......@@ -41,6 +41,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
ThemeManager.refreshAppearance()
UserDefaults.migrateUserDefaultsToAppGroupsIfNeeded()
if let launchOptions = launchOptions {
log.debug("Launch options: \(launchOptions)")
......
......@@ -51,7 +51,7 @@ class CCPAHelper {
locationPermissionsUndeterminedOnLaunch && !hadLocationsOnLaunch
}
@UserDefaultsOptionalValue("CCPAHelper.canCollectData")
@UserDefaultsOptionalValue("CCPAHelper.canCollectData", userDefaults: UserDefaults.appDefaults)
public var canCollectData: Bool?
private var locationPermissionsUndeterminedOnLaunch: Bool = false
......@@ -70,7 +70,7 @@ class CCPAHelper {
private static let statusUpdateDelayAfterRegistration: TimeInterval = 5
private static let defaultMinimumTimeSinceLastSuccessfulUpdate: TimeInterval = 3600 * 24 * 7 // a week
@UserDefaultsValue("CCPAHelper.shownPrivacyNoticeBefore", defaultValue: false)
@UserDefaultsValue("CCPAHelper.shownPrivacyNoticeBefore", defaultValue: false, userDefaults: UserDefaults.appDefaults)
public var shownPrivacyNoticeBefore: Bool {
didSet {
if shownPrivacyNoticeBefore {
......@@ -79,7 +79,7 @@ class CCPAHelper {
}
}
@UserDefaultsValue("CCPAHelper.policyHasBeenUpdated", defaultValue: false)
@UserDefaultsValue("CCPAHelper.policyHasBeenUpdated", defaultValue: false, userDefaults: UserDefaults.appDefaults)
public private(set) var policyHasBeenUpdated: Bool {
didSet {
if policyHasBeenUpdated {
......@@ -88,18 +88,18 @@ class CCPAHelper {
}
}
@UserDefaultsOptionalValue("CCPAHelper.lastSeenPrivacyPolicyVersion")
@UserDefaultsOptionalValue("CCPAHelper.lastSeenPrivacyPolicyVersion", userDefaults: UserDefaults.appDefaults)
public var lastSeenPrivacyPolicyVersion: Int?
private let log = Logger(componentName: "CCPAHelper")
@UserDefaultsValue("CCPAHelper.isRegistered", defaultValue: false)
@UserDefaultsValue("CCPAHelper.isRegistered", defaultValue: false, userDefaults: UserDefaults.appDefaults)
private var isRegistered: Bool
@UserDefaultsOptionalValue("CCPAHelper.privacyString")
@UserDefaultsOptionalValue("CCPAHelper.privacyString", userDefaults: UserDefaults.appDefaults)
private var privacyString: String?
@UserDefaultsOptionalValue("CCPAHelper.lastUpdateCallData")
@UserDefaultsOptionalValue("CCPAHelper.lastUpdateCallData", userDefaults: UserDefaults.appDefaults)
private var lastSuccessfullUpdateDate: Date?
private var minimumTimeSinceLastSuccessfulUpdate: TimeInterval {
......
......@@ -77,6 +77,7 @@
CDFE458D26566BD50021A29F /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFE458C26566BD50021A29F /* Storage.swift */; };
CDFE459426566D7B0021A29F /* HealthSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFE459326566D7B0021A29F /* HealthSource.swift */; };
CDFE459626566D860021A29F /* FIPSSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDFE459526566D860021A29F /* FIPSSource.swift */; };
CE3A112726CD3CDE00D925C7 /* UserDefaults+OneWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE3A112626CD3CDE00D925C7 /* UserDefaults+OneWeather.swift */; };
CEFE851826948C15003C67D3 /* SmartTextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE851726948C15003C67D3 /* SmartTextProvider.swift */; };
CEFE851C2694986D003C67D3 /* SmartText.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE851B2694986D003C67D3 /* SmartText.swift */; };
CEFE85202694C4BC003C67D3 /* DefaultSmartText.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFE851F2694C4BC003C67D3 /* DefaultSmartText.swift */; };
......@@ -176,6 +177,7 @@
CDFE458C26566BD50021A29F /* Storage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Storage.swift; sourceTree = "<group>"; };
CDFE459326566D7B0021A29F /* HealthSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthSource.swift; sourceTree = "<group>"; };
CDFE459526566D860021A29F /* FIPSSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FIPSSource.swift; sourceTree = "<group>"; };
CE3A112626CD3CDE00D925C7 /* UserDefaults+OneWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults+OneWeather.swift"; sourceTree = "<group>"; };
CEFE851726948C15003C67D3 /* SmartTextProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartTextProvider.swift; sourceTree = "<group>"; };
CEFE851B2694986D003C67D3 /* SmartText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartText.swift; sourceTree = "<group>"; };
CEFE851D2694C477003C67D3 /* SmartTextMacro.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartTextMacro.swift; sourceTree = "<group>"; };
......@@ -378,6 +380,7 @@
CD615FB22655293100B717DB /* CLAuthorizationStatus+Localized.swift */,
CD615FB32655293100B717DB /* UIApplication+Settings.swift */,
CD71B9C5265E629D00803DBB /* String+NewLine.swift */,
CE3A112626CD3CDE00D925C7 /* UserDefaults+OneWeather.swift */,
);
path = Extensions;
sourceTree = "<group>";
......@@ -673,6 +676,7 @@
CD427D19266F5DCE00B4350A /* ShortsSource.swift in Sources */,
CD2D55D8265533F4007B70F4 /* UserDefaultsWrapper.swift in Sources */,
CDD2F8F62665117400B48322 /* NWSAlertsManager.swift in Sources */,
CE3A112726CD3CDE00D925C7 /* UserDefaults+OneWeather.swift in Sources */,
CD11AFE726651BF900EC4BA0 /* LegacyWdtLocation.swift in Sources */,
CD11AFE326651B6300EC4BA0 /* LegacyMigrationManager.swift in Sources */,
CD2D55DD2655377F007B70F4 /* NWSAlertExtendedInfo.swift in Sources */,
......
//
// UserDefaults+OneWeather.swift
// OneWeatherCore
//
// Created by Demid Merzlyakov on 18.08.2021.
//
import Foundation
import OneWeatherAnalytics
extension UserDefaults {
private static let appGroup = "group.com.onelouder.oneweather"
public static var appDefaults: UserDefaults {
if let appGroupDefaults = UserDefaults(suiteName: UserDefaults.appGroup) {
return appGroupDefaults
}
// At least it won't crash, but hopefully we'll never end up here.
assertionFailure("Failed to create a shared user defaults.")
return UserDefaults.standard
}
public static func migrateUserDefaultsToAppGroupsIfNeeded() {
// User Defaults - Old
let userDefaults = UserDefaults.standard
// App Groups Default - New
let groupDefaults = UserDefaults.appDefaults
// Key to track if we migrated
let didMigrateToAppGroups = "DidMigrateToAppGroup_\(UserDefaults.appGroup)"
let log = Logger(componentName: "UserDefaults")
if !groupDefaults.bool(forKey: didMigrateToAppGroups) {
for key in userDefaults.dictionaryRepresentation().keys {
groupDefaults.set(userDefaults.dictionaryRepresentation()[key], forKey: key)
}
groupDefaults.set(true, forKey: didMigrateToAppGroups)
groupDefaults.synchronize()
log.info("Successfully migrated defaults")
} else {
log.info("No need to migrate defaults")
}
}
}
......@@ -34,7 +34,7 @@ public class Settings {
public let delegate = MulticastDelegate<SettingsDelegate>()
private init() {}
@UserDefaultsBasicValue(key: "app_theme")
@UserDefaultsBasicValue(key: "app_theme", userDefaults: UserDefaults.appDefaults)
private var _appTheme = AppTheme.system.rawValue
public var appTheme:AppTheme {
......@@ -61,44 +61,44 @@ public class Settings {
}
}
@UserDefaultsUnitValue(key: "temperature_type")
@UserDefaultsUnitValue(key: "temperature_type", userDefaults: UserDefaults.appDefaults)
public var temperatureType = DefaultSettingsFactory().getSettings().temperatureType
@UserDefaultsUnitValue(key: "wind_speed_type")
@UserDefaultsUnitValue(key: "wind_speed_type", userDefaults: UserDefaults.appDefaults)
public var windSpeedType = DefaultSettingsFactory().getSettings().windSpeedType
@UserDefaultsUnitValue(key: "pressure_type")
@UserDefaultsUnitValue(key: "pressure_type", userDefaults: UserDefaults.appDefaults)
public var pressureType = DefaultSettingsFactory().getSettings().pressureType
@UserDefaultsUnitValue(key: "distance_type")
@UserDefaultsUnitValue(key: "distance_type", userDefaults: UserDefaults.appDefaults)
public var distanceType = DefaultSettingsFactory().getSettings().distanceType
public var locale:Locale {
return Locale(identifier: Localize.currentLanguage())
}
@UserDefaultsBasicValue(key: "pinnedLayers")
@UserDefaultsBasicValue(key: "pinnedLayers", userDefaults: UserDefaults.appDefaults)
public var pinnedLayerIds: [String] = DefaultSettingsFactory().getSettings().pinnedLayerIds
@UserDefaultsBasicValue(key: "selectedLayer")
@UserDefaultsBasicValue(key: "selectedLayer", userDefaults: UserDefaults.appDefaults)
public var selectedLayerId: String = DefaultSettingsFactory().getSettings().selectedLayerId
@UserDefaultsOptionalValue("userQualifiedDate")
@UserDefaultsOptionalValue("userQualifiedDate", userDefaults: UserDefaults.appDefaults)
public var userQualifiedDate: Date?
@UserDefaultsOptionalValue("firstOpenDate")
@UserDefaultsOptionalValue("firstOpenDate", userDefaults: UserDefaults.appDefaults)
public var firstOpenDate: Date?
@UserDefaultsOptionalValue("d3RetentionDate")
@UserDefaultsOptionalValue("d3RetentionDate", userDefaults: UserDefaults.appDefaults)
public var d3RetentionDate: Date?
@UserDefaultsBasicValue(key: "locationDidAdded")
@UserDefaultsBasicValue(key: "locationDidAdded", userDefaults: UserDefaults.appDefaults)
public var locationDidAdded: Bool = false
@UserDefaultsOptionalValue("widgetPromotionTriggerCount")
@UserDefaultsOptionalValue("widgetPromotionTriggerCount", userDefaults: UserDefaults.appDefaults)
public var widgetPromotionTriggerCount: Int?
@UserDefaultsBasicValue(key: "shorts_showed_swipeUp_count")
@UserDefaultsBasicValue(key: "shorts_showed_swipeUp_count", userDefaults: UserDefaults.appDefaults)
public var shortsSwipeUpNudgeShowedCount = 0
#warning("Not implemented!")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment