| Index: ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.mm
|
| diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.mm
|
| index 82be0d6b6e1258d9814fdb413fc2031272e631da..e4e521b936e50d6b08fa19c8c4c9ebf20f57ef26 100644
|
| --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.mm
|
| +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_tablet_ntp_controller.mm
|
| @@ -24,6 +24,7 @@
|
| #import "ios/chrome/browser/ui/alert_coordinator/action_sheet_coordinator.h"
|
| #import "ios/chrome/browser/ui/bookmarks/bars/bookmark_editing_bar.h"
|
| #import "ios/chrome/browser/ui/bookmarks/bars/bookmark_navigation_bar.h"
|
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_all_collection_view.h"
|
| #import "ios/chrome/browser/ui/bookmarks/bookmark_edit_view_controller.h"
|
| #import "ios/chrome/browser/ui/bookmarks/bookmark_folder_collection_view.h"
|
| #import "ios/chrome/browser/ui/bookmarks/bookmark_folder_editor_view_controller.h"
|
| @@ -130,6 +131,7 @@
|
| // time, it contains exactly one of the BookmarkCollectionView subclasses.
|
| @property(nonatomic, retain) ContentView* contentView;
|
| // The possible views that can be shown from the menu.
|
| +@property(nonatomic, retain) BookmarkAllCollectionView* allItemsView;
|
| @property(nonatomic, retain) BookmarkFolderCollectionView* folderView;
|
| // This view is created and used if the model is not fully loaded yet by the
|
| // time this controller starts.
|
| @@ -183,6 +185,7 @@
|
| // loaded, and the bookmark model is loaded.
|
| - (void)loadBookmarkViews;
|
| // If the view doesn't exist, create it.
|
| +- (void)ensureAllViewExists;
|
| - (void)ensureFolderViewExists;
|
| // Updates the property 'primaryMenuItem'.
|
| // Updates the UI to reflect the new state of 'primaryMenuItem'.
|
| @@ -279,6 +282,7 @@
|
| @synthesize bookmarks = _bookmarks;
|
|
|
| @synthesize contentView = _contentView;
|
| +@synthesize allItemsView = _allItemsView;
|
| @synthesize folderView = _folderView;
|
| @synthesize waitForModelView = _waitForModelView;
|
|
|
| @@ -325,6 +329,7 @@
|
| - (void)dealloc {
|
| _contentView.delegate = nil;
|
|
|
| + _allItemsView.delegate = nil;
|
| _folderView.delegate = nil;
|
|
|
| _menuView.delegate = nil;
|
| @@ -501,6 +506,20 @@
|
| }
|
| }
|
|
|
| +- (void)ensureAllViewExists {
|
| + if (self.allItemsView)
|
| + return;
|
| +
|
| + base::scoped_nsobject<BookmarkAllCollectionView> view(
|
| + [[BookmarkAllCollectionView alloc] initWithBrowserState:self.browserState
|
| + frame:CGRectZero]);
|
| + self.allItemsView = view;
|
| + self.allItemsView.delegate = self;
|
| + [self.allItemsView setEditing:self.editing animated:NO];
|
| + self.allItemsView.autoresizingMask =
|
| + UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
|
| +}
|
| +
|
| - (void)ensureFolderViewExists {
|
| if (self.folderView)
|
| return;
|
| @@ -528,6 +547,9 @@
|
| self.primaryMenuItem = menuItem;
|
|
|
| switch (self.primaryMenuItem.type) {
|
| + case bookmarks::MenuItemAll:
|
| + [self ensureAllViewExists];
|
| + break;
|
| case bookmarks::MenuItemFolder:
|
| [self ensureFolderViewExists];
|
| [self.folderView resetFolder:self.primaryMenuItem.folder];
|
| @@ -561,6 +583,8 @@
|
| DCHECK([self contentView]);
|
|
|
| switch (self.primaryMenuItem.type) {
|
| + case bookmarks::MenuItemAll:
|
| + return self.allItemsView;
|
| case bookmarks::MenuItemFolder:
|
| return self.folderView;
|
| case bookmarks::MenuItemDivider:
|
| @@ -1300,6 +1324,14 @@
|
| #pragma mark - BookmarkPromoControllerDelegate
|
|
|
| - (void)promoStateChanged:(BOOL)promoEnabled {
|
| + [self.allItemsView.collectionView reloadData];
|
| + // This is required to workaround a crash seen once on iOS 7.1 when
|
| + // the collection gets two reloadData without getting a call to layout
|
| + // subviews, the collection view will reuse some cached data for the perfoming
|
| + // the layout which are invalid after the second call to reloadData.
|
| + // Forcing the layout invalidation after each reloadData seems to fix the
|
| + // issue.
|
| + [self.allItemsView.collectionView.collectionViewLayout invalidateLayout];
|
| [self.folderView
|
| promoStateChangedAnimated:self.folderView == [self primaryView]];
|
| }
|
|
|