diff --git a/Signal/src/ViewControllers/OWS2FARegistrationViewController.m b/Signal/src/ViewControllers/OWS2FARegistrationViewController.m index b767fa92d..48a641be1 100644 --- a/Signal/src/ViewControllers/OWS2FARegistrationViewController.m +++ b/Signal/src/ViewControllers/OWS2FARegistrationViewController.m @@ -107,39 +107,40 @@ NS_ASSUME_NONNULL_BEGIN canCancel:NO backgroundBlock:^(ModalActivityIndicatorViewController *modalActivityIndicator) { OWSProdInfo([OWSAnalyticsEvents registrationRegisteringCode]); - [self.accountManager registerObjcWithVerificationCode:self.verificationCode pin:pinCode] - .then(^{ - OWSAssertIsOnMainThread(); - OWSProdInfo([OWSAnalyticsEvents registrationRegisteringSubmittedCode]); - [[OWS2FAManager sharedManager] mark2FAAsEnabledWithPin:pinCode]; - - OWSLogInfo(@"Successfully registered Signal account."); - dispatch_async(dispatch_get_main_queue(), ^{ - [modalActivityIndicator dismissWithCompletion:^{ - OWSAssertIsOnMainThread(); - - [weakSelf verificationWasCompleted]; - }]; - }); - }) - .catch(^(NSError *error) { - OWSAssertIsOnMainThread(); - OWSProdInfo([OWSAnalyticsEvents registrationRegistrationFailed]); - OWSLogError(@"error verifying challenge: %@", error); - dispatch_async(dispatch_get_main_queue(), ^{ - [modalActivityIndicator dismissWithCompletion:^{ - OWSAssertIsOnMainThread(); - - [OWSAlerts showAlertWithTitle:NSLocalizedString( - @"REGISTER_2FA_REGISTRATION_FAILED_ALERT_TITLE", - @"Title for alert indicating that attempt to " - @"register with 'two-factor auth' failed.") - message:error.localizedDescription]; - - [weakSelf.entryView makePinTextFieldFirstResponder]; - }]; - }); - }); + [[self.accountManager registerObjcWithVerificationCode:self.verificationCode pin:pinCode] + .then(^{ + OWSAssertIsOnMainThread(); + OWSProdInfo([OWSAnalyticsEvents registrationRegisteringSubmittedCode]); + [[OWS2FAManager sharedManager] mark2FAAsEnabledWithPin:pinCode]; + + OWSLogInfo(@"Successfully registered Signal account."); + dispatch_async(dispatch_get_main_queue(), ^{ + [modalActivityIndicator dismissWithCompletion:^{ + OWSAssertIsOnMainThread(); + + [weakSelf verificationWasCompleted]; + }]; + }); + }) + .catch(^(NSError *error) { + OWSAssertIsOnMainThread(); + OWSProdInfo([OWSAnalyticsEvents registrationRegistrationFailed]); + OWSLogError(@"error verifying challenge: %@", error); + dispatch_async(dispatch_get_main_queue(), ^{ + [modalActivityIndicator dismissWithCompletion:^{ + OWSAssertIsOnMainThread(); + + [OWSAlerts + showAlertWithTitle:NSLocalizedString( + @"REGISTER_2FA_REGISTRATION_FAILED_ALERT_TITLE", + @"Title for alert indicating that attempt to " + @"register with 'two-factor auth' failed.") + message:error.localizedDescription]; + + [weakSelf.entryView makePinTextFieldFirstResponder]; + }]; + }); + }) retainUntilComplete]; }]; } diff --git a/Signal/src/util/Backup/OWSBackupImportJob.m b/Signal/src/util/Backup/OWSBackupImportJob.m index 0c192fbf6..131a735df 100644 --- a/Signal/src/util/Backup/OWSBackupImportJob.m +++ b/Signal/src/util/Backup/OWSBackupImportJob.m @@ -187,8 +187,9 @@ NSString *const kOWSBackup_ImportDatabaseKeySpec = @"kOWSBackup_ImportDatabaseKe [OWSBackup.sharedManager setIsBackupEnabled:YES]; }) .thenInBackground(^{ - [self.tsAccountManager updateAccountAttributes]; - + return [self.tsAccountManager updateAccountAttributes]; + }) + .thenInBackground(^{ [self succeed]; }); } diff --git a/SignalMessaging/environment/migrations/OWS111UDAttributesMigration.swift b/SignalMessaging/environment/migrations/OWS111UDAttributesMigration.swift index 831599f53..0e7d75cde 100644 --- a/SignalMessaging/environment/migrations/OWS111UDAttributesMigration.swift +++ b/SignalMessaging/environment/migrations/OWS111UDAttributesMigration.swift @@ -33,7 +33,7 @@ public class OWS111UDAttributesMigration: OWSDatabaseMigration { } private func doMigration() { - tsAccountManager.updateAccountAttributes() + tsAccountManager.updateAccountAttributes().retainUntilComplete() self.dbReadWriteConnection().readWrite { transaction in self.save(with: transaction) diff --git a/SignalMessaging/profiles/OWSProfileManager.m b/SignalMessaging/profiles/OWSProfileManager.m index 332d73c6e..23432e735 100644 --- a/SignalMessaging/profiles/OWSProfileManager.m +++ b/SignalMessaging/profiles/OWSProfileManager.m @@ -860,7 +860,7 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error); { OWSUserProfile *userProfile = self.localUserProfile; [userProfile clearWithProfileKey:[OWSAES256Key generateRandomKey] dbConnection:self.dbConnection completion:nil]; - [self.tsAccountManager updateAccountAttributes]; + [[self.tsAccountManager updateAccountAttributes] retainUntilComplete]; } - (void)addUserToProfileWhitelist:(NSString *)recipientId diff --git a/SignalServiceKit/src/Account/TSAccountManager.m b/SignalServiceKit/src/Account/TSAccountManager.m index 100b481d7..97613c22c 100644 --- a/SignalServiceKit/src/Account/TSAccountManager.m +++ b/SignalServiceKit/src/Account/TSAccountManager.m @@ -86,7 +86,7 @@ NSString *const TSAccountManager_NeedsAccountAttributesUpdateKey = @"TSAccountMa } [AppReadiness runNowOrWhenAppDidBecomeReady:^{ - [self updateAccountAttributesIfNecessary]; + [[self updateAccountAttributesIfNecessary] retainUntilComplete]; }]; [[NSNotificationCenter defaultCenter] addObserver:self @@ -721,7 +721,7 @@ NSString *const TSAccountManager_NeedsAccountAttributesUpdateKey = @"TSAccountMa OWSAssertIsOnMainThread(); [AppReadiness runNowOrWhenAppDidBecomeReady:^{ - [self updateAccountAttributesIfNecessary]; + [[self updateAccountAttributesIfNecessary] retainUntilComplete]; }]; } diff --git a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift index faf4edc36..fa60dc0bf 100644 --- a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift +++ b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift @@ -485,6 +485,6 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager { dbConnection.setBool(value, forKey: kUDUnrestrictedAccessKey, inCollection: kUDCollection) // Try to update the account attributes to reflect this change. - tsAccountManager.updateAccountAttributes() + tsAccountManager.updateAccountAttributes().retainUntilComplete() } } diff --git a/SignalServiceKit/src/Util/OWS2FAManager.m b/SignalServiceKit/src/Util/OWS2FAManager.m index 9ec720325..e7a897565 100644 --- a/SignalServiceKit/src/Util/OWS2FAManager.m +++ b/SignalServiceKit/src/Util/OWS2FAManager.m @@ -10,6 +10,7 @@ #import "TSAccountManager.h" #import "TSNetworkManager.h" #import "YapDatabaseConnection+OWS.h" +#import NS_ASSUME_NONNULL_BEGIN @@ -89,7 +90,7 @@ const NSUInteger kDaySecs = kHourSecs * 24; object:nil userInfo:nil]; - [self.tsAccountManager updateAccountAttributes]; + [[self.tsAccountManager updateAccountAttributes] retainUntilComplete]; } - (void)mark2FAAsEnabledWithPin:(NSString *)pin @@ -105,7 +106,7 @@ const NSUInteger kDaySecs = kHourSecs * 24; object:nil userInfo:nil]; - [self.tsAccountManager updateAccountAttributes]; + [[self.tsAccountManager updateAccountAttributes] retainUntilComplete]; } - (void)requestEnable2FAWithPin:(NSString *)pin