|
|
@ -46,10 +46,10 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|
|
|
@interface AppDelegate ()
|
|
|
|
@interface AppDelegate ()
|
|
|
|
|
|
|
|
|
|
|
|
@property (nonatomic) UIWindow *screenProtectionWindow;
|
|
|
|
@property (nonatomic) UIWindow *screenProtectionWindow;
|
|
|
|
@property (nonatomic) UIWindow *databaseViewRegistrationOverlay;
|
|
|
|
|
|
|
|
@property (nonatomic) OWSIncomingMessageReadObserver *incomingMessageReadObserver;
|
|
|
|
@property (nonatomic) OWSIncomingMessageReadObserver *incomingMessageReadObserver;
|
|
|
|
@property (nonatomic) OWSStaleNotificationObserver *staleNotificationObserver;
|
|
|
|
@property (nonatomic) OWSStaleNotificationObserver *staleNotificationObserver;
|
|
|
|
@property (nonatomic) OWSContactsSyncing *contactsSyncing;
|
|
|
|
@property (nonatomic) OWSContactsSyncing *contactsSyncing;
|
|
|
|
|
|
|
|
@property (nonatomic) BOOL hasInitialRootViewController;
|
|
|
|
|
|
|
|
|
|
|
|
@end
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
|
@ -118,15 +118,8 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|
|
|
|
|
|
|
|
|
|
|
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
|
|
|
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
|
|
|
|
|
|
|
|
|
|
|
if ([TSAccountManager isRegistered]) {
|
|
|
|
// Show the launch screen until the async database view registrations are complete.
|
|
|
|
self.window.rootViewController = [[UIStoryboard main] instantiateInitialViewController];
|
|
|
|
self.window.rootViewController = [self loadingRootViewController];
|
|
|
|
} else {
|
|
|
|
|
|
|
|
RegistrationViewController *viewController = [RegistrationViewController new];
|
|
|
|
|
|
|
|
UINavigationController *navigationController =
|
|
|
|
|
|
|
|
[[UINavigationController alloc] initWithRootViewController:viewController];
|
|
|
|
|
|
|
|
navigationController.navigationBarHidden = YES;
|
|
|
|
|
|
|
|
self.window.rootViewController = navigationController;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[self.window makeKeyAndVisible];
|
|
|
|
[self.window makeKeyAndVisible];
|
|
|
|
|
|
|
|
|
|
|
@ -198,6 +191,43 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|
|
|
return YES;
|
|
|
|
return YES;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (UIViewController *)loadingRootViewController
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
UIViewController *viewController =
|
|
|
|
|
|
|
|
[[UIStoryboard storyboardWithName:@"Launch Screen" bundle:nil] instantiateInitialViewController];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOL shouldShowUpgradeLabel = NO;
|
|
|
|
|
|
|
|
NSString *previousVersion = AppVersion.instance.lastAppVersion;
|
|
|
|
|
|
|
|
// We added a number of database views in v2.13.0.
|
|
|
|
|
|
|
|
if ([VersionMigrations isVersion:previousVersion atLeast:@"2.0.0" andLessThan:@"2.13.0"]) {
|
|
|
|
|
|
|
|
shouldShowUpgradeLabel = YES;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (shouldShowUpgradeLabel) {
|
|
|
|
|
|
|
|
UIView *rootView = viewController.view;
|
|
|
|
|
|
|
|
UIImageView *iconView = nil;
|
|
|
|
|
|
|
|
for (UIView *subview in viewController.view.subviews) {
|
|
|
|
|
|
|
|
if ([subview isKindOfClass:[UIImageView class]]) {
|
|
|
|
|
|
|
|
iconView = (UIImageView *)subview;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!iconView) {
|
|
|
|
|
|
|
|
OWSFail(@"Database view registration overlay has unexpected contents.");
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
UILabel *label = [UILabel new];
|
|
|
|
|
|
|
|
label.text = NSLocalizedString(
|
|
|
|
|
|
|
|
@"DATABASE_VIEW_OVERLAY_TITLE", @"Indicates that the app is updating its database.");
|
|
|
|
|
|
|
|
label.font = [UIFont ows_mediumFontWithSize:18.f];
|
|
|
|
|
|
|
|
label.textColor = [UIColor whiteColor];
|
|
|
|
|
|
|
|
[rootView addSubview:label];
|
|
|
|
|
|
|
|
[label autoHCenterInSuperview];
|
|
|
|
|
|
|
|
[label autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:iconView withOffset:25.f];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return viewController;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (void)setupEnvironment
|
|
|
|
- (void)setupEnvironment
|
|
|
|
{
|
|
|
|
{
|
|
|
|
[Environment setCurrent:[Release releaseEnvironment]];
|
|
|
|
[Environment setCurrent:[Release releaseEnvironment]];
|
|
|
@ -417,7 +447,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|
|
|
|
|
|
|
|
|
|
|
[self removeScreenProtection];
|
|
|
|
[self removeScreenProtection];
|
|
|
|
|
|
|
|
|
|
|
|
[self ensureDatabaseViewRegistrationOverlay];
|
|
|
|
[self ensureRootViewController];
|
|
|
|
|
|
|
|
|
|
|
|
// Always check prekeys after app launches, and sometimes check on app activation.
|
|
|
|
// Always check prekeys after app launches, and sometimes check on app activation.
|
|
|
|
[TSPreKeyManager checkPreKeysIfNecessary];
|
|
|
|
[TSPreKeyManager checkPreKeysIfNecessary];
|
|
|
@ -689,68 +719,29 @@ static NSString *const kURLHostVerifyPrefix = @"verify";
|
|
|
|
{
|
|
|
|
{
|
|
|
|
DDLogInfo(@"databaseViewRegistrationComplete");
|
|
|
|
DDLogInfo(@"databaseViewRegistrationComplete");
|
|
|
|
|
|
|
|
|
|
|
|
[self ensureDatabaseViewRegistrationOverlay];
|
|
|
|
[self ensureRootViewController];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
- (void)ensureDatabaseViewRegistrationOverlay
|
|
|
|
- (void)ensureRootViewController
|
|
|
|
{
|
|
|
|
{
|
|
|
|
BOOL shouldShowOverlay = [TSDatabaseView hasPendingViewRegistrations];
|
|
|
|
DDLogInfo(@"ensureRootViewController");
|
|
|
|
|
|
|
|
|
|
|
|
if (!shouldShowOverlay) {
|
|
|
|
if ([TSDatabaseView hasPendingViewRegistrations] || self.hasInitialRootViewController) {
|
|
|
|
if (self.databaseViewRegistrationOverlay && !self.databaseViewRegistrationOverlay.hidden) {
|
|
|
|
|
|
|
|
DDLogWarn(@"Hiding database view registration overlay.");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
self.databaseViewRegistrationOverlay.hidden = YES;
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
self.hasInitialRootViewController = YES;
|
|
|
|
|
|
|
|
|
|
|
|
if (!self.databaseViewRegistrationOverlay || self.databaseViewRegistrationOverlay.hidden) {
|
|
|
|
DDLogInfo(@"Presenting initial root view controller");
|
|
|
|
DDLogWarn(@"Showing database view registration overlay.");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!self.databaseViewRegistrationOverlay) {
|
|
|
|
if ([TSAccountManager isRegistered]) {
|
|
|
|
// Recycle the "screen lock view", but add a label.
|
|
|
|
self.window.rootViewController = [[UIStoryboard main] instantiateInitialViewController];
|
|
|
|
UIWindow *window = [[UIWindow alloc] initWithFrame:self.window.bounds];
|
|
|
|
} else {
|
|
|
|
window.hidden = YES;
|
|
|
|
RegistrationViewController *viewController = [RegistrationViewController new];
|
|
|
|
window.opaque = YES;
|
|
|
|
UINavigationController *navigationController =
|
|
|
|
window.userInteractionEnabled = NO;
|
|
|
|
[[UINavigationController alloc] initWithRootViewController:viewController];
|
|
|
|
window.windowLevel = CGFLOAT_MAX;
|
|
|
|
navigationController.navigationBarHidden = YES;
|
|
|
|
window.backgroundColor = UIColor.ows_materialBlueColor;
|
|
|
|
self.window.rootViewController = navigationController;
|
|
|
|
window.rootViewController =
|
|
|
|
|
|
|
|
[[UIStoryboard storyboardWithName:@"Launch Screen" bundle:nil] instantiateInitialViewController];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOL shouldShowUpgradeLabel = NO;
|
|
|
|
|
|
|
|
NSString *previousVersion = AppVersion.instance.lastAppVersion;
|
|
|
|
|
|
|
|
// We added a number of database views in v2.13.0.
|
|
|
|
|
|
|
|
if ([VersionMigrations isVersion:previousVersion atLeast:@"2.0.0" andLessThan:@"2.13.0"]) {
|
|
|
|
|
|
|
|
shouldShowUpgradeLabel = YES;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (shouldShowUpgradeLabel) {
|
|
|
|
|
|
|
|
UIView *rootView = window.rootViewController.view;
|
|
|
|
|
|
|
|
UIImageView *iconView = nil;
|
|
|
|
|
|
|
|
for (UIView *subview in rootView.subviews) {
|
|
|
|
|
|
|
|
if ([subview isKindOfClass:[UIImageView class]]) {
|
|
|
|
|
|
|
|
iconView = (UIImageView *)subview;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!iconView) {
|
|
|
|
|
|
|
|
OWSFail(@"Database view registration overlay has unexpected contents.");
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
UILabel *label = [UILabel new];
|
|
|
|
|
|
|
|
label.text = NSLocalizedString(
|
|
|
|
|
|
|
|
@"DATABASE_VIEW_OVERLAY_TITLE", @"Indicates that the app is updating its database.");
|
|
|
|
|
|
|
|
label.font = [UIFont ows_mediumFontWithSize:18.f];
|
|
|
|
|
|
|
|
label.textColor = [UIColor whiteColor];
|
|
|
|
|
|
|
|
[rootView addSubview:label];
|
|
|
|
|
|
|
|
[label autoHCenterInSuperview];
|
|
|
|
|
|
|
|
[label autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:iconView withOffset:25.f];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.databaseViewRegistrationOverlay = window;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
self.databaseViewRegistrationOverlay.hidden = NO;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#pragma mark - Logging
|
|
|
|
#pragma mark - Logging
|
|
|
|