chromium/ios/chrome/browser/blocking_overlay/ui_bundled/blocking_overlay_view_controller.mm

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/blocking_overlay/ui_bundled/blocking_overlay_view_controller.h"

#import "ios/chrome/app/blocking_scene_commands.h"
#import "ios/chrome/common/ui/colors/semantic_color_names.h"
#import "ios/chrome/common/ui/util/constraints_ui_util.h"
#import "ios/chrome/grit/ios_branded_strings.h"
#import "ios/chrome/grit/ios_strings.h"

namespace {
// Max width for explanatory text.
const CGFloat kMaxTextWidth = 275.0f;
// Vertical space between text and button.
const CGFloat kButtonSpacing = 20.0f;

}  // namespace

// This view controller is used in Safe Mode. This means everything used here
// must not require any advanced initialization that only happens after safe
// mode.
@implementation BlockingOverlayViewController

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];

  // Set up a blurred background.
  UIBlurEffect* effect = nil;
  // SystemXYZMaterial effect styles are iOS 13+, but so is multiwindow.
  effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleSystemThinMaterial];

  UIVisualEffectView* backgroundBlurEffect =
      [[UIVisualEffectView alloc] initWithEffect:effect];
  backgroundBlurEffect.translatesAutoresizingMaskIntoConstraints = NO;
  [self.view addSubview:backgroundBlurEffect];
  AddSameConstraints(self.view, backgroundBlurEffect);

  UILabel* label = [[UILabel alloc] init];
  // Here and everywhere, use NSLocalizedString because the usual localization
  // method with l10n_util::GetNSString() requires initialization that happens
  // after safe mode completes.
  label.text = NSLocalizedString(
      @"IDS_IOS_UI_BLOCKED_USE_OTHER_WINDOW_DESCRIPTION", @"");
  label.textColor = [UIColor colorNamed:kGrey800Color];
  label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
  label.textAlignment = NSTextAlignmentCenter;
  label.numberOfLines = 0;

  [self.view addSubview:label];
  AddSameCenterConstraints(label, self.view);
  [label.widthAnchor constraintLessThanOrEqualToConstant:kMaxTextWidth].active =
      YES;
  label.translatesAutoresizingMaskIntoConstraints = NO;

  UIButton* button = [[UIButton alloc] init];
  button.translatesAutoresizingMaskIntoConstraints = NO;
  [button
      setTitle:NSLocalizedString(
                   @"IDS_IOS_UI_BLOCKED_USE_OTHER_WINDOW_SWITCH_WINDOW_ACTION",
                   @"")
      forState:UIControlStateNormal];
  [button setTitleColor:[UIColor colorNamed:kBlueColor]
               forState:UIControlStateNormal];
  button.titleLabel.font =
      [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
  [button addTarget:self
                action:@selector(buttonPressed:)
      forControlEvents:UIControlEventTouchUpInside];

  [self.view addSubview:button];
  [NSLayoutConstraint activateConstraints:@[
    [button.leadingAnchor constraintEqualToAnchor:label.leadingAnchor],
    [button.trailingAnchor constraintEqualToAnchor:label.trailingAnchor],
    [button.topAnchor constraintEqualToAnchor:label.bottomAnchor
                                     constant:kButtonSpacing],
  ]];
}

- (void)buttonPressed:(id)sender {
  [self.blockingSceneCommandHandler
      activateBlockingScene:self.view.window.windowScene];
}

@end