Commit 3da34e94 authored by sczs's avatar sczs Committed by Commit bot

[ios] Inserts and deletes history items in the same BatchUpdates block

BUG=707241

Review-Url: https://codereview.chromium.org/2800473004
Cr-Commit-Position: refs/heads/master@{#462784}
parent 9c1cc6a2
......@@ -108,14 +108,20 @@ const CGFloat kSeparatorInset = 10;
// the empty string, all history is fetched.
- (void)fetchHistoryForQuery:(NSString*)query
priorToTime:(const base::Time&)time;
// Updates various elements after history items have been deleted from the
// CollectionView.
- (void)updateCollectionViewAfterDeletingEntries;
// Updates header section to provide relevant information about the currently
// displayed history entries.
- (void)updateEntriesStatusMessage;
// Removes selected items from the visible collection, but does not delete them
// from browser history.
- (void)removeSelectedItemsFromCollection;
// Removes all items in the collection that are not included in entries.
// Selects all items in the collection that are not included in entries.
- (void)filterForHistoryEntries:(NSArray*)entries;
// Deletes all items in the collection which indexes are included in indexArray,
// needs to be run inside a performBatchUpdates block.
- (void)deleteItemsFromCollectionViewModelWithIndex:(NSArray*)indexArray;
// Adds loading indicator to the top of the history collection, if one is not
// already present.
- (void)addLoadingIndicator;
......@@ -370,16 +376,20 @@ const CGFloat kSeparatorInset = 10;
}
}
[self.delegate historyCollectionViewControllerDidChangeEntries:self];
if (([self isSearching] && [searchQuery length] > 0 &&
[self.currentQuery isEqualToString:searchQuery]) ||
self.filterQueryResult) {
// If in search mode, filter out entries that are not
// part of the search result.
[self filterForHistoryEntries:filterResults];
NSArray* deletedIndexPaths =
self.collectionView.indexPathsForSelectedItems;
[self deleteItemsFromCollectionViewModelWithIndex:deletedIndexPaths];
self.filterQueryResult = NO;
}
}
completion:^(BOOL) {
if (([self isSearching] && [searchQuery length] > 0 &&
[self.currentQuery isEqualToString:searchQuery]) ||
self.filterQueryResult) {
// If in search mode, filter out entries that are not
// part of the search result.
[self filterForHistoryEntries:filterResults];
self.filterQueryResult = NO;
}
[self updateCollectionViewAfterDeletingEntries];
}];
}
......@@ -564,6 +574,15 @@ const CGFloat kSeparatorInset = 10;
_historyServiceFacade->QueryOtherFormsOfBrowsingHistory();
}
- (void)updateCollectionViewAfterDeletingEntries {
// If only the header section remains, there are no history entries.
if ([self.collectionViewModel numberOfSections] == 1) {
self.entriesType = NO_ENTRIES;
}
[self updateEntriesStatusMessage];
[self.delegate historyCollectionViewControllerDidChangeEntries:self];
}
- (void)updateEntriesStatusMessage {
CollectionViewItem* entriesStatusItem = nil;
if (!self.hasHistoryEntries) {
......@@ -618,28 +637,27 @@ const CGFloat kSeparatorInset = 10;
- (void)removeSelectedItemsFromCollection {
NSArray* deletedIndexPaths = self.collectionView.indexPathsForSelectedItems;
[self.collectionView performBatchUpdates:^{
[self collectionView:self.collectionView
willDeleteItemsAtIndexPaths:deletedIndexPaths];
[self.collectionView deleteItemsAtIndexPaths:deletedIndexPaths];
// Remove any empty sections, except the header section.
for (int section = self.collectionView.numberOfSections - 1; section > 0;
--section) {
if (![self.collectionViewModel numberOfItemsInSection:section]) {
[self.entryInserter removeSection:section];
}
}
[self deleteItemsFromCollectionViewModelWithIndex:deletedIndexPaths];
}
completion:^(BOOL) {
// If only the header section remains, there are no history entries.
if ([self.collectionViewModel numberOfSections] == 1) {
self.entriesType = NO_ENTRIES;
}
[self updateEntriesStatusMessage];
[self.delegate historyCollectionViewControllerDidChangeEntries:self];
[self updateCollectionViewAfterDeletingEntries];
}];
}
- (void)deleteItemsFromCollectionViewModelWithIndex:(NSArray*)indexArray {
[self collectionView:self.collectionView
willDeleteItemsAtIndexPaths:indexArray];
[self.collectionView deleteItemsAtIndexPaths:indexArray];
// Remove any empty sections, except the header section.
for (int section = self.collectionView.numberOfSections - 1; section > 0;
--section) {
if (![self.collectionViewModel numberOfItemsInSection:section]) {
[self.entryInserter removeSection:section];
}
}
}
- (void)filterForHistoryEntries:(NSArray*)entries {
self.collectionView.allowsMultipleSelection = YES;
for (int section = 1; section < [self.collectionViewModel numberOfSections];
......@@ -665,7 +683,6 @@ const CGFloat kSeparatorInset = 10;
}
}
}
[self removeSelectedItemsFromCollection];
}
- (void)addLoadingIndicator {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment