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

Side by Side Diff: ios/chrome/browser/ui/content_suggestions/content_suggestions_collection_updater.mm

Issue 2761263003: Allow CollectionViewModel/Controller queries without SectionIdentifier (Closed)
Patch Set: Cleanup 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/chrome/browser/ui/content_suggestions/content_suggestions_collectio n_updater.h" 5 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_collectio n_updater.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/mac/foundation_util.h" 8 #include "base/mac/foundation_util.h"
9 #include "base/strings/sys_string_conversions.h" 9 #include "base/strings/sys_string_conversions.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 if (item.suggestionIdentifier == suggestionIdentifier) { 177 if (item.suggestionIdentifier == suggestionIdentifier) {
178 correspondingItem = item; 178 correspondingItem = item;
179 break; 179 break;
180 } 180 }
181 } 181 }
182 182
183 if (!correspondingItem) 183 if (!correspondingItem)
184 return; 184 return;
185 185
186 NSIndexPath* indexPath = [self.collectionViewController.collectionViewModel 186 NSIndexPath* indexPath = [self.collectionViewController.collectionViewModel
187 indexPathForItem:correspondingItem 187 indexPathForItem:correspondingItem];
188 inSectionWithIdentifier:sectionIdentifier];
189 [self.collectionViewController dismissEntryAtIndexPath:indexPath]; 188 [self.collectionViewController dismissEntryAtIndexPath:indexPath];
190 } 189 }
191 190
192 - (void)reloadAllData { 191 - (void)reloadAllData {
193 [self resetModels]; 192 [self resetModels];
194 193
195 // The data is reset, add the new data directly in the model then reload the 194 // The data is reset, add the new data directly in the model then reload the
196 // collection. 195 // collection.
197 NSArray<ContentSuggestion*>* suggestions = [self.dataSource allSuggestions]; 196 NSArray<ContentSuggestion*>* suggestions = [self.dataSource allSuggestions];
198 [self addSectionsForSuggestionsToModel:suggestions]; 197 [self addSectionsForSuggestionsToModel:suggestions];
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 ContentSuggestionsSectionInformation* sectionInfo = 331 ContentSuggestionsSectionInformation* sectionInfo =
333 self.sectionInfoBySectionIdentifier[@(sectionIdentifier)]; 332 self.sectionInfoBySectionIdentifier[@(sectionIdentifier)];
334 333
335 CSCollectionViewItem* item = [self emptyItemForSectionInfo:sectionInfo]; 334 CSCollectionViewItem* item = [self emptyItemForSectionInfo:sectionInfo];
336 return [self addItem:item toSectionWithIdentifier:sectionIdentifier]; 335 return [self addItem:item toSectionWithIdentifier:sectionIdentifier];
337 } 336 }
338 337
339 #pragma mark - ContentSuggestionsArticleItemDelegate 338 #pragma mark - ContentSuggestionsArticleItemDelegate
340 339
341 - (void)loadImageForArticleItem:(ContentSuggestionsArticleItem*)articleItem { 340 - (void)loadImageForArticleItem:(ContentSuggestionsArticleItem*)articleItem {
342 NSInteger sectionIdentifier =
343 SectionIdentifierForInfo(articleItem.suggestionIdentifier.sectionInfo);
344
345 __weak ContentSuggestionsCollectionUpdater* weakSelf = self; 341 __weak ContentSuggestionsCollectionUpdater* weakSelf = self;
346 __weak ContentSuggestionsArticleItem* weakArticle = articleItem; 342 __weak ContentSuggestionsArticleItem* weakArticle = articleItem;
347 343
348 void (^imageFetchedCallback)(UIImage*) = ^(UIImage* image) { 344 void (^imageFetchedCallback)(UIImage*) = ^(UIImage* image) {
349 ContentSuggestionsCollectionUpdater* strongSelf = weakSelf; 345 ContentSuggestionsCollectionUpdater* strongSelf = weakSelf;
350 ContentSuggestionsArticleItem* strongArticle = weakArticle; 346 ContentSuggestionsArticleItem* strongArticle = weakArticle;
351 if (!strongSelf || !strongArticle) { 347 if (!strongSelf || !strongArticle) {
352 return; 348 return;
353 } 349 }
354 350
355 strongArticle.image = image; 351 strongArticle.image = image;
356 [strongSelf.collectionViewController 352 [strongSelf.collectionViewController
357 reconfigureCellsForItems:@[ strongArticle ] 353 reconfigureCellsForItems:@[ strongArticle ]];
358 inSectionWithIdentifier:sectionIdentifier];
359 }; 354 };
360 355
361 [self.dataSource.imageFetcher 356 [self.dataSource.imageFetcher
362 fetchImageForSuggestion:articleItem.suggestionIdentifier 357 fetchImageForSuggestion:articleItem.suggestionIdentifier
363 callback:imageFetchedCallback]; 358 callback:imageFetchedCallback];
364 } 359 }
365 360
366 #pragma mark - Private methods 361 #pragma mark - Private methods
367 362
368 // Adds a footer to the section identified by |sectionInfo| if there is none 363 // Adds a footer to the section identified by |sectionInfo| if there is none
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 473
479 __weak ContentSuggestionsCollectionUpdater* weakSelf = self; 474 __weak ContentSuggestionsCollectionUpdater* weakSelf = self;
480 [self.dataSource 475 [self.dataSource
481 fetchFaviconImageForSuggestion:articleItem.suggestionIdentifier 476 fetchFaviconImageForSuggestion:articleItem.suggestionIdentifier
482 completion:^void(UIImage* favicon) { 477 completion:^void(UIImage* favicon) {
483 if (!weakItem || !weakSelf) 478 if (!weakItem || !weakSelf)
484 return; 479 return;
485 480
486 weakItem.attributes = 481 weakItem.attributes =
487 [FaviconAttributes attributesWithImage:favicon]; 482 [FaviconAttributes attributesWithImage:favicon];
488 [weakSelf reconfigure:weakItem]; 483 [weakSelf.collectionViewController
484 reconfigureCellsForItems:@[ weakItem ]];
489 }]; 485 }];
490 486
491 return articleItem; 487 return articleItem;
492 } 488 }
493 489
494 // Returns a reading list item built with the |suggestion|. 490 // Returns a reading list item built with the |suggestion|.
495 - (ContentSuggestionsReadingListItem*)readingListItemForSuggestion: 491 - (ContentSuggestionsReadingListItem*)readingListItemForSuggestion:
496 (ContentSuggestion*)suggestion { 492 (ContentSuggestion*)suggestion {
497 ContentSuggestionsReadingListItem* readingListItem = 493 ContentSuggestionsReadingListItem* readingListItem =
498 [[ContentSuggestionsReadingListItem alloc] 494 [[ContentSuggestionsReadingListItem alloc]
(...skipping 29 matching lines...) Expand all
528 void (^completionBlock)(FaviconAttributes* attributes) = 524 void (^completionBlock)(FaviconAttributes* attributes) =
529 ^(FaviconAttributes* attributes) { 525 ^(FaviconAttributes* attributes) {
530 CSCollectionViewItem* strongItem = weakItem; 526 CSCollectionViewItem* strongItem = weakItem;
531 ContentSuggestionsCollectionUpdater* strongSelf = weakSelf; 527 ContentSuggestionsCollectionUpdater* strongSelf = weakSelf;
532 if (!strongSelf || !strongItem) { 528 if (!strongSelf || !strongItem) {
533 return; 529 return;
534 } 530 }
535 531
536 callback(attributes); 532 callback(attributes);
537 533
538 [strongSelf reconfigure:strongItem]; 534 [strongSelf.collectionViewController
535 reconfigureCellsForItems:@[ strongItem ]];
539 }; 536 };
540 537
541 [self.dataSource fetchFaviconAttributesForURL:URL completion:completionBlock]; 538 [self.dataSource fetchFaviconAttributesForURL:URL completion:completionBlock];
542 } 539 }
543 540
544 // Adds |item| to |sectionIdentifier| section of the model of the 541 // Adds |item| to |sectionIdentifier| section of the model of the
545 // CollectionView. Returns the IndexPath of the newly added item. 542 // CollectionView. Returns the IndexPath of the newly added item.
546 - (NSIndexPath*)addItem:(CSCollectionViewItem*)item 543 - (NSIndexPath*)addItem:(CSCollectionViewItem*)item
547 toSectionWithIdentifier:(NSInteger)sectionIdentifier { 544 toSectionWithIdentifier:(NSInteger)sectionIdentifier {
548 CSCollectionViewModel* model = 545 CSCollectionViewModel* model =
549 self.collectionViewController.collectionViewModel; 546 self.collectionViewController.collectionViewModel;
550 NSInteger section = [model sectionForSectionIdentifier:sectionIdentifier]; 547 NSInteger section = [model sectionForSectionIdentifier:sectionIdentifier];
551 NSInteger itemNumber = [model numberOfItemsInSection:section]; 548 NSInteger itemNumber = [model numberOfItemsInSection:section];
552 [model addItem:item toSectionWithIdentifier:sectionIdentifier]; 549 [model addItem:item toSectionWithIdentifier:sectionIdentifier];
553 550
554 return [NSIndexPath indexPathForItem:itemNumber inSection:section]; 551 return [NSIndexPath indexPathForItem:itemNumber inSection:section];
555 } 552 }
556 553
557 // Reconfigures the |item| in the collection view.
558 - (void)reconfigure:(CSCollectionViewItem*)item {
559 CSCollectionViewModel* model =
560 self.collectionViewController.collectionViewModel;
561
562 for (NSInteger sectionNumber = 0; sectionNumber < [model numberOfSections];
563 sectionNumber++) {
564 NSInteger sectionIdentifier =
565 [model sectionIdentifierForSection:sectionNumber];
566 if ([model hasItem:item inSectionWithIdentifier:sectionIdentifier]) {
567 [self.collectionViewController
568 reconfigureCellsForItems:@[ item ]
569 inSectionWithIdentifier:sectionIdentifier];
570 }
571 }
572 }
573
574 @end 554 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698