Merge branch 'charlesmchen/buildBreakage3'

pull/1/head
Matthew Chen 7 years ago
commit f92ef84477

@ -265,6 +265,7 @@
34D8C02B1ED3685800188D7C /* DebugUIContacts.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8C02A1ED3685800188D7C /* DebugUIContacts.m */; };
34D920E720E179C200D51158 /* OWSMessageFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D920E620E179C200D51158 /* OWSMessageFooterView.m */; };
34D99C931F2937CC00D284D6 /* OWSAnalytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D99C911F2937CC00D284D6 /* OWSAnalytics.swift */; };
34D99CE4217509C2000AFB39 /* AppEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D99CE3217509C1000AFB39 /* AppEnvironment.swift */; };
34DB0BED2011548B007B313F /* OWSDatabaseConverterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 34DB0BEC2011548B007B313F /* OWSDatabaseConverterTest.m */; };
34DBF003206BD5A500025978 /* OWSMessageTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34DBEFFF206BD5A400025978 /* OWSMessageTextView.m */; };
34DBF004206BD5A500025978 /* OWSBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 34DBF001206BD5A500025978 /* OWSBubbleView.m */; };
@ -942,6 +943,7 @@
34D920E520E179C100D51158 /* OWSMessageFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSMessageFooterView.h; sourceTree = "<group>"; };
34D920E620E179C200D51158 /* OWSMessageFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSMessageFooterView.m; sourceTree = "<group>"; };
34D99C911F2937CC00D284D6 /* OWSAnalytics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OWSAnalytics.swift; sourceTree = "<group>"; };
34D99CE3217509C1000AFB39 /* AppEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppEnvironment.swift; sourceTree = "<group>"; };
34DB0BEB2011548A007B313F /* OWSDatabaseConverterTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OWSDatabaseConverterTest.h; sourceTree = "<group>"; };
34DB0BEC2011548B007B313F /* OWSDatabaseConverterTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSDatabaseConverterTest.m; sourceTree = "<group>"; };
34DBEFFF206BD5A400025978 /* OWSMessageTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSMessageTextView.m; sourceTree = "<group>"; };
@ -2160,6 +2162,7 @@
76EB041118170B33006006FC /* environment */ = {
isa = PBXGroup;
children = (
34D99CE3217509C1000AFB39 /* AppEnvironment.swift */,
4505C2BD1E648E6E00CEBF41 /* ExperienceUpgrades */,
3461299A1FD1EA9E00532771 /* NotificationsManager.h */,
3461299B1FD1EA9E00532771 /* NotificationsManager.m */,
@ -3295,6 +3298,7 @@
340FC8B4204DAC8D007AEB0F /* OWSBackupSettingsViewController.m in Sources */,
34D1F0871F8678AA0066283D /* ConversationViewItem.m in Sources */,
451A13B11E13DED2000A50FD /* CallNotificationsAdapter.swift in Sources */,
34D99CE4217509C2000AFB39 /* AppEnvironment.swift in Sources */,
348570A820F67575004FF32B /* OWSMessageHeaderView.m in Sources */,
450DF2091E0DD2C6003D14BE /* UserNotificationsAdaptee.swift in Sources */,
34D1F0AB1F867BFC0066283D /* OWSContactOffersCell.m in Sources */,

@ -158,7 +158,9 @@ static NSTimeInterval launchStartedAt;
[AppSetup
setupEnvironmentWithAppSpecificSingletonBlock:^{
[SignalApp.sharedApp createSingletons];
// Create AppEnvironment.
[AppEnvironment.shared setup];
[SignalApp.sharedApp setup];
}
migrationCompletion:^{
OWSAssertIsOnMainThread();
@ -427,7 +429,7 @@ static NSTimeInterval launchStartedAt;
}
OWSLogInfo(@"registered vanilla push token: %@", deviceToken);
[PushRegistrationManager.sharedManager didReceiveVanillaPushToken:deviceToken];
[PushRegistrationManager.shared didReceiveVanillaPushToken:deviceToken];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
@ -442,7 +444,7 @@ static NSTimeInterval launchStartedAt;
OWSLogError(@"failed to register vanilla push token with error: %@", error);
#ifdef DEBUG
OWSLogWarn(@"We're in debug mode. Faking success for remote registration with a fake push identifier");
[PushRegistrationManager.sharedManager didReceiveVanillaPushToken:[[NSMutableData dataWithLength:32] copy]];
[PushRegistrationManager.shared didReceiveVanillaPushToken:[[NSMutableData dataWithLength:32] copy]];
#else
OWSProdError([OWSAnalyticsEvents appDelegateErrorFailedToRegisterForRemoteNotifications]);
[PushRegistrationManager.sharedManager didFailToReceiveVanillaPushTokenWithError:error];
@ -460,7 +462,7 @@ static NSTimeInterval launchStartedAt;
}
OWSLogInfo(@"registered user notification settings");
[PushRegistrationManager.sharedManager didRegisterUserNotificationSettings];
[PushRegistrationManager.shared didRegisterUserNotificationSettings];
}
- (BOOL)application:(UIApplication *)application
@ -621,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];
}
@ -764,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.");
@ -775,7 +777,7 @@ static NSTimeInterval launchStartedAt;
}
}
OutboundCallInitiator *outboundCallInitiator = SignalApp.sharedApp.outboundCallInitiator;
OutboundCallInitiator *outboundCallInitiator = AppEnvironment.shared.outboundCallInitiator;
OWSAssertDebug(outboundCallInitiator);
[outboundCallInitiator initiateCallWithHandle:phoneNumber];
}];
@ -813,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];
}];
@ -957,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
@ -1029,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];
}

@ -9,14 +9,11 @@ import SignalServiceKit
@objc(OWSMessageFetcherJob)
public class MessageFetcherJob: NSObject {
private var timer: Timer?
// MARK: injected dependencies
private let signalService: OWSSignalService
@objc public init(signalService: OWSSignalService) {
self.signalService = signalService
private var timer : Timer?
@objc
public override init()
{
super.init()
SwiftSingletons.register(self)
@ -32,6 +29,12 @@ public class MessageFetcherJob: NSObject {
return SSKEnvironment.shared.messageReceiver
}
private
var signalService : OWSSignalService
{
return OWSSignalService.sharedInstance()
}
// MARK:
@discardableResult

@ -19,7 +19,8 @@ public class AccountManager: NSObject {
}
@objc
public required override init() {
public override init()
{
super.init()
SwiftSingletons.register(self)

@ -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() {

@ -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(^{

@ -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];
}

@ -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

@ -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

@ -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];

@ -11,10 +11,10 @@ class DebugUINotifications: DebugUIPage {
// MARK: Dependencies
var notificationsManager: NotificationsManager {
return SignalApp.shared().notificationsManager
return AppEnvironment.shared.notificationsManager
}
var notificationsAdapter: CallNotificationsAdapter {
return SignalApp.shared().callService.notificationsAdapter
return AppEnvironment.shared.callNotificationsAdapter
}
var messageSender: MessageSender {
return SSKEnvironment.shared.messageSender

@ -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];
});

@ -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;
}

@ -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;
}

@ -202,15 +202,8 @@ private class SignalCallData: NSObject {
var observers = [Weak<CallServiceObserver>]()
// MARK: Dependencies
private let accountManager: AccountManager
private let messageSender: MessageSender
private let contactsManager: OWSContactsManager
private let primaryStorage: OWSPrimaryStorage
// Exposed by environment.m
internal let notificationsAdapter: CallNotificationsAdapter
@objc public var callUIAdapter: CallUIAdapter!
// MARK: Class
@ -291,19 +284,12 @@ private class SignalCallData: NSObject {
}
}
@objc public required init(accountManager: AccountManager, contactsManager: OWSContactsManager, messageSender: MessageSender, notificationsAdapter: CallNotificationsAdapter) {
self.accountManager = accountManager
self.contactsManager = contactsManager
self.messageSender = messageSender
self.notificationsAdapter = notificationsAdapter
self.primaryStorage = OWSPrimaryStorage.shared()
@objc public override init() {
super.init()
SwiftSingletons.register(self)
self.createCallUIAdapter()
NotificationCenter.default.addObserver(self,
selector: #selector(didEnterBackground),
name: NSNotification.Name.OWSApplicationDidEnterBackground,
@ -317,6 +303,30 @@ private class SignalCallData: NSObject {
deinit {
NotificationCenter.default.removeObserver(self)
}
// MARK: - Dependencies
private var contactsManager : OWSContactsManager
{
return Environment.shared.contactsManager
}
private var messageSender : MessageSender
{
return SSKEnvironment.shared.messageSender
}
private var accountManager : AccountManager
{
return AppEnvironment.shared.accountManager
}
private var notificationsAdapter : CallNotificationsAdapter
{
return AppEnvironment.shared.callNotificationsAdapter
}
// MARK: - Notifications
@objc func didEnterBackground() {
AssertIsOnMainThread()

@ -11,18 +11,26 @@ import SignalMessaging
*/
@objc public class OutboundCallInitiator: NSObject {
let contactsManager: OWSContactsManager
let contactsUpdater: ContactsUpdater
@objc public init(contactsManager: OWSContactsManager, contactsUpdater: ContactsUpdater) {
self.contactsManager = contactsManager
self.contactsUpdater = contactsUpdater
@objc public override init() {
super.init()
SwiftSingletons.register(self)
}
// MARK: - Dependencies
private var contactsManager : OWSContactsManager
{
return Environment.shared.contactsManager
}
private var contactsUpdater : ContactsUpdater
{
return SSKEnvironment.shared.contactsUpdater
}
// MARK: -
/**
* |handle| is a user formatted phone number, e.g. from a system contacts entry
*/
@ -42,9 +50,10 @@ import SignalMessaging
*/
@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

@ -9,24 +9,31 @@ import SignalMessaging
@objc(OWSWebRTCCallMessageHandler)
public class WebRTCCallMessageHandler: NSObject, OWSCallMessageHandler {
// MARK: - Properties
// MARK: Initializers
// MARK: Dependencies
@objc
public override init()
{
super.init()
let accountManager: AccountManager
let callService: CallService
let messageSender: MessageSender
SwiftSingletons.register(self)
}
// MARK: Initializers
// MARK: - Dependencies
@objc public required init(accountManager: AccountManager, callService: CallService, messageSender: MessageSender) {
self.accountManager = accountManager
self.callService = callService
self.messageSender = messageSender
private var messageSender : MessageSender
{
return SSKEnvironment.shared.messageSender
}
super.init()
private var accountManager : AccountManager
{
return AppEnvironment.shared.accountManager
}
SwiftSingletons.register(self)
private var callService : CallService
{
return AppEnvironment.shared.callService
}
// MARK: - Call Handlers

@ -0,0 +1,107 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
import Foundation
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 {
guard CurrentAppContext().isRunningTests else {
owsFailDebug("Can only switch environments in tests.")
return
}
_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 var pushRegistrationManager: PushRegistrationManager
@objc
public init(callMessageHandler: WebRTCCallMessageHandler,
callService: CallService,
outboundCallInitiator: OutboundCallInitiator,
messageFetcherJob: MessageFetcherJob,
notificationsManager: NotificationsManager,
accountManager: AccountManager,
callNotificationsAdapter: CallNotificationsAdapter,
pushRegistrationManager: PushRegistrationManager) {
self.callMessageHandler = callMessageHandler
self.callService = callService
self.outboundCallInitiator = outboundCallInitiator
self.messageFetcherJob = messageFetcherJob
self.notificationsManager = notificationsManager
self.accountManager = accountManager
self.callNotificationsAdapter = callNotificationsAdapter
self.pushRegistrationManager = pushRegistrationManager
super.init()
SwiftSingletons.register(self)
}
private override init() {
let accountManager = AccountManager()
let notificationsManager = NotificationsManager()
let callNotificationsAdapter = CallNotificationsAdapter()
let callService = CallService()
let callMessageHandler = WebRTCCallMessageHandler()
let outboundCallInitiator = OutboundCallInitiator()
let messageFetcherJob = MessageFetcherJob()
let pushRegistrationManager = PushRegistrationManager()
self.callMessageHandler = callMessageHandler
self.callService = callService
self.outboundCallInitiator = outboundCallInitiator
self.messageFetcherJob = messageFetcherJob
self.notificationsManager = notificationsManager
self.accountManager = accountManager
self.callNotificationsAdapter = callNotificationsAdapter
self.pushRegistrationManager = pushRegistrationManager
super.init()
SwiftSingletons.register(self)
}
@objc
public func setup() {
callService.createCallUIAdapter()
// Hang certain singletons on SSKEnvironment too.
SSKEnvironment.shared.notificationsManager = notificationsManager
SSKEnvironment.shared.callMessageHandler = callMessageHandler
}
}

@ -20,16 +20,21 @@ public enum PushRegistrationError: Error {
@objc public class PushRegistrationManager: NSObject, PKPushRegistryDelegate {
// MARK: - Dependencies
private var pushManager: PushManager {
return PushManager.shared()
}
// MARK: - Singleton class
@objc(sharedManager)
public static let shared = PushRegistrationManager()
@objc
public static var shared: PushRegistrationManager {
get {
return AppEnvironment.shared.pushRegistrationManager
}
}
private override init() {
override init() {
super.init()
SwiftSingletons.register(self)

@ -17,26 +17,16 @@ 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;
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)sharedApp;
- (void)createSingletons;
- (void)setup;
#pragma mark - Conversation Presentation

@ -15,19 +15,6 @@
NS_ASSUME_NONNULL_BEGIN
@interface SignalApp ()
@property (nonatomic) OWSWebRTCCallMessageHandler *callMessageHandler;
@property (nonatomic) CallService *callService;
@property (nonatomic) OutboundCallInitiator *outboundCallInitiator;
@property (nonatomic) OWSMessageFetcherJob *messageFetcherJob;
@property (nonatomic) NotificationsManager *notificationsManager;
@property (nonatomic) AccountManager *accountManager;
@end
#pragma mark -
@implementation SignalApp
+ (instancetype)sharedApp
@ -55,88 +42,11 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Singletons
- (void)createSingletons
{
OWSAssertDebug(SSKEnvironment.shared.messageSender);
OWSAssertDebug(Environment.shared.contactsManager);
OWSAssertDebug(Environment.shared.preferences);
OWSAssertDebug(SSKEnvironment.shared.networkManager);
OWSAssertDebug(SSKEnvironment.shared.contactsUpdater);
_accountManager = [[AccountManager alloc] init];
_notificationsManager = [NotificationsManager new];
SSKEnvironment.shared.notificationsManager = self.notificationsManager;
- (void)setup {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didChangeCallLoggingPreference:)
name:OWSPreferencesCallLoggingDidChangeNotification
object:nil];
_callService = [[CallService alloc] initWithAccountManager:self.accountManager
contactsManager:Environment.shared.contactsManager
messageSender:SSKEnvironment.shared.messageSender
notificationsAdapter:[OWSCallNotificationsAdapter new]];
_callMessageHandler =
[[OWSWebRTCCallMessageHandler alloc] initWithAccountManager:self.accountManager
callService:self.callService
messageSender:SSKEnvironment.shared.messageSender];
SSKEnvironment.shared.callMessageHandler = self.callMessageHandler;
_outboundCallInitiator =
[[OutboundCallInitiator alloc] initWithContactsManager:Environment.shared.contactsManager
contactsUpdater:SSKEnvironment.shared.contactsUpdater];
_messageFetcherJob = [[OWSMessageFetcherJob alloc] initWithSignalService:[OWSSignalService sharedInstance]];
}
- (OWSWebRTCCallMessageHandler *)callMessageHandler
{
OWSAssertDebug(_callMessageHandler);
return _callMessageHandler;
}
- (CallService *)callService
{
OWSAssertDebug(_callService);
return _callService;
}
- (CallUIAdapter *)callUIAdapter
{
OWSAssertDebug(self.callService.callUIAdapter);
return self.callService.callUIAdapter;
}
- (OutboundCallInitiator *)outboundCallInitiator
{
OWSAssertDebug(_outboundCallInitiator);
return _outboundCallInitiator;
}
- (OWSMessageFetcherJob *)messageFetcherJob
{
OWSAssertDebug(_messageFetcherJob);
return _messageFetcherJob;
}
- (NotificationsManager *)notificationsManager
{
OWSAssertDebug(_notificationsManager);
return _notificationsManager;
}
- (AccountManager *)accountManager
{
OWSAssertDebug(_accountManager);
return _accountManager;
}
#pragma mark - View Convenience Methods
@ -212,7 +122,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)didChangeCallLoggingPreference:(NSNotification *)notitication
{
[self.callService createCallUIAdapter];
[AppEnvironment.shared.callService createCallUIAdapter];
}
#pragma mark - Methods

@ -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

@ -52,6 +52,12 @@ class VerifyingTSAccountManager: FailingTSAccountManager {
class TokenObtainingTSAccountManager: VerifyingTSAccountManager {
}
class VerifyingPushRegistrationManager: PushRegistrationManager {
public override func requestPushTokens() -> Promise<(pushToken: String, voipToken: String)> {
return Promise.value(("a", "b"))
}
}
class AccountManagerTest: SignalBaseTest {
override func setUp() {
@ -112,6 +118,8 @@ class AccountManagerTest: SignalBaseTest {
let sskEnvironment = SSKEnvironment.shared as! MockSSKEnvironment
sskEnvironment.tsAccountManager = tsAccountManager
AppEnvironment.shared.pushRegistrationManager = VerifyingPushRegistrationManager()
let accountManager = AccountManager()
let expectation = self.expectation(description: "should succeed")
@ -142,5 +150,4 @@ class AccountManagerTest: SignalBaseTest {
self.waitForExpectations(timeout: 1.0, handler: nil)
}
}

Loading…
Cancel
Save