Index: ios/chrome/browser/ui/no_tabs/no_tabs_toolbar_controller.mm |
diff --git a/ios/chrome/browser/ui/no_tabs/no_tabs_toolbar_controller.mm b/ios/chrome/browser/ui/no_tabs/no_tabs_toolbar_controller.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c4e6a579db502c6ac1c40355218b7b9841141bf8 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/no_tabs/no_tabs_toolbar_controller.mm |
@@ -0,0 +1,115 @@ |
+// Copyright 2012 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/no_tabs/no_tabs_toolbar_controller.h" |
+ |
+#include "base/mac/scoped_nsobject.h" |
+#import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" |
+#include "ios/chrome/browser/ui/commands/ios_command_ids.h" |
+#import "ios/chrome/browser/ui/rtl_geometry.h" |
+#include "ios/chrome/browser/ui/toolbar/new_tab_button.h" |
+#import "ios/chrome/browser/ui/uikit_ui_util.h" |
+#import "ui/gfx/ios/uikit_util.h" |
+ |
+namespace { |
+ |
+const CGFloat kNewTabButtonLeading = 8; |
+const CGFloat kModeToggleWidth = 34; |
+const CGFloat kModeToggleHeight = 38; |
+ |
+} // end namespace |
+ |
+@interface NoTabsToolbarController () { |
+ // Top-level view for notabs-specific content. |
+ base::scoped_nsobject<UIView> _noTabsToolbar; |
+ base::scoped_nsobject<UIButton> _buttonNewTab; |
+ base::scoped_nsobject<UIButton> _modeToggleButton; |
+} |
+ |
+@end |
+ |
+@implementation NoTabsToolbarController |
+ |
+- (instancetype)initWithNoTabs { |
+ self = [super initWithStyle:ToolbarControllerStyleDarkMode]; |
+ if (self) { |
+ _noTabsToolbar.reset([[UIView alloc] initWithFrame:self.view.bounds]); |
+ [_noTabsToolbar setBackgroundColor:[UIColor clearColor]]; |
+ [_noTabsToolbar setAutoresizingMask:UIViewAutoresizingFlexibleWidth | |
+ UIViewAutoresizingFlexibleBottomMargin]; |
+ |
+ // Resize the container to match the available area. |
+ // Do this before the layouts of subviews are computed. |
+ [_noTabsToolbar setFrame:[self specificControlsArea]]; |
+ |
+ CGFloat boundingHeight = [_noTabsToolbar bounds].size.height; |
+ CGFloat boundingWidth = [_noTabsToolbar bounds].size.width; |
+ LayoutRect newTabButtonLayout = LayoutRectMake( |
+ kNewTabButtonLeading, boundingWidth, 0, boundingHeight, boundingHeight); |
+ _buttonNewTab.reset([[NewTabButton alloc] |
+ initWithFrame:LayoutRectGetRect(newTabButtonLayout)]); |
+ [_buttonNewTab |
+ setAutoresizingMask:UIViewAutoresizingFlexibleTrailingMargin()]; |
+ |
+ LayoutRect modeToggleButtonLayout = LayoutRectMake( |
+ boundingWidth - kModeToggleWidth - boundingHeight, boundingWidth, |
+ ui::AlignValueToUpperPixel((boundingHeight - kModeToggleHeight) / 2), |
+ kModeToggleWidth, kModeToggleHeight); |
+ |
+ _modeToggleButton.reset([[UIButton alloc] |
+ initWithFrame:LayoutRectGetRect(modeToggleButtonLayout)]); |
+ [_modeToggleButton setHidden:YES]; |
+ [_modeToggleButton |
+ setAutoresizingMask:UIViewAutoresizingFlexibleLeadingMargin()]; |
+ [_modeToggleButton setImageEdgeInsets:UIEdgeInsetsMakeDirected(7, 5, 7, 5)]; |
+ [_modeToggleButton setImage:[UIImage imageNamed:@"tabstrip_switch"] |
+ forState:UIControlStateNormal]; |
+ [_modeToggleButton setTag:IDC_SWITCH_BROWSER_MODES]; |
+ [_modeToggleButton addTarget:self |
+ action:@selector(recordUserMetrics:) |
+ forControlEvents:UIControlEventTouchUpInside]; |
+ [_modeToggleButton addTarget:_modeToggleButton |
+ action:@selector(chromeExecuteCommand:) |
+ forControlEvents:UIControlEventTouchUpInside]; |
+ |
+ // The toolbar background is not supposed to show in the no-tabs UI. |
+ [self.backgroundView setHidden:YES]; |
+ |
+ [self.view addSubview:_noTabsToolbar]; |
+ [_noTabsToolbar addSubview:_buttonNewTab]; |
+ [_noTabsToolbar addSubview:_modeToggleButton]; |
+ |
+ self.shadowView.hidden = YES; |
+ } |
+ return self; |
+} |
+ |
+// Applies the given transform to this toolbar's controls. |
+- (void)setControlsTransform:(CGAffineTransform)transform { |
+ [self setStandardControlsTransform:transform]; |
+ [_buttonNewTab setTransform:transform]; |
+ [_modeToggleButton setTransform:transform]; |
+} |
+ |
+// Shows or hides the mode toggle switch. |
+- (void)setHasModeToggleSwitch:(BOOL)hasModeToggle { |
+ [_modeToggleButton setHidden:!hasModeToggle]; |
+} |
+ |
+// Called when a button is pressed. |
+- (void)recordUserMetrics:(id)sender { |
+ if (sender == _buttonNewTab.get()) { |
+ // TODO(rohitrao): Record metrics. http://crbug.com/437418 |
+ } else if (sender == _modeToggleButton.get()) { |
+ // TODO(rohitrao): Record metrics. http://crbug.com/437418 |
+ } else { |
+ [super recordUserMetrics:sender]; |
+ } |
+} |
+ |
+- (UIButton*)modeToggleButton { |
+ return _modeToggleButton; |
+} |
+ |
+@end |