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

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

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

@ -237,16 +237,20 @@ const UIWindowLevel UIWindowLevel_MessageActions(void)
#pragma mark - Message Actions #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.messageActionsViewController = messageActionsViewController;
self.messageActionsWindow.rootViewController = messageActionsViewController; self.messageActionsWindow.rootViewController = messageActionsViewController;
[self ensureWindowState]; [self ensureWindowState];
} }
- (void)dismissMessageActions:(UIViewController *)messageActionsViewController - (void)hideMessageActionsWindow:(UIViewController *)messageActionsViewController
{ {
OWSAssert(self.messageActionsViewController == messageActionsViewController); OWSAssert(self.messageActionsViewController == messageActionsViewController);

Loading…
Cancel
Save