Commit e92998ac authored by Javier Ernesto Flores Robles's avatar Javier Ernesto Flores Robles Committed by Chromium LUCI CQ

[iOS][Thumb Strip] Transform BVC Container directly

This CL applies the BVCContainer transforms directly to it instead of
BVC applying them to its superview. Previous approach had a race
condition where in some cases the BVC was already removed from it's
container leaving the BVCContainer in the previous state.

It also contains a few readability fixes in the involved methods.

Bug: 1164978
Change-Id: I6e6cce85dca0478a062f04f7ba93aba14a051d74
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2629968Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Reviewed-by: default avatarRobbie Gibson <rkgibson@google.com>
Commit-Queue: Javier Flores <javierrobles@chromium.org>
Cr-Commit-Position: refs/heads/master@{#844929}
parent 8fd79430
......@@ -2959,33 +2959,33 @@ NSString* const kBrowserViewControllerSnackbarCategory =
}
- (void)animateViewReveal:(ViewRevealState)nextViewRevealState {
CGFloat tabStripHeight = self.tabStripView.frame.size.height;
CGFloat hideHeight = tabStripHeight + self.headerOffset;
switch (nextViewRevealState) {
case ViewRevealState::Hidden:
self.view.superview.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformIdentity;
if (!base::FeatureList::IsEnabled(kModernTabStrip))
if (!base::FeatureList::IsEnabled(kModernTabStrip)) {
self.tabStripSnapshot.transform =
[self.tabStripView adjustTransformForRTL:CGAffineTransformIdentity];
}
break;
case ViewRevealState::Peeked:
self.view.superview.transform = CGAffineTransformMakeTranslation(
0, self.thumbStripPanHandler.peekedHeight);
self.view.transform = CGAffineTransformMakeTranslation(
0, -self.tabStripView.frame.size.height - self.headerOffset);
if (!base::FeatureList::IsEnabled(kModernTabStrip))
self.tabStripSnapshot.transform = [self.tabStripView
adjustTransformForRTL:CGAffineTransformMakeTranslation(
0, self.tabStripView.frame.size.height)];
self.view.transform = CGAffineTransformMakeTranslation(0, -hideHeight);
if (!base::FeatureList::IsEnabled(kModernTabStrip)) {
CGAffineTransform transform =
CGAffineTransformMakeTranslation(0, tabStripHeight);
self.tabStripSnapshot.transform =
[self.tabStripView adjustTransformForRTL:transform];
}
break;
case ViewRevealState::Revealed:
self.view.superview.transform = CGAffineTransformMakeTranslation(
0, self.thumbStripPanHandler.revealedHeight);
self.view.transform = CGAffineTransformMakeTranslation(
0, -self.tabStripView.frame.size.height - self.headerOffset);
if (!base::FeatureList::IsEnabled(kModernTabStrip))
self.tabStripSnapshot.transform = [self.tabStripView
adjustTransformForRTL:CGAffineTransformMakeTranslation(
0, self.tabStripView.frame.size.height)];
self.view.transform = CGAffineTransformMakeTranslation(0, -hideHeight);
if (!base::FeatureList::IsEnabled(kModernTabStrip)) {
CGAffineTransform transform =
CGAffineTransformMakeTranslation(0, tabStripHeight);
self.tabStripSnapshot.transform =
[self.tabStripView adjustTransformForRTL:transform];
}
break;
}
}
......
......@@ -205,6 +205,7 @@ source_set("main") {
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/coordinators:chrome_coordinators",
"//ios/chrome/browser/ui/download",
"//ios/chrome/browser/ui/gestures",
"//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_scene_agent",
"//ios/chrome/browser/ui/page_info:coordinator",
"//ios/chrome/browser/ui/print",
......@@ -213,6 +214,7 @@ source_set("main") {
"//ios/chrome/browser/ui/recent_tabs",
"//ios/chrome/browser/ui/settings/sync",
"//ios/chrome/browser/ui/snackbar",
"//ios/chrome/browser/ui/thumb_strip",
"//ios/chrome/browser/ui/thumb_strip:feature_flags",
"//ios/chrome/browser/ui/translate:legacy_translate",
"//ios/chrome/browser/ui/util:multiwindow_util",
......
......@@ -7,6 +7,9 @@
#import <UIKit/UIKit.h>
#import "ios/chrome/browser/ui/gestures/view_revealing_animatee.h"
#import "ios/chrome/browser/ui/thumb_strip/thumb_strip_attacher.h"
// A UIViewController instance designed to contain an instance of
// BrowserViewController ("BVC") as a child. Since the BVC itself often
// implements a great deal of custom logic around handling view controller
......@@ -16,7 +19,8 @@
// This class isn't coupled to any implementation details of the BVC; it could
// be used as a generic forwarding container if needed. In that case, its name
// should be changed.
@interface BVCContainerViewController : UIViewController
@interface BVCContainerViewController
: UIViewController <ThumbStripAttacher, ViewRevealingAnimatee>
// The BVC instance being contained. If this is set, the current BVC (if any)
// will be removed as a child view controller, and the new |currentBVC| will
......
......@@ -7,6 +7,7 @@
#include <ostream>
#include "base/check_op.h"
#import "ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.h"
#import "ios/chrome/browser/ui/thumb_strip/thumb_strip_feature.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
......@@ -15,6 +16,8 @@
@implementation BVCContainerViewController
@synthesize thumbStripPanHandler = _thumbStripPanHandler;
#pragma mark - public property implementation
- (UIViewController*)currentBVC {
......@@ -96,4 +99,30 @@
: [super shouldAutorotate];
}
#pragma mark - ViewRevealingAnimatee
- (void)willAnimateViewReveal:(ViewRevealState)currentViewRevealState {
// No-op.
}
- (void)animateViewReveal:(ViewRevealState)nextViewRevealState {
switch (nextViewRevealState) {
case ViewRevealState::Hidden:
self.view.transform = CGAffineTransformIdentity;
break;
case ViewRevealState::Peeked:
self.view.transform = CGAffineTransformMakeTranslation(
0, self.thumbStripPanHandler.peekedHeight);
break;
case ViewRevealState::Revealed:
self.view.transform = CGAffineTransformMakeTranslation(
0, self.thumbStripPanHandler.revealedHeight);
break;
}
}
- (void)didAnimateViewReveal:(ViewRevealState)viewRevealState {
// No-op.
}
@end
......@@ -279,6 +279,12 @@
self.bvcContainer = [[BVCContainerViewController alloc] init];
self.bvcContainer.currentBVC = viewController;
if (IsThumbStripEnabled()) {
self.bvcContainer.thumbStripPanHandler =
self.thumbStripCoordinator.panHandler;
[self.thumbStripCoordinator.panHandler addAnimatee:self.bvcContainer];
}
BOOL animated = !self.animationsDisabledForTesting;
// Never animate the first time.
if (self.firstPresentation)
......
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