| Index: ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.mm
|
| diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.mm
|
| index 0c88d0d704bd8f4e3d145f3f8b6bb346e90883ab..cc4e76bd2299f56b0820b1cc057ed8a9ec6450f0 100644
|
| --- a/ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.mm
|
| +++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_handset_view_controller.mm
|
| @@ -6,10 +6,7 @@
|
|
|
| #include <memory>
|
|
|
| -#import "base/ios/weak_nsobject.h"
|
| #include "base/logging.h"
|
| -#include "base/mac/objc_property_releaser.h"
|
| -#include "base/mac/scoped_nsobject.h"
|
| #include "base/metrics/user_metrics.h"
|
| #include "base/metrics/user_metrics_action.h"
|
| #include "base/strings/sys_string_conversions.h"
|
| @@ -42,6 +39,10 @@
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/l10n/l10n_util_mac.h"
|
|
|
| +#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| +#error "This file requires ARC support."
|
| +#endif
|
| +
|
| using bookmarks::BookmarkNode;
|
|
|
| namespace {
|
| @@ -59,56 +60,54 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| BookmarkPromoControllerDelegate> {
|
| // Bridge to register for bookmark changes.
|
| std::unique_ptr<bookmarks::BookmarkModelBridge> _bridge;
|
| - base::mac::ObjCPropertyReleaser
|
| - _propertyReleaser_BookmarkHomeHandsetViewController;
|
| }
|
|
|
| // This views holds the primary content of this view controller. At any point in
|
| // time, it contains exactly one of the BookmarkCollectionView subclasses.
|
| -@property(nonatomic, retain) UIView* contentView;
|
| +@property(nonatomic, strong) UIView* contentView;
|
| // The possible views that can be shown from the menu.
|
| -@property(nonatomic, retain) BookmarkFolderCollectionView* folderView;
|
| +@property(nonatomic, strong) BookmarkFolderCollectionView* folderView;
|
| // This view is created and used if the model is not fully loaded yet by the
|
| // time this controller starts.
|
| -@property(nonatomic, retain) BookmarkHomeWaitingView* waitForModelView;
|
| +@property(nonatomic, strong) BookmarkHomeWaitingView* waitForModelView;
|
|
|
| // The menu with all the folders and special entries.
|
| -@property(nonatomic, retain) BookmarkMenuView* menuView;
|
| +@property(nonatomic, strong) BookmarkMenuView* menuView;
|
| // At any point in time, there is exactly one collection view whose view is part
|
| // of the view hierarchy. This property determine which collection view is
|
| // visible. Not by accident, this property also reflects the selected menu item
|
| // in the BookmarkMenuView.
|
| -@property(nonatomic, retain) BookmarkMenuItem* primaryMenuItem;
|
| +@property(nonatomic, strong) BookmarkMenuItem* primaryMenuItem;
|
| // When the view is first shown on the screen, this property represents the
|
| // cached value of the y of the content offset of the primary view. This
|
| // property is set to nil after it is used.
|
| -@property(nonatomic, retain) NSNumber* cachedContentPosition;
|
| +@property(nonatomic, strong) NSNumber* cachedContentPosition;
|
|
|
| // The navigation bar sits on top of the main content.
|
| -@property(nonatomic, retain) BookmarkNavigationBar* navigationBar;
|
| +@property(nonatomic, strong) BookmarkNavigationBar* navigationBar;
|
| // The layout code in this class relies on the assumption that the editingBar
|
| // has the same frame as the navigationBar.
|
| -@property(nonatomic, retain) BookmarkEditingBar* editingBar;
|
| +@property(nonatomic, strong) BookmarkEditingBar* editingBar;
|
|
|
| // The action sheet coordinator used when trying to edit a single bookmark.
|
| -@property(nonatomic, retain) ActionSheetCoordinator* actionSheetCoordinator;
|
| +@property(nonatomic, strong) ActionSheetCoordinator* actionSheetCoordinator;
|
| // The view controller used to view and edit a single bookmark.
|
| -@property(nonatomic, retain) BookmarkEditViewController* editViewController;
|
| +@property(nonatomic, strong) BookmarkEditViewController* editViewController;
|
| // The view controller used to pick a folder in which to move the selected
|
| // bookmarks.
|
| -@property(nonatomic, retain) BookmarkFolderViewController* folderSelector;
|
| +@property(nonatomic, strong) BookmarkFolderViewController* folderSelector;
|
| // The view controller to present when editing the current folder.
|
| -@property(nonatomic, retain) BookmarkFolderEditorViewController* folderEditor;
|
| +@property(nonatomic, strong) BookmarkFolderEditorViewController* folderEditor;
|
| #pragma mark Specific to this class.
|
|
|
| // The panel view slides on top of the content to display the menu.
|
| -@property(nonatomic, retain) BookmarkPanelView* panelView;
|
| +@property(nonatomic, strong) BookmarkPanelView* panelView;
|
|
|
| // Either the menu or the primaryView can scrollToTop.
|
| @property(nonatomic, assign) BOOL scrollingMenuToTop;
|
| // The controller managing the display of the promo cell and the promo view
|
| // controller.
|
| -@property(nonatomic, retain) BookmarkPromoController* bookmarkPromoController;
|
| +@property(nonatomic, strong) BookmarkPromoController* bookmarkPromoController;
|
|
|
| #pragma mark View loading and switching
|
| // This method is called if the view needs to be loaded and the model is not
|
| @@ -239,9 +238,6 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| browserState:(ios::ChromeBrowserState*)browserState {
|
| self = [super initWithLoader:loader browserState:browserState];
|
| if (self) {
|
| - _propertyReleaser_BookmarkHomeHandsetViewController.Init(
|
| - self, [BookmarkHomeHandsetViewController class]);
|
| -
|
| _bridge.reset(new bookmarks::BookmarkModelBridge(self, self.bookmarks));
|
| // It is important to initialize the promo controller with the browser state
|
| // passed in, as it could be incognito.
|
| @@ -261,7 +257,6 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| _folderSelector.delegate = nil;
|
|
|
| _panelView.delegate = nil;
|
| - [super dealloc];
|
| }
|
|
|
| - (void)removeEditNode:(const BookmarkNode*)node
|
| @@ -278,8 +273,8 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| - (void)viewDidLoad {
|
| [super viewDidLoad];
|
|
|
| - base::scoped_nsobject<BookmarkNavigationBar> bar(
|
| - [[BookmarkNavigationBar alloc] initWithFrame:[self navigationBarFrame]]);
|
| + BookmarkNavigationBar* bar =
|
| + [[BookmarkNavigationBar alloc] initWithFrame:[self navigationBarFrame]];
|
| self.navigationBar = bar;
|
| [self.navigationBar setEditTarget:self
|
| action:@selector(navigationBarWantsEditing:)];
|
| @@ -316,8 +311,8 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| DCHECK([self isViewLoaded]);
|
|
|
| // Present a waiting view.
|
| - base::scoped_nsobject<BookmarkHomeWaitingView> waitingView(
|
| - [[BookmarkHomeWaitingView alloc] initWithFrame:self.view.bounds]);
|
| + BookmarkHomeWaitingView* waitingView =
|
| + [[BookmarkHomeWaitingView alloc] initWithFrame:self.view.bounds];
|
| self.waitForModelView = waitingView;
|
| [self.view addSubview:self.waitForModelView];
|
| [self.waitForModelView startWaiting];
|
| @@ -327,15 +322,15 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| DCHECK(self.bookmarks->loaded());
|
| DCHECK([self isViewLoaded]);
|
|
|
| - self.panelView = base::scoped_nsobject<BookmarkPanelView>(
|
| + self.panelView =
|
| [[BookmarkPanelView alloc] initWithFrame:[self frameForPrimaryView]
|
| - menuViewWidth:kBookmarkMenuWidth]);
|
| + menuViewWidth:kBookmarkMenuWidth];
|
| self.panelView.autoresizingMask =
|
| UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
| self.panelView.delegate = self;
|
| [self.view insertSubview:self.panelView atIndex:0];
|
|
|
| - self.contentView = base::scoped_nsobject<UIView>([[UIView alloc] init]);
|
| + self.contentView = [[UIView alloc] init];
|
| self.contentView.frame = self.panelView.contentView.bounds;
|
| self.contentView.autoresizingMask =
|
| UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
| @@ -343,10 +338,9 @@ const CGFloat kBookmarkMenuWidth = 264;
|
|
|
| // The user can swipe the BookmarkPanelView to show the menuView.
|
| // Therefore, it must be created here.
|
| - self.menuView =
|
| - base::scoped_nsobject<BookmarkMenuView>([[BookmarkMenuView alloc]
|
| - initWithBrowserState:self.browserState
|
| - frame:self.panelView.menuView.bounds]);
|
| + self.menuView = [[BookmarkMenuView alloc]
|
| + initWithBrowserState:self.browserState
|
| + frame:self.panelView.menuView.bounds];
|
| self.menuView.delegate = self;
|
| [self.panelView.menuView addSubview:self.menuView];
|
| self.menuView.autoresizingMask =
|
| @@ -379,10 +373,9 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| if (self.folderView)
|
| return;
|
|
|
| - base::scoped_nsobject<BookmarkFolderCollectionView> view(
|
| - [[BookmarkFolderCollectionView alloc]
|
| - initWithBrowserState:self.browserState
|
| - frame:[self frameForPrimaryView]]);
|
| + BookmarkFolderCollectionView* view = [[BookmarkFolderCollectionView alloc]
|
| + initWithBrowserState:self.browserState
|
| + frame:[self frameForPrimaryView]];
|
| self.folderView = view;
|
| self.folderView.delegate = self;
|
| [self.folderView setEditing:self.editing animated:NO];
|
| @@ -438,8 +431,8 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| }
|
|
|
| if (!self.editingBar) {
|
| - self.editingBar = base::scoped_nsobject<BookmarkEditingBar>(
|
| - [[BookmarkEditingBar alloc] initWithFrame:self.navigationBar.frame]);
|
| + self.editingBar =
|
| + [[BookmarkEditingBar alloc] initWithFrame:self.navigationBar.frame];
|
| [self.editingBar setCancelTarget:self action:@selector(editingBarCancel)];
|
| [self.editingBar setDeleteTarget:self action:@selector(editingBarDelete)];
|
| [self.editingBar setMoveTarget:self action:@selector(editingBarMove)];
|
| @@ -602,20 +595,20 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| forCell:(BookmarkItemCell*)cell {
|
| DCHECK(!self.editViewController);
|
| DCHECK(!self.actionSheetCoordinator);
|
| - self.actionSheetCoordinator = [[[ActionSheetCoordinator alloc]
|
| - initWithBaseViewController:self
|
| - title:nil
|
| - message:nil
|
| - rect:CGRectZero
|
| - view:nil] autorelease];
|
| - base::WeakNSObject<BookmarkHomeHandsetViewController> weakSelf(self);
|
| + self.actionSheetCoordinator =
|
| + [[ActionSheetCoordinator alloc] initWithBaseViewController:self
|
| + title:nil
|
| + message:nil
|
| + rect:CGRectZero
|
| + view:nil];
|
| + __weak BookmarkHomeHandsetViewController* weakSelf = self;
|
|
|
| // Select action.
|
| [self.actionSheetCoordinator
|
| addItemWithTitle:l10n_util::GetNSString(IDS_IOS_BOOKMARK_ACTION_SELECT)
|
| action:^{
|
| [weakSelf selectFirstNode:node withCell:cell];
|
| - weakSelf.get().actionSheetCoordinator = nil;
|
| + weakSelf.actionSheetCoordinator = nil;
|
| }
|
| style:UIAlertActionStyleDefault];
|
|
|
| @@ -624,7 +617,7 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| addItemWithTitle:l10n_util::GetNSString(IDS_IOS_BOOKMARK_ACTION_EDIT)
|
| action:^{
|
| [weakSelf editNode:node];
|
| - weakSelf.get().actionSheetCoordinator = nil;
|
| + weakSelf.actionSheetCoordinator = nil;
|
| }
|
| style:UIAlertActionStyleDefault];
|
|
|
| @@ -635,7 +628,7 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| std::set<const BookmarkNode*> nodes;
|
| nodes.insert(node);
|
| [weakSelf moveNodes:nodes];
|
| - weakSelf.get().actionSheetCoordinator = nil;
|
| + weakSelf.actionSheetCoordinator = nil;
|
| }
|
| style:UIAlertActionStyleDefault];
|
|
|
| @@ -646,7 +639,7 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| std::set<const BookmarkNode*> nodes;
|
| nodes.insert(node);
|
| [weakSelf deleteNodes:nodes];
|
| - weakSelf.get().actionSheetCoordinator = nil;
|
| + weakSelf.actionSheetCoordinator = nil;
|
| }
|
| style:UIAlertActionStyleDestructive];
|
|
|
| @@ -654,7 +647,7 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| [self.actionSheetCoordinator
|
| addItemWithTitle:l10n_util::GetNSString(IDS_CANCEL)
|
| action:^{
|
| - weakSelf.get().actionSheetCoordinator = nil;
|
| + weakSelf.actionSheetCoordinator = nil;
|
| }
|
| style:UIAlertActionStyleCancel];
|
|
|
| @@ -703,17 +696,16 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| self.folderEditor = folderEditor;
|
| editorController = folderEditor;
|
| } else {
|
| - base::scoped_nsobject<BookmarkEditViewController> controller([
|
| - [BookmarkEditViewController alloc] initWithBookmark:node
|
| - browserState:self.browserState]);
|
| + BookmarkEditViewController* controller =
|
| + [[BookmarkEditViewController alloc] initWithBookmark:node
|
| + browserState:self.browserState];
|
| self.editViewController = controller;
|
| self.editViewController.delegate = self;
|
| editorController = self.editViewController;
|
| }
|
| DCHECK(editorController);
|
| - base::scoped_nsobject<UINavigationController> navController(
|
| - [[BookmarkNavigationController alloc]
|
| - initWithRootViewController:editorController]);
|
| + UINavigationController* navController = [[BookmarkNavigationController alloc]
|
| + initWithRootViewController:editorController];
|
| [navController setModalPresentationStyle:UIModalPresentationFormSheet];
|
| [self presentViewController:navController animated:YES completion:NULL];
|
| }
|
| @@ -723,17 +715,15 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| DCHECK(nodes.size() > 0);
|
| const BookmarkNode* editedNode = *(nodes.begin());
|
| const BookmarkNode* selectedFolder = editedNode->parent();
|
| - self.folderSelector = base::scoped_nsobject<BookmarkFolderViewController>(
|
| - [[BookmarkFolderViewController alloc]
|
| - initWithBookmarkModel:self.bookmarks
|
| - allowsNewFolders:YES
|
| - editedNodes:nodes
|
| - allowsCancel:YES
|
| - selectedFolder:selectedFolder]);
|
| + self.folderSelector = [[BookmarkFolderViewController alloc]
|
| + initWithBookmarkModel:self.bookmarks
|
| + allowsNewFolders:YES
|
| + editedNodes:nodes
|
| + allowsCancel:YES
|
| + selectedFolder:selectedFolder];
|
| self.folderSelector.delegate = self;
|
| - base::scoped_nsobject<UINavigationController> navController(
|
| - [[BookmarkNavigationController alloc]
|
| - initWithRootViewController:self.folderSelector]);
|
| + UINavigationController* navController = [[BookmarkNavigationController alloc]
|
| + initWithRootViewController:self.folderSelector];
|
| [navController setModalPresentationStyle:UIModalPresentationFormSheet];
|
| [self presentViewController:navController animated:YES completion:NULL];
|
| }
|
| @@ -898,9 +888,9 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| folderEditor.delegate = self;
|
| self.folderEditor = folderEditor;
|
|
|
| - base::scoped_nsobject<BookmarkNavigationController> navController(
|
| + BookmarkNavigationController* navController =
|
| [[BookmarkNavigationController alloc]
|
| - initWithRootViewController:self.folderEditor]);
|
| + initWithRootViewController:self.folderEditor];
|
| [navController setModalPresentationStyle:UIModalPresentationFormSheet];
|
| [self presentViewController:navController animated:YES completion:NULL];
|
| }
|
| @@ -1016,20 +1006,19 @@ const CGFloat kBookmarkMenuWidth = 264;
|
| return;
|
|
|
| DCHECK(self.waitForModelView);
|
| - base::WeakNSObject<BookmarkHomeHandsetViewController> weakSelf(self);
|
| + __weak BookmarkHomeHandsetViewController* weakSelf = self;
|
| [self.waitForModelView stopWaitingWithCompletion:^{
|
| - base::scoped_nsobject<BookmarkHomeHandsetViewController> strongSelf(
|
| - [weakSelf retain]);
|
| + BookmarkHomeHandsetViewController* strongSelf = weakSelf;
|
| // Early return if the controller has been deallocated.
|
| if (!strongSelf)
|
| return;
|
| [UIView animateWithDuration:0.2
|
| animations:^{
|
| - strongSelf.get().waitForModelView.alpha = 0.0;
|
| + strongSelf.waitForModelView.alpha = 0.0;
|
| }
|
| completion:^(BOOL finished) {
|
| - [strongSelf.get().waitForModelView removeFromSuperview];
|
| - strongSelf.get().waitForModelView = nil;
|
| + [strongSelf.waitForModelView removeFromSuperview];
|
| + strongSelf.waitForModelView = nil;
|
| }];
|
| [strongSelf loadBookmarkViews];
|
| }];
|
|
|