diff --git a/LokiPushNotificationService/NotificationServiceExtension.swift b/LokiPushNotificationService/NotificationServiceExtension.swift index f5aa06a9e..fe2e628dd 100644 --- a/LokiPushNotificationService/NotificationServiceExtension.swift +++ b/LokiPushNotificationService/NotificationServiceExtension.swift @@ -16,6 +16,14 @@ final class NotificationServiceExtension : UNNotificationServiceExtension { self.contentHandler = contentHandler notificationContent = (request.content.mutableCopy() as? UNMutableNotificationContent) + var isMainAppActive = false + if let sharedUserDefaults = UserDefaults(suiteName: "group.com.loki-project.loki-messenger") { + isMainAppActive = sharedUserDefaults.bool(forKey: "isMainAppActive") + } + print("[Ryan debug] isMainAppActive \(isMainAppActive)") + // If the main app is running, skip the whole process + guard !isMainAppActive else { return self.completeWithFailure(content: notificationContent!) } + // The code using DispatchQueue.main.async { self.setUpIfNecessary() { Modify the notification content } } will somehow cause a freeze when a second PN comes DispatchQueue.main.sync { self.setUpIfNecessary() {} } diff --git a/Signal/Signal-Info.plist b/Signal/Signal-Info.plist index b91d44ca3..af121ada0 100644 --- a/Signal/Signal-Info.plist +++ b/Signal/Signal-Info.plist @@ -5,9 +5,9 @@ BuildDetails CarthageVersion - 0.34.0 + 0.35.0 OSXVersion - 10.15.5 + 10.15.6 WebRTCCommit 1445d719bf05280270e9f77576f80f973fd847f8 M73 diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index d00367ab4..7641580f4 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -306,6 +306,10 @@ static NSTimeInterval launchStartedAt; if (CurrentAppContext().isRunningTests) { return; } + + NSUserDefaults *sharedUserDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.loki-project.loki-messenger"]; + [sharedUserDefaults setBool:true forKey:@"isMainAppActive"]; + [sharedUserDefaults synchronize]; [self ensureRootViewController]; @@ -333,6 +337,10 @@ static NSTimeInterval launchStartedAt; } [self clearAllNotificationsAndRestoreBadgeCount]; + + NSUserDefaults *sharedUserDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.loki-project.loki-messenger"]; + [sharedUserDefaults setBool:false forKey:@"isMainAppActive"]; + [sharedUserDefaults synchronize]; [DDLog flushLog]; } diff --git a/Signal/src/Loki/View Controllers/HomeVC.swift b/Signal/src/Loki/View Controllers/HomeVC.swift index dfa9c5553..93df55a85 100644 --- a/Signal/src/Loki/View Controllers/HomeVC.swift +++ b/Signal/src/Loki/View Controllers/HomeVC.swift @@ -5,6 +5,8 @@ final class HomeVC : BaseVC, UITableViewDataSource, UITableViewDelegate, UIScrol private var isViewVisible = false { didSet { updateIsObservingDatabase() } } private var tableViewTopConstraint: NSLayoutConstraint! + private var hasDatabaseModifiedNotificationWhenInvisible = false + private var threads: YapDatabaseViewMappings = { let result = YapDatabaseViewMappings(groups: [ TSInboxGroup ], view: TSThreadDatabaseViewExtensionName) result.setIsReversed(true, forGroup: TSInboxGroup) @@ -229,10 +231,13 @@ final class HomeVC : BaseVC, UITableViewDataSource, UITableViewDelegate, UIScrol @objc private func handleYapDatabaseModifiedNotification(_ notification: Notification) { AssertIsOnMainThread() - guard isObservingDatabase else { return } let notifications = uiDatabaseConnection.beginLongLivedReadTransaction() let ext = uiDatabaseConnection.ext(TSThreadDatabaseViewExtensionName) as! YapDatabaseViewConnection let hasChanges = ext.hasChanges(forGroup: TSInboxGroup, in: notifications) + guard isObservingDatabase else { + hasDatabaseModifiedNotificationWhenInvisible = hasChanges + return + } guard hasChanges else { uiDatabaseConnection.read { transaction in self.threads.update(with: transaction) @@ -275,6 +280,10 @@ final class HomeVC : BaseVC, UITableViewDataSource, UITableViewDelegate, UIScrol @objc private func handleApplicationDidBecomeActiveNotification(_ notification: Notification) { updateIsObservingDatabase() + if (hasDatabaseModifiedNotificationWhenInvisible) { + reload() + hasDatabaseModifiedNotificationWhenInvisible = false + } } @objc private func handleApplicationWillResignActiveNotification(_ notification: Notification) { diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 51b7d009e..33f3667f4 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -842,6 +842,8 @@ typedef enum : NSUInteger { - (void)applicationDidBecomeActive:(NSNotification *)notification { [self startReadTimer]; + [self.conversationViewModel viewDidLoad]; + [self.conversationViewModel loadAnotherPageOfMessages]; } - (void)dismissPresentedViewControllerIfNecessary diff --git a/SignalMessaging/utils/ThreadUtil.m b/SignalMessaging/utils/ThreadUtil.m index 4806bc202..22e717d35 100644 --- a/SignalMessaging/utils/ThreadUtil.m +++ b/SignalMessaging/utils/ThreadUtil.m @@ -193,6 +193,7 @@ typedef void (^BuildOutgoingMessageCompletionBlock)(TSOutgoingMessage *savedMess quotedMessage:[quotedReplyModel buildQuotedMessageForSending] contactShare:nil linkPreview:nil]; + [message save]; [BenchManager benchAsyncWithTitle:@"Saving outgoing message" @@ -200,7 +201,6 @@ typedef void (^BuildOutgoingMessageCompletionBlock)(TSOutgoingMessage *savedMess // To avoid blocking the send flow, we dispatch an async write from within this read // transaction [LKStorage writeWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull writeTransaction) { - [message saveWithTransaction:writeTransaction]; OWSLinkPreview *_Nullable linkPreview = [self linkPreviewForLinkPreviewDraft:linkPreviewDraft diff --git a/SignalServiceKit/src/Messages/OWSMessageManager.m b/SignalServiceKit/src/Messages/OWSMessageManager.m index dd72453fe..1c97dc5ba 100644 --- a/SignalServiceKit/src/Messages/OWSMessageManager.m +++ b/SignalServiceKit/src/Messages/OWSMessageManager.m @@ -1614,7 +1614,7 @@ NS_ASSUME_NONNULL_BEGIN // Update thread preview in inbox [masterThread touchWithTransaction:transaction]; - if (CurrentAppContext().isMainAppAndActive) { + if (CurrentAppContext().isMainApp) { [SSKEnvironment.shared.notificationsManager notifyUserForIncomingMessage:incomingMessage inThread:masterThread transaction:transaction]; }