Commit d597d4d9 authored by Gauthier Ambard's avatar Gauthier Ambard Committed by Commit Bot

Merge LegacyToolbarCoordinator and ToolbarCoordinator

This CL merges the LegacyToolbarCoordinator in the ToolbarCoordinator.

Bug: 809785
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I444edfa36c23986323fb3ec686c29d4e3c25ba87
Reviewed-on: https://chromium-review.googlesource.com/931441
Commit-Queue: Gauthier Ambard <gambard@chromium.org>
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Cr-Commit-Position: refs/heads/master@{#539810}
parent 70d509b8
......@@ -202,8 +202,8 @@
#import "ios/chrome/browser/ui/toolbar/adaptive/secondary_toolbar_coordinator.h"
#import "ios/chrome/browser/ui/toolbar/adaptive/toolbar_coordinator_adaptor.h"
#import "ios/chrome/browser/ui/toolbar/buttons/toolbar_constants.h"
#import "ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.h"
#import "ios/chrome/browser/ui/toolbar/legacy/toolbar_controller_constants.h"
#include "ios/chrome/browser/ui/toolbar/legacy_toolbar_coordinator.h"
#import "ios/chrome/browser/ui/toolbar/legacy_toolbar_ui_updater.h"
#import "ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h"
#import "ios/chrome/browser/ui/toolbar/public/toolbar_controller_base_feature.h"
......@@ -584,7 +584,7 @@ NSString* const kBrowserViewControllerSnackbarCategory =
SnackbarCoordinator* _snackbarCoordinator;
// Coordinator for the toolbar.
LegacyToolbarCoordinator* _toolbarCoordinator;
ToolbarCoordinator* _toolbarCoordinator;
// The toolbar UI updater for the toolbar managed by |_toolbarCoordinator|.
LegacyToolbarUIUpdater* _toolbarUIUpdater;
......@@ -2037,12 +2037,11 @@ applicationCommandEndpoint:(id<ApplicationCommands>)applicationCommandEndpoint {
[adaptor addToolbarCoordinator:topToolbarCoordinator];
// TODO(crbug.com/800330): Add secondary toolbar.
} else {
_toolbarCoordinator = [[LegacyToolbarCoordinator alloc]
initWithBaseViewController:self
toolsMenuConfigurationProvider:self
dispatcher:self.dispatcher
browserState:_browserState
webStateList:[_model webStateList]];
_toolbarCoordinator = [[ToolbarCoordinator alloc]
initWithToolsMenuConfigurationProvider:self
dispatcher:self.dispatcher
browserState:_browserState];
_toolbarCoordinator.webStateList = [_model webStateList];
_toolbarCoordinator.delegate = self;
_toolbarCoordinator.URLLoader = self;
self.primaryToolbarCoordinator = _toolbarCoordinator;
......
......@@ -105,9 +105,11 @@ class OmniboxPerfTest : public PerfTest {
[[[toolbarDelegate stub] andReturnValue:OCMOCK_VALUE(model_for_mock)]
toolbarModel];
coordinator_ = [[ToolbarCoordinator alloc] init];
coordinator_ = [[ToolbarCoordinator alloc]
initWithToolsMenuConfigurationProvider:nil
dispatcher:nil
browserState:chrome_browser_state_.get()];
coordinator_.delegate = toolbarDelegate;
coordinator_.browserState = chrome_browser_state_.get();
coordinator_.webStateList = web_state_list_.get();
[coordinator_ start];
......
......@@ -5,8 +5,6 @@
source_set("toolbar") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"legacy_toolbar_coordinator.h",
"legacy_toolbar_coordinator.mm",
"toolbar_model_delegate_ios.h",
"toolbar_model_delegate_ios.mm",
]
......
......@@ -36,9 +36,11 @@ source_set("toolbar") {
"//ios/chrome/browser/ui/ntp:util",
"//ios/chrome/browser/ui/omnibox",
"//ios/chrome/browser/ui/omnibox:omnibox_internal",
"//ios/chrome/browser/ui/toolbar:toolbar_ui",
"//ios/chrome/browser/ui/toolbar/buttons",
"//ios/chrome/browser/ui/toolbar/keyboard_assist",
"//ios/chrome/browser/ui/toolbar/public",
"//ios/chrome/browser/ui/tools_menu",
"//ios/chrome/browser/ui/tools_menu:configuration",
"//ios/chrome/browser/ui/tools_menu/public",
"//ios/chrome/browser/ui/voice",
......
......@@ -7,37 +7,34 @@
#import <UIKit/UIKit.h>
#import "ios/chrome/browser/ui/toolbar/public/fakebox_focuser.h"
#import "ios/chrome/browser/ui/toolbar/public/omnibox_focuser.h"
#import "ios/chrome/browser/ui/tools_menu/public/tools_menu_presentation_provider.h"
#import "ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h"
#import "ios/chrome/browser/ui/toolbar/public/toolbar_coordinating.h"
#import "ios/chrome/browser/ui/toolbar/toolbar_snapshot_providing.h"
#import "ios/chrome/browser/ui/tools_menu/public/tools_menu_presentation_state_provider.h"
@protocol ActivityServicePositioner;
@protocol ApplicationCommands;
@protocol BrowserCommands;
@protocol OmniboxFocuser;
@class ToolbarButtonUpdater;
@class CommandDispatcher;
@protocol ToolbarCoordinatorDelegate;
@protocol ToolsMenuConfigurationProvider;
@protocol UrlLoader;
@protocol VoiceSearchControllerDelegate;
@protocol QRScannerResultLoading;
class WebStateList;
namespace ios {
class ChromeBrowserState;
}
namespace web {
class WebState;
}
// Coordinator to run a toolbar -- a UI element housing controls.
@interface ToolbarCoordinator
: NSObject<FakeboxFocuser, ToolsMenuPresentationProvider>
@interface ToolbarCoordinator : NSObject<PrimaryToolbarCoordinator,
ToolbarCoordinating,
ToolbarSnapshotProviding,
ToolsMenuPresentationStateProvider>
- (instancetype)
initWithToolsMenuConfigurationProvider:
(id<ToolsMenuConfigurationProvider>)configurationProvider
dispatcher:(CommandDispatcher*)dispatcher
browserState:(ios::ChromeBrowserState*)browserState;
- (instancetype)init NS_UNAVAILABLE;
// Weak reference to ChromeBrowserState;
@property(nonatomic, assign) ios::ChromeBrowserState* browserState;
// The dispatcher for this view controller.
@property(nonatomic, weak)
id<ApplicationCommands, BrowserCommands, OmniboxFocuser>
dispatcher;
// The web state list this ToolbarCoordinator is handling.
@property(nonatomic, assign) WebStateList* webStateList;
// Delegate for this coordinator. Only used for plumbing to Location Bar
......@@ -47,61 +44,12 @@ class WebState;
// URL loader for the toolbar.
// TODO(crbug.com/799446): Remove this.
@property(nonatomic, weak) id<UrlLoader> URLLoader;
// UIViewController managed by this coordinator.
@property(nonatomic, strong, readonly) UIViewController* viewController;
// Button updater for the toolbar.
@property(nonatomic, strong) ToolbarButtonUpdater* buttonUpdater;
// Returns the ActivityServicePositioner for this toolbar.
- (id<ActivityServicePositioner>)activityServicePositioner;
// Returns the OmniboxFocuser for this toolbar.
- (id<OmniboxFocuser>)omniboxFocuser;
// Returns the VoiceSearchControllerDelegate for this toolbar.
- (id<VoiceSearchControllerDelegate>)voiceSearchControllerDelegate;
// Returns the QRScannerResultLoading for this toolbar.
- (id<QRScannerResultLoading>)QRScannerResultLoader;
// Start this coordinator.
- (void)start;
// Stop this coordinator.
- (void)stop;
// Coordinates the location bar focusing/defocusing. For example, initiates
// transition to the expanded location bar state of the view controller.
- (void)transitionToLocationBarFocusedState:(BOOL)focused;
// Updates the toolbar so it is in a state where a snapshot for |webState| can
// be taken.
- (void)updateToolbarForSideSwipeSnapshot:(web::WebState*)webState;
// Resets the toolbar after taking a side swipe snapshot. After calling this
// method the toolbar is adapted to the current webState.
- (void)resetToolbarAfterSideSwipeSnapshot;
// Sets the ToolsMenu visibility depending if the tools menu |isVisible|.
- (void)setToolsMenuIsVisibleForToolsMenuButton:(BOOL)isVisible;
// Triggers the animation of the tools menu button.
- (void)triggerToolsMenuButtonAnimation;
// Sets the background color of the Toolbar to the one of the Incognito NTP,
// with an |alpha|.
- (void)setBackgroundToIncognitoNTPColorWithAlpha:(CGFloat)alpha;
// Briefly animate the progress bar when a pre-rendered tab is displayed.
- (void)showPrerenderingAnimation;
// Returns whether omnibox is a first responder.
- (BOOL)isOmniboxFirstResponder;
// Returns whether the omnibox popup is currently displayed.
- (BOOL)showingOmniboxPopup;
// Activates constraints to simulate a safe area with |fakeSafeAreaInsets|
// insets. The insets will be used as leading/trailing wrt RTL. Those
// constraints have a higher priority than the one used to respect the safe
// area. They need to be deactivated for the toolbar to respect the safe area
// again. The fake safe area can be bigger or smaller than the real safe area.
- (void)activateFakeSafeAreaInsets:(UIEdgeInsets)fakeSafeAreaInsets;
// Deactivates the constraints used to create a fake safe area.
- (void)deactivateFakeSafeAreaInsets;
// Asks the provider for the color of the background of the toolbar. A nil value
// indicates the default color will be used.
- (UIColor*)toolbarBackgroundColor;
@end
#endif // IOS_CHROME_BROWSER_UI_TOOLBAR_CLEAN_TOOLBAR_COORDINATOR_H_
// Copyright 2017 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.
#ifndef IOS_CHROME_BROWSER_UI_TOOLBAR_LEGACY_TOOLBAR_COORDINATOR_H_
#define IOS_CHROME_BROWSER_UI_TOOLBAR_LEGACY_TOOLBAR_COORDINATOR_H_
#import <UIKit/UIKit.h>
#import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h"
#import "ios/chrome/browser/ui/toolbar/public/primary_toolbar_coordinator.h"
#import "ios/chrome/browser/ui/toolbar/public/toolbar_coordinating.h"
#import "ios/chrome/browser/ui/toolbar/toolbar_snapshot_providing.h"
#import "ios/chrome/browser/ui/tools_menu/public/tools_menu_presentation_state_provider.h"
@class CommandDispatcher;
@protocol ToolbarCoordinatorDelegate;
@protocol ToolsMenuConfigurationProvider;
@protocol UrlLoader;
class WebStateList;
@interface LegacyToolbarCoordinator
: ChromeCoordinator<PrimaryToolbarCoordinator,
ToolbarCoordinating,
ToolbarSnapshotProviding,
ToolsMenuPresentationStateProvider>
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
toolsMenuConfigurationProvider:
(id<ToolsMenuConfigurationProvider>)configurationProvider
dispatcher:(CommandDispatcher*)dispatcher
browserState:
(ios::ChromeBrowserState*)browserState
webStateList:(WebStateList*)webStateList
NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
NS_UNAVAILABLE;
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
browserState:
(ios::ChromeBrowserState*)browserState
NS_UNAVAILABLE;
// Delegate for this coordinator. Only used for plumbing to Location Bar
// coordinator.
// TODO(crbug.com/799446): Change this.
@property(nonatomic, weak) id<ToolbarCoordinatorDelegate> delegate;
// URL loader for the toolbar.
// TODO(crbug.com/799446): Remove this.
@property(nonatomic, weak) id<UrlLoader> URLLoader;
@end
#endif // IOS_CHROME_BROWSER_UI_TOOLBAR_LEGACY_TOOLBAR_COORDINATOR_H_
// Copyright 2017 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/toolbar/legacy_toolbar_coordinator.h"
#import "ios/chrome/browser/ui/commands/toolbar_commands.h"
#import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
#import "ios/chrome/browser/ui/fullscreen/fullscreen_controller_factory.h"
#import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_updater.h"
#import "ios/chrome/browser/ui/toolbar/clean/toolbar_button_updater.h"
#import "ios/chrome/browser/ui/toolbar/clean/toolbar_coordinator.h"
#import "ios/chrome/browser/ui/toolbar/public/omnibox_focuser.h"
#import "ios/chrome/browser/ui/tools_menu/public/tools_menu_constants.h"
#import "ios/chrome/browser/ui/tools_menu/tools_menu_coordinator.h"
#import "ios/chrome/browser/ui/uikit_ui_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface LegacyToolbarCoordinator ()<ToolbarCommands> {
// Coordinator for the tools menu UI.
ToolsMenuCoordinator* _toolsMenuCoordinator;
// The fullscreen updater.
std::unique_ptr<FullscreenUIUpdater> _fullscreenUpdater;
}
@property(nonatomic, strong) ToolbarCoordinator* toolbarCoordinator;
@end
@implementation LegacyToolbarCoordinator
@synthesize toolbarCoordinator = _toolbarCoordinator;
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
toolsMenuConfigurationProvider:
(id<ToolsMenuConfigurationProvider>)configurationProvider
dispatcher:(CommandDispatcher*)dispatcher
browserState:
(ios::ChromeBrowserState*)browserState
webStateList:(WebStateList*)webStateList {
if (self = [super initWithBaseViewController:viewController
browserState:browserState]) {
DCHECK(browserState);
_toolbarCoordinator = [[ToolbarCoordinator alloc] init];
_toolbarCoordinator.webStateList = webStateList;
_toolbarCoordinator.dispatcher =
static_cast<id<ApplicationCommands, BrowserCommands, OmniboxFocuser>>(
dispatcher);
_toolbarCoordinator.browserState = browserState;
_toolsMenuCoordinator = [[ToolsMenuCoordinator alloc] init];
_toolsMenuCoordinator.dispatcher = dispatcher;
_toolsMenuCoordinator.configurationProvider = configurationProvider;
_toolsMenuCoordinator.presentationProvider = _toolbarCoordinator;
[_toolsMenuCoordinator start];
[dispatcher startDispatchingToTarget:self
forProtocol:@protocol(ToolbarCommands)];
NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self
selector:@selector(toolsMenuWillShowNotification:)
name:kToolsMenuWillShowNotification
object:_toolsMenuCoordinator];
[defaultCenter addObserver:self
selector:@selector(toolsMenuWillHideNotification:)
name:kToolsMenuWillHideNotification
object:_toolsMenuCoordinator];
}
return self;
}
- (void)start {
[self.toolbarCoordinator start];
}
- (void)stop {
[self.toolbarCoordinator setBackgroundToIncognitoNTPColorWithAlpha:0];
[self.toolbarCoordinator stop];
self.toolbarCoordinator = nil;
}
- (UIViewController*)viewController {
return self.toolbarCoordinator.viewController;
}
- (void)setURLLoader:(id<UrlLoader>)URLLoader {
self.toolbarCoordinator.URLLoader = URLLoader;
}
- (id<UrlLoader>)URLLoader {
return self.toolbarCoordinator.URLLoader;
}
- (void)setDelegate:(id<ToolbarCoordinatorDelegate>)delegate {
self.toolbarCoordinator.delegate = delegate;
}
- (id<ToolbarCoordinatorDelegate>)delegate {
return self.toolbarCoordinator.delegate;
}
#pragma mark - Delegates
- (id<VoiceSearchControllerDelegate>)voiceSearchDelegate {
return self.toolbarCoordinator.voiceSearchControllerDelegate;
}
- (id<ActivityServicePositioner>)activityServicePositioner {
return self.toolbarCoordinator.activityServicePositioner;
}
- (id<TabHistoryUIUpdater>)tabHistoryUIUpdater {
return self.toolbarCoordinator.buttonUpdater;
}
- (id<QRScannerResultLoading>)QRScannerResultLoader {
return self.toolbarCoordinator.QRScannerResultLoader;
}
- (id<OmniboxFocuser>)omniboxFocuser {
return self.toolbarCoordinator.omniboxFocuser;
}
#pragma mark - ToolbarCommands
- (void)triggerToolsMenuButtonAnimation {
[self.toolbarCoordinator triggerToolsMenuButtonAnimation];
}
#pragma mark - ToolbarCoordinating
- (void)updateToolsMenu {
[_toolsMenuCoordinator updateConfiguration];
}
#pragma mark - PrimaryToolbarCoordinator
- (void)showPrerenderingAnimation {
[self.toolbarCoordinator showPrerenderingAnimation];
}
- (BOOL)isOmniboxFirstResponder {
return [self.toolbarCoordinator isOmniboxFirstResponder];
}
- (BOOL)showingOmniboxPopup {
return [self.toolbarCoordinator showingOmniboxPopup];
}
- (void)transitionToLocationBarFocusedState:(BOOL)focused {
[self.toolbarCoordinator transitionToLocationBarFocusedState:focused];
}
#pragma mark - FakeboxFocuser
- (void)focusFakebox {
[self.toolbarCoordinator focusFakebox];
}
- (void)onFakeboxBlur {
[self.toolbarCoordinator onFakeboxBlur];
}
- (void)onFakeboxAnimationComplete {
[self.toolbarCoordinator onFakeboxAnimationComplete];
}
#pragma mark - SideSwipeToolbarInteracting
- (UIView*)toolbarView {
return self.viewController.view;
}
- (BOOL)canBeginToolbarSwipe {
return ![self isOmniboxFirstResponder] && ![self showingOmniboxPopup];
}
- (UIImage*)toolbarSideSwipeSnapshotForWebState:(web::WebState*)webState {
[self.toolbarCoordinator updateToolbarForSideSwipeSnapshot:webState];
UIImage* toolbarSnapshot = CaptureViewWithOption(
[self.viewController view], [[UIScreen mainScreen] scale],
kClientSideRendering);
[self.toolbarCoordinator resetToolbarAfterSideSwipeSnapshot];
return toolbarSnapshot;
}
#pragma mark - ToolbarSnapshotProviding
- (UIView*)snapshotForTabSwitcher {
UIView* toolbarSnapshotView;
if ([self.viewController.view window]) {
toolbarSnapshotView =
[self.viewController.view snapshotViewAfterScreenUpdates:NO];
} else {
toolbarSnapshotView =
[[UIView alloc] initWithFrame:self.viewController.view.frame];
[toolbarSnapshotView layer].contents = static_cast<id>(
CaptureViewWithOption(self.viewController.view, 0, kClientSideRendering)
.CGImage);
}
return toolbarSnapshotView;
}
- (UIView*)snapshotForStackViewWithWidth:(CGFloat)width
safeAreaInsets:(UIEdgeInsets)safeAreaInsets {
CGRect oldFrame = self.viewController.view.superview.frame;
CGRect newFrame = oldFrame;
newFrame.size.width = width;
self.viewController.view.superview.frame = newFrame;
[self.toolbarCoordinator activateFakeSafeAreaInsets:safeAreaInsets];
[self.viewController.view.superview layoutIfNeeded];
UIView* toolbarSnapshotView = [self snapshotForTabSwitcher];
self.viewController.view.superview.frame = oldFrame;
[self.toolbarCoordinator deactivateFakeSafeAreaInsets];
return toolbarSnapshotView;
}
- (UIColor*)toolbarBackgroundColor {
return [self.toolbarCoordinator toolbarBackgroundColor];
}
#pragma mark - NewTabPageControllerDelegate
- (void)setToolbarBackgroundAlpha:(CGFloat)alpha {
[self.toolbarCoordinator setBackgroundToIncognitoNTPColorWithAlpha:1 - alpha];
}
- (void)setScrollProgressForTabletOmnibox:(CGFloat)progress {
NOTREACHED();
}
#pragma mark - ToolsMenuPresentationStateProvider
- (BOOL)isShowingToolsMenu {
return [_toolsMenuCoordinator isShowingToolsMenu];
}
#pragma mark - Tools Menu
- (void)toolsMenuWillShowNotification:(NSNotification*)note {
[self.toolbarCoordinator setToolsMenuIsVisibleForToolsMenuButton:YES];
}
- (void)toolsMenuWillHideNotification:(NSNotification*)note {
[self.toolbarCoordinator setToolsMenuIsVisibleForToolsMenuButton:NO];
}
@end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment