Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: ios/clean/chrome/browser/ui/tab_collection/tab_collection_mediator.mm

Issue 2885983003: [ios] TabCollectionItem (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_mediator.h" 5 #import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_mediator.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/scoped_observer.h" 8 #include "base/scoped_observer.h"
9 #include "base/strings/sys_string_conversions.h" 9 #include "base/strings/sys_string_conversions.h"
10 #import "ios/chrome/browser/web_state_list/web_state_list.h" 10 #import "ios/chrome/browser/web_state_list/web_state_list.h"
11 #import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_consumer.h" 11 #import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_consumer.h"
12 #import "ios/clean/chrome/browser/ui/tab_collection/tab_collection_item.h"
12 #include "ios/web/public/web_state/web_state.h" 13 #include "ios/web/public/web_state/web_state.h"
13 14
14 #if !defined(__has_feature) || !__has_feature(objc_arc) 15 #if !defined(__has_feature) || !__has_feature(objc_arc)
15 #error "This file requires ARC support." 16 #error "This file requires ARC support."
16 #endif 17 #endif
17 18
18 @implementation TabCollectionMediator { 19 @implementation TabCollectionMediator {
19 std::unique_ptr<WebStateListObserverBridge> _webStateListObserver; 20 std::unique_ptr<WebStateListObserverBridge> _webStateListObserver;
20 std::unique_ptr<ScopedObserver<WebStateList, WebStateListObserverBridge>> 21 std::unique_ptr<ScopedObserver<WebStateList, WebStateListObserverBridge>>
21 _scopedWebStateListObserver; 22 _scopedWebStateListObserver;
(...skipping 21 matching lines...) Expand all
43 44
44 - (void)disconnect { 45 - (void)disconnect {
45 self.webStateList = nullptr; 46 self.webStateList = nullptr;
46 } 47 }
47 48
48 #pragma mark - Properties 49 #pragma mark - Properties
49 50
50 - (void)setWebStateList:(WebStateList*)webStateList { 51 - (void)setWebStateList:(WebStateList*)webStateList {
51 _scopedWebStateListObserver->RemoveAll(); 52 _scopedWebStateListObserver->RemoveAll();
52 _webStateList = webStateList; 53 _webStateList = webStateList;
53 if (!_webStateList) { 54 [self initializeConsumerItems];
54 return; 55 if (_webStateList) {
56 _scopedWebStateListObserver->Add(_webStateList);
55 } 57 }
56 _scopedWebStateListObserver->Add(_webStateList);
57 } 58 }
58 59
59 #pragma mark - TabCollectionDataSource 60 - (void)setConsumer:(id<TabCollectionConsumer>)consumer {
60 61 _consumer = consumer;
61 - (int)numberOfTabs { 62 [self initializeConsumerItems];
62 return self.webStateList->count();
63 }
64
65 - (NSString*)titleAtIndex:(int)index {
66 return [self titleFromWebState:self.webStateList->GetWebStateAt(index)];
67 }
68
69 - (int)indexOfActiveTab {
70 return self.webStateList->active_index();
71 } 63 }
72 64
73 #pragma mark - WebStateListObserving 65 #pragma mark - WebStateListObserving
74 66
75 - (void)webStateList:(WebStateList*)webStateList 67 - (void)webStateList:(WebStateList*)webStateList
76 didInsertWebState:(web::WebState*)webState 68 didInsertWebState:(web::WebState*)webState
77 atIndex:(int)index { 69 atIndex:(int)index {
78 [self.consumer insertItemAtIndex:index]; 70 [self.consumer insertItem:[self itemFromWebState:webState] atIndex:index];
79 } 71 }
80 72
81 - (void)webStateList:(WebStateList*)webStateList 73 - (void)webStateList:(WebStateList*)webStateList
82 didMoveWebState:(web::WebState*)webState 74 didMoveWebState:(web::WebState*)webState
83 fromIndex:(int)fromIndex 75 fromIndex:(int)fromIndex
84 toIndex:(int)toIndex { 76 toIndex:(int)toIndex {
85 int minIndex = std::min(fromIndex, toIndex); 77 [self.consumer moveItemFromIndex:fromIndex toIndex:toIndex];
86 int length = std::abs(fromIndex - toIndex) + 1;
87 NSIndexSet* indexes =
88 [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(minIndex, length)];
89 [self.consumer reloadItemsAtIndexes:indexes];
90 } 78 }
91 79
92 - (void)webStateList:(WebStateList*)webStateList 80 - (void)webStateList:(WebStateList*)webStateList
93 didReplaceWebState:(web::WebState*)oldWebState 81 didReplaceWebState:(web::WebState*)oldWebState
94 withWebState:(web::WebState*)newWebState 82 withWebState:(web::WebState*)newWebState
95 atIndex:(int)index { 83 atIndex:(int)index {
96 [self.consumer reloadItemsAtIndexes:[NSIndexSet indexSetWithIndex:index]]; 84 [self.consumer replaceItemAtIndex:index
85 withItem:[self itemFromWebState:newWebState]];
97 } 86 }
98 87
99 - (void)webStateList:(WebStateList*)webStateList 88 - (void)webStateList:(WebStateList*)webStateList
100 didDetachWebState:(web::WebState*)webState 89 didDetachWebState:(web::WebState*)webState
101 atIndex:(int)index { 90 atIndex:(int)index {
102 [self.consumer deleteItemAtIndex:index]; 91 [self.consumer deleteItemAtIndex:index];
103 } 92 }
104 93
105 - (void)webStateList:(WebStateList*)webStateList 94 - (void)webStateList:(WebStateList*)webStateList
106 didChangeActiveWebState:(web::WebState*)newWebState 95 didChangeActiveWebState:(web::WebState*)newWebState
107 oldWebState:(web::WebState*)oldWebState 96 oldWebState:(web::WebState*)oldWebState
108 atIndex:(int)atIndex 97 atIndex:(int)atIndex
109 userAction:(BOOL)userAction { 98 userAction:(BOOL)userAction {
110 int fromIndex = webStateList->GetIndexOfWebState(oldWebState); 99 [self.consumer selectItemAtIndex:atIndex];
111 NSMutableIndexSet* indexes = [[NSMutableIndexSet alloc] init];
112 if (fromIndex >= 0 && fromIndex < [self numberOfTabs]) {
113 [indexes addIndex:fromIndex];
114 }
115 if (atIndex >= 0 && atIndex < [self numberOfTabs]) {
116 [indexes addIndex:atIndex];
117 }
118 [self.consumer reloadItemsAtIndexes:indexes];
119 } 100 }
120 101
121 #pragma mark - Private 102 #pragma mark - Private
122 103
123 - (NSString*)titleFromWebState:(const web::WebState*)webState { 104 - (TabCollectionItem*)itemFromWebState:(const web::WebState*)webState {
sczs 2017/05/18 16:11:02 nit: WDYT about changing this to tabCollectionItem
edchin 2017/05/18 17:30:26 Done.
124 // PLACEHOLDER: Use real webstate title in the future. 105 // PLACEHOLDER: Use real webstate title in the future.
125 GURL url = webState->GetVisibleURL(); 106 GURL url = webState->GetVisibleURL();
126 NSString* urlText = @"<New Tab>"; 107 NSString* urlText = @"<New Tab>";
127 if (url.is_valid()) { 108 if (url.is_valid()) {
128 urlText = base::SysUTF8ToNSString(url.spec()); 109 urlText = base::SysUTF8ToNSString(url.spec());
129 } 110 }
130 return urlText; 111 TabCollectionItem* item = [[TabCollectionItem alloc] init];
112 item.title = urlText;
113 return item;
114 }
115
116 - (NSArray<TabCollectionItem*>*)itemsFromWebStateList:
117 (const WebStateList*)webStateList {
118 DCHECK(webStateList);
119 NSMutableArray<TabCollectionItem*>* items = [[NSMutableArray alloc] init];
120 for (int i = 0; i < webStateList->count(); i++) {
121 [items addObject:[self itemFromWebState:webStateList->GetWebStateAt(i)]];
122 }
123 return [items copy];
124 }
125
126 - (void)initializeConsumerItems {
127 if (self.consumer && self.webStateList) {
128 [self.consumer
129 initializeItems:[self itemsFromWebStateList:self.webStateList]];
130 [self.consumer selectItemAtIndex:self.webStateList->active_index()];
131 }
131 } 132 }
132 133
133 @end 134 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698