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" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 ]]; | 83 ]]; |
84 self.stackView.translatesAutoresizingMaskIntoConstraints = NO; | 84 self.stackView.translatesAutoresizingMaskIntoConstraints = NO; |
85 self.stackView.spacing = kStackViewSpacing; | 85 self.stackView.spacing = kStackViewSpacing; |
86 self.stackView.distribution = UIStackViewDistributionFill; | 86 self.stackView.distribution = UIStackViewDistributionFill; |
87 [self updateAllButtonsVisibility]; | 87 [self updateAllButtonsVisibility]; |
88 } | 88 } |
89 | 89 |
90 - (void)setConstraints { | 90 - (void)setConstraints { |
91 [self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | | 91 [self.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | |
92 UIViewAutoresizingFlexibleHeight]; | 92 UIViewAutoresizingFlexibleHeight]; |
93 [NSLayoutConstraint activateConstraints:@[ | 93 NSArray* constraints = @[ |
94 [self.stackView.topAnchor constraintEqualToAnchor:self.view.topAnchor | 94 [self.stackView.topAnchor constraintEqualToAnchor:self.view.topAnchor |
95 constant:kVerticalMargin], | 95 constant:kVerticalMargin], |
96 [self.stackView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor | 96 [self.stackView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor |
97 constant:-kVerticalMargin], | 97 constant:-kVerticalMargin], |
98 [self.stackView.leadingAnchor | 98 [self.stackView.leadingAnchor |
99 constraintEqualToAnchor:self.view.leadingAnchor | 99 constraintEqualToAnchor:self.view.leadingAnchor |
100 constant:kHorizontalMargin], | 100 constant:kHorizontalMargin], |
101 [self.stackView.trailingAnchor | 101 [self.stackView.trailingAnchor |
102 constraintEqualToAnchor:self.view.trailingAnchor | 102 constraintEqualToAnchor:self.view.trailingAnchor |
103 constant:-kHorizontalMargin], | 103 constant:-kHorizontalMargin], |
104 [self.progressBar.leadingAnchor | 104 [self.progressBar.leadingAnchor |
105 constraintEqualToAnchor:self.view.leadingAnchor], | 105 constraintEqualToAnchor:self.view.leadingAnchor], |
106 [self.progressBar.trailingAnchor | 106 [self.progressBar.trailingAnchor |
107 constraintEqualToAnchor:self.view.trailingAnchor], | 107 constraintEqualToAnchor:self.view.trailingAnchor], |
108 [self.progressBar.bottomAnchor | 108 [self.progressBar.bottomAnchor |
109 constraintEqualToAnchor:self.view.bottomAnchor], | 109 constraintEqualToAnchor:self.view.bottomAnchor], |
110 [self.progressBar.heightAnchor | 110 [self.progressBar.heightAnchor |
111 constraintEqualToConstant:kProgressBarHeight], | 111 constraintEqualToConstant:kProgressBarHeight], |
112 ]]; | 112 ]; |
| 113 |
| 114 // Set the constraints priority to UILayoutPriorityDefaultHigh so these are |
| 115 // not broken when the views are hidden or the VC's view size is 0. |
| 116 [self activateConstraints:constraints |
| 117 withPriority:UILayoutPriorityDefaultHigh]; |
113 } | 118 } |
114 | 119 |
115 - (void)viewWillTransitionToSize:(CGSize)size | 120 - (void)viewWillTransitionToSize:(CGSize)size |
116 withTransitionCoordinator: | 121 withTransitionCoordinator: |
117 (id<UIViewControllerTransitionCoordinator>)coordinator { | 122 (id<UIViewControllerTransitionCoordinator>)coordinator { |
118 // We need to dismiss the ToolsMenu everytime the Toolbar frame changes | 123 // We need to dismiss the ToolsMenu everytime the Toolbar frame changes |
119 // (e.g. Size changes, rotation changes, etc.) | 124 // (e.g. Size changes, rotation changes, etc.) |
120 [self.dispatcher closeToolsMenu]; | 125 [self.dispatcher closeToolsMenu]; |
121 } | 126 } |
122 | 127 |
123 #pragma mark - Components Setup | 128 #pragma mark - Components Setup |
124 | 129 |
125 - (void)setUpToolbarButtons { | 130 - (void)setUpToolbarButtons { |
| 131 NSMutableArray* buttonConstraints = [[NSMutableArray alloc] init]; |
| 132 |
126 // Back button. | 133 // Back button. |
127 self.backButton = [ToolbarButton backToolbarButton]; | 134 self.backButton = [ToolbarButton backToolbarButton]; |
128 self.backButton.visibilityMask = ToolbarComponentVisibilityCompactWidth | | 135 self.backButton.visibilityMask = ToolbarComponentVisibilityCompactWidth | |
129 ToolbarComponentVisibilityRegularWidth; | 136 ToolbarComponentVisibilityRegularWidth; |
| 137 [buttonConstraints |
| 138 addObject:[self.backButton.widthAnchor |
| 139 constraintEqualToConstant:kToolbarButtonWidth]]; |
130 [self.backButton addTarget:self | 140 [self.backButton addTarget:self |
131 action:@selector(goBack:) | 141 action:@selector(goBack:) |
132 forControlEvents:UIControlEventTouchUpInside]; | 142 forControlEvents:UIControlEventTouchUpInside]; |
133 | 143 |
134 // Forward button. | 144 // Forward button. |
135 self.forwardButton = [ToolbarButton forwardToolbarButton]; | 145 self.forwardButton = [ToolbarButton forwardToolbarButton]; |
136 self.forwardButton.visibilityMask = | 146 self.forwardButton.visibilityMask = |
137 ToolbarComponentVisibilityCompactWidthOnlyWhenEnabled | | 147 ToolbarComponentVisibilityCompactWidthOnlyWhenEnabled | |
138 ToolbarComponentVisibilityRegularWidth; | 148 ToolbarComponentVisibilityRegularWidth; |
| 149 [buttonConstraints |
| 150 addObject:[self.forwardButton.widthAnchor |
| 151 constraintEqualToConstant:kToolbarButtonWidth]]; |
139 [self.forwardButton addTarget:self | 152 [self.forwardButton addTarget:self |
140 action:@selector(goForward:) | 153 action:@selector(goForward:) |
141 forControlEvents:UIControlEventTouchUpInside]; | 154 forControlEvents:UIControlEventTouchUpInside]; |
142 | 155 |
143 // Tab switcher Strip button. | 156 // Tab switcher Strip button. |
144 self.tabSwitchStripButton = [ToolbarButton tabSwitcherStripToolbarButton]; | 157 self.tabSwitchStripButton = [ToolbarButton tabSwitcherStripToolbarButton]; |
145 self.tabSwitchStripButton.visibilityMask = | 158 self.tabSwitchStripButton.visibilityMask = |
146 ToolbarComponentVisibilityCompactWidth | | 159 ToolbarComponentVisibilityCompactWidth | |
147 ToolbarComponentVisibilityRegularWidth; | 160 ToolbarComponentVisibilityRegularWidth; |
| 161 [buttonConstraints |
| 162 addObject:[self.tabSwitchStripButton.widthAnchor |
| 163 constraintEqualToConstant:kToolbarButtonWidth]]; |
148 [self.tabSwitchStripButton addTarget:nil | 164 [self.tabSwitchStripButton addTarget:nil |
149 action:@selector(showTabStrip:) | 165 action:@selector(showTabStrip:) |
150 forControlEvents:UIControlEventTouchUpInside]; | 166 forControlEvents:UIControlEventTouchUpInside]; |
151 | 167 |
152 // Tab switcher Grid button. | 168 // Tab switcher Grid button. |
153 self.tabSwitchGridButton = [ToolbarButton tabSwitcherGridToolbarButton]; | 169 self.tabSwitchGridButton = [ToolbarButton tabSwitcherGridToolbarButton]; |
154 self.tabSwitchGridButton.visibilityMask = | 170 self.tabSwitchGridButton.visibilityMask = |
155 ToolbarComponentVisibilityCompactWidth | | 171 ToolbarComponentVisibilityCompactWidth | |
156 ToolbarComponentVisibilityRegularWidth; | 172 ToolbarComponentVisibilityRegularWidth; |
| 173 [buttonConstraints |
| 174 addObject:[self.tabSwitchGridButton.widthAnchor |
| 175 constraintEqualToConstant:kToolbarButtonWidth]]; |
157 [self.tabSwitchGridButton addTarget:self | 176 [self.tabSwitchGridButton addTarget:self |
158 action:@selector(showTabGrid:) | 177 action:@selector(showTabGrid:) |
159 forControlEvents:UIControlEventTouchUpInside]; | 178 forControlEvents:UIControlEventTouchUpInside]; |
160 self.tabSwitchGridButton.hiddenInCurrentState = YES; | 179 self.tabSwitchGridButton.hiddenInCurrentState = YES; |
161 | 180 |
162 // Tools menu button. | 181 // Tools menu button. |
163 self.toolsMenuButton = [ToolbarButton toolsMenuToolbarButton]; | 182 self.toolsMenuButton = [ToolbarButton toolsMenuToolbarButton]; |
164 self.toolsMenuButton.visibilityMask = ToolbarComponentVisibilityCompactWidth | | 183 self.toolsMenuButton.visibilityMask = ToolbarComponentVisibilityCompactWidth | |
165 ToolbarComponentVisibilityRegularWidth; | 184 ToolbarComponentVisibilityRegularWidth; |
| 185 [buttonConstraints |
| 186 addObject:[self.toolsMenuButton.widthAnchor |
| 187 constraintEqualToConstant:kToolbarButtonWidth]]; |
166 [self.toolsMenuButton addTarget:self | 188 [self.toolsMenuButton addTarget:self |
167 action:@selector(showToolsMenu:) | 189 action:@selector(showToolsMenu:) |
168 forControlEvents:UIControlEventTouchUpInside]; | 190 forControlEvents:UIControlEventTouchUpInside]; |
169 | 191 |
170 // Share button. | 192 // Share button. |
171 self.shareButton = [ToolbarButton shareToolbarButton]; | 193 self.shareButton = [ToolbarButton shareToolbarButton]; |
172 self.shareButton.visibilityMask = ToolbarComponentVisibilityRegularWidth; | 194 self.shareButton.visibilityMask = ToolbarComponentVisibilityRegularWidth; |
| 195 [buttonConstraints |
| 196 addObject:[self.shareButton.widthAnchor |
| 197 constraintEqualToConstant:kToolbarButtonWidth]]; |
173 [self.shareButton addTarget:self | 198 [self.shareButton addTarget:self |
174 action:@selector(showShareMenu:) | 199 action:@selector(showShareMenu:) |
175 forControlEvents:UIControlEventTouchUpInside]; | 200 forControlEvents:UIControlEventTouchUpInside]; |
176 | 201 |
177 // Reload button. | 202 // Reload button. |
178 self.reloadButton = [ToolbarButton reloadToolbarButton]; | 203 self.reloadButton = [ToolbarButton reloadToolbarButton]; |
179 self.reloadButton.visibilityMask = ToolbarComponentVisibilityRegularWidth; | 204 self.reloadButton.visibilityMask = ToolbarComponentVisibilityRegularWidth; |
| 205 [buttonConstraints |
| 206 addObject:[self.reloadButton.widthAnchor |
| 207 constraintEqualToConstant:kToolbarButtonWidth]]; |
180 [self.reloadButton addTarget:self | 208 [self.reloadButton addTarget:self |
181 action:@selector(reload:) | 209 action:@selector(reload:) |
182 forControlEvents:UIControlEventTouchUpInside]; | 210 forControlEvents:UIControlEventTouchUpInside]; |
183 | 211 |
184 // Stop button. | 212 // Stop button. |
185 self.stopButton = [ToolbarButton stopToolbarButton]; | 213 self.stopButton = [ToolbarButton stopToolbarButton]; |
186 self.stopButton.visibilityMask = ToolbarComponentVisibilityRegularWidth; | 214 self.stopButton.visibilityMask = ToolbarComponentVisibilityRegularWidth; |
| 215 [buttonConstraints |
| 216 addObject:[self.stopButton.widthAnchor |
| 217 constraintEqualToConstant:kToolbarButtonWidth]]; |
187 [self.stopButton addTarget:self | 218 [self.stopButton addTarget:self |
188 action:@selector(stop:) | 219 action:@selector(stop:) |
189 forControlEvents:UIControlEventTouchUpInside]; | 220 forControlEvents:UIControlEventTouchUpInside]; |
| 221 |
| 222 // // Set the buttons constraints priority to UILayoutPriorityDefaultHigh so |
| 223 // these are not broken when being hidden by the StackView. |
| 224 [self activateConstraints:buttonConstraints |
| 225 withPriority:UILayoutPriorityDefaultHigh]; |
190 } | 226 } |
191 | 227 |
192 - (void)setUpLocationBarContainer { | 228 - (void)setUpLocationBarContainer { |
193 UIView* locationBarContainer = [[UIView alloc] initWithFrame:CGRectZero]; | 229 UIView* locationBarContainer = [[UIView alloc] initWithFrame:CGRectZero]; |
194 locationBarContainer.translatesAutoresizingMaskIntoConstraints = NO; | 230 locationBarContainer.translatesAutoresizingMaskIntoConstraints = NO; |
195 locationBarContainer.backgroundColor = [UIColor whiteColor]; | 231 locationBarContainer.backgroundColor = [UIColor whiteColor]; |
196 locationBarContainer.layer.borderWidth = kLocationBarBorderWidth; | 232 locationBarContainer.layer.borderWidth = kLocationBarBorderWidth; |
197 locationBarContainer.layer.borderColor = | 233 locationBarContainer.layer.borderColor = |
198 [UIColor colorWithWhite:kLocationBarBorderColorBrightness alpha:1.0] | 234 [UIColor colorWithWhite:kLocationBarBorderColorBrightness alpha:1.0] |
199 .CGColor; | 235 .CGColor; |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 // Updates all Buttons visibility to match any recent WebState change. | 385 // Updates all Buttons visibility to match any recent WebState change. |
350 - (void)updateAllButtonsVisibility { | 386 - (void)updateAllButtonsVisibility { |
351 for (UIView* view in self.stackView.arrangedSubviews) { | 387 for (UIView* view in self.stackView.arrangedSubviews) { |
352 if ([view isKindOfClass:[ToolbarButton class]]) { | 388 if ([view isKindOfClass:[ToolbarButton class]]) { |
353 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view); | 389 ToolbarButton* button = base::mac::ObjCCastStrict<ToolbarButton>(view); |
354 [button setHiddenForCurrentStateAndSizeClass]; | 390 [button setHiddenForCurrentStateAndSizeClass]; |
355 } | 391 } |
356 } | 392 } |
357 } | 393 } |
358 | 394 |
| 395 // Sets the priority for an array of constraints and activates them. |
| 396 - (void)activateConstraints:(NSArray*)constraintsArray |
| 397 withPriority:(UILayoutPriority)priority { |
| 398 for (NSLayoutConstraint* constraint in constraintsArray) { |
| 399 constraint.priority = priority; |
| 400 } |
| 401 [NSLayoutConstraint activateConstraints:constraintsArray]; |
| 402 } |
| 403 |
359 @end | 404 @end |
OLD | NEW |