Commit e27f70d0 authored by Nazerke's avatar Nazerke Committed by Commit Bot

[ios] Add a coordinator for the TabStrip.

This CL adds a coordinator for the tabstip and adds it to BVC.

Bug: 1130395,1128249.
Change-Id: Ica2770c78e8ebac7656a98857897c20bde5717d7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2418410
Commit-Queue: Nazerke Kalidolda <nazerke@google.com>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#809200}
parent 7ca398ca
......@@ -136,6 +136,7 @@ source_set("browser_view") {
"//ios/chrome/browser/ui/sharing",
"//ios/chrome/browser/ui/side_swipe",
"//ios/chrome/browser/ui/snackbar",
"//ios/chrome/browser/ui/tab_strip",
"//ios/chrome/browser/ui/tabs",
"//ios/chrome/browser/ui/tabs:coordinator",
"//ios/chrome/browser/ui/tabs/requirements",
......
......@@ -113,6 +113,7 @@
#import "ios/chrome/browser/ui/settings/sync/utils/sync_util.h"
#import "ios/chrome/browser/ui/side_swipe/side_swipe_controller.h"
#import "ios/chrome/browser/ui/side_swipe/swipe_view.h"
#import "ios/chrome/browser/ui/tab_strip/tab_strip_coordinator.h"
#import "ios/chrome/browser/ui/tabs/background_tab_animation_view.h"
#import "ios/chrome/browser/ui/tabs/foreground_tab_animation_view.h"
#import "ios/chrome/browser/ui/tabs/requirements/tab_strip_presentation.h"
......@@ -133,6 +134,7 @@
#import "ios/chrome/browser/ui/toolbar/toolbar_coordinator_adaptor.h"
#import "ios/chrome/browser/ui/toolbar_container/toolbar_container_coordinator.h"
#import "ios/chrome/browser/ui/toolbar_container/toolbar_container_features.h"
#import "ios/chrome/browser/ui/ui_feature_flags.h"
#import "ios/chrome/browser/ui/util/keyboard_observer_helper.h"
#import "ios/chrome/browser/ui/util/multi_window_support.h"
#import "ios/chrome/browser/ui/util/named_guide.h"
......@@ -505,7 +507,10 @@ NSString* const kBrowserViewControllerSnackbarCategory =
@property(nonatomic, strong, nullable)
ProceduralBlock foregroundTabWasAddedCompletionBlock;
// Coordinator for tablet tab strip.
@property(nonatomic, strong) TabStripLegacyCoordinator* tabStripCoordinator;
@property(nonatomic, strong)
TabStripLegacyCoordinator* legacyTabStripCoordinator;
// Coordinator for the new tablet tab strip.
@property(nonatomic, strong) TabStripCoordinator* tabStripCoordinator;
// Coordinator for Infobars.
@property(nonatomic, strong)
InfobarContainerCoordinator* infobarContainerCoordinator;
......@@ -841,7 +846,9 @@ NSString* const kBrowserViewControllerSnackbarCategory =
_sideSwipeController.secondaryToolbarSnapshotProvider =
self.secondaryToolbarCoordinator;
[_sideSwipeController setSwipeDelegate:self];
[_sideSwipeController setTabStripDelegate:self.tabStripCoordinator];
if (!base::FeatureList::IsEnabled(kModernTabStrip)) {
[_sideSwipeController setTabStripDelegate:self.legacyTabStripCoordinator];
}
}
return _sideSwipeController;
}
......@@ -1312,9 +1319,14 @@ NSString* const kBrowserViewControllerSnackbarCategory =
// Disconnect child coordinators.
[self.popupMenuCoordinator stop];
[self.tabStripCoordinator stop];
self.tabStripCoordinator = nil;
self.tabStripView = nil;
if (base::FeatureList::IsEnabled(kModernTabStrip)) {
[self.tabStripCoordinator stop];
self.tabStripCoordinator = nil;
} else {
[self.legacyTabStripCoordinator stop];
self.legacyTabStripCoordinator = nil;
self.tabStripView = nil;
}
[self.commandDispatcher stopDispatchingToTarget:self.bubblePresenter];
self.bubblePresenter = nil;
......@@ -1556,9 +1568,14 @@ NSString* const kBrowserViewControllerSnackbarCategory =
_locationBarModelDelegate = nil;
_locationBarModel = nil;
self.helper = nil;
[self.tabStripCoordinator stop];
self.tabStripCoordinator = nil;
self.tabStripView = nil;
if (base::FeatureList::IsEnabled(kModernTabStrip)) {
[self.tabStripCoordinator stop];
self.tabStripCoordinator = nil;
} else {
[self.legacyTabStripCoordinator stop];
self.legacyTabStripCoordinator = nil;
self.tabStripView = nil;
}
_sideSwipeController = nil;
}
}
......@@ -1609,18 +1626,20 @@ NSString* const kBrowserViewControllerSnackbarCategory =
[self updateToolbar];
// Update the tab strip visibility.
if (self.tabStripView) {
[self showTabStripView:self.tabStripView];
[self.tabStripView layoutSubviews];
[self.tabStripCoordinator hideTabStrip:![self canShowTabStrip]];
_fakeStatusBarView.hidden = ![self canShowTabStrip];
[self addConstraintsToPrimaryToolbar];
// If tabstrip is coming back due to a window resize or screen rotation,
// reset the full screen controller to adjust the tabstrip position.
if (ShouldShowCompactToolbar(previousTraitCollection) &&
!ShouldShowCompactToolbar()) {
[self
updateForFullscreenProgress:self.fullscreenController->GetProgress()];
if (!base::FeatureList::IsEnabled(kModernTabStrip)) {
if (self.tabStripView) {
[self showTabStripView:self.tabStripView];
[self.tabStripView layoutSubviews];
[self.legacyTabStripCoordinator hideTabStrip:![self canShowTabStrip]];
_fakeStatusBarView.hidden = ![self canShowTabStrip];
[self addConstraintsToPrimaryToolbar];
// If tabstrip is coming back due to a window resize or screen rotation,
// reset the full screen controller to adjust the tabstrip position.
if (ShouldShowCompactToolbar(previousTraitCollection) &&
!ShouldShowCompactToolbar()) {
[self updateForFullscreenProgress:self.fullscreenController
->GetProgress()];
}
}
}
......@@ -1647,8 +1666,10 @@ NSString* const kBrowserViewControllerSnackbarCategory =
completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
BrowserViewController* strongSelf = weakSelf;
strongSelf.fullscreenController->ResizeViewport();
if (strongSelf.tabStripView) {
[strongSelf.tabStripCoordinator tabStripSizeDidChange];
if (!base::FeatureList::IsEnabled(kModernTabStrip)) {
if (strongSelf.tabStripView) {
[strongSelf.legacyTabStripCoordinator tabStripSizeDidChange];
}
}
}];
......@@ -1934,18 +1955,25 @@ NSString* const kBrowserViewControllerSnackbarCategory =
static_cast<id<LoadQueryCommands>>(self.commandDispatcher));
if (IsIPadIdiom()) {
self.tabStripCoordinator = [[TabStripLegacyCoordinator alloc]
initWithBaseViewController:self
browser:self.browser];
self.tabStripCoordinator.presentationProvider = self;
self.tabStripCoordinator.animationWaitDuration =
kLegacyFullscreenControllerToolbarAnimationDuration;
self.tabStripCoordinator.longPressDelegate = self.popupMenuCoordinator;
UILayoutGuide* guide =
[[NamedGuide alloc] initWithName:kTabStripTabSwitcherGuide];
[self.view addLayoutGuide:guide];
[self.tabStripCoordinator start];
if (base::FeatureList::IsEnabled(kModernTabStrip)) {
self.tabStripCoordinator =
[[TabStripCoordinator alloc] initWithBrowser:self.browser];
[self.tabStripCoordinator start];
} else {
self.legacyTabStripCoordinator = [[TabStripLegacyCoordinator alloc]
initWithBaseViewController:self
browser:self.browser];
self.legacyTabStripCoordinator.presentationProvider = self;
self.legacyTabStripCoordinator.animationWaitDuration =
kLegacyFullscreenControllerToolbarAnimationDuration;
self.legacyTabStripCoordinator.longPressDelegate =
self.popupMenuCoordinator;
UILayoutGuide* guide =
[[NamedGuide alloc] initWithName:kTabStripTabSwitcherGuide];
[self.view addLayoutGuide:guide];
[self.legacyTabStripCoordinator start];
}
}
if (!base::FeatureList::IsEnabled(kInfobarOverlayUI)) {
......@@ -2154,7 +2182,10 @@ NSString* const kBrowserViewControllerSnackbarCategory =
self.primaryToolbarCoordinator.longPressDelegate = self.popupMenuCoordinator;
self.secondaryToolbarCoordinator.longPressDelegate =
self.popupMenuCoordinator;
self.tabStripCoordinator.longPressDelegate = self.popupMenuCoordinator;
if (!base::FeatureList::IsEnabled(kModernTabStrip)) {
self.legacyTabStripCoordinator.longPressDelegate =
self.popupMenuCoordinator;
}
self.omniboxHandler =
HandlerForProtocol(self.browser->GetCommandDispatcher(), OmniboxCommands);
......@@ -2732,7 +2763,10 @@ NSString* const kBrowserViewControllerSnackbarCategory =
[self.thumbStripPanHandler addAnimatee:self];
self.primaryToolbarCoordinator.panGestureHandler = self.thumbStripPanHandler;
self.tabStripCoordinator.panGestureHandler = self.thumbStripPanHandler;
if (!base::FeatureList::IsEnabled(kModernTabStrip)) {
self.legacyTabStripCoordinator.panGestureHandler =
self.thumbStripPanHandler;
}
}
#pragma mark - ** Protocol Implementations and Helpers **
......
# Copyright 2020 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.
source_set("tab_strip") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"tab_strip_coordinator.h",
"tab_strip_coordinator.mm",
]
deps = [
"//base",
"//ios/chrome/browser/ui/coordinators:chrome_coordinators",
]
frameworks = [ "UIKit.framework" ]
}
// Copyright 2020 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_TAB_STRIP_TAB_STRIP_COORDINATOR_H_
#define IOS_CHROME_BROWSER_UI_TAB_STRIP_TAB_STRIP_COORDINATOR_H_
#import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h"
class Browser;
// Coordinator for the tab strip.
@interface TabStripCoordinator : ChromeCoordinator
// Initializes this Coordinator with its |browser| and a nil base view
// controller.
- (instancetype)initWithBrowser:(Browser*)browser NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithBaseViewController:(UIViewController*)viewController
browser:(Browser*)browser NS_UNAVAILABLE;
@end
#endif // IOS_CHROME_BROWSER_UI_TAB_STRIP_TAB_STRIP_COORDINATOR_H_
// Copyright 2020 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/tab_strip/tab_strip_coordinator.h"
#include "base/check_op.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface TabStripCoordinator ()
@end
@implementation TabStripCoordinator
#pragma mark - ChromeCoordinator
- (instancetype)initWithBrowser:(Browser*)browser {
DCHECK(browser);
return [super initWithBaseViewController:nil browser:browser];
}
@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