| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "ios/clean/chrome/browser/ui/toolbar/toolbar_view_controller.h" | 5 #import "ios/clean/chrome/browser/ui/toolbar/toolbar_view_controller.h" |
| 6 | 6 |
| 7 #import "base/mac/foundation_util.h" | 7 #import "base/mac/foundation_util.h" |
| 8 #import "ios/clean/chrome/browser/ui/actions/tab_strip_actions.h" | 8 #import "ios/clean/chrome/browser/ui/actions/tab_strip_actions.h" |
| 9 #import "ios/clean/chrome/browser/ui/commands/navigation_commands.h" | 9 #import "ios/clean/chrome/browser/ui/commands/navigation_commands.h" |
| 10 #import "ios/clean/chrome/browser/ui/commands/tab_grid_commands.h" | 10 #import "ios/clean/chrome/browser/ui/commands/tab_grid_commands.h" |
| 11 #import "ios/clean/chrome/browser/ui/commands/tools_menu_commands.h" | 11 #import "ios/clean/chrome/browser/ui/commands/tools_menu_commands.h" |
| 12 #import "ios/clean/chrome/browser/ui/toolbar/toolbar_button+factory.h" | 12 #import "ios/clean/chrome/browser/ui/toolbar/toolbar_button+factory.h" |
| 13 #import "ios/clean/chrome/browser/ui/toolbar/toolbar_component_options.h" | 13 #import "ios/clean/chrome/browser/ui/toolbar/toolbar_component_options.h" |
| 14 #import "ios/third_party/material_components_ios/src/components/ProgressView/src
/MaterialProgressView.h" |
| 14 | 15 |
| 15 #if !defined(__has_feature) || !__has_feature(objc_arc) | 16 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 16 #error "This file requires ARC support." | 17 #error "This file requires ARC support." |
| 17 #endif | 18 #endif |
| 18 | 19 |
| 19 namespace { | 20 namespace { |
| 20 // Stackview Vertical Margin. | 21 // Stackview Vertical Margin. |
| 21 CGFloat kVerticalMargin = 5.0f; | 22 CGFloat kVerticalMargin = 5.0f; |
| 22 // Stackview Horizontal Margin. | 23 // Stackview Horizontal Margin. |
| 23 CGFloat kHorizontalMargin = 8.0f; | 24 CGFloat kHorizontalMargin = 8.0f; |
| 25 // Progress Bar Height. |
| 26 CGFloat kProgressBarHeight = 2.0f; |
| 24 } // namespace | 27 } // namespace |
| 25 | 28 |
| 26 @interface ToolbarViewController () | 29 @interface ToolbarViewController () |
| 27 @property(nonatomic, strong) UIView* locationBarContainer; | 30 @property(nonatomic, strong) UIView* locationBarContainer; |
| 28 @property(nonatomic, strong) UIStackView* stackView; | 31 @property(nonatomic, strong) UIStackView* stackView; |
| 29 @property(nonatomic, strong) ToolbarButton* backButton; | 32 @property(nonatomic, strong) ToolbarButton* backButton; |
| 30 @property(nonatomic, strong) ToolbarButton* forwardButton; | 33 @property(nonatomic, strong) ToolbarButton* forwardButton; |
| 31 @property(nonatomic, strong) ToolbarButton* tabSwitchStripButton; | 34 @property(nonatomic, strong) ToolbarButton* tabSwitchStripButton; |
| 32 @property(nonatomic, strong) ToolbarButton* tabSwitchGridButton; | 35 @property(nonatomic, strong) ToolbarButton* tabSwitchGridButton; |
| 33 @property(nonatomic, strong) ToolbarButton* toolsMenuButton; | 36 @property(nonatomic, strong) ToolbarButton* toolsMenuButton; |
| 34 @property(nonatomic, strong) ToolbarButton* shareButton; | 37 @property(nonatomic, strong) ToolbarButton* shareButton; |
| 35 @property(nonatomic, strong) ToolbarButton* reloadButton; | 38 @property(nonatomic, strong) ToolbarButton* reloadButton; |
| 36 @property(nonatomic, strong) ToolbarButton* stopButton; | 39 @property(nonatomic, strong) ToolbarButton* stopButton; |
| 40 @property(nonatomic, strong) MDCProgressView* progressBar; |
| 37 @end | 41 @end |
| 38 | 42 |
| 39 @implementation ToolbarViewController | 43 @implementation ToolbarViewController |
| 40 @synthesize dispatcher = _dispatcher; | 44 @synthesize dispatcher = _dispatcher; |
| 41 @synthesize locationBarViewController = _locationBarViewController; | 45 @synthesize locationBarViewController = _locationBarViewController; |
| 42 @synthesize stackView = _stackView; | 46 @synthesize stackView = _stackView; |
| 43 @synthesize locationBarContainer = _locationBarContainer; | 47 @synthesize locationBarContainer = _locationBarContainer; |
| 44 @synthesize backButton = _backButton; | 48 @synthesize backButton = _backButton; |
| 45 @synthesize forwardButton = _forwardButton; | 49 @synthesize forwardButton = _forwardButton; |
| 46 @synthesize tabSwitchStripButton = _tabSwitchStripButton; | 50 @synthesize tabSwitchStripButton = _tabSwitchStripButton; |
| 47 @synthesize tabSwitchGridButton = _tabSwitchGridButton; | 51 @synthesize tabSwitchGridButton = _tabSwitchGridButton; |
| 48 @synthesize toolsMenuButton = _toolsMenuButton; | 52 @synthesize toolsMenuButton = _toolsMenuButton; |
| 49 @synthesize shareButton = _shareButton; | 53 @synthesize shareButton = _shareButton; |
| 50 @synthesize reloadButton = _reloadButton; | 54 @synthesize reloadButton = _reloadButton; |
| 51 @synthesize stopButton = _stopButton; | 55 @synthesize stopButton = _stopButton; |
| 56 @synthesize progressBar = _progressBar; |
| 52 | 57 |
| 53 - (instancetype)init { | 58 - (instancetype)init { |
| 54 self = [super init]; | 59 self = [super init]; |
| 55 if (self) { | 60 if (self) { |
| 56 [self setUpToolbarButtons]; | 61 [self setUpToolbarButtons]; |
| 57 [self setUpLocationBarContainer]; | 62 [self setUpLocationBarContainer]; |
| 63 [self setUpProgressBar]; |
| 58 } | 64 } |
| 59 return self; | 65 return self; |
| 60 } | 66 } |
| 61 | 67 |
| 62 - (void)viewDidLoad { | 68 - (void)viewDidLoad { |
| 63 self.view.backgroundColor = [UIColor lightGrayColor]; | 69 self.view.backgroundColor = [UIColor lightGrayColor]; |
| 64 | |
| 65 [self addChildViewController:self.locationBarViewController | 70 [self addChildViewController:self.locationBarViewController |
| 66 toSubview:self.locationBarContainer]; | 71 toSubview:self.locationBarContainer]; |
| 72 [self setUpToolbarStackView]; |
| 73 [self.view addSubview:self.stackView]; |
| 74 [self.view addSubview:self.progressBar]; |
| 75 [self setConstraints]; |
| 76 } |
| 67 | 77 |
| 68 // Stack view to contain toolbar items. | 78 #pragma mark - View Setup |
| 79 |
| 80 // Sets up the StackView that contains toolbar navigation items. |
| 81 - (void)setUpToolbarStackView { |
| 69 self.stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ | 82 self.stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ |
| 70 self.backButton, self.forwardButton, self.reloadButton, self.stopButton, | 83 self.backButton, self.forwardButton, self.reloadButton, self.stopButton, |
| 71 self.locationBarContainer, self.shareButton, self.tabSwitchStripButton, | 84 self.locationBarContainer, self.shareButton, self.tabSwitchStripButton, |
| 72 self.tabSwitchGridButton, self.toolsMenuButton | 85 self.tabSwitchGridButton, self.toolsMenuButton |
| 73 ]]; | 86 ]]; |
| 74 [self updateAllButtonsVisibility]; | |
| 75 self.stackView.translatesAutoresizingMaskIntoConstraints = NO; | 87 self.stackView.translatesAutoresizingMaskIntoConstraints = NO; |
| 76 self.stackView.spacing = 16.0; | 88 self.stackView.spacing = 16.0; |
| 77 self.stackView.distribution = UIStackViewDistributionFill; | 89 self.stackView.distribution = UIStackViewDistributionFill; |
| 78 [self.view addSubview:self.stackView]; | 90 [self updateAllButtonsVisibility]; |
| 91 } |
| 79 | 92 |
| 80 // Set constraints. | 93 - (void)setConstraints { |
| 81 [self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | | 94 [self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | |
| 82 UIViewAutoresizingFlexibleHeight]; | 95 UIViewAutoresizingFlexibleHeight]; |
| 83 [NSLayoutConstraint activateConstraints:@[ | 96 [NSLayoutConstraint activateConstraints:@[ |
| 84 [self.stackView.topAnchor constraintEqualToAnchor:self.view.topAnchor | 97 [self.stackView.topAnchor constraintEqualToAnchor:self.view.topAnchor |
| 85 constant:kVerticalMargin], | 98 constant:kVerticalMargin], |
| 86 [self.stackView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor | 99 [self.stackView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor |
| 87 constant:-kVerticalMargin], | 100 constant:-kVerticalMargin], |
| 88 [self.stackView.leadingAnchor | 101 [self.stackView.leadingAnchor |
| 89 constraintEqualToAnchor:self.view.leadingAnchor | 102 constraintEqualToAnchor:self.view.leadingAnchor |
| 90 constant:kHorizontalMargin], | 103 constant:kHorizontalMargin], |
| 91 [self.stackView.trailingAnchor | 104 [self.stackView.trailingAnchor |
| 92 constraintEqualToAnchor:self.view.trailingAnchor | 105 constraintEqualToAnchor:self.view.trailingAnchor |
| 93 constant:-kHorizontalMargin], | 106 constant:-kHorizontalMargin], |
| 107 [self.progressBar.leadingAnchor |
| 108 constraintEqualToAnchor:self.view.leadingAnchor], |
| 109 [self.progressBar.trailingAnchor |
| 110 constraintEqualToAnchor:self.view.trailingAnchor], |
| 111 [self.progressBar.bottomAnchor |
| 112 constraintEqualToAnchor:self.view.bottomAnchor], |
| 113 [self.progressBar.heightAnchor |
| 114 constraintEqualToConstant:kProgressBarHeight], |
| 94 ]]; | 115 ]]; |
| 95 } | 116 } |
| 96 | 117 |
| 97 #pragma mark - Components Setup | 118 #pragma mark - Components Setup |
| 98 | 119 |
| 99 - (void)setUpToolbarButtons { | 120 - (void)setUpToolbarButtons { |
| 100 // Back button. | 121 // Back button. |
| 101 self.backButton = [ToolbarButton backToolbarButton]; | 122 self.backButton = [ToolbarButton backToolbarButton]; |
| 102 self.backButton.visibilityMask = ToolbarComponentVisibilityCompactWidth | | 123 self.backButton.visibilityMask = ToolbarComponentVisibilityCompactWidth | |
| 103 ToolbarComponentVisibilityRegularWidth; | 124 ToolbarComponentVisibilityRegularWidth; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 - (void)setUpLocationBarContainer { | 187 - (void)setUpLocationBarContainer { |
| 167 UIView* locationBarContainer = [[UIView alloc] initWithFrame:CGRectZero]; | 188 UIView* locationBarContainer = [[UIView alloc] initWithFrame:CGRectZero]; |
| 168 locationBarContainer.translatesAutoresizingMaskIntoConstraints = NO; | 189 locationBarContainer.translatesAutoresizingMaskIntoConstraints = NO; |
| 169 locationBarContainer.backgroundColor = [UIColor whiteColor]; | 190 locationBarContainer.backgroundColor = [UIColor whiteColor]; |
| 170 [locationBarContainer | 191 [locationBarContainer |
| 171 setContentHuggingPriority:UILayoutPriorityDefaultLow | 192 setContentHuggingPriority:UILayoutPriorityDefaultLow |
| 172 forAxis:UILayoutConstraintAxisHorizontal]; | 193 forAxis:UILayoutConstraintAxisHorizontal]; |
| 173 self.locationBarContainer = locationBarContainer; | 194 self.locationBarContainer = locationBarContainer; |
| 174 } | 195 } |
| 175 | 196 |
| 197 - (void)setUpProgressBar { |
| 198 MDCProgressView* progressBar = [[MDCProgressView alloc] init]; |
| 199 progressBar.translatesAutoresizingMaskIntoConstraints = NO; |
| 200 progressBar.hidden = YES; |
| 201 self.progressBar = progressBar; |
| 202 } |
| 203 |
| 176 #pragma mark - View Controller Containment | 204 #pragma mark - View Controller Containment |
| 177 | 205 |
| 178 - (void)addChildViewController:(UIViewController*)viewController | 206 - (void)addChildViewController:(UIViewController*)viewController |
| 179 toSubview:(UIView*)subview { | 207 toSubview:(UIView*)subview { |
| 180 if (!viewController || !subview) { | 208 if (!viewController || !subview) { |
| 181 return; | 209 return; |
| 182 } | 210 } |
| 183 [self addChildViewController:viewController]; | 211 [self addChildViewController:viewController]; |
| 184 viewController.view.translatesAutoresizingMaskIntoConstraints = YES; | 212 viewController.view.translatesAutoresizingMaskIntoConstraints = YES; |
| 185 viewController.view.autoresizingMask = | 213 viewController.view.autoresizingMask = |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 if ([view isKindOfClass:[ToolbarButton class]]) { | 247 if ([view isKindOfClass:[ToolbarButton class]]) { |
| 220 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view); | 248 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view); |
| 221 [button updateHiddenInCurrentSizeClass]; | 249 [button updateHiddenInCurrentSizeClass]; |
| 222 } | 250 } |
| 223 } | 251 } |
| 224 } | 252 } |
| 225 } | 253 } |
| 226 | 254 |
| 227 #pragma mark - ToolbarWebStateConsumer | 255 #pragma mark - ToolbarWebStateConsumer |
| 228 | 256 |
| 229 - (void)setCurrentPageText:(NSString*)text { | |
| 230 } | |
| 231 | |
| 232 - (void)setCanGoForward:(BOOL)canGoForward { | 257 - (void)setCanGoForward:(BOOL)canGoForward { |
| 233 self.forwardButton.enabled = canGoForward; | 258 self.forwardButton.enabled = canGoForward; |
| 234 // Update the visibility since the Forward button will be hidden on | 259 // Update the visibility since the Forward button will be hidden on |
| 235 // CompactWidth when disabled. | 260 // CompactWidth when disabled. |
| 236 [self.forwardButton updateHiddenInCurrentSizeClass]; | 261 [self.forwardButton updateHiddenInCurrentSizeClass]; |
| 237 } | 262 } |
| 238 | 263 |
| 239 - (void)setCanGoBack:(BOOL)canGoBack { | 264 - (void)setCanGoBack:(BOOL)canGoBack { |
| 240 self.backButton.enabled = canGoBack; | 265 self.backButton.enabled = canGoBack; |
| 241 } | 266 } |
| 242 | 267 |
| 243 - (void)setIsLoading:(BOOL)isLoading { | 268 - (void)setIsLoading:(BOOL)isLoading { |
| 244 self.reloadButton.hiddenInCurrentState = isLoading; | 269 self.reloadButton.hiddenInCurrentState = isLoading; |
| 245 self.stopButton.hiddenInCurrentState = !isLoading; | 270 self.stopButton.hiddenInCurrentState = !isLoading; |
| 271 [self.progressBar setHidden:!isLoading animated:YES completion:nil]; |
| 246 [self updateAllButtonsVisibility]; | 272 [self updateAllButtonsVisibility]; |
| 247 } | 273 } |
| 248 | 274 |
| 275 - (void)setLoadingProgress:(double)progress { |
| 276 [self.progressBar setProgress:progress animated:YES completion:nil]; |
| 277 } |
| 278 |
| 249 #pragma mark - ZoomTransitionDelegate | 279 #pragma mark - ZoomTransitionDelegate |
| 250 | 280 |
| 251 - (CGRect)rectForZoomWithKey:(NSObject*)key inView:(UIView*)view { | 281 - (CGRect)rectForZoomWithKey:(NSObject*)key inView:(UIView*)view { |
| 252 return [view convertRect:self.toolsMenuButton.bounds | 282 return [view convertRect:self.toolsMenuButton.bounds |
| 253 fromView:self.toolsMenuButton]; | 283 fromView:self.toolsMenuButton]; |
| 254 } | 284 } |
| 255 | 285 |
| 256 #pragma mark - Private Methods | 286 #pragma mark - Private Methods |
| 257 | 287 |
| 258 - (void)showToolsMenu:(id)sender { | 288 - (void)showToolsMenu:(id)sender { |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 - (void)updateAllButtonsVisibility { | 337 - (void)updateAllButtonsVisibility { |
| 308 for (UIView* view in self.stackView.arrangedSubviews) { | 338 for (UIView* view in self.stackView.arrangedSubviews) { |
| 309 if ([view isKindOfClass:[ToolbarButton class]]) { | 339 if ([view isKindOfClass:[ToolbarButton class]]) { |
| 310 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view); | 340 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view); |
| 311 [button setHiddenForCurrentStateAndSizeClass]; | 341 [button setHiddenForCurrentStateAndSizeClass]; |
| 312 } | 342 } |
| 313 } | 343 } |
| 314 } | 344 } |
| 315 | 345 |
| 316 @end | 346 @end |
| OLD | NEW |