blob: e6628f4cb5a296d264fbd0f2c5e9f07dd2e966f3 [file] [log] [blame]
// Copyright 2018 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/elements/chrome_activity_overlay_coordinator.h"
#import "ios/chrome/browser/ui/elements/chrome_activity_overlay_view_controller.h"
#import "ios/chrome/browser/ui/main/scene_state.h"
#import "ios/chrome/browser/ui/main/scene_state_browser_agent.h"
#import "ios/chrome/browser/ui/scoped_ui_blocker/scoped_ui_blocker.h"
#import "ios/chrome/common/ui/util/constraints_ui_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface ChromeActivityOverlayCoordinator ()
// View controller that displays a native active indicator.
@property(nonatomic, strong)
ChromeActivityOverlayViewController* chromeActivityOverlayViewController;
@end
@implementation ChromeActivityOverlayCoordinator {
std::unique_ptr<ScopedUIBlocker> _windowUIBlocker;
}
- (void)start {
if (self.chromeActivityOverlayViewController || self.started)
return;
self.chromeActivityOverlayViewController =
[[ChromeActivityOverlayViewController alloc] init];
self.chromeActivityOverlayViewController.messageText = self.messageText;
[self.baseViewController
addChildViewController:self.chromeActivityOverlayViewController];
// Make sure frame of view is exactly the same size as its presenting view.
// Especially important when the presenting view is a bubble.
CGRect frame = self.chromeActivityOverlayViewController.view.frame;
frame.origin.x = 0;
frame.size.width = self.baseViewController.view.bounds.size.width;
frame.size.height = self.baseViewController.view.bounds.size.height;
self.chromeActivityOverlayViewController.view.frame = frame;
[self.baseViewController.view
addSubview:self.chromeActivityOverlayViewController.view];
[self.chromeActivityOverlayViewController
didMoveToParentViewController:self.baseViewController];
if (self.blockAllWindows) {
SceneState* sceneState =
SceneStateBrowserAgent::FromBrowser(self.browser)->GetSceneState();
_windowUIBlocker = std::make_unique<ScopedUIBlocker>(sceneState);
}
self.started = YES;
}
- (void)stop {
if (!self.chromeActivityOverlayViewController || !self.started)
return;
_windowUIBlocker.reset();
[self.chromeActivityOverlayViewController willMoveToParentViewController:nil];
[self.chromeActivityOverlayViewController.view removeFromSuperview];
[self.chromeActivityOverlayViewController removeFromParentViewController];
self.chromeActivityOverlayViewController = nil;
self.started = NO;
}
@end