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

Side by Side Diff: ios/clean/chrome/browser/ui/toolbar/toolbar_view_controller.mm

Issue 2859363002: [ios clean] Adds Progress Bar to Toolbar. (Closed)
Patch Set: Created 3 years, 7 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 unified diff | Download patch
« no previous file with comments | « ios/clean/chrome/browser/ui/toolbar/toolbar_mediator.mm ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 14
15 #if !defined(__has_feature) || !__has_feature(objc_arc) 15 #if !defined(__has_feature) || !__has_feature(objc_arc)
16 #error "This file requires ARC support." 16 #error "This file requires ARC support."
17 #endif 17 #endif
18 18
19 namespace { 19 namespace {
20 // Stackview Vertical Margin. 20 // Stackview Vertical Margin.
21 CGFloat kVerticalMargin = 5.0f; 21 CGFloat kVerticalMargin = 5.0f;
22 // Stackview Horizontal Margin. 22 // Stackview Horizontal Margin.
23 CGFloat kHorizontalMargin = 8.0f; 23 CGFloat kHorizontalMargin = 8.0f;
24 // Progress Bar Height.
25 CGFloat kProgressBarHeight = 2.0f;
24 } // namespace 26 } // namespace
25 27
26 @interface ToolbarViewController () 28 @interface ToolbarViewController ()
27 @property(nonatomic, strong) UIView* locationBarContainer; 29 @property(nonatomic, strong) UIView* locationBarContainer;
28 @property(nonatomic, strong) UIStackView* stackView; 30 @property(nonatomic, strong) UIStackView* stackView;
29 @property(nonatomic, strong) ToolbarButton* backButton; 31 @property(nonatomic, strong) ToolbarButton* backButton;
30 @property(nonatomic, strong) ToolbarButton* forwardButton; 32 @property(nonatomic, strong) ToolbarButton* forwardButton;
31 @property(nonatomic, strong) ToolbarButton* tabSwitchStripButton; 33 @property(nonatomic, strong) ToolbarButton* tabSwitchStripButton;
32 @property(nonatomic, strong) ToolbarButton* tabSwitchGridButton; 34 @property(nonatomic, strong) ToolbarButton* tabSwitchGridButton;
33 @property(nonatomic, strong) ToolbarButton* toolsMenuButton; 35 @property(nonatomic, strong) ToolbarButton* toolsMenuButton;
34 @property(nonatomic, strong) ToolbarButton* shareButton; 36 @property(nonatomic, strong) ToolbarButton* shareButton;
35 @property(nonatomic, strong) ToolbarButton* reloadButton; 37 @property(nonatomic, strong) ToolbarButton* reloadButton;
36 @property(nonatomic, strong) ToolbarButton* stopButton; 38 @property(nonatomic, strong) ToolbarButton* stopButton;
39 @property(nonatomic, strong) UIProgressView* progressBar;
lpromero 2017/05/05 14:43:51 Why not an MDCProgressView like the current app?
sczs 2017/05/05 23:15:45 You're right, I've should've used that in the firs
37 @end 40 @end
38 41
39 @implementation ToolbarViewController 42 @implementation ToolbarViewController
40 @synthesize dispatcher = _dispatcher; 43 @synthesize dispatcher = _dispatcher;
41 @synthesize locationBarViewController = _locationBarViewController; 44 @synthesize locationBarViewController = _locationBarViewController;
42 @synthesize stackView = _stackView; 45 @synthesize stackView = _stackView;
43 @synthesize locationBarContainer = _locationBarContainer; 46 @synthesize locationBarContainer = _locationBarContainer;
44 @synthesize backButton = _backButton; 47 @synthesize backButton = _backButton;
45 @synthesize forwardButton = _forwardButton; 48 @synthesize forwardButton = _forwardButton;
46 @synthesize tabSwitchStripButton = _tabSwitchStripButton; 49 @synthesize tabSwitchStripButton = _tabSwitchStripButton;
47 @synthesize tabSwitchGridButton = _tabSwitchGridButton; 50 @synthesize tabSwitchGridButton = _tabSwitchGridButton;
48 @synthesize toolsMenuButton = _toolsMenuButton; 51 @synthesize toolsMenuButton = _toolsMenuButton;
49 @synthesize shareButton = _shareButton; 52 @synthesize shareButton = _shareButton;
50 @synthesize reloadButton = _reloadButton; 53 @synthesize reloadButton = _reloadButton;
51 @synthesize stopButton = _stopButton; 54 @synthesize stopButton = _stopButton;
55 @synthesize progressBar = _progressBar;
52 56
53 - (instancetype)init { 57 - (instancetype)init {
54 self = [super init]; 58 self = [super init];
55 if (self) { 59 if (self) {
56 [self setUpToolbarButtons]; 60 [self setUpToolbarButtons];
57 [self setUpLocationBarContainer]; 61 [self setUpLocationBarContainer];
62 [self setUpProgressBar];
58 } 63 }
59 return self; 64 return self;
60 } 65 }
61 66
62 - (void)viewDidLoad { 67 - (void)viewDidLoad {
63 self.view.backgroundColor = [UIColor lightGrayColor]; 68 self.view.backgroundColor = [UIColor lightGrayColor];
64
65 [self addChildViewController:self.locationBarViewController 69 [self addChildViewController:self.locationBarViewController
66 toSubview:self.locationBarContainer]; 70 toSubview:self.locationBarContainer];
71 [self setUpToolbarStackView];
72 [self.view addSubview:self.stackView];
73 [self.view addSubview:self.progressBar];
74 [self setConstraints];
75 }
67 76
68 // Stack view to contain toolbar items. 77 #pragma mark - View Setup
78
79 // Sets up the StackView that contains toolbar navigation items.
80 - (void)setUpToolbarStackView {
69 self.stackView = [[UIStackView alloc] initWithArrangedSubviews:@[ 81 self.stackView = [[UIStackView alloc] initWithArrangedSubviews:@[
70 self.backButton, self.forwardButton, self.reloadButton, self.stopButton, 82 self.backButton, self.forwardButton, self.reloadButton, self.stopButton,
71 self.locationBarContainer, self.shareButton, self.tabSwitchStripButton, 83 self.locationBarContainer, self.shareButton, self.tabSwitchStripButton,
72 self.tabSwitchGridButton, self.toolsMenuButton 84 self.tabSwitchGridButton, self.toolsMenuButton
73 ]]; 85 ]];
74 [self updateAllButtonsVisibility];
75 self.stackView.translatesAutoresizingMaskIntoConstraints = NO; 86 self.stackView.translatesAutoresizingMaskIntoConstraints = NO;
76 self.stackView.spacing = 16.0; 87 self.stackView.spacing = 16.0;
77 self.stackView.distribution = UIStackViewDistributionFill; 88 self.stackView.distribution = UIStackViewDistributionFill;
78 [self.view addSubview:self.stackView]; 89 [self updateAllButtonsVisibility];
90 }
79 91
80 // Set constraints. 92 - (void)setConstraints {
81 [self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | 93 [self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth |
82 UIViewAutoresizingFlexibleHeight]; 94 UIViewAutoresizingFlexibleHeight];
83 [NSLayoutConstraint activateConstraints:@[ 95 [NSLayoutConstraint activateConstraints:@[
84 [self.stackView.topAnchor constraintEqualToAnchor:self.view.topAnchor 96 [self.stackView.topAnchor constraintEqualToAnchor:self.view.topAnchor
85 constant:kVerticalMargin], 97 constant:kVerticalMargin],
86 [self.stackView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor 98 [self.stackView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor
87 constant:-kVerticalMargin], 99 constant:-kVerticalMargin],
88 [self.stackView.leadingAnchor 100 [self.stackView.leadingAnchor
89 constraintEqualToAnchor:self.view.leadingAnchor 101 constraintEqualToAnchor:self.view.leadingAnchor
90 constant:kHorizontalMargin], 102 constant:kHorizontalMargin],
91 [self.stackView.trailingAnchor 103 [self.stackView.trailingAnchor
92 constraintEqualToAnchor:self.view.trailingAnchor 104 constraintEqualToAnchor:self.view.trailingAnchor
93 constant:-kHorizontalMargin], 105 constant:-kHorizontalMargin],
106 [self.progressBar.leadingAnchor
107 constraintEqualToAnchor:self.view.leadingAnchor],
108 [self.progressBar.trailingAnchor
109 constraintEqualToAnchor:self.view.trailingAnchor],
110 [self.progressBar.bottomAnchor
111 constraintEqualToAnchor:self.view.bottomAnchor],
112 [self.progressBar.heightAnchor
113 constraintEqualToConstant:kProgressBarHeight],
94 ]]; 114 ]];
95 } 115 }
96 116
97 #pragma mark - Components Setup 117 #pragma mark - Components Setup
98 118
99 - (void)setUpToolbarButtons { 119 - (void)setUpToolbarButtons {
100 // Back button. 120 // Back button.
101 self.backButton = [ToolbarButton backToolbarButton]; 121 self.backButton = [ToolbarButton backToolbarButton];
102 self.backButton.visibilityMask = ToolbarComponentVisibilityCompactWidth | 122 self.backButton.visibilityMask = ToolbarComponentVisibilityCompactWidth |
103 ToolbarComponentVisibilityRegularWidth; 123 ToolbarComponentVisibilityRegularWidth;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 - (void)setUpLocationBarContainer { 186 - (void)setUpLocationBarContainer {
167 UIView* locationBarContainer = [[UIView alloc] initWithFrame:CGRectZero]; 187 UIView* locationBarContainer = [[UIView alloc] initWithFrame:CGRectZero];
168 locationBarContainer.translatesAutoresizingMaskIntoConstraints = NO; 188 locationBarContainer.translatesAutoresizingMaskIntoConstraints = NO;
169 locationBarContainer.backgroundColor = [UIColor whiteColor]; 189 locationBarContainer.backgroundColor = [UIColor whiteColor];
170 [locationBarContainer 190 [locationBarContainer
171 setContentHuggingPriority:UILayoutPriorityDefaultLow 191 setContentHuggingPriority:UILayoutPriorityDefaultLow
172 forAxis:UILayoutConstraintAxisHorizontal]; 192 forAxis:UILayoutConstraintAxisHorizontal];
173 self.locationBarContainer = locationBarContainer; 193 self.locationBarContainer = locationBarContainer;
174 } 194 }
175 195
196 - (void)setUpProgressBar {
197 UIProgressView* progressBar =
198 [[UIProgressView alloc] initWithFrame:CGRectZero];
199 progressBar.translatesAutoresizingMaskIntoConstraints = NO;
200 self.progressBar = progressBar;
201 }
202
176 #pragma mark - View Controller Containment 203 #pragma mark - View Controller Containment
177 204
178 - (void)addChildViewController:(UIViewController*)viewController 205 - (void)addChildViewController:(UIViewController*)viewController
179 toSubview:(UIView*)subview { 206 toSubview:(UIView*)subview {
180 if (!viewController || !subview) { 207 if (!viewController || !subview) {
181 return; 208 return;
182 } 209 }
183 [self addChildViewController:viewController]; 210 [self addChildViewController:viewController];
184 viewController.view.translatesAutoresizingMaskIntoConstraints = YES; 211 viewController.view.translatesAutoresizingMaskIntoConstraints = YES;
185 viewController.view.autoresizingMask = 212 viewController.view.autoresizingMask =
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 if ([view isKindOfClass:[ToolbarButton class]]) { 246 if ([view isKindOfClass:[ToolbarButton class]]) {
220 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view); 247 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view);
221 [button updateHiddenInCurrentSizeClass]; 248 [button updateHiddenInCurrentSizeClass];
222 } 249 }
223 } 250 }
224 } 251 }
225 } 252 }
226 253
227 #pragma mark - ToolbarWebStateConsumer 254 #pragma mark - ToolbarWebStateConsumer
228 255
229 - (void)setCurrentPageText:(NSString*)text {
230 }
231
232 - (void)setCanGoForward:(BOOL)canGoForward { 256 - (void)setCanGoForward:(BOOL)canGoForward {
233 self.forwardButton.enabled = canGoForward; 257 self.forwardButton.enabled = canGoForward;
234 // Update the visibility since the Forward button will be hidden on 258 // Update the visibility since the Forward button will be hidden on
235 // CompactWidth when disabled. 259 // CompactWidth when disabled.
236 [self.forwardButton updateHiddenInCurrentSizeClass]; 260 [self.forwardButton updateHiddenInCurrentSizeClass];
237 } 261 }
238 262
239 - (void)setCanGoBack:(BOOL)canGoBack { 263 - (void)setCanGoBack:(BOOL)canGoBack {
240 self.backButton.enabled = canGoBack; 264 self.backButton.enabled = canGoBack;
241 } 265 }
242 266
243 - (void)setIsLoading:(BOOL)isLoading { 267 - (void)setIsLoading:(BOOL)isLoading {
244 self.reloadButton.hiddenInCurrentState = isLoading; 268 self.reloadButton.hiddenInCurrentState = isLoading;
245 self.stopButton.hiddenInCurrentState = !isLoading; 269 self.stopButton.hiddenInCurrentState = !isLoading;
246 [self updateAllButtonsVisibility]; 270 [self updateAllButtonsVisibility];
247 } 271 }
248 272
273 - (void)setProgress:(double)progress {
274 if (progress == 0 || progress == 1.0) {
275 self.progressBar.hidden = YES;
lpromero 2017/05/05 14:43:51 MDCProgressView allows you to animate the progress
sczs 2017/05/05 23:15:45 Didn't intend this to be a PLACEHOLDER. Switched t
276 return;
277 }
278 self.progressBar.hidden = NO;
279 self.progressBar.progress = progress;
280 }
281
249 #pragma mark - ZoomTransitionDelegate 282 #pragma mark - ZoomTransitionDelegate
250 283
251 - (CGRect)rectForZoomWithKey:(NSObject*)key inView:(UIView*)view { 284 - (CGRect)rectForZoomWithKey:(NSObject*)key inView:(UIView*)view {
252 return [view convertRect:self.toolsMenuButton.bounds 285 return [view convertRect:self.toolsMenuButton.bounds
253 fromView:self.toolsMenuButton]; 286 fromView:self.toolsMenuButton];
254 } 287 }
255 288
256 #pragma mark - Private Methods 289 #pragma mark - Private Methods
257 290
258 - (void)showToolsMenu:(id)sender { 291 - (void)showToolsMenu:(id)sender {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 - (void)updateAllButtonsVisibility { 340 - (void)updateAllButtonsVisibility {
308 for (UIView* view in self.stackView.arrangedSubviews) { 341 for (UIView* view in self.stackView.arrangedSubviews) {
309 if ([view isKindOfClass:[ToolbarButton class]]) { 342 if ([view isKindOfClass:[ToolbarButton class]]) {
310 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view); 343 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view);
311 [button setHiddenForCurrentStateAndSizeClass]; 344 [button setHiddenForCurrentStateAndSizeClass];
312 } 345 }
313 } 346 }
314 } 347 }
315 348
316 @end 349 @end
OLDNEW
« no previous file with comments | « ios/clean/chrome/browser/ui/toolbar/toolbar_mediator.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698