From 0b4ed1175d507be79f96ca5ca03e44c87bd77c20 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Mon, 15 Oct 2018 14:58:15 -0400 Subject: [PATCH] Create AppEnvironment. --- Signal/src/AppDelegate.m | 20 +-- Signal/src/Jobs/MessageFetcherJob.swift | 16 +- Signal/src/Models/AccountManager.swift | 3 +- .../CallNotificationsAdapter.swift | 2 +- .../AdvancedSettingsTableViewController.m | 5 +- ...otificationSettingsOptionsViewController.m | 2 +- .../PrivacySettingsTableViewController.m | 6 +- .../ViewControllers/CallViewController.swift | 4 +- .../ConversationViewController.m | 2 +- .../DebugUI/DebugUINotifications.swift | 2 +- .../HomeView/HomeViewController.m | 4 +- .../OWS2FARegistrationViewController.m | 4 +- .../CodeVerificationViewController.m | 4 +- Signal/src/call/CallService.swift | 106 +++++------- Signal/src/call/OutboundCallInitiator.swift | 13 +- .../src/call/WebRTCCallMessageHandler.swift | 17 +- Signal/src/environment/AppEnvironment.swift | 159 ++++++++++-------- Signal/src/environment/SignalApp.h | 16 +- Signal/src/environment/SignalApp.m | 37 +--- Signal/src/network/PushManager.m | 6 +- Signal/test/Models/AccountManagerTest.swift | 9 +- 21 files changed, 195 insertions(+), 242 deletions(-) diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 6612bb3a3..26cb2c685 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -623,7 +623,7 @@ static NSTimeInterval launchStartedAt; // "Background App Refresh" will not be able to obtain an APN token. Enabling those settings does not // restart the app, so we check every activation for users who haven't yet registered. __unused AnyPromise *promise = - [OWSSyncPushTokensJob runWithAccountManager:SignalApp.sharedApp.accountManager + [OWSSyncPushTokensJob runWithAccountManager:AppEnvironment.shared.accountManager preferences:Environment.shared.preferences]; } @@ -766,10 +766,10 @@ static NSTimeInterval launchStartedAt; // * It can be received if the user taps the "video" button for a contact in the // contacts app. If so, the correct response is to try to initiate a new call // to that user - unless there already is another call in progress. - if (SignalApp.sharedApp.callService.call != nil) { - if ([phoneNumber isEqualToString:SignalApp.sharedApp.callService.call.remotePhoneNumber]) { + if (AppEnvironment.shared.callService.call != nil) { + if ([phoneNumber isEqualToString:AppEnvironment.shared.callService.call.remotePhoneNumber]) { OWSLogWarn(@"trying to upgrade ongoing call to video."); - [SignalApp.sharedApp.callService handleCallKitStartVideo]; + [AppEnvironment.shared.callService handleCallKitStartVideo]; return; } else { OWSLogWarn(@"ignoring INStartVideoCallIntent due to ongoing WebRTC call with another party."); @@ -777,7 +777,7 @@ static NSTimeInterval launchStartedAt; } } - OutboundCallInitiator *outboundCallInitiator = SignalApp.sharedApp.outboundCallInitiator; + OutboundCallInitiator *outboundCallInitiator = AppEnvironment.shared.outboundCallInitiator; OWSAssertDebug(outboundCallInitiator); [outboundCallInitiator initiateCallWithHandle:phoneNumber]; }]; @@ -815,12 +815,12 @@ static NSTimeInterval launchStartedAt; } } - if (SignalApp.sharedApp.callService.call != nil) { + if (AppEnvironment.shared.callService.call != nil) { OWSLogWarn(@"ignoring INStartAudioCallIntent due to ongoing WebRTC call."); return; } - OutboundCallInitiator *outboundCallInitiator = SignalApp.sharedApp.outboundCallInitiator; + OutboundCallInitiator *outboundCallInitiator = AppEnvironment.shared.outboundCallInitiator; OWSAssertDebug(outboundCallInitiator); [outboundCallInitiator initiateCallWithHandle:phoneNumber]; }]; @@ -959,7 +959,7 @@ static NSTimeInterval launchStartedAt; { OWSLogInfo(@"performing background fetch"); [AppReadiness runNowOrWhenAppIsReady:^{ - __block AnyPromise *job = [[SignalApp sharedApp].messageFetcherJob run].then(^{ + __block AnyPromise *job = [AppEnvironment.shared.messageFetcherJob run].then(^{ // HACK: Call completion handler after n seconds. // // We don't currently have a convenient API to know when message fetching is *done* when @@ -1031,11 +1031,11 @@ static NSTimeInterval launchStartedAt; // Fetch messages as soon as possible after launching. In particular, when // launching from the background, without this, we end up waiting some extra // seconds before receiving an actionable push notification. - __unused AnyPromise *messagePromise = [SignalApp.sharedApp.messageFetcherJob run]; + __unused AnyPromise *messagePromise = [AppEnvironment.shared.messageFetcherJob run]; // This should happen at any launch, background or foreground. __unused AnyPromise *pushTokenpromise = - [OWSSyncPushTokensJob runWithAccountManager:SignalApp.sharedApp.accountManager + [OWSSyncPushTokensJob runWithAccountManager:AppEnvironment.shared.accountManager preferences:Environment.shared.preferences]; } diff --git a/Signal/src/Jobs/MessageFetcherJob.swift b/Signal/src/Jobs/MessageFetcherJob.swift index b4fbd63ab..1f0dc6188 100644 --- a/Signal/src/Jobs/MessageFetcherJob.swift +++ b/Signal/src/Jobs/MessageFetcherJob.swift @@ -9,16 +9,14 @@ import SignalServiceKit @objc(OWSMessageFetcherJob) public class MessageFetcherJob: NSObject { -private - var timer : Timer ? - - @objc public override - init() + private var timer : Timer? + + @objc + public override init() { - super - .init() - - SwiftSingletons.register(self) + super.init() + + SwiftSingletons.register(self) } // MARK: Singletons diff --git a/Signal/src/Models/AccountManager.swift b/Signal/src/Models/AccountManager.swift index 99c6a7a72..b3a1dd433 100644 --- a/Signal/src/Models/AccountManager.swift +++ b/Signal/src/Models/AccountManager.swift @@ -18,7 +18,8 @@ public class AccountManager: NSObject { return PushManager.shared() } - @objc public override init() + @objc + public override init() { super.init() diff --git a/Signal/src/UserInterface/Notifications/CallNotificationsAdapter.swift b/Signal/src/UserInterface/Notifications/CallNotificationsAdapter.swift index fe05e43f1..df1b551ec 100644 --- a/Signal/src/UserInterface/Notifications/CallNotificationsAdapter.swift +++ b/Signal/src/UserInterface/Notifications/CallNotificationsAdapter.swift @@ -18,7 +18,7 @@ public class CallNotificationsAdapter: NSObject { // We have to first port *all* the existing UINotification categories to UNNotifications // which is a good thing to do, but in trying to limit the scope of changes that's been // left out for now. - return SignalApp.shared().notificationsManager + return AppEnvironment.shared.notificationsManager } @objc public override init() { diff --git a/Signal/src/ViewControllers/AppSettings/AdvancedSettingsTableViewController.m b/Signal/src/ViewControllers/AppSettings/AdvancedSettingsTableViewController.m index bdb02ad8b..d198c2287 100644 --- a/Signal/src/ViewControllers/AppSettings/AdvancedSettingsTableViewController.m +++ b/Signal/src/ViewControllers/AppSettings/AdvancedSettingsTableViewController.m @@ -239,8 +239,9 @@ NS_ASSUME_NONNULL_BEGIN - (void)syncPushTokens { - OWSSyncPushTokensJob *job = [[OWSSyncPushTokensJob alloc] initWithAccountManager:SignalApp.sharedApp.accountManager - preferences:Environment.shared.preferences]; + OWSSyncPushTokensJob *job = + [[OWSSyncPushTokensJob alloc] initWithAccountManager:AppEnvironment.shared.accountManager + preferences:Environment.shared.preferences]; job.uploadOnlyIfStale = NO; [job run] .then(^{ diff --git a/Signal/src/ViewControllers/AppSettings/NotificationSettingsOptionsViewController.m b/Signal/src/ViewControllers/AppSettings/NotificationSettingsOptionsViewController.m index b34592a4b..05eca55a7 100644 --- a/Signal/src/ViewControllers/AppSettings/NotificationSettingsOptionsViewController.m +++ b/Signal/src/ViewControllers/AppSettings/NotificationSettingsOptionsViewController.m @@ -56,7 +56,7 @@ [Environment.shared.preferences setNotificationPreviewType:notificationType]; // rebuild callUIAdapter since notification configuration changed. - [SignalApp.sharedApp.callService createCallUIAdapter]; + [AppEnvironment.shared.callService createCallUIAdapter]; [self.navigationController popViewControllerAnimated:YES]; } diff --git a/Signal/src/ViewControllers/AppSettings/PrivacySettingsTableViewController.m b/Signal/src/ViewControllers/AppSettings/PrivacySettingsTableViewController.m index b711f64c6..a71a71af7 100644 --- a/Signal/src/ViewControllers/AppSettings/PrivacySettingsTableViewController.m +++ b/Signal/src/ViewControllers/AppSettings/PrivacySettingsTableViewController.m @@ -298,7 +298,7 @@ NS_ASSUME_NONNULL_BEGIN [self.preferences setIsSystemCallLogEnabled:sender.isOn]; // rebuild callUIAdapter since CallKit configuration changed. - [SignalApp.sharedApp.callService createCallUIAdapter]; + [AppEnvironment.shared.callService createCallUIAdapter]; } - (void)didToggleEnableCallKitSwitch:(UISwitch *)sender @@ -307,7 +307,7 @@ NS_ASSUME_NONNULL_BEGIN [self.preferences setIsCallKitEnabled:sender.isOn]; // rebuild callUIAdapter since CallKit vs not changed. - [SignalApp.sharedApp.callService createCallUIAdapter]; + [AppEnvironment.shared.callService createCallUIAdapter]; // Show/Hide dependent switch: CallKit privacy [self updateTableContents]; @@ -319,7 +319,7 @@ NS_ASSUME_NONNULL_BEGIN [self.preferences setIsCallKitPrivacyEnabled:!sender.isOn]; // rebuild callUIAdapter since CallKit configuration changed. - [SignalApp.sharedApp.callService createCallUIAdapter]; + [AppEnvironment.shared.callService createCallUIAdapter]; } - (void)didToggleUDUnrestrictedAccessSwitch:(UISwitch *)sender diff --git a/Signal/src/ViewControllers/CallViewController.swift b/Signal/src/ViewControllers/CallViewController.swift index 816aadd92..567417bcd 100644 --- a/Signal/src/ViewControllers/CallViewController.swift +++ b/Signal/src/ViewControllers/CallViewController.swift @@ -14,7 +14,7 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver, // Dependencies var callUIAdapter: CallUIAdapter { - return SignalApp.shared().callUIAdapter + return AppEnvironment.shared.callService.callUIAdapter } // Feature Flag @@ -208,7 +208,7 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver, // Subscribe for future call updates call.addObserverAndSyncState(observer: self) - SignalApp.shared().callService.addObserverAndSyncState(observer: self) + AppEnvironment.shared.callService.addObserverAndSyncState(observer: self) assert(callUIAdapter.audioService.delegate == nil) callUIAdapter.audioService.delegate = self diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 22d0cb1f5..efe8a7128 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -277,7 +277,7 @@ typedef enum : NSUInteger { _contactsManager = Environment.shared.contactsManager; _contactsUpdater = SSKEnvironment.shared.contactsUpdater; _messageSender = SSKEnvironment.shared.messageSender; - _outboundCallInitiator = SignalApp.sharedApp.outboundCallInitiator; + _outboundCallInitiator = AppEnvironment.shared.outboundCallInitiator; _primaryStorage = [OWSPrimaryStorage sharedManager]; _networkManager = [TSNetworkManager sharedManager]; _blockingManager = [OWSBlockingManager sharedManager]; diff --git a/Signal/src/ViewControllers/DebugUI/DebugUINotifications.swift b/Signal/src/ViewControllers/DebugUI/DebugUINotifications.swift index 336f97516..e8d1d31b4 100644 --- a/Signal/src/ViewControllers/DebugUI/DebugUINotifications.swift +++ b/Signal/src/ViewControllers/DebugUI/DebugUINotifications.swift @@ -11,7 +11,7 @@ class DebugUINotifications: DebugUIPage { // MARK: Dependencies var notificationsManager: NotificationsManager { - return SignalApp.shared().notificationsManager + return AppEnvironment.shared.notificationsManager } var notificationsAdapter: CallNotificationsAdapter { return AppEnvironment.shared.callNotificationsAdapter diff --git a/Signal/src/ViewControllers/HomeView/HomeViewController.m b/Signal/src/ViewControllers/HomeView/HomeViewController.m index 79e5a9136..571ba004a 100644 --- a/Signal/src/ViewControllers/HomeView/HomeViewController.m +++ b/Signal/src/ViewControllers/HomeView/HomeViewController.m @@ -146,7 +146,7 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations - (void)commonInit { - _accountManager = SignalApp.sharedApp.accountManager; + _accountManager = AppEnvironment.shared.accountManager; _contactsManager = Environment.shared.contactsManager; _messageSender = SSKEnvironment.shared.messageSender; _blocklistCache = [OWSBlockListCache new]; @@ -939,7 +939,7 @@ NSString *const kArchivedConversationsReuseIdentifier = @"kArchivedConversations { OWSAssertIsOnMainThread(); OWSLogInfo(@"beggining refreshing."); - [SignalApp.sharedApp.messageFetcherJob run].ensure(^{ + [AppEnvironment.shared.messageFetcherJob run].ensure(^{ OWSLogInfo(@"ending refreshing."); [refreshControl endRefreshing]; }); diff --git a/Signal/src/ViewControllers/OWS2FARegistrationViewController.m b/Signal/src/ViewControllers/OWS2FARegistrationViewController.m index 20c47c5ba..2d573478d 100644 --- a/Signal/src/ViewControllers/OWS2FARegistrationViewController.m +++ b/Signal/src/ViewControllers/OWS2FARegistrationViewController.m @@ -31,7 +31,7 @@ NS_ASSUME_NONNULL_BEGIN return self; } - _accountManager = SignalApp.sharedApp.accountManager; + _accountManager = AppEnvironment.shared.accountManager; return self; } @@ -43,7 +43,7 @@ NS_ASSUME_NONNULL_BEGIN return self; } - _accountManager = SignalApp.sharedApp.accountManager; + _accountManager = AppEnvironment.shared.accountManager; return self; } diff --git a/Signal/src/ViewControllers/Registration/CodeVerificationViewController.m b/Signal/src/ViewControllers/Registration/CodeVerificationViewController.m index 2ad433b20..5ddc42e25 100644 --- a/Signal/src/ViewControllers/Registration/CodeVerificationViewController.m +++ b/Signal/src/ViewControllers/Registration/CodeVerificationViewController.m @@ -45,7 +45,7 @@ NS_ASSUME_NONNULL_BEGIN return self; } - _accountManager = SignalApp.sharedApp.accountManager; + _accountManager = AppEnvironment.shared.accountManager; return self; } @@ -57,7 +57,7 @@ NS_ASSUME_NONNULL_BEGIN return self; } - _accountManager = SignalApp.sharedApp.accountManager; + _accountManager = AppEnvironment.shared.accountManager; return self; } diff --git a/Signal/src/call/CallService.swift b/Signal/src/call/CallService.swift index 1a022d2ff..ef7dda9c2 100644 --- a/Signal/src/call/CallService.swift +++ b/Signal/src/call/CallService.swift @@ -147,28 +147,25 @@ private class SignalCallData: NSObject { } } - required init(call - : SignalCall) { self.call = call + required init(call: SignalCall) { + self.call = call - let(callConnectedPromise, callConnectedResolver) - = Promise.pending() self.callConnectedPromise = callConnectedPromise self.callConnectedResolver - = callConnectedResolver + let (callConnectedPromise, callConnectedResolver) = Promise.pending() + self.callConnectedPromise = callConnectedPromise + self.callConnectedResolver = callConnectedResolver - let(peerConnectionClientPromise, peerConnectionClientResolver) - = Promise.pending() self.peerConnectionClientPromise - = peerConnectionClientPromise self.peerConnectionClientResolver = peerConnectionClientResolver + let (peerConnectionClientPromise, peerConnectionClientResolver) = Promise.pending() + self.peerConnectionClientPromise = peerConnectionClientPromise + self.peerConnectionClientResolver = peerConnectionClientResolver - let(readyToSendIceUpdatesPromise, readyToSendIceUpdatesResolver) - = Promise.pending() self.readyToSendIceUpdatesPromise - = readyToSendIceUpdatesPromise self.readyToSendIceUpdatesResolver = readyToSendIceUpdatesResolver + let (readyToSendIceUpdatesPromise, readyToSendIceUpdatesResolver) = Promise.pending() + self.readyToSendIceUpdatesPromise = readyToSendIceUpdatesPromise + self.readyToSendIceUpdatesResolver = readyToSendIceUpdatesResolver - super - .init() - - SwiftSingletons.register(self) } + super.init() + } - deinit - { + deinit { Logger.debug("[SignalCallData] deinit") } @@ -205,23 +202,17 @@ private class SignalCallData: NSObject { var observers = [Weak]() - // MARK: Dependencies - - // Exposed by environment.m + // Exposed by environment.m - @objc public var callUIAdapter : CallUIAdapter ! + @objc public var callUIAdapter: CallUIAdapter! - // MARK: Class + // MARK: Class - static let fallbackIceServer - = RTCIceServer(urlStrings - : ["stun:stun1.l.google.com:19302"]) + static let fallbackIceServer = RTCIceServer(urlStrings: ["stun:stun1.l.google.com:19302"]) - // MARK: Ivars + // MARK: Ivars - fileprivate var callData : SignalCallData - ? - { + fileprivate var callData: SignalCallData? { didSet { AssertIsOnMainThread() @@ -293,57 +284,48 @@ private class SignalCallData: NSObject { } } - @objc public override init() { super - .init() + @objc public override init() { - SwiftSingletons - .register(self) + super.init() - self - .createCallUIAdapter() + SwiftSingletons.register(self) - NotificationCenter.default - .addObserver(self, selector - : #selector(didEnterBackground), name - : NSNotification.Name.OWSApplicationDidEnterBackground, object - : nil) - NotificationCenter.default.addObserver( - self, selector - : #selector(didBecomeActive), name - : NSNotification.Name.OWSApplicationDidBecomeActive, object - : nil) } + NotificationCenter.default.addObserver(self, + selector: #selector(didEnterBackground), + name: NSNotification.Name.OWSApplicationDidEnterBackground, + object: nil) + NotificationCenter.default.addObserver(self, + selector: #selector(didBecomeActive), + name: NSNotification.Name.OWSApplicationDidBecomeActive, + object: nil) + } - deinit - { + deinit { NotificationCenter.default.removeObserver(self) } - + // MARK: - Dependencies - -private - var contactsManager : OWSContactsManager + + private var contactsManager : OWSContactsManager { return Environment.shared.contactsManager } - -private - var messageSender : MessageSender + + private var messageSender : MessageSender { return SSKEnvironment.shared.messageSender } - -private - var accountManager : AccountManager + + private var accountManager : AccountManager { return AppEnvironment.shared.accountManager } - -private - var notificationsAdapter : CallNotificationsAdapter + + private var notificationsAdapter : CallNotificationsAdapter { return AppEnvironment.shared.callNotificationsAdapter } - + // MARK: - Notifications @objc func didEnterBackground() { @@ -356,8 +338,6 @@ private self.updateIsVideoEnabled() } - // MARK: - - /** * Choose whether to use CallKit or a Notification backed interface for calling. */ diff --git a/Signal/src/call/OutboundCallInitiator.swift b/Signal/src/call/OutboundCallInitiator.swift index 2a694c2a2..021b03462 100644 --- a/Signal/src/call/OutboundCallInitiator.swift +++ b/Signal/src/call/OutboundCallInitiator.swift @@ -20,14 +20,12 @@ import SignalMessaging // MARK: - Dependencies -private - var contactsManager : OWSContactsManager + private var contactsManager : OWSContactsManager { return Environment.shared.contactsManager } -private - var contactsUpdater : ContactsUpdater + private var contactsUpdater : ContactsUpdater { return SSKEnvironment.shared.contactsUpdater } @@ -53,9 +51,10 @@ private */ @discardableResult @objc public func initiateCall(recipientId: String, isVideo: Bool) -> Bool { - // Rather than an init-assigned dependency property, we access `callUIAdapter` via Environment - // because it can change after app launch due to user settings - let callUIAdapter = SignalApp.shared().callUIAdapter + guard let callUIAdapter = AppEnvironment.shared.callService.callUIAdapter else { + owsFailDebug("missing callUIAdapter") + return false + } guard let frontmostViewController = UIApplication.shared.frontmostViewController else { owsFailDebug("could not identify frontmostViewController") return false diff --git a/Signal/src/call/WebRTCCallMessageHandler.swift b/Signal/src/call/WebRTCCallMessageHandler.swift index 3c350ed60..52a294f39 100644 --- a/Signal/src/call/WebRTCCallMessageHandler.swift +++ b/Signal/src/call/WebRTCCallMessageHandler.swift @@ -11,30 +11,27 @@ public class WebRTCCallMessageHandler: NSObject, OWSCallMessageHandler { // MARK: Initializers - @objc public override init() + @objc + public override init() { - super - .init() + super.init() - SwiftSingletons.register(self) + SwiftSingletons.register(self) } // MARK: - Dependencies -private - var messageSender : MessageSender + private var messageSender : MessageSender { return SSKEnvironment.shared.messageSender } -private - var accountManager : AccountManager + private var accountManager : AccountManager { return AppEnvironment.shared.accountManager } -private - var callService : CallService + private var callService : CallService { return AppEnvironment.shared.callService } diff --git a/Signal/src/environment/AppEnvironment.swift b/Signal/src/environment/AppEnvironment.swift index c0f49b7b5..71fb474c0 100644 --- a/Signal/src/environment/AppEnvironment.swift +++ b/Signal/src/environment/AppEnvironment.swift @@ -3,87 +3,100 @@ // import Foundation - //import PromiseKit - //import PushKit - import SignalServiceKit import SignalMessaging - - @objc public class AppEnvironment : NSObject { - -private - static var _shared : AppEnvironment = AppEnvironment() - - @objc public class var shared : AppEnvironment { - get { return _shared } set - { +import SignalServiceKit +import SignalMessaging + +@objc public class AppEnvironment : NSObject { + + private static var _shared : AppEnvironment = AppEnvironment() + + @objc + public class var shared : AppEnvironment { + get { + return _shared + } + set { _shared = newValue } } - - @objc public var callMessageHandler : WebRTCCallMessageHandler - - @objc public var callService : CallService - - @objc public var outboundCallInitiator - : OutboundCallInitiator - - @objc public var messageFetcherJob : MessageFetcherJob - - @objc public var notificationsManager : NotificationsManager - - @objc public var accountManager - : AccountManager - - @objc public var callNotificationsAdapter : CallNotificationsAdapter - - @objc public init(callMessageHandler - : WebRTCCallMessageHandler, callService - : CallService, outboundCallInitiator - : OutboundCallInitiator, messageFetcherJob - : MessageFetcherJob, notificationsManager - : NotificationsManager, accountManager - : AccountManager, callNotificationsAdapter - : CallNotificationsAdapter) + + @objc + public var callMessageHandler : WebRTCCallMessageHandler + + @objc + public var callService : CallService + + @objc + public var outboundCallInitiator : OutboundCallInitiator + + @objc + public var messageFetcherJob : MessageFetcherJob + + @objc + public var notificationsManager : NotificationsManager + + @objc + public var accountManager : AccountManager + + @objc + public var callNotificationsAdapter : CallNotificationsAdapter + + @objc + public init(callMessageHandler : WebRTCCallMessageHandler, + callService : CallService, + outboundCallInitiator : OutboundCallInitiator, + messageFetcherJob : MessageFetcherJob, + notificationsManager : NotificationsManager, + accountManager : AccountManager, + callNotificationsAdapter : CallNotificationsAdapter) { - self.callMessageHandler = callMessageHandler self.callService = callService self.outboundCallInitiator - = outboundCallInitiator self.messageFetcherJob = messageFetcherJob self.notificationsManager - = notificationsManager self.accountManager = accountManager self.callNotificationsAdapter - = callNotificationsAdapter - - super - .init() - - SwiftSingletons.register(self) - - setup() + self.callMessageHandler = callMessageHandler + self.callService = callService + self.outboundCallInitiator = outboundCallInitiator + self.messageFetcherJob = messageFetcherJob + self.notificationsManager = notificationsManager + self.accountManager = accountManager + self.callNotificationsAdapter = callNotificationsAdapter + + super + .init() + + SwiftSingletons.register(self) + + setup() } - -private - override init() + + private override init() { - let accountManager = AccountManager() let notificationsManager - = NotificationsManager() let callNotificationsAdapter = CallNotificationsAdapter() let callService - = CallService() let callMessageHandler = WebRTCCallMessageHandler() let outboundCallInitiator - = OutboundCallInitiator() let messageFetcherJob = MessageFetcherJob() - - self.callMessageHandler - = callMessageHandler self.callService = callService self.outboundCallInitiator - = outboundCallInitiator self.messageFetcherJob = messageFetcherJob self.notificationsManager - = notificationsManager self.accountManager = accountManager self.callNotificationsAdapter - = callNotificationsAdapter - - super - .init() - - SwiftSingletons.register(self) - - setup() + let accountManager = AccountManager() + let notificationsManager = NotificationsManager() + let callNotificationsAdapter = CallNotificationsAdapter() + let callService = CallService() + let callMessageHandler = WebRTCCallMessageHandler() + let outboundCallInitiator = OutboundCallInitiator() + let messageFetcherJob = MessageFetcherJob() + + self.callMessageHandler = callMessageHandler + self.callService = callService + self.outboundCallInitiator = outboundCallInitiator + self.messageFetcherJob = messageFetcherJob + self.notificationsManager = notificationsManager + self.accountManager = accountManager + self.callNotificationsAdapter = callNotificationsAdapter + + super.init() + + SwiftSingletons.register(self) + + setup() } - -private - func setup() + + private func setup() { + callService.createCallUIAdapter() + // Hang certain singletons on SSKEnvironment too. - SSKEnvironment.shared.notificationsManager = notificationsManager SSKEnvironment.shared.callMessageHandler - = callMessageHandler + SSKEnvironment.shared.notificationsManager = notificationsManager + SSKEnvironment.shared.callMessageHandler = callMessageHandler } } diff --git a/Signal/src/environment/SignalApp.h b/Signal/src/environment/SignalApp.h index d84ac11c2..eddb77594 100644 --- a/Signal/src/environment/SignalApp.h +++ b/Signal/src/environment/SignalApp.h @@ -17,20 +17,18 @@ NS_ASSUME_NONNULL_BEGIN @class OutboundCallInitiator; @class TSThread; -// TODO: Pull out singletons to MainAppEnvironment? @interface SignalApp : NSObject @property (nonatomic, nullable, weak) HomeViewController *homeViewController; @property (nonatomic, nullable, weak) OWSNavigationController *signUpFlowNavigationController; -// TODO: Convert to singletons? -@property (nonatomic, readonly) OWSWebRTCCallMessageHandler *callMessageHandler; -@property (nonatomic, readonly) CallService *callService; -@property (nonatomic, readonly) CallUIAdapter *callUIAdapter; -@property (nonatomic, readonly) OutboundCallInitiator *outboundCallInitiator; -@property (nonatomic, readonly) OWSMessageFetcherJob *messageFetcherJob; -@property (nonatomic, readonly) NotificationsManager *notificationsManager; -@property (nonatomic, readonly) AccountManager *accountManager; +//@property (nonatomic, readonly) OWSWebRTCCallMessageHandler *callMessageHandler; +//@property (nonatomic, readonly) CallService *callService; +//@property (nonatomic, readonly) CallUIAdapter *callUIAdapter; +//@property (nonatomic, readonly) OutboundCallInitiator *outboundCallInitiator; +//@property (nonatomic, readonly) OWSMessageFetcherJob *messageFetcherJob; +//@property (nonatomic, readonly) NotificationsManager *notificationsManager; +//@property (nonatomic, readonly) AccountManager *accountManager; - (instancetype)init NS_UNAVAILABLE; diff --git a/Signal/src/environment/SignalApp.m b/Signal/src/environment/SignalApp.m index 7c67ff63a..27159cfb0 100644 --- a/Signal/src/environment/SignalApp.m +++ b/Signal/src/environment/SignalApp.m @@ -49,41 +49,6 @@ NS_ASSUME_NONNULL_BEGIN object:nil]; } -- (OWSWebRTCCallMessageHandler *)callMessageHandler -{ - return AppEnvironment.shared.callMessageHandler; -} - -- (CallService *)callService -{ - return AppEnvironment.shared.callService; -} - -- (CallUIAdapter *)callUIAdapter -{ - return AppEnvironment.shared.callService.callUIAdapter; -} - -- (OutboundCallInitiator *)outboundCallInitiator -{ - return AppEnvironment.shared.outboundCallInitiator; -} - -- (OWSMessageFetcherJob *)messageFetcherJob -{ - return AppEnvironment.shared.messageFetcherJob; -} - -- (NotificationsManager *)notificationsManager -{ - return AppEnvironment.shared.notificationsManager; -} - -- (AccountManager *)accountManager -{ - return AppEnvironment.shared.accountManager; -} - #pragma mark - View Convenience Methods - (void)presentConversationForRecipientId:(NSString *)recipientId animated:(BOOL)isAnimated @@ -157,7 +122,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)didChangeCallLoggingPreference:(NSNotification *)notitication { - [self.callService createCallUIAdapter]; + [AppEnvironment.shared.callService createCallUIAdapter]; } #pragma mark - Methods diff --git a/Signal/src/network/PushManager.m b/Signal/src/network/PushManager.m index fa12f94be..5933fe5f0 100644 --- a/Signal/src/network/PushManager.m +++ b/Signal/src/network/PushManager.m @@ -54,10 +54,10 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe - (instancetype)initDefault { - return [self initWithMessageFetcherJob:SignalApp.sharedApp.messageFetcherJob + return [self initWithMessageFetcherJob:AppEnvironment.shared.messageFetcherJob primaryStorage:[OWSPrimaryStorage sharedManager] messageSender:SSKEnvironment.shared.messageSender - notificationsManager:SignalApp.sharedApp.notificationsManager]; + notificationsManager:AppEnvironment.shared.notificationsManager]; } - (instancetype)initWithMessageFetcherJob:(OWSMessageFetcherJob *)messageFetcherJob @@ -89,7 +89,7 @@ NSString *const Signal_Message_MarkAsRead_Identifier = @"Signal_Message_MarkAsRe - (CallUIAdapter *)callUIAdapter { - return SignalApp.sharedApp.callService.callUIAdapter; + return AppEnvironment.shared.callService.callUIAdapter; } - (void)handleMessageRead:(NSNotification *)notification diff --git a/Signal/test/Models/AccountManagerTest.swift b/Signal/test/Models/AccountManagerTest.swift index 6c19e398b..f749f5a85 100644 --- a/Signal/test/Models/AccountManagerTest.swift +++ b/Signal/test/Models/AccountManagerTest.swift @@ -42,10 +42,11 @@ class FailingTSAccountManager: TSAccountManager { } class VerifyingTSAccountManager: FailingTSAccountManager { - override func verifyAccount(withCode - : String, pin - : String ?, success : @escaping()->Void, failure - : @escaping(Error)->Void) { success() } s + override func verifyAccount(withCode: String, + pin: String?, + success: @escaping () -> Void, failure: @escaping (Error) -> Void) { + success() + } } class TokenObtainingTSAccountManager: VerifyingTSAccountManager {