diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 82f632c69..4e9ef4246 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -836,8 +836,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; self.isEnvironmentSetup = YES; [OWSProfileManager.sharedManager fetchLocalUsersProfile]; - // Make sure this manager is started. - [OWSReadReceiptManager sharedManager]; + [[OWSReadReceiptManager sharedManager] prepareCachedValues]; } - (void)registrationStateDidChange diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index ce447310d..3f22d3c35 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2134,7 +2134,8 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { ? NSLocalizedString(@"MESSAGE_STATUS_DELIVERED", @"message footer for delivered messages") : NSLocalizedString(@"MESSAGE_STATUS_SENT", @"message footer for sent messages")); NSAttributedString *result = [[NSAttributedString alloc] initWithString:text]; - if (outgoingMessage.wasDelivered && outgoingMessage.readRecipientIds.count > 0) { + if ([OWSReadReceiptManager.sharedManager areReadReceiptsEnabled] && outgoingMessage.wasDelivered + && outgoingMessage.readRecipientIds.count > 0) { NSAttributedString *checkmark = [[NSAttributedString alloc] initWithString:@"\uf00c " attributes:@{ diff --git a/SignalServiceKit/src/Messages/OWSReadReceiptManager.h b/SignalServiceKit/src/Messages/OWSReadReceiptManager.h index 60dda0bf9..55be7af2c 100644 --- a/SignalServiceKit/src/Messages/OWSReadReceiptManager.h +++ b/SignalServiceKit/src/Messages/OWSReadReceiptManager.h @@ -57,6 +57,8 @@ NS_ASSUME_NONNULL_BEGIN #pragma mark - Settings +- (void)prepareCachedValues; + - (BOOL)areReadReceiptsEnabled; - (void)setAreReadReceiptsEnabled:(BOOL)value; diff --git a/SignalServiceKit/src/Messages/OWSReadReceiptManager.m b/SignalServiceKit/src/Messages/OWSReadReceiptManager.m index 6bb828899..6b961e28a 100644 --- a/SignalServiceKit/src/Messages/OWSReadReceiptManager.m +++ b/SignalServiceKit/src/Messages/OWSReadReceiptManager.m @@ -114,8 +114,7 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE // Should only be accessed while synchronized on the OWSReadReceiptManager. @property (nonatomic) BOOL isProcessing; -// Should only be accessed while synchronized on the OWSReadReceiptManager. -@property (nonatomic) NSNumber *areReadReceiptsEnabledCached; +@property (atomic) NSNumber *areReadReceiptsEnabledCached; @end @@ -425,32 +424,31 @@ NSString *const OWSReadReceiptManagerAreReadReceiptsEnabled = @"areReadReceiptsE #pragma mark - Settings -- (BOOL)areReadReceiptsEnabled +- (void)prepareCachedValues { - @synchronized(self) - { - if (!self.areReadReceiptsEnabledCached) { - // Default to NO. - self.areReadReceiptsEnabledCached = - @([self.dbConnection boolForKey:OWSReadReceiptManagerAreReadReceiptsEnabled - inCollection:OWSReadReceiptManagerCollection]); - } + [self areReadReceiptsEnabled]; +} - return [self.areReadReceiptsEnabledCached boolValue]; +- (BOOL)areReadReceiptsEnabled +{ + // We don't need to worry about races around this cached value. + if (!self.areReadReceiptsEnabledCached) { + // Default to NO. + self.areReadReceiptsEnabledCached = @([self.dbConnection boolForKey:OWSReadReceiptManagerAreReadReceiptsEnabled + inCollection:OWSReadReceiptManagerCollection]); } + + return [self.areReadReceiptsEnabledCached boolValue]; } - (void)setAreReadReceiptsEnabled:(BOOL)value { DDLogInfo(@"%@ areReadReceiptsEnabled: %d.", self.tag, value); - @synchronized(self) - { - [self.dbConnection setBool:value - forKey:OWSReadReceiptManagerAreReadReceiptsEnabled - inCollection:OWSReadReceiptManagerCollection]; - self.areReadReceiptsEnabledCached = @(value); - } + [self.dbConnection setBool:value + forKey:OWSReadReceiptManagerAreReadReceiptsEnabled + inCollection:OWSReadReceiptManagerCollection]; + self.areReadReceiptsEnabledCached = @(value); } #pragma mark - Logging