stop observing db notifications while message actions are presented

This let's new messages appear after the message actions are dismissed without
complicating scroll state.
pull/1/head
Michael Kirk 7 years ago committed by Michael Kirk
parent 6275a2f102
commit 635c0275db

@ -131,6 +131,7 @@ typedef enum : NSUInteger {
ConversationViewLayoutDelegate,
ConversationViewCellDelegate,
ConversationInputTextViewDelegate,
MessageActionsDelegate,
OWSMessageBubbleViewDelegate,
UICollectionViewDelegate,
UICollectionViewDataSource,
@ -1978,13 +1979,27 @@ typedef enum : NSUInteger {
[self presentViewController:alertController animated:YES completion:nil];
}
#pragma mark - MessageActionsDelegate
- (void)messageActionsDidHide:(MessageActionsViewController *)messageActionsViewController
{
[[OWSWindowManager sharedManager] hideMessageActionsWindow:messageActionsViewController];
[self updateShouldObserveDBModifications];
}
#pragma mark - ConversationViewCellDelegate
- (void)conversationCellDidLongpressText:(ConversationViewCell *)cell viewItem:(ConversationViewItem *)viewItem
{
MessageActionsViewController *messageActionsViewController =
[[MessageActionsViewController alloc] initWithFocusedView:cell];
[[OWSWindowManager sharedManager] presentMessageActions:messageActionsViewController];
messageActionsViewController.delegate = self;
[[OWSWindowManager sharedManager] showMessageActionsWindow:messageActionsViewController];
[self updateShouldObserveDBModifications];
}
- (NSAttributedString *)attributedContactOrProfileNameForPhoneIdentifier:(NSString *)recipientId
@ -4432,8 +4447,23 @@ typedef enum : NSUInteger {
- (void)updateShouldObserveDBModifications
{
BOOL isAppForegroundAndActive = CurrentAppContext().isAppForegroundAndActive;
self.shouldObserveDBModifications = self.isViewVisible && isAppForegroundAndActive;
if (!CurrentAppContext().isAppForegroundAndActive) {
self.shouldObserveDBModifications = NO;
return;
}
if (!self.isViewVisible) {
self.shouldObserveDBModifications = NO;
return;
}
if (OWSWindowManager.sharedManager.isPresentingMessageActions) {
self.shouldObserveDBModifications = NO;
return;
}
self.shouldObserveDBModifications = YES;
return;
}
- (void)setShouldObserveDBModifications:(BOOL)shouldObserveDBModifications

@ -4,6 +4,11 @@
import Foundation
@objc
protocol MessageActionsDelegate: class {
func messageActionsDidHide(_ messageActionsViewController: MessageActionsViewController)
}
@objc
class MessageActionsViewController: UIViewController {
@ -51,6 +56,6 @@ class MessageActionsViewController: UIViewController {
@objc
func didTapBackground() {
self.delegate?.dismissMessageActions(self)
self.delegate?.messageActionsDidHide(self)
}
}

@ -4,8 +4,6 @@
NS_ASSUME_NONNULL_BEGIN
@class MessageActionsViewController;
// This VC can become first responder
// when presented to ensure that the input accessory is updated.
@interface OWSWindowRootViewController : UIViewController
@ -14,20 +12,12 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark -
@protocol MessageActionsDelegate
- (void)dismissMessageActions:(MessageActionsViewController *)messageActionsViewController;
@end
#pragma mark -
extern NSString *const OWSWindowManagerCallDidChangeNotification;
const CGFloat OWSWindowManagerCallScreenHeight(void);
extern const UIWindowLevel UIWindowLevel_Background;
@interface OWSWindowManager : NSObject <MessageActionsDelegate>
@interface OWSWindowManager : NSObject
- (instancetype)init NS_UNAVAILABLE;
@ -39,7 +29,10 @@ extern const UIWindowLevel UIWindowLevel_Background;
#pragma mark - Message Actions
- (void)presentMessageActions:(MessageActionsViewController *)messageActionsViewController;
@property (nonatomic, readonly) BOOL isPresentingMessageActions;
- (void)showMessageActionsWindow:(UIViewController *)messageActionsViewController;
- (void)hideMessageActionsWindow:(UIViewController *)messageActionsViewController;
#pragma mark - Calls

@ -237,16 +237,20 @@ const UIWindowLevel UIWindowLevel_MessageActions(void)
#pragma mark - Message Actions
- (void)presentMessageActions:(MessageActionsViewController *)messageActionsViewController
- (BOOL)isPresentingMessageActions
{
return self.messageActionsViewController != nil;
}
- (void)showMessageActionsWindow:(UIViewController *)messageActionsViewController
{
messageActionsViewController.delegate = self;
self.messageActionsViewController = messageActionsViewController;
self.messageActionsWindow.rootViewController = messageActionsViewController;
[self ensureWindowState];
}
- (void)dismissMessageActions:(UIViewController *)messageActionsViewController
- (void)hideMessageActionsWindow:(UIViewController *)messageActionsViewController
{
OWSAssert(self.messageActionsViewController == messageActionsViewController);

Loading…
Cancel
Save