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

Unified Diff: ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm

Issue 2972733002: Creates common super class for bookmark handset and tablet view controllers (Closed)
Patch Set: Created 3 years, 5 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698