Index: ios/chrome/browser/ui/main/main_view_controller.mm |
diff --git a/ios/chrome/browser/ui/main/main_view_controller.mm b/ios/chrome/browser/ui/main/main_view_controller.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..641b24568c1695c2bad673a3e44448e068750c3a |
--- /dev/null |
+++ b/ios/chrome/browser/ui/main/main_view_controller.mm |
@@ -0,0 +1,76 @@ |
+// 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/chrome/browser/ui/main/main_view_controller.h" |
+ |
+#import "base/logging.h" |
+ |
+@implementation MainViewController |
+ |
+- (UIViewController*)activeViewController { |
+ return [self.childViewControllers firstObject]; |
+} |
+ |
+- (void)setActiveViewController:(UIViewController*)activeViewController { |
+ DCHECK(activeViewController); |
+ if (self.activeViewController == activeViewController) |
+ return; |
+ |
+ // TODO(crbug.com/546189): DCHECK here that there isn't a modal view |
+ // controller showing once the known violations of that are fixed. |
+ |
+ // Remove the current active view controller, if any. |
+ if (self.activeViewController) { |
+ [self.activeViewController willMoveToParentViewController:nil]; |
+ [self.activeViewController.view removeFromSuperview]; |
+ [self.activeViewController removeFromParentViewController]; |
+ } |
+ |
+ DCHECK(self.activeViewController == nil); |
+ DCHECK(self.view.subviews.count == 0); |
+ |
+ // Add the new active view controller. |
+ [self addChildViewController:activeViewController]; |
+ self.activeViewController.view.frame = self.view.bounds; |
+ [self.view addSubview:self.activeViewController.view]; |
+ [activeViewController didMoveToParentViewController:self]; |
+ |
+ // Let the system know that the child has changed so appearance updates can |
+ // be made. |
+ [self setNeedsStatusBarAppearanceUpdate]; |
+ |
+ DCHECK(self.activeViewController == activeViewController); |
+} |
+ |
+#pragma mark - UIViewController methods |
+ |
+- (void)presentViewController:(UIViewController*)viewControllerToPresent |
+ animated:(BOOL)flag |
+ completion:(void (^)())completion { |
+ [self.activeViewController presentViewController:viewControllerToPresent |
+ animated:flag |
+ completion:completion]; |
+} |
+ |
+- (void)dismissViewControllerAnimated:(BOOL)flag |
+ completion:(void (^)())completion { |
+ [self.activeViewController dismissViewControllerAnimated:flag |
+ completion:completion]; |
+} |
+ |
+- (UIViewController*)childViewControllerForStatusBarHidden { |
+ return self.activeViewController; |
+} |
+ |
+- (UIViewController*)childViewControllerForStatusBarStyle { |
+ return self.activeViewController; |
+} |
+ |
+- (BOOL)shouldAutorotate { |
+ return self.activeViewController |
+ ? [self.activeViewController shouldAutorotate] |
+ : [super shouldAutorotate]; |
+} |
+ |
+@end |