|  |  |  | // Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import Foundation | 
					
						
							|  |  |  | import SessionUtilitiesKit | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public class Environment { | 
					
						
							|  |  |  |     public static var shared: Environment? | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public let reachabilityManager: SSKReachabilityManager | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public let audioSession: OWSAudioSession | 
					
						
							|  |  |  |     public let proximityMonitoringManager: OWSProximityMonitoringManager | 
					
						
							|  |  |  |     public let windowManager: OWSWindowManager | 
					
						
							|  |  |  |     public var isRequestingPermission: Bool | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // Note: This property is configured after Environment is created. | 
					
						
							|  |  |  |     public let callManager: Atomic<CallManagerProtocol?> = Atomic(nil) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // Note: This property is configured after Environment is created. | 
					
						
							|  |  |  |     public let notificationsManager: Atomic<NotificationsProtocol?> = Atomic(nil) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public var isComplete: Bool { | 
					
						
							|  |  |  |         (notificationsManager.wrappedValue != nil) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Initialization | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public init( | 
					
						
							|  |  |  |         reachabilityManager: SSKReachabilityManager, | 
					
						
							|  |  |  |         audioSession: OWSAudioSession, | 
					
						
							|  |  |  |         proximityMonitoringManager: OWSProximityMonitoringManager, | 
					
						
							|  |  |  |         windowManager: OWSWindowManager | 
					
						
							|  |  |  |     ) { | 
					
						
							|  |  |  |         self.reachabilityManager = reachabilityManager | 
					
						
							|  |  |  |         self.audioSession = audioSession | 
					
						
							|  |  |  |         self.proximityMonitoringManager = proximityMonitoringManager | 
					
						
							|  |  |  |         self.windowManager = windowManager | 
					
						
							|  |  |  |         self.isRequestingPermission = false | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         if Environment.shared == nil { | 
					
						
							|  |  |  |             Environment.shared = self | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     // MARK: - Functions | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     public static func clearSharedForTests() { | 
					
						
							|  |  |  |         shared = nil | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // MARK: - Objective C Support | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @objc(SMKEnvironment) | 
					
						
							|  |  |  | public class SMKEnvironment: NSObject { | 
					
						
							|  |  |  |     @objc public static let shared: SMKEnvironment = SMKEnvironment() | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     @objc public var audioSession: OWSAudioSession? { Environment.shared?.audioSession } | 
					
						
							|  |  |  |     @objc public var windowManager: OWSWindowManager? { Environment.shared?.windowManager } | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     @objc public var isRequestingPermission: Bool { (Environment.shared?.isRequestingPermission == true) } | 
					
						
							|  |  |  | } |