Don't "scroll to bottom" when messages are sent from desktop.
// FREEBIE
This commit is contained in:
parent
48121e5eac
commit
05b1818874
|
@ -1704,13 +1704,6 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|||
}
|
||||
}
|
||||
|
||||
- (void)finishSendingMessageAnimated:(BOOL)animated
|
||||
{
|
||||
[super finishSendingMessageAnimated:animated];
|
||||
|
||||
[self scrollToBottomAnimated:animated];
|
||||
}
|
||||
|
||||
- (void)toggleDefaultKeyboard
|
||||
{
|
||||
// Primary language is nil for the emoji keyboard & we want to stay on it after sending
|
||||
|
@ -3591,6 +3584,17 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|||
return;
|
||||
}
|
||||
|
||||
BOOL wasAtBottom = [self isScrolledToBottom];
|
||||
// We want sending messages to feel snappy. So, if the only
|
||||
// update is a new outgoing message AND we're already scrolled to
|
||||
// the bottom of the conversation, skip the scroll animation.
|
||||
__block BOOL shouldAnimateScrollToBottom = !wasAtBottom;
|
||||
// We want to scroll to the bottom if the user:
|
||||
//
|
||||
// a) already was at the bottom of the conversation.
|
||||
// b) is inserting new interactions.
|
||||
__block BOOL scrollToBottom = wasAtBottom;
|
||||
|
||||
[self.collectionView performBatchUpdates:^{
|
||||
for (YapDatabaseViewRowChange *rowChange in messageRowChanges) {
|
||||
switch (rowChange.type) {
|
||||
|
@ -3607,6 +3611,15 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|||
}
|
||||
case YapDatabaseViewChangeInsert: {
|
||||
[self.collectionView insertItemsAtIndexPaths:@[ rowChange.newIndexPath ]];
|
||||
|
||||
TSInteraction *interaction = [self interactionAtIndexPath:rowChange.newIndexPath];
|
||||
if ([interaction isKindOfClass:[TSOutgoingMessage class]]) {
|
||||
TSOutgoingMessage *outgoingMessage = (TSOutgoingMessage *)interaction;
|
||||
if (!outgoingMessage.isFromLinkedDevice) {
|
||||
scrollToBottom = YES;
|
||||
shouldAnimateScrollToBottom = NO;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case YapDatabaseViewChangeMove: {
|
||||
|
@ -3632,6 +3645,10 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
|
|||
}
|
||||
|
||||
[self updateLastVisibleTimestamp];
|
||||
|
||||
if (scrollToBottom) {
|
||||
[self scrollToBottomAnimated:shouldAnimateScrollToBottom];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
|
|
|
@ -101,6 +101,9 @@ typedef NS_ENUM(NSInteger, TSGroupMetaMessage) {
|
|||
|
||||
@property (nonatomic, readonly) BOOL isVoiceMessage;
|
||||
|
||||
// This property won't be accurate for legacy messages.
|
||||
@property (atomic, readonly) BOOL isFromLinkedDevice;
|
||||
|
||||
/**
|
||||
* Signal Identifier (e.g. e164 number) or nil if in a group thread.
|
||||
*/
|
||||
|
@ -168,6 +171,7 @@ typedef NS_ENUM(NSInteger, TSGroupMetaMessage) {
|
|||
- (void)updateWithWasDeliveredWithTransaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
- (void)updateWithWasDelivered;
|
||||
- (void)updateWithWasSentAndDelivered;
|
||||
- (void)updateWithWasSentAndDeliveredFromLinkedDevice;
|
||||
- (void)updateWithSingleGroupRecipient:(NSString *)singleGroupRecipient
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction;
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|||
@property (atomic) NSString *mostRecentFailureText;
|
||||
@property (atomic) BOOL wasDelivered;
|
||||
@property (atomic) NSString *singleGroupRecipient;
|
||||
@property (atomic) BOOL isFromLinkedDevice;
|
||||
|
||||
// For outgoing, non-legacy group messages sent from this client, this
|
||||
// contains the list of recipients to whom the message has been sent.
|
||||
|
@ -333,6 +334,18 @@ NSString *const kTSOutgoingMessageSentRecipientAll = @"kTSOutgoingMessageSentRec
|
|||
}];
|
||||
}
|
||||
|
||||
- (void)updateWithWasSentAndDeliveredFromLinkedDevice
|
||||
{
|
||||
[self.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
|
||||
[self applyChangeToSelfAndLatestOutgoingMessage:transaction
|
||||
changeBlock:^(TSOutgoingMessage *message) {
|
||||
[message setMessageState:TSOutgoingMessageStateSentToService];
|
||||
[message setWasDelivered:YES];
|
||||
[message setIsFromLinkedDevice:YES];
|
||||
}];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)updateWithSingleGroupRecipient:(NSString *)singleGroupRecipient
|
||||
transaction:(YapDatabaseReadWriteTransaction *)transaction
|
||||
{
|
||||
|
|
|
@ -1084,7 +1084,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|
|||
|
||||
- (void)handleMessageSentRemotely:(TSOutgoingMessage *)message sentAt:(uint64_t)sentAt
|
||||
{
|
||||
[message updateWithWasSentAndDelivered];
|
||||
[message updateWithWasSentAndDeliveredFromLinkedDevice];
|
||||
[self becomeConsistentWithDisappearingConfigurationForMessage:message];
|
||||
[OWSDisappearingMessagesJob setExpirationForMessage:message expirationStartedAt:sentAt];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue