From ffa69b3502236f06fd8975373197c5781f2fb4ef Mon Sep 17 00:00:00 2001 From: Matthew Chen <charlesmchen@gmail.com> Date: Wed, 29 Nov 2017 11:01:30 -0500 Subject: [PATCH 1/3] Add application context class. --- Signal/src/AppDelegate.m | 25 ++++++++++++++++++++++++- SignalServiceKit/src/Util/AppContext.h | 18 ++++++++++++++++++ SignalServiceKit/src/Util/AppContext.m | 21 +++++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100755 SignalServiceKit/src/Util/AppContext.h create mode 100755 SignalServiceKit/src/Util/AppContext.m diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index fff346c7c..e06a473b0 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -25,6 +25,7 @@ #import "ViewControllerUtils.h" #import <AxolotlKit/SessionCipher.h> #import <SignalMessaging/SignalMessaging.h> +#import <SignalServiceKit/AppContext.h> #import <SignalServiceKit/NSUserDefaults+OWS.h> #import <SignalServiceKit/OWSBatchMessageProcessor.h> #import <SignalServiceKit/OWSDisappearingMessagesJob.h> @@ -50,7 +51,7 @@ static NSString *const kInitialViewControllerIdentifier = @"UserInitialViewContr static NSString *const kURLSchemeSGNLKey = @"sgnl"; static NSString *const kURLHostVerifyPrefix = @"verify"; -@interface AppDelegate () +@interface AppDelegate () <AppContext> @property (nonatomic) UIWindow *screenProtectionWindow; @property (nonatomic) OWSContactsSyncing *contactsSyncing; @@ -89,6 +90,10 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + + // This should be the first thing we do. + SetCurrentAppContext(self); + BOOL loggingIsEnabled; #ifdef DEBUG // Specified at Product -> Scheme -> Edit Scheme -> Test -> Arguments -> Environment to avoid things like @@ -968,4 +973,22 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; [AppUpdateNag.sharedInstance showAppUpgradeNagIfNecessary]; } +#pragma mark - AppContext + +- (BOOL)isMainApp +{ + return YES; +} + +- (BOOL)isMainAppAndActive +{ + return [UIApplication sharedApplication].applicationState == UIApplicationStateActive; +} + +- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler: + (BackgroundTaskExpirationHandler)expirationHandler +{ + return [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:expirationHandler]; +} + @end diff --git a/SignalServiceKit/src/Util/AppContext.h b/SignalServiceKit/src/Util/AppContext.h new file mode 100755 index 000000000..705c4272e --- /dev/null +++ b/SignalServiceKit/src/Util/AppContext.h @@ -0,0 +1,18 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +typedef void (^BackgroundTaskExpirationHandler)(void); + +@protocol AppContext <NSObject> + +- (BOOL)isMainApp; +- (BOOL)isMainAppAndActive; + +- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler: + (BackgroundTaskExpirationHandler)expirationHandler; + +@end + +id<AppContext> CurrentAppContext(); +void SetCurrentAppContext(id<AppContext> appContext); diff --git a/SignalServiceKit/src/Util/AppContext.m b/SignalServiceKit/src/Util/AppContext.m new file mode 100755 index 000000000..816eec5c4 --- /dev/null +++ b/SignalServiceKit/src/Util/AppContext.m @@ -0,0 +1,21 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import "AppContext.h" + +static id<AppContext> currentAppContext = nil; + +id<AppContext> CurrentAppContext() +{ + OWSCAssert(currentAppContext); + + return currentAppContext; +} + +void SetCurrentAppContext(id<AppContext> appContext) +{ + OWSCAssert(!currentAppContext); + + currentAppContext = appContext; +} From 66fae5bd5484ee124bac1e0efad2c92636e786c9 Mon Sep 17 00:00:00 2001 From: Matthew Chen <charlesmchen@gmail.com> Date: Wed, 29 Nov 2017 14:51:39 -0500 Subject: [PATCH 2/3] Clean up ahead of PR. --- Signal.xcodeproj/project.pbxproj | 8 +++++++- Signal/src/AppDelegate.m | 24 +++--------------------- Signal/src/util/MainAppContext.h | 9 +++++++++ Signal/src/util/MainAppContext.m | 25 +++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 Signal/src/util/MainAppContext.h create mode 100644 Signal/src/util/MainAppContext.m diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index 5ba2b140a..653cdb347 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -35,6 +35,7 @@ 348F2EAE1F0D21BC00D4ECE0 /* DeviceSleepManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 348F2EAD1F0D21BC00D4ECE0 /* DeviceSleepManager.swift */; }; 3497DBEC1ECE257500DB2605 /* OWSCountryMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 3497DBEB1ECE257500DB2605 /* OWSCountryMetadata.m */; }; 3497DBEF1ECE2E4700DB2605 /* DomainFrontingCountryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3497DBEE1ECE2E4700DB2605 /* DomainFrontingCountryViewController.m */; }; + 34B0796D1FCF46B100E248C2 /* MainAppContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B0796B1FCF46B000E248C2 /* MainAppContext.m */; }; 34B3F8711E8DF1700035BE1A /* AboutTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8351E8DF1700035BE1A /* AboutTableViewController.m */; }; 34B3F8721E8DF1700035BE1A /* AdvancedSettingsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F8371E8DF1700035BE1A /* AdvancedSettingsTableViewController.m */; }; 34B3F8741E8DF1700035BE1A /* AttachmentSharing.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B3F83A1E8DF1700035BE1A /* AttachmentSharing.m */; }; @@ -506,6 +507,8 @@ 3497DBEB1ECE257500DB2605 /* OWSCountryMetadata.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OWSCountryMetadata.m; sourceTree = "<group>"; }; 3497DBED1ECE2E4700DB2605 /* DomainFrontingCountryViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DomainFrontingCountryViewController.h; sourceTree = "<group>"; }; 3497DBEE1ECE2E4700DB2605 /* DomainFrontingCountryViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DomainFrontingCountryViewController.m; sourceTree = "<group>"; }; + 34B0796B1FCF46B000E248C2 /* MainAppContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainAppContext.m; sourceTree = "<group>"; }; + 34B0796C1FCF46B000E248C2 /* MainAppContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainAppContext.h; sourceTree = "<group>"; }; 34B3F8341E8DF1700035BE1A /* AboutTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutTableViewController.h; sourceTree = "<group>"; }; 34B3F8351E8DF1700035BE1A /* AboutTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AboutTableViewController.m; sourceTree = "<group>"; }; 34B3F8361E8DF1700035BE1A /* AdvancedSettingsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdvancedSettingsTableViewController.h; sourceTree = "<group>"; }; @@ -1578,6 +1581,8 @@ 76EB04EA18170B33006006FC /* FunctionalUtil.h */, 76EB04EB18170B33006006FC /* FunctionalUtil.m */, 455AC69A1F4F79E500134004 /* ImageCache.swift */, + 34B0796C1FCF46B000E248C2 /* MainAppContext.h */, + 34B0796B1FCF46B000E248C2 /* MainAppContext.m */, 34CA1C231F706B5400E51C51 /* NSAttributedString+OWS.h */, 34CA1C241F706B5400E51C51 /* NSAttributedString+OWS.m */, 76EB04EC18170B33006006FC /* NumberUtil.h */, @@ -1597,6 +1602,7 @@ 4579431D1E7C8CE9008ED0C0 /* Pastelog.m */, 450DF2041E0D74AC003D14BE /* Platform.swift */, 4542F0951EBB9E9A00C7EE92 /* Promise+retainUntilComplete.swift */, + 45360B8C1F9521F800FA666C /* Searcher.swift */, 76EB04F518170B33006006FC /* StringUtil.h */, 76EB04F618170B33006006FC /* StringUtil.m */, 4521C3BF1F59F3BA00B4C582 /* TextFieldHelper.swift */, @@ -1610,7 +1616,6 @@ 76EB04FB18170B33006006FC /* Util.h */, 45F170D51E315310003FC1F2 /* Weak.swift */, 45F170CB1E310E22003FC1F2 /* WeakTimer.swift */, - 45360B8C1F9521F800FA666C /* Searcher.swift */, ); path = util; sourceTree = "<group>"; @@ -2575,6 +2580,7 @@ 34F308A21ECB469700BB7697 /* OWSBezierPathView.m in Sources */, 34CE88E71F2FB9A10098030F /* ProfileViewController.m in Sources */, 348F2EAE1F0D21BC00D4ECE0 /* DeviceSleepManager.swift in Sources */, + 34B0796D1FCF46B100E248C2 /* MainAppContext.m in Sources */, 34E3EF101EFC2684007F6822 /* DebugUIPage.m in Sources */, 34D1F0AE1F867BFC0066283D /* OWSMessageCell.m in Sources */, 451686AB1F520CDA00AC3D4B /* MultiDeviceProfileKeyUpdateJob.swift in Sources */, diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index e06a473b0..03bbebfb6 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -8,6 +8,7 @@ #import "CodeVerificationViewController.h" #import "DebugLogger.h" #import "Environment.h" +#import "MainAppContext.h" #import "NotificationsManager.h" #import "OWSContactsManager.h" #import "OWSContactsSyncing.h" @@ -25,7 +26,6 @@ #import "ViewControllerUtils.h" #import <AxolotlKit/SessionCipher.h> #import <SignalMessaging/SignalMessaging.h> -#import <SignalServiceKit/AppContext.h> #import <SignalServiceKit/NSUserDefaults+OWS.h> #import <SignalServiceKit/OWSBatchMessageProcessor.h> #import <SignalServiceKit/OWSDisappearingMessagesJob.h> @@ -51,7 +51,7 @@ static NSString *const kInitialViewControllerIdentifier = @"UserInitialViewContr static NSString *const kURLSchemeSGNLKey = @"sgnl"; static NSString *const kURLHostVerifyPrefix = @"verify"; -@interface AppDelegate () <AppContext> +@interface AppDelegate () @property (nonatomic) UIWindow *screenProtectionWindow; @property (nonatomic) OWSContactsSyncing *contactsSyncing; @@ -92,7 +92,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // This should be the first thing we do. - SetCurrentAppContext(self); + SetCurrentAppContext([MainAppContext new]); BOOL loggingIsEnabled; #ifdef DEBUG @@ -973,22 +973,4 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; [AppUpdateNag.sharedInstance showAppUpgradeNagIfNecessary]; } -#pragma mark - AppContext - -- (BOOL)isMainApp -{ - return YES; -} - -- (BOOL)isMainAppAndActive -{ - return [UIApplication sharedApplication].applicationState == UIApplicationStateActive; -} - -- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler: - (BackgroundTaskExpirationHandler)expirationHandler -{ - return [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:expirationHandler]; -} - @end diff --git a/Signal/src/util/MainAppContext.h b/Signal/src/util/MainAppContext.h new file mode 100644 index 000000000..fb147d389 --- /dev/null +++ b/Signal/src/util/MainAppContext.h @@ -0,0 +1,9 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import <SignalServiceKit/AppContext.h> + +@interface MainAppContext : NSObject <AppContext> + +@end diff --git a/Signal/src/util/MainAppContext.m b/Signal/src/util/MainAppContext.m new file mode 100644 index 000000000..6040a8f49 --- /dev/null +++ b/Signal/src/util/MainAppContext.m @@ -0,0 +1,25 @@ +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// + +#import "MainAppContext.h" + +@implementation MainAppContext + +- (BOOL)isMainApp +{ + return YES; +} + +- (BOOL)isMainAppAndActive +{ + return [UIApplication sharedApplication].applicationState == UIApplicationStateActive; +} + +- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler: + (BackgroundTaskExpirationHandler)expirationHandler +{ + return [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:expirationHandler]; +} + +@end From 4c31d994984f453226aee368829ed6e7724c82a1 Mon Sep 17 00:00:00 2001 From: Matthew Chen <charlesmchen@gmail.com> Date: Thu, 30 Nov 2017 10:10:30 -0500 Subject: [PATCH 3/3] Respond to CR. --- Signal/src/util/MainAppContext.h | 4 ++++ Signal/src/util/MainAppContext.m | 4 ++++ SignalServiceKit/src/Util/AppContext.h | 4 ++++ SignalServiceKit/src/Util/AppContext.m | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/Signal/src/util/MainAppContext.h b/Signal/src/util/MainAppContext.h index fb147d389..5800a48f4 100644 --- a/Signal/src/util/MainAppContext.h +++ b/Signal/src/util/MainAppContext.h @@ -4,6 +4,10 @@ #import <SignalServiceKit/AppContext.h> +NS_ASSUME_NONNULL_BEGIN + @interface MainAppContext : NSObject <AppContext> @end + +NS_ASSUME_NONNULL_END diff --git a/Signal/src/util/MainAppContext.m b/Signal/src/util/MainAppContext.m index 6040a8f49..ca2e96d39 100644 --- a/Signal/src/util/MainAppContext.m +++ b/Signal/src/util/MainAppContext.m @@ -4,6 +4,8 @@ #import "MainAppContext.h" +NS_ASSUME_NONNULL_BEGIN + @implementation MainAppContext - (BOOL)isMainApp @@ -23,3 +25,5 @@ } @end + +NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Util/AppContext.h b/SignalServiceKit/src/Util/AppContext.h index 705c4272e..70b4f3ed0 100755 --- a/SignalServiceKit/src/Util/AppContext.h +++ b/SignalServiceKit/src/Util/AppContext.h @@ -2,6 +2,8 @@ // Copyright (c) 2017 Open Whisper Systems. All rights reserved. // +NS_ASSUME_NONNULL_BEGIN + typedef void (^BackgroundTaskExpirationHandler)(void); @protocol AppContext <NSObject> @@ -16,3 +18,5 @@ typedef void (^BackgroundTaskExpirationHandler)(void); id<AppContext> CurrentAppContext(); void SetCurrentAppContext(id<AppContext> appContext); + +NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Util/AppContext.m b/SignalServiceKit/src/Util/AppContext.m index 816eec5c4..0216d1c7f 100755 --- a/SignalServiceKit/src/Util/AppContext.m +++ b/SignalServiceKit/src/Util/AppContext.m @@ -4,6 +4,8 @@ #import "AppContext.h" +NS_ASSUME_NONNULL_BEGIN + static id<AppContext> currentAppContext = nil; id<AppContext> CurrentAppContext() @@ -19,3 +21,5 @@ void SetCurrentAppContext(id<AppContext> appContext) currentAppContext = appContext; } + +NS_ASSUME_NONNULL_END