Index: ios/clean/chrome/browser/ui/tab_strip/tab_strip_container_view_controller.mm |
diff --git a/ios/clean/chrome/browser/ui/tab_strip/tab_strip_container_view_controller.mm b/ios/clean/chrome/browser/ui/tab_strip/tab_strip_container_view_controller.mm |
deleted file mode 100644 |
index 20c79b8390daa4ced9153b25e4dde84b3e456591..0000000000000000000000000000000000000000 |
--- a/ios/clean/chrome/browser/ui/tab_strip/tab_strip_container_view_controller.mm |
+++ /dev/null |
@@ -1,277 +0,0 @@ |
-// Copyright 2016 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/clean/chrome/browser/ui/tab_strip/tab_strip_container_view_controller.h" |
- |
-#import "base/mac/foundation_util.h" |
-#import "ios/clean/chrome/browser/ui/actions/tab_strip_actions.h" |
-#import "ios/clean/chrome/browser/ui/ui_types.h" |
- |
-#if !defined(__has_feature) || !__has_feature(objc_arc) |
-#error "This file requires ARC support." |
-#endif |
- |
-namespace { |
-CGFloat kStripHeight = 200.0; |
-} |
- |
-@interface TabStripContainerViewController ()<TabStripActions> |
- |
-// Whichever view controller is at the top of the screen. This view controller |
-// controls the status bar. |
-@property(nonatomic, weak) UIViewController* topmostViewController; |
- |
-@property(nonatomic, strong) Constraints* contentConstraintsWithStrip; |
-@property(nonatomic, strong) Constraints* contentConstraintsWithoutStrip; |
-@property(nonatomic, strong) Constraints* stripConstraints; |
- |
-// Cache for forwarding methods to child view controllers. |
-@property(nonatomic, assign) SEL actionToForward; |
-@property(nonatomic, weak) UIResponder* forwardingTarget; |
- |
-@property(nonatomic, strong) NSLayoutConstraint* stripHeightConstraint; |
- |
-// Contained view controller utility methods. This method cannot be named |
-//-removeChildViewController:, as that is a private superclass method. |
-- (void)detachChildViewController:(UIViewController*)viewController; |
- |
-// Called after a new content view controller is set, but before |
-// |-didMoveToParentViewController:| is called on that view controller. |
-- (void)didAddContentViewController; |
- |
-// Called after a new strip view controller is set, but before |
-// |-didMoveToParentViewController:| is called on that view controller. |
-- (void)didAddTabStripViewController; |
- |
-// Methods to populate the constraint properties. |
-- (void)updateContentConstraintsWithStrip; |
-- (void)updateContentConstraintsWithoutStrip; |
-- (void)updateStripConstraints; |
- |
-@end |
- |
-@implementation TabStripContainerViewController |
- |
-@synthesize contentViewController = _contentViewController; |
-@synthesize tabStripViewController = _tabStripViewController; |
-@synthesize topmostViewController = _topmostViewController; |
-@synthesize contentConstraintsWithStrip = _contentConstraintsWithStrip; |
-@synthesize contentConstraintsWithoutStrip = _contentConstraintsWithoutStrip; |
-@synthesize stripConstraints = _stripConstraints; |
-@synthesize actionToForward = _actionToForward; |
-@synthesize forwardingTarget = _forwardingTarget; |
-@synthesize stripHeightConstraint = _stripHeightConstraint; |
- |
-#pragma mark - Public properties |
- |
-- (void)setContentViewController:(UIViewController*)contentViewController { |
- if (self.contentViewController == contentViewController) |
- return; |
- |
- // Remove the current content view controller, if any. |
- [NSLayoutConstraint |
- deactivateConstraints:self.contentConstraintsWithoutStrip]; |
- [NSLayoutConstraint deactivateConstraints:self.contentConstraintsWithStrip]; |
- [self detachChildViewController:self.contentViewController]; |
- |
- // Add the new content view controller. |
- [self addChildViewController:contentViewController]; |
- contentViewController.view.translatesAutoresizingMaskIntoConstraints = NO; |
- [self.view addSubview:contentViewController.view]; |
- _contentViewController = contentViewController; |
- [self didAddContentViewController]; |
- [self.view setNeedsUpdateConstraints]; |
- [self.contentViewController didMoveToParentViewController:self]; |
-} |
- |
-- (void)setTabStripViewController:(UIViewController*)tabStripViewController { |
- if (self.tabStripViewController == tabStripViewController) |
- return; |
- |
- // Remove the current strip view controller, if any. |
- [NSLayoutConstraint deactivateConstraints:self.stripConstraints]; |
- [NSLayoutConstraint deactivateConstraints:self.contentConstraintsWithStrip]; |
- [self detachChildViewController:self.tabStripViewController]; |
- |
- // Add the new strip view controller. |
- [self addChildViewController:tabStripViewController]; |
- tabStripViewController.view.translatesAutoresizingMaskIntoConstraints = NO; |
- [self.view addSubview:tabStripViewController.view]; |
- _tabStripViewController = tabStripViewController; |
- [self didAddTabStripViewController]; |
- [self.view setNeedsUpdateConstraints]; |
- [self.tabStripViewController didMoveToParentViewController:self]; |
-} |
- |
-#pragma mark - UIViewController |
- |
-- (void)updateViewConstraints { |
- if (self.tabStripViewController) { |
- [NSLayoutConstraint activateConstraints:self.stripConstraints]; |
- [NSLayoutConstraint activateConstraints:self.contentConstraintsWithStrip]; |
- } else { |
- [NSLayoutConstraint |
- activateConstraints:self.contentConstraintsWithoutStrip]; |
- } |
- [super updateViewConstraints]; |
-} |
- |
-- (UIViewController*)childViewControllerForStatusBarHidden { |
- return self.topmostViewController; |
-} |
- |
-- (UIViewController*)childViewControllerForStatusBarStyle { |
- return self.topmostViewController; |
-} |
- |
-#pragma mark - UIResponder |
- |
-// Before forwarding actions up the responder chain, give both contained |
-// view controllers a chance to handle them. |
-- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { |
- self.actionToForward = nullptr; |
- self.forwardingTarget = nil; |
- for (UIResponder* responder in |
- @[ self.contentViewController, self.tabStripViewController ]) { |
- if ([responder canPerformAction:action withSender:sender]) { |
- self.actionToForward = action; |
- self.forwardingTarget = responder; |
- return YES; |
- } |
- } |
- return [super canPerformAction:action withSender:sender]; |
-} |
- |
-#pragma mark - NSObject method forwarding |
- |
-- (id)forwardingTargetForSelector:(SEL)aSelector { |
- if (aSelector == self.actionToForward) { |
- return self.forwardingTarget; |
- } |
- return nil; |
-} |
- |
-#pragma mark - TabStripActions |
- |
-// Action to toggle visibility of tab strip. |
-- (void)showTabStrip:(id)sender { |
- self.stripHeightConstraint.constant = kStripHeight; |
-} |
- |
-- (void)hideTabStrip:(id)sender { |
- self.stripHeightConstraint.constant = 0.0f; |
-} |
- |
-#pragma mark - MenuPresentationDelegate |
- |
-- (CGRect)frameForMenuPresentation:(UIPresentationController*)presentation { |
- CGSize menuSize = presentation.presentedView.frame.size; |
- CGRect menuRect; |
- menuRect.size = menuSize; |
- |
- CGRect menuOriginRect = [self rectForZoomWithKey:@"" inView:self.view]; |
- if (CGRectIsNull(menuOriginRect)) { |
- menuRect.origin = CGPointMake(50, 50); |
- return menuRect; |
- } |
- // Calculate which corner of the menu the origin rect is in. This is |
- // determined by comparing frames, and thus is RTL-independent. |
- if (CGRectGetMinX(menuOriginRect) - CGRectGetMinX(self.view.bounds) < |
- CGRectGetMaxX(self.view.bounds) - CGRectGetMaxX(menuOriginRect)) { |
- // Origin rect is closer to the left edge of |self.view| than to the right. |
- menuRect.origin.x = CGRectGetMinX(menuOriginRect); |
- } else { |
- // Origin rect is closer to the right edge of |self.view| than to the left. |
- menuRect.origin.x = CGRectGetMaxX(menuOriginRect) - menuSize.width; |
- } |
- |
- if (CGRectGetMinY(menuOriginRect) - CGRectGetMinY(self.view.bounds) < |
- CGRectGetMaxY(self.view.bounds) - CGRectGetMaxY(menuOriginRect)) { |
- // Origin rect is closer to the top edge of |self.view| than to the bottom. |
- menuRect.origin.y = CGRectGetMinY(menuOriginRect); |
- } else { |
- // Origin rect is closer to the bottom edge of |self.view| than to the top. |
- menuRect.origin.y = CGRectGetMaxY(menuOriginRect) - menuSize.height; |
- } |
- |
- return menuRect; |
-} |
- |
-#pragma mark - ZoomTransitionDelegate |
- |
-- (CGRect)rectForZoomWithKey:(NSObject*)key inView:(UIView*)view { |
- if ([self.contentViewController |
- conformsToProtocol:@protocol(ZoomTransitionDelegate)]) { |
- return [reinterpret_cast<id<ZoomTransitionDelegate>>( |
- self.contentViewController) rectForZoomWithKey:key |
- inView:view]; |
- } |
- return CGRectNull; |
-} |
- |
-#pragma mark - Private methods |
- |
-- (void)detachChildViewController:(UIViewController*)viewController { |
- if (viewController.parentViewController != self) |
- return; |
- [viewController willMoveToParentViewController:nil]; |
- [viewController.view removeFromSuperview]; |
- [viewController removeFromParentViewController]; |
-} |
- |
-- (void)didAddContentViewController { |
- if (self.tabStripViewController) { |
- [self updateContentConstraintsWithStrip]; |
- } else { |
- self.topmostViewController = self.contentViewController; |
- [self updateContentConstraintsWithoutStrip]; |
- } |
-} |
- |
-- (void)didAddTabStripViewController { |
- [self updateStripConstraints]; |
- // If there's already a content view controller, update the constraints for |
- // that, too. |
- if (self.contentViewController) { |
- [self updateContentConstraintsWithStrip]; |
- } |
- self.topmostViewController = self.tabStripViewController; |
-} |
- |
-- (void)updateContentConstraintsWithoutStrip { |
- UIView* contentView = self.contentViewController.view; |
- self.contentConstraintsWithoutStrip = @[ |
- [contentView.topAnchor constraintEqualToAnchor:self.view.topAnchor], |
- [contentView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor], |
- [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], |
- [contentView.trailingAnchor |
- constraintEqualToAnchor:self.view.trailingAnchor], |
- ]; |
-} |
- |
-- (void)updateContentConstraintsWithStrip { |
- UIView* contentView = self.contentViewController.view; |
- self.contentConstraintsWithStrip = @[ |
- [contentView.topAnchor |
- constraintEqualToAnchor:self.tabStripViewController.view.bottomAnchor], |
- [contentView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor], |
- [contentView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], |
- [contentView.trailingAnchor |
- constraintEqualToAnchor:self.view.trailingAnchor], |
- ]; |
-} |
- |
-- (void)updateStripConstraints { |
- UIView* stripView = self.tabStripViewController.view; |
- self.stripHeightConstraint = |
- [stripView.heightAnchor constraintEqualToConstant:0.0]; |
- self.stripConstraints = @[ |
- [stripView.topAnchor constraintEqualToAnchor:self.view.topAnchor], |
- [stripView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], |
- [stripView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], |
- self.stripHeightConstraint, |
- ]; |
-} |
- |
-@end |