You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/Session/Meta/AppEnvironment.swift

57 lines
1.8 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
//
// stringlint:disable
import Foundation
import SessionUtilitiesKit
import SignalUtilitiesKit
import SessionMessagingKit
public class AppEnvironment {
private static var _shared: AppEnvironment = AppEnvironment()
public class var shared: AppEnvironment {
get { return _shared }
set {
guard SNUtilitiesKit.isRunningTests else {
Log.error("[AppEnvironment] Can only switch environments in tests.")
return
}
_shared = newValue
}
}
public var callManager: SessionCallManager
public var notificationPresenter: NotificationPresenter
public var pushRegistrationManager: PushRegistrationManager
// Stored properties cannot be marked as `@available`, only classes and functions.
// Instead, store a private `Any` and wrap it with a public `@available` getter
private var _userNotificationActionHandler: Any?
public var userNotificationActionHandler: UserNotificationActionHandler {
return _userNotificationActionHandler as! UserNotificationActionHandler
}
private init() {
self.callManager = SessionCallManager()
self.notificationPresenter = NotificationPresenter()
self.pushRegistrationManager = PushRegistrationManager()
self._userNotificationActionHandler = UserNotificationActionHandler()
SwiftSingletons.register(self)
}
public func setup() {
// Hang certain singletons on Environment too.
SessionEnvironment.shared?.callManager.mutate {
$0 = callManager
}
SessionEnvironment.shared?.notificationsManager.mutate {
$0 = notificationPresenter
}
}
}