OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #import "ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.h" |
| 6 |
| 7 #include "components/bookmarks/browser/bookmark_model.h" |
| 8 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h" |
| 9 #include "ios/chrome/browser/browser_state/chrome_browser_state.h" |
| 10 #import "ios/chrome/browser/ui/bookmarks/bars/bookmark_navigation_bar.h" |
| 11 #import "ios/chrome/browser/ui/bookmarks/bookmark_collection_view.h" |
| 12 #import "ios/chrome/browser/ui/bookmarks/bookmark_home_primary_view.h" |
| 13 #import "ios/chrome/browser/ui/bookmarks/bookmark_home_waiting_view.h" |
| 14 #import "ios/chrome/browser/ui/bookmarks/bookmark_menu_item.h" |
| 15 #import "ios/chrome/browser/ui/bookmarks/bookmark_menu_view.h" |
| 16 #import "ios/chrome/browser/ui/bookmarks/bookmark_panel_view.h" |
| 17 #import "ios/chrome/browser/ui/rtl_geometry.h" |
| 18 #import "ios/chrome/browser/ui/ui_util.h" |
| 19 #import "ios/chrome/browser/ui/uikit_ui_util.h" |
| 20 #import "ios/chrome/browser/ui/url_loader.h" |
| 21 |
| 22 using bookmarks::BookmarkNode; |
| 23 |
| 24 namespace { |
| 25 // The width of the bookmark menu, displaying the different sections. |
| 26 const CGFloat kMenuWidth = 264; |
| 27 } |
| 28 |
| 29 @interface BookmarkHomeViewController () |
| 30 // Read / write declaration of read only properties. |
| 31 @property(nonatomic, assign) bookmarks::BookmarkModel* bookmarks; |
| 32 @property(nonatomic, assign) ios::ChromeBrowserState* browserState; |
| 33 @property(nonatomic, strong) BookmarkCollectionView* folderView; |
| 34 @property(nonatomic, weak) id<UrlLoader> loader; |
| 35 @property(nonatomic, strong) BookmarkMenuView* menuView; |
| 36 @property(nonatomic, strong) BookmarkNavigationBar* navigationBar; |
| 37 @property(nonatomic, strong) BookmarkPanelView* panelView; |
| 38 @property(nonatomic, strong) BookmarkMenuItem* primaryMenuItem; |
| 39 @end |
| 40 |
| 41 @implementation BookmarkHomeViewController |
| 42 |
| 43 @synthesize bookmarks = _bookmarks; |
| 44 @synthesize browserState = _browserState; |
| 45 @synthesize folderView = _folderView; |
| 46 @synthesize loader = _loader; |
| 47 @synthesize menuView = _menuView; |
| 48 @synthesize navigationBar = _navigationBar; |
| 49 @synthesize panelView = _panelView; |
| 50 @synthesize primaryMenuItem = _primaryMenuItem; |
| 51 @synthesize waitForModelView = _waitForModelView; |
| 52 @synthesize scrollToTop = _scrollToTop; |
| 53 |
| 54 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 55 #error "This file requires ARC support." |
| 56 #endif |
| 57 |
| 58 #pragma mark - Initializer |
| 59 |
| 60 - (instancetype)initWithLoader:(id<UrlLoader>)loader |
| 61 browserState:(ios::ChromeBrowserState*)browserState { |
| 62 DCHECK(browserState); |
| 63 self = [super initWithNibName:nil bundle:nil]; |
| 64 if (self) { |
| 65 _browserState = browserState->GetOriginalChromeBrowserState(); |
| 66 _loader = loader; |
| 67 |
| 68 _bookmarks = ios::BookmarkModelFactory::GetForBrowserState(browserState); |
| 69 } |
| 70 return self; |
| 71 } |
| 72 |
| 73 #pragma mark - UIViewController |
| 74 |
| 75 - (void)viewDidLoad { |
| 76 [super viewDidLoad]; |
| 77 self.navigationBar = [[BookmarkNavigationBar alloc] initWithFrame:CGRectZero]; |
| 78 } |
| 79 |
| 80 #pragma mark - Public |
| 81 |
| 82 - (void)loadBookmarkViews { |
| 83 LayoutRect menuLayout = |
| 84 LayoutRectMake(0, self.view.bounds.size.width, 0, self.menuWidth, |
| 85 self.view.bounds.size.height); |
| 86 |
| 87 // Create menu view. |
| 88 self.menuView = [[BookmarkMenuView alloc] |
| 89 initWithBrowserState:_browserState |
| 90 frame:LayoutRectGetRect(menuLayout)]; |
| 91 self.menuView.autoresizingMask = |
| 92 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; |
| 93 |
| 94 // Create panel view. |
| 95 self.panelView = [[BookmarkPanelView alloc] initWithFrame:CGRectZero |
| 96 menuViewWidth:self.menuWidth]; |
| 97 self.panelView.autoresizingMask = |
| 98 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; |
| 99 |
| 100 // Create folder view. |
| 101 BookmarkCollectionView* view = |
| 102 [[BookmarkCollectionView alloc] initWithBrowserState:self.browserState |
| 103 frame:CGRectZero]; |
| 104 self.folderView = view; |
| 105 [self.folderView setEditing:self.editing animated:NO]; |
| 106 self.folderView.autoresizingMask = |
| 107 UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; |
| 108 } |
| 109 |
| 110 - (void)updatePrimaryMenuItem:(BookmarkMenuItem*)menuItem { |
| 111 DCHECK(menuItem.type == bookmarks::MenuItemFolder); |
| 112 if ([self.primaryMenuItem isEqual:menuItem]) |
| 113 return; |
| 114 |
| 115 // TODO(crbug.com/705339): Folder view is the only primary view now, |
| 116 // hence we don't need to remove primary view anymore. |
| 117 // Simplify this code that removes primary view and adds it back |
| 118 // in subclasses, once the addition code moves here. |
| 119 [[self primaryView] removeFromSuperview]; |
| 120 self.primaryMenuItem = menuItem; |
| 121 |
| 122 [self.folderView resetFolder:self.primaryMenuItem.folder]; |
| 123 [self.folderView promoStateChangedAnimated:NO]; |
| 124 |
| 125 [[self primaryView] changeOrientation:GetInterfaceOrientation()]; |
| 126 [[self primaryView] setScrollsToTop:!self.scrollToTop]; |
| 127 |
| 128 [self.menuView updatePrimaryMenuItem:self.primaryMenuItem]; |
| 129 } |
| 130 |
| 131 - (UIView<BookmarkHomePrimaryView>*)primaryView { |
| 132 if (self.primaryMenuItem.type == bookmarks::MenuItemFolder) |
| 133 return self.folderView; |
| 134 return nil; |
| 135 } |
| 136 |
| 137 - (void)loadWaitingView { |
| 138 DCHECK(!self.waitForModelView); |
| 139 DCHECK(self.view); |
| 140 |
| 141 // Present a waiting view. |
| 142 BookmarkHomeWaitingView* waitingView = |
| 143 [[BookmarkHomeWaitingView alloc] initWithFrame:self.view.bounds]; |
| 144 self.waitForModelView = waitingView; |
| 145 [self.view addSubview:self.waitForModelView]; |
| 146 [self.waitForModelView startWaiting]; |
| 147 } |
| 148 |
| 149 - (CGFloat)menuWidth { |
| 150 return kMenuWidth; |
| 151 } |
| 152 |
| 153 @end |
OLD | NEW |