| 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..4ebcdcc8fca429e58cd2dfa66d30177a4e4a0028
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
|
| @@ -0,0 +1,153 @@
|
| +// 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 ()
|
| +// Read / write declaration of read only properties.
|
| +@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;
|
| +
|
| +#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| +#error "This file requires ARC support."
|
| +#endif
|
| +
|
| +#pragma mark - Initializer
|
| +
|
| +- (instancetype)initWithLoader:(id<UrlLoader>)loader
|
| + browserState:(ios::ChromeBrowserState*)browserState {
|
| + DCHECK(browserState);
|
| + self = [super initWithNibName:nil bundle:nil];
|
| + if (self) {
|
| + _browserState = browserState->GetOriginalChromeBrowserState();
|
| + _loader = loader;
|
| +
|
| + _bookmarks = ios::BookmarkModelFactory::GetForBrowserState(browserState);
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +#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);
|
| +
|
| + // Create menu view.
|
| + self.menuView = [[BookmarkMenuView alloc]
|
| + initWithBrowserState:_browserState
|
| + frame:LayoutRectGetRect(menuLayout)];
|
| + self.menuView.autoresizingMask =
|
| + UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
| +
|
| + // Create panel view.
|
| + 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;
|
| +
|
| + // TODO(crbug.com/705339): Folder view is the only primary view now,
|
| + // hence we don't need to remove primary view anymore.
|
| + // Simplify this code that removes primary view and adds it back
|
| + // in subclasses, once the addition code moves here.
|
| + [[self primaryView] removeFromSuperview];
|
| + 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
|
|
|