Index: ios/clean/chrome/browser/ui/tab_collection/tab_collection_view_controller.mm |
diff --git a/ios/clean/chrome/browser/ui/tab_collection/tab_collection_view_controller.mm b/ios/clean/chrome/browser/ui/tab_collection/tab_collection_view_controller.mm |
index 45df7475a8e1ff1052812a111bf90d6ea5bc1857..5f64f9d9b6d245fb73e3ca8ef41d491c70632b49 100644 |
--- a/ios/clean/chrome/browser/ui/tab_collection/tab_collection_view_controller.mm |
+++ b/ios/clean/chrome/browser/ui/tab_collection/tab_collection_view_controller.mm |
@@ -7,7 +7,7 @@ |
#include "base/logging.h" |
#include "base/mac/foundation_util.h" |
#include "base/strings/sys_string_conversions.h" |
-#import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_data_source.h" |
+#import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_item.h" |
#import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_tab_cell.h" |
#if !defined(__has_feature) || !__has_feature(objc_arc) |
@@ -17,11 +17,14 @@ |
@interface TabCollectionViewController ()<UICollectionViewDelegate, |
SessionCellDelegate> |
@property(nonatomic, readwrite) UICollectionView* tabs; |
+@property(nonatomic, readwrite) NSMutableArray<TabCollectionItem*>* items; |
+@property(nonatomic, assign) int selectedIndex; |
@end |
@implementation TabCollectionViewController |
@synthesize tabs = _tabs; |
-@synthesize dataSource = _dataSource; |
+@synthesize items = _items; |
+@synthesize selectedIndex = _selectedIndex; |
#pragma mark - UIViewController |
@@ -46,6 +49,8 @@ |
[self.tabs.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], |
[self.tabs.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], |
]]; |
+ |
+ [self selectItemAtIndex:self.selectedIndex]; |
} |
- (UIStatusBarStyle)preferredStatusBarStyle { |
@@ -82,7 +87,7 @@ |
- (NSInteger)collectionView:(UICollectionView*)collectionView |
numberOfItemsInSection:(NSInteger)section { |
- return [self.dataSource numberOfTabs]; |
+ return static_cast<NSInteger>(self.items.count); |
} |
- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView |
@@ -95,11 +100,10 @@ |
cell.delegate = self; |
[cell setSessionType:TabSwitcherSessionType::REGULAR_SESSION]; |
DCHECK_LE(indexPath.item, INT_MAX); |
- int item = static_cast<int>(indexPath.item); |
- [cell setAppearanceForTabTitle:[self.dataSource titleAtIndex:item] |
+ int index = static_cast<int>(indexPath.item); |
+ [cell setAppearanceForTabTitle:self.items[index].title |
favicon:nil |
cellSize:CGSizeZero]; |
- [cell setSelected:(indexPath.item == [self.dataSource indexOfActiveTab])]; |
return cell; |
} |
@@ -134,22 +138,47 @@ |
#pragma mark - TabCollectionConsumer methods |
-- (void)insertItemAtIndex:(int)index { |
- [self.tabs insertItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:index |
- inSection:0] ]]; |
+- (void)insertItem:(TabCollectionItem*)item atIndex:(int)index { |
+ DCHECK_LE(static_cast<NSUInteger>(index), self.items.count); |
+ [self.items insertObject:item atIndex:index]; |
+ [self.tabs insertItemsAtIndexPaths:@[ [self indexPathForIndex:index] ]]; |
} |
- (void)deleteItemAtIndex:(int)index { |
- [self.tabs deleteItemsAtIndexPaths:@[ [NSIndexPath indexPathForItem:index |
- inSection:0] ]]; |
+ DCHECK_LT(static_cast<NSUInteger>(index), self.items.count); |
+ [self.items removeObjectAtIndex:index]; |
+ [self.tabs deleteItemsAtIndexPaths:@[ [self indexPathForIndex:index] ]]; |
+} |
+ |
+- (void)moveItemFromIndex:(int)fromIndex toIndex:(int)toIndex { |
+ TabCollectionItem* item = self.items[fromIndex]; |
+ [self.items removeObjectAtIndex:fromIndex]; |
+ [self.items insertObject:item atIndex:toIndex]; |
+ [self.tabs moveItemAtIndexPath:[self indexPathForIndex:fromIndex] |
+ toIndexPath:[self indexPathForIndex:toIndex]]; |
+} |
+ |
+- (void)replaceItemAtIndex:(int)index withItem:(TabCollectionItem*)item { |
+ [self.items removeObjectAtIndex:index]; |
+ [self.items insertObject:item atIndex:index]; |
} |
-- (void)reloadItemsAtIndexes:(NSIndexSet*)indexes { |
- NSMutableArray<NSIndexPath*>* indexPaths = [[NSMutableArray alloc] init]; |
- [indexes enumerateIndexesUsingBlock:^(NSUInteger index, BOOL* _Nonnull stop) { |
- [indexPaths addObject:[NSIndexPath indexPathForItem:index inSection:0]]; |
- }]; |
- [self.tabs reloadItemsAtIndexPaths:indexPaths]; |
+- (void)selectItemAtIndex:(int)index { |
+ self.selectedIndex = index; |
+ [self.tabs selectItemAtIndexPath:[self indexPathForIndex:index] |
+ animated:YES |
+ scrollPosition:UITableViewScrollPositionNone]; |
+} |
+ |
+- (void)populateItems:(NSArray<TabCollectionItem*>*)items { |
+ self.items = [items mutableCopy]; |
+ [self.tabs reloadData]; |
+} |
+ |
+#pragma mark - Private |
+ |
+- (NSIndexPath*)indexPathForIndex:(int)index { |
+ return [NSIndexPath indexPathForItem:index inSection:0]; |
} |
@end |