@@ -39,7 +39,7 @@ final class DeviceDataManager {
3939 didSet {
4040 dispatchPrecondition ( condition: . onQueue( . main) )
4141 setupCGM ( )
42- UserDefaults . appGroup? . cgmManager = cgmManager
42+ UserDefaults . appGroup? . cgmManagerRawValue = cgmManager? . rawValue
4343 }
4444 }
4545
@@ -90,12 +90,12 @@ final class DeviceDataManager {
9090 pumpManager = nil
9191 }
9292
93- if let cgmManager = UserDefaults . appGroup? . cgmManager {
94- self . cgmManager = cgmManager
93+ if let cgmManagerRawValue = UserDefaults . appGroup? . cgmManagerRawValue {
94+ cgmManager = cgmManagerFromRawValue ( cgmManagerRawValue )
9595 } else if isCGMManagerValidPumpManager {
9696 self . cgmManager = pumpManager as? CGMManager
9797 }
98-
98+
9999 remoteDataManager. delegate = self
100100 statusExtensionManager = StatusExtensionDataManager ( deviceDataManager: self )
101101 loopManager = LoopDataManager (
@@ -147,6 +147,32 @@ final class DeviceDataManager {
147147
148148 return Manager . init ( rawState: rawState) as? PumpManagerUI
149149 }
150+
151+ var availableCGMManagers : [ AvailableDevice ] {
152+ return pluginManager. availableCGMManagers + availableStaticCGMManagers
153+ }
154+
155+ public func cgmManagerTypeByIdentifier( _ identifier: String ) -> CGMManagerUI . Type ? {
156+ return pluginManager. getCGMManagerTypeByIdentifier ( identifier) ?? staticCGMManagersByIdentifier [ identifier] as? CGMManagerUI . Type
157+ }
158+
159+ private func cgmManagerTypeFromRawValue( _ rawValue: [ String : Any ] ) -> CGMManager . Type ? {
160+ guard let managerIdentifier = rawValue [ " managerIdentifier " ] as? String else {
161+ return nil
162+ }
163+
164+ return cgmManagerTypeByIdentifier ( managerIdentifier)
165+ }
166+
167+ func cgmManagerFromRawValue( _ rawValue: [ String : Any ] ) -> CGMManagerUI ? {
168+ guard let rawState = rawValue [ " state " ] as? CGMManager . RawStateValue ,
169+ let Manager = cgmManagerTypeFromRawValue ( rawValue)
170+ else {
171+ return nil
172+ }
173+
174+ return Manager . init ( rawState: rawState) as? CGMManagerUI
175+ }
150176
151177}
152178
@@ -295,8 +321,14 @@ extension DeviceDataManager: CGMManagerDelegate {
295321
296322 func cgmManagerDidUpdateState( _ manager: CGMManager ) {
297323 dispatchPrecondition ( condition: . onQueue( queue) )
298- UserDefaults . appGroup? . cgmManager = manager
324+ UserDefaults . appGroup? . cgmManagerRawValue = manager. rawValue
299325 }
326+
327+ func credentialStoragePrefix( for manager: CGMManager ) -> String {
328+ // return string unique to this instance of the CGMManager
329+ return UUID ( ) . uuidString
330+ }
331+
300332}
301333
302334
0 commit comments