From 86fdd6dea22bdbf33b3c0ec71a26c766adb15055 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 15 Nov 2017 12:37:24 -0500 Subject: [PATCH 1/2] Fix edge cases in conversation view. --- .../ConversationView/ConversationViewController.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 263d92ee12..ca50fbe7e9 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2902,7 +2902,6 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { case YapDatabaseViewChangeDelete: { DDLogVerbose(@"YapDatabaseViewChangeDelete: %@, %@", rowChange.collectionKey, rowChange.indexPath); [self.collectionView deleteItemsAtIndexPaths:@[ rowChange.indexPath ]]; - [rowsThatChangedSize removeObject:@(rowChange.indexPath.row)]; YapCollectionKey *collectionKey = rowChange.collectionKey; OWSAssert(collectionKey.key.length > 0); break; @@ -2930,6 +2929,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { rowChange.newIndexPath); [self.collectionView deleteItemsAtIndexPaths:@[ rowChange.indexPath ]]; [self.collectionView insertItemsAtIndexPaths:@[ rowChange.newIndexPath ]]; + [rowsThatChangedSize removeObject:@(rowChange.newIndexPath.row)]; break; } case YapDatabaseViewChangeUpdate: { @@ -2947,7 +2947,9 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { for (NSNumber *row in rowsThatChangedSize) { [rowsToReload addObject:[NSIndexPath indexPathForRow:row.integerValue inSection:0]]; } - [self.collectionView reloadItemsAtIndexPaths:rowsToReload]; + if (rowsToReload.count > 0) { + [self.collectionView reloadItemsAtIndexPaths:rowsToReload]; + } }; void (^batchUpdatesCompletion)(BOOL) = ^(BOOL finished) { OWSAssert([NSThread isMainThread]); From cc90f4cb80e9a0473eb168ef636a048cf1c19ec4 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 15 Nov 2017 15:46:27 -0500 Subject: [PATCH 2/2] Respond to CR. // FREEBIE --- .../ConversationView/ConversationViewController.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index ca50fbe7e9..aa46ef9f5f 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -2910,6 +2910,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { DDLogVerbose( @"YapDatabaseViewChangeInsert: %@, %@", rowChange.collectionKey, rowChange.newIndexPath); [self.collectionView insertItemsAtIndexPaths:@[ rowChange.newIndexPath ]]; + // We don't want to reload a row that we just inserted. [rowsThatChangedSize removeObject:@(rowChange.newIndexPath.row)]; ConversationViewItem *_Nullable viewItem = [self viewItemForIndex:rowChange.newIndexPath.row]; @@ -2929,12 +2930,14 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { rowChange.newIndexPath); [self.collectionView deleteItemsAtIndexPaths:@[ rowChange.indexPath ]]; [self.collectionView insertItemsAtIndexPaths:@[ rowChange.newIndexPath ]]; + // We don't want to reload a row that we just moved. [rowsThatChangedSize removeObject:@(rowChange.newIndexPath.row)]; break; } case YapDatabaseViewChangeUpdate: { DDLogVerbose(@"YapDatabaseViewChangeUpdate: %@, %@", rowChange.collectionKey, rowChange.indexPath); [self.collectionView reloadItemsAtIndexPaths:@[ rowChange.indexPath ]]; + // We don't want to reload a row that we've already reloaded. [rowsThatChangedSize removeObject:@(rowChange.indexPath.row)]; break; }