Chromium Code Reviews| Index: ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm |
| diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d3abb73750b49a4d1016b644f4059426dc2d340a |
| --- /dev/null |
| +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm |
| @@ -0,0 +1,150 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h" |
| + |
| +#include "components/bookmarks/browser/bookmark_model.h" |
| +#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h" |
| +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" |
| +#import "ios/chrome/browser/ui/bookmarks/bars/bookmark_navigation_bar.h" |
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_collection_view.h" |
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_home_primary_view.h" |
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.h" |
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_menu_item.h" |
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_menu_view.h" |
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_panel_view.h" |
| +#import "ios/chrome/browser/ui/rtl_geometry.h" |
| +#import "ios/chrome/browser/ui/ui_util.h" |
| +#import "ios/chrome/browser/ui/uikit_ui_util.h" |
| +#import "ios/chrome/browser/ui/url_loader.h" |
| + |
| +using bookmarks::BookmarkNode; |
| + |
| +namespace { |
| +// The width of the bookmark menu, displaying the different sections. |
| +const CGFloat kMenuWidth = 264; |
| +} |
| + |
| +@interface BookmarkHomeViewController () |
|
noyau (Ping after 24h)
2017/07/07 09:37:23
Please add a comment explaining that those are r/w
ramyasharma
2017/07/10 06:55:58
Done.
|
| +@property(nonatomic, assign) bookmarks::BookmarkModel* bookmarks; |
| +@property(nonatomic, assign) ios::ChromeBrowserState* browserState; |
| +@property(nonatomic, strong) BookmarkCollectionView* folderView; |
| +@property(nonatomic, weak) id<UrlLoader> loader; |
| +@property(nonatomic, strong) BookmarkMenuView* menuView; |
| +@property(nonatomic, strong) BookmarkNavigationBar* navigationBar; |
| +@property(nonatomic, strong) BookmarkPanelView* panelView; |
| +@property(nonatomic, strong) BookmarkMenuItem* primaryMenuItem; |
| +@end |
| + |
| +@implementation BookmarkHomeViewController |
| + |
| +@synthesize bookmarks = _bookmarks; |
| +@synthesize browserState = _browserState; |
| +@synthesize folderView = _folderView; |
| +@synthesize loader = _loader; |
| +@synthesize menuView = _menuView; |
| +@synthesize navigationBar = _navigationBar; |
| +@synthesize panelView = _panelView; |
| +@synthesize primaryMenuItem = _primaryMenuItem; |
| +@synthesize waitForModelView = _waitForModelView; |
| +@synthesize scrollToTop = _scrollToTop; |
| + |
| +#pragma mark - Initializer |
| + |
| +- (instancetype)initWithLoader:(id<UrlLoader>)loader |
| + browserState:(ios::ChromeBrowserState*)browserState { |
| + self = [super init]; |
| + if (self) { |
| + DCHECK(browserState); |
|
noyau (Ping after 24h)
2017/07/07 09:37:22
Move the DCHECK to the beginning of the method.
ramyasharma
2017/07/10 06:55:59
Done.
|
| + _browserState = browserState->GetOriginalChromeBrowserState(); |
| + _loader = loader; |
| + |
| + _bookmarks = ios::BookmarkModelFactory::GetForBrowserState(browserState); |
| + } |
| + return self; |
| +} |
| + |
| +- (void)dealloc { |
| + _menuView.delegate = nil; |
| + _folderView.delegate = nil; |
| + _panelView.delegate = nil; |
|
noyau (Ping after 24h)
2017/07/07 09:37:23
Now that we use ARC this should be replaced by wea
ramyasharma
2017/07/10 06:55:58
Just checked the delegates, they have already been
|
| +} |
| + |
| +#pragma mark - UIViewController |
| + |
| +- (void)viewDidLoad { |
| + [super viewDidLoad]; |
| + self.navigationBar = [[BookmarkNavigationBar alloc] initWithFrame:CGRectZero]; |
| +} |
| + |
| +#pragma mark - Public |
| + |
| +- (void)loadBookmarkViews { |
| + LayoutRect menuLayout = |
| + LayoutRectMake(0, self.view.bounds.size.width, 0, self.menuWidth, |
| + self.view.bounds.size.height); |
| + |
| + // The user can swipe the BookmarkPanelView to show the menuView. |
| + // Therefore, it must be created here. |
|
noyau (Ping after 24h)
2017/07/07 09:37:24
This comment seems specific to iPhone.
ramyasharma
2017/07/10 06:55:58
Acknowledged.
|
| + self.menuView = [[BookmarkMenuView alloc] |
| + initWithBrowserState:_browserState |
| + frame:LayoutRectGetRect(menuLayout)]; |
| + self.menuView.autoresizingMask = |
| + UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; |
| + |
| + self.panelView = [[BookmarkPanelView alloc] initWithFrame:CGRectZero |
| + menuViewWidth:self.menuWidth]; |
| + self.panelView.autoresizingMask = |
| + UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; |
| + |
| + // Create folder view. |
| + BookmarkCollectionView* view = |
| + [[BookmarkCollectionView alloc] initWithBrowserState:self.browserState |
| + frame:CGRectZero]; |
| + self.folderView = view; |
| + [self.folderView setEditing:self.editing animated:NO]; |
| + self.folderView.autoresizingMask = |
| + UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; |
| +} |
| + |
| +- (void)updatePrimaryMenuItem:(BookmarkMenuItem*)menuItem { |
| + DCHECK(menuItem.type == bookmarks::MenuItemFolder); |
| + if ([self.primaryMenuItem isEqual:menuItem]) |
| + return; |
| + |
| + [[self primaryView] removeFromSuperview]; |
|
noyau (Ping after 24h)
2017/07/07 09:37:24
The primary view is now always the folder view. I'
ramyasharma
2017/07/10 06:55:59
Thanks, I have added a TODO to take care of this.
|
| + self.primaryMenuItem = menuItem; |
| + |
| + [self.folderView resetFolder:self.primaryMenuItem.folder]; |
| + [self.folderView promoStateChangedAnimated:NO]; |
| + |
| + [[self primaryView] changeOrientation:GetInterfaceOrientation()]; |
| + [[self primaryView] setScrollsToTop:!self.scrollToTop]; |
| + |
| + [self.menuView updatePrimaryMenuItem:self.primaryMenuItem]; |
| +} |
| + |
| +- (UIView<BookmarkHomePrimaryView>*)primaryView { |
| + if (self.primaryMenuItem.type == bookmarks::MenuItemFolder) |
| + return self.folderView; |
| + return nil; |
| +} |
| + |
| +- (void)loadWaitingView { |
| + DCHECK(!self.waitForModelView); |
| + DCHECK(self.view); |
| + |
| + // Present a waiting view. |
| + BookmarkHomeWaitingView* waitingView = |
| + [[BookmarkHomeWaitingView alloc] initWithFrame:self.view.bounds]; |
| + self.waitForModelView = waitingView; |
| + [self.view addSubview:self.waitForModelView]; |
| + [self.waitForModelView startWaiting]; |
| +} |
| + |
| +- (CGFloat)menuWidth { |
| + return kMenuWidth; |
| +} |
| + |
| +@end |