| Index: ios/chrome/browser/ui/toolbar/toolbar_controller.mm
|
| diff --git a/ios/chrome/browser/ui/toolbar/toolbar_controller.mm b/ios/chrome/browser/ui/toolbar/toolbar_controller.mm
|
| index 0e8d5ac6efd7b72d8248d0f9c9e216de68baf7da..b21d58076d5e1eabba4fc969aff08dcd9f50eef9 100644
|
| --- a/ios/chrome/browser/ui/toolbar/toolbar_controller.mm
|
| +++ b/ios/chrome/browser/ui/toolbar/toolbar_controller.mm
|
| @@ -35,6 +35,10 @@
|
| #import "ios/shared/chrome/browser/ui/tools_menu/tools_menu_configuration.h"
|
| #import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoFontLoader.h"
|
|
|
| +#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| +#error "This file requires ARC support."
|
| +#endif
|
| +
|
| using base::UserMetricsAction;
|
| using ios::material::TimingFunction;
|
|
|
| @@ -200,26 +204,21 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| @end
|
|
|
| @interface ToolbarController () {
|
| - // The top-level toolbar view.
|
| - base::scoped_nsobject<ToolbarView> view_;
|
| - // The view for the toolbar background image.
|
| - base::scoped_nsobject<UIImageView> backgroundView_;
|
| - base::scoped_nsobject<UIImageView> shadowView_;
|
| - base::scoped_nsobject<UIImageView> fullBleedShadowView_;
|
| + // The shadow view. Only used on iPhone.
|
| + UIImageView* fullBleedShadowView_;
|
|
|
| // The backing object for |self.transitionLayers|.
|
| - base::scoped_nsobject<NSMutableArray> transitionLayers_;
|
| -
|
| - base::scoped_nsobject<ToolbarToolsMenuButton> toolsMenuButton_;
|
| - base::scoped_nsobject<UIButton> stackButton_;
|
| - base::scoped_nsobject<UIButton> shareButton_;
|
| - base::scoped_nsobject<NSArray> standardButtons_;
|
| - base::scoped_nsobject<ToolsMenuButtonObserverBridge>
|
| - toolsMenuButtonObserverBridge_;
|
| + NSMutableArray* transitionLayers_;
|
| +
|
| + ToolbarToolsMenuButton* toolsMenuButton_;
|
| + UIButton* stackButton_;
|
| + UIButton* shareButton_;
|
| + NSArray* standardButtons_;
|
| + ToolsMenuButtonObserverBridge* toolsMenuButtonObserverBridge_;
|
| ToolbarControllerStyle style_;
|
|
|
| // The following is nil if not visible.
|
| - base::scoped_nsobject<ToolsPopupController> toolsPopupController_;
|
| + ToolsPopupController* toolsPopupController_;
|
| }
|
|
|
| // Returns the background image that should be used for |style|.
|
| @@ -245,15 +244,18 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| @implementation ToolbarController
|
|
|
| @synthesize readingListModel = readingListModel_;
|
| -
|
| +@synthesize view = view_;
|
| +@synthesize backgroundView = backgroundView_;
|
| +@synthesize shadowView = shadowView_;
|
| +@synthesize toolsPopupController = toolsPopupController_;
|
| @synthesize style = style_;
|
|
|
| - (void)setReadingListModel:(ReadingListModel*)readingListModel {
|
| readingListModel_ = readingListModel;
|
| if (readingListModel_) {
|
| - toolsMenuButtonObserverBridge_.reset([[ToolsMenuButtonObserverBridge alloc]
|
| - initWithModel:readingListModel_
|
| - toolbarButton:toolsMenuButton_]);
|
| + toolsMenuButtonObserverBridge_ =
|
| + [[ToolsMenuButtonObserverBridge alloc] initWithModel:readingListModel_
|
| + toolbarButton:toolsMenuButton_];
|
| }
|
| }
|
|
|
| @@ -278,11 +280,11 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| toolsMenuButtonFrame.origin.y += statusBarOffset;
|
| }
|
|
|
| - view_.reset([[ToolbarView alloc] initWithFrame:viewFrame]);
|
| - backgroundView_.reset([[UIImageView alloc] initWithFrame:backgroundFrame]);
|
| - toolsMenuButton_.reset([[ToolbarToolsMenuButton alloc]
|
| - initWithFrame:toolsMenuButtonFrame
|
| - style:style_]);
|
| + view_ = [[ToolbarView alloc] initWithFrame:viewFrame];
|
| + backgroundView_ = [[UIImageView alloc] initWithFrame:backgroundFrame];
|
| + toolsMenuButton_ =
|
| + [[ToolbarToolsMenuButton alloc] initWithFrame:toolsMenuButtonFrame
|
| + style:style_];
|
| [toolsMenuButton_ setTag:IDC_SHOW_TOOLS_MENU];
|
| [toolsMenuButton_
|
| setAutoresizingMask:UIViewAutoresizingFlexibleLeadingMargin() |
|
| @@ -296,7 +298,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
|
|
| if (idiom == IPAD_IDIOM) {
|
| CGRect shareButtonFrame = LayoutRectGetRect(kShareMenuButtonFrame);
|
| - shareButton_.reset([[UIButton alloc] initWithFrame:shareButtonFrame]);
|
| + shareButton_ = [[UIButton alloc] initWithFrame:shareButtonFrame];
|
| [shareButton_ setTag:IDC_SHARE_PAGE];
|
| [shareButton_
|
| setAutoresizingMask:UIViewAutoresizingFlexibleLeadingMargin() |
|
| @@ -313,7 +315,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
|
|
| CGRect shadowFrame = kShadowViewFrame[idiom];
|
| shadowFrame.origin.y = CGRectGetMaxY(backgroundFrame);
|
| - shadowView_.reset([[UIImageView alloc] initWithFrame:shadowFrame]);
|
| + shadowView_ = [[UIImageView alloc] initWithFrame:shadowFrame];
|
| [shadowView_ setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
|
| [shadowView_ setUserInteractionEnabled:NO];
|
| [view_ addSubview:shadowView_];
|
| @@ -323,8 +325,8 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| // iPad omnibox does not expand to full bleed.
|
| CGRect fullBleedShadowFrame = kFullBleedShadowViewFrame;
|
| fullBleedShadowFrame.origin.y = shadowFrame.origin.y;
|
| - fullBleedShadowView_.reset(
|
| - [[UIImageView alloc] initWithFrame:fullBleedShadowFrame]);
|
| + fullBleedShadowView_ =
|
| + [[UIImageView alloc] initWithFrame:fullBleedShadowFrame];
|
| [fullBleedShadowView_
|
| setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
|
| [fullBleedShadowView_ setUserInteractionEnabled:NO];
|
| @@ -334,8 +336,8 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| setImage:NativeImage(IDR_IOS_TOOLBAR_SHADOW_FULL_BLEED)];
|
| }
|
|
|
| - transitionLayers_.reset(
|
| - [[NSMutableArray alloc] initWithCapacity:kTransitionLayerCapacity]);
|
| + transitionLayers_ =
|
| + [[NSMutableArray alloc] initWithCapacity:kTransitionLayerCapacity];
|
|
|
| // UIImageViews do not default to userInteractionEnabled:YES.
|
| [view_ setUserInteractionEnabled:YES];
|
| @@ -346,8 +348,8 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| setImage:StretchableImageFromUIImage(tile, 0.0, 3.0)];
|
|
|
| if (idiom == IPHONE_IDIOM) {
|
| - stackButton_.reset(
|
| - [[ToolbarCenteredButton alloc] initWithFrame:stackButtonFrame]);
|
| + stackButton_ =
|
| + [[ToolbarCenteredButton alloc] initWithFrame:stackButtonFrame];
|
| [stackButton_ setTag:IDC_TOGGLE_TAB_SWITCHER];
|
| [[stackButton_ titleLabel]
|
| setFont:[self fontForSize:kFontSizeFewerThanTenTabs]];
|
| @@ -407,27 +409,14 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| - (void)dealloc {
|
| [[NSNotificationCenter defaultCenter] removeObserver:self];
|
| [toolsPopupController_ setDelegate:nil];
|
| - [super dealloc];
|
| -}
|
| -
|
| -- (UIImageView*)view {
|
| - return view_.get();
|
| -}
|
| -
|
| -- (UIImageView*)backgroundView {
|
| - return backgroundView_.get();
|
| }
|
|
|
| - (CGFloat)statusBarOffset {
|
| return StatusBarHeight();
|
| }
|
|
|
| -- (UIImageView*)shadowView {
|
| - return shadowView_.get();
|
| -}
|
| -
|
| - (NSMutableArray*)transitionLayers {
|
| - return transitionLayers_.get();
|
| + return transitionLayers_;
|
| }
|
|
|
| - (BOOL)imageShouldFlipForRightToLeftLayoutDirection:(int)imageEnum {
|
| @@ -444,22 +433,18 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| [standardButtons addObject:stackButton_];
|
| if (shareButtonShouldBeVisible)
|
| [standardButtons addObject:shareButton_];
|
| - standardButtons_.reset([standardButtons retain]);
|
| + standardButtons_ = standardButtons;
|
| }
|
|
|
| - (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection {
|
| [self updateStandardButtons];
|
| }
|
|
|
| -- (ToolsPopupController*)toolsPopupController {
|
| - return toolsPopupController_.get();
|
| -}
|
| -
|
| - (void)applicationDidEnterBackground:(NSNotification*)notify {
|
| - if (toolsPopupController_.get()) {
|
| + if (toolsPopupController_) {
|
| // Dismiss the tools popup menu without animation.
|
| [toolsMenuButton_ setToolsMenuIsVisible:NO];
|
| - toolsPopupController_.reset(nil);
|
| + toolsPopupController_ = nil;
|
| [[NSNotificationCenter defaultCenter]
|
| postNotificationName:kMenuWillHideNotification
|
| object:nil];
|
| @@ -490,7 +475,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| }
|
|
|
| - (int)imageEnumForButton:(UIButton*)button {
|
| - if (button == stackButton_.get())
|
| + if (button == stackButton_)
|
| return ToolbarButtonNameStack;
|
| return NumberOfToolbarButtonNames;
|
| }
|
| @@ -563,7 +548,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| }
|
|
|
| - (void)registerEventsForButton:(UIButton*)button {
|
| - if (button != toolsMenuButton_.get()) {
|
| + if (button != toolsMenuButton_) {
|
| // |target| must be |self| (as opposed to |nil|) because |self| isn't in the
|
| // responder chain.
|
| [button addTarget:self
|
| @@ -585,7 +570,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| }
|
|
|
| - (UIView*)shareButtonView {
|
| - return shareButton_.get();
|
| + return shareButton_;
|
| }
|
|
|
| - (void)showToolsMenuPopupWithConfiguration:
|
| @@ -602,8 +587,8 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| [toolsMenuButton_ setToolsMenuIsVisible:YES];
|
|
|
| [configuration setToolsMenuButton:toolsMenuButton_];
|
| - toolsPopupController_.reset(
|
| - [[ToolsPopupController alloc] initWithConfiguration:configuration]);
|
| + toolsPopupController_ =
|
| + [[ToolsPopupController alloc] initWithConfiguration:configuration];
|
|
|
| [toolsPopupController_ setDelegate:self];
|
|
|
| @@ -613,9 +598,9 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| }
|
|
|
| - (void)dismissToolsMenuPopup {
|
| - if (!toolsPopupController_.get())
|
| + if (!toolsPopupController_)
|
| return;
|
| - ToolsPopupController* tempTPC = toolsPopupController_.get();
|
| + ToolsPopupController* tempTPC = toolsPopupController_;
|
| [tempTPC containerView].userInteractionEnabled = NO;
|
| [tempTPC dismissAnimatedWithCompletion:^{
|
| // Unpress the tools menu button by restoring the normal and
|
| @@ -626,7 +611,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| }];
|
| // reset tabHistoryPopupController_ to prevent -applicationDidEnterBackground
|
| // from posting another kMenuWillHideNotification.
|
| - toolsPopupController_.reset();
|
| + toolsPopupController_ = nil;
|
|
|
| [[NSNotificationCenter defaultCenter]
|
| postNotificationName:kMenuWillHideNotification
|
| @@ -685,7 +670,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| fadeButtons.fromValue = @1;
|
| fadeButtons.toValue = @0;
|
|
|
| - for (UIButton* button in standardButtons_.get()) {
|
| + for (UIButton* button in standardButtons_) {
|
| if (![button isHidden]) {
|
| [button layer].opacity = 0;
|
| [[button layer] addAnimation:fadeButtons forKey:@"fade"];
|
| @@ -699,7 +684,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| [CATransaction
|
| setAnimationTimingFunction:TimingFunction(ios::material::CurveEaseIn)];
|
|
|
| - for (UIButton* button in standardButtons_.get()) {
|
| + for (UIButton* button in standardButtons_) {
|
| CABasicAnimation* shiftButton =
|
| [CABasicAnimation animationWithKeyPath:@"position"];
|
| CGPoint startPosition = [button layer].position;
|
| @@ -721,7 +706,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| }
|
|
|
| - (void)fadeInStandardControls {
|
| - for (UIButton* button in standardButtons_.get()) {
|
| + for (UIButton* button in standardButtons_) {
|
| [self fadeInView:button
|
| fromLeadingOffset:10
|
| withDuration:ios::material::kDuration2
|
| @@ -739,7 +724,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| - (void)animationDidStart:(CAAnimation*)anim {
|
| // Once the buttons start fading in, set their opacity to 1 so there's no
|
| // flicker at the end of the animation.
|
| - for (UIButton* button in standardButtons_.get()) {
|
| + for (UIButton* button in standardButtons_) {
|
| if (anim == [[button layer] animationForKey:@"fadeIn"]) {
|
| [button layer].opacity = 1;
|
| return;
|
| @@ -933,18 +918,18 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
|
|
| - (void)setStandardControlsVisible:(BOOL)visible {
|
| if (visible) {
|
| - for (UIButton* button in standardButtons_.get()) {
|
| + for (UIButton* button in standardButtons_) {
|
| [button setAlpha:1.0];
|
| }
|
| } else {
|
| - for (UIButton* button in standardButtons_.get()) {
|
| + for (UIButton* button in standardButtons_) {
|
| [button setAlpha:0.0];
|
| }
|
| }
|
| }
|
|
|
| - (void)setStandardControlsAlpha:(CGFloat)alpha {
|
| - for (UIButton* button in standardButtons_.get()) {
|
| + for (UIButton* button in standardButtons_) {
|
| if (![button isHidden])
|
| [button setAlpha:alpha];
|
| }
|
| @@ -956,7 +941,7 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| }
|
|
|
| - (void)setStandardControlsTransform:(CGAffineTransform)transform {
|
| - for (UIButton* button in standardButtons_.get()) {
|
| + for (UIButton* button in standardButtons_) {
|
| [button setTransform:transform];
|
| }
|
| }
|
| @@ -1014,11 +999,11 @@ const LayoutOffset kButtonFadeOutXOffset = 10;
|
| }
|
|
|
| - (IBAction)recordUserMetrics:(id)sender {
|
| - if (sender == toolsMenuButton_.get())
|
| + if (sender == toolsMenuButton_)
|
| base::RecordAction(UserMetricsAction("MobileToolbarShowMenu"));
|
| - else if (sender == stackButton_.get())
|
| + else if (sender == stackButton_)
|
| base::RecordAction(UserMetricsAction("MobileToolbarShowStackView"));
|
| - else if (sender == shareButton_.get())
|
| + else if (sender == shareButton_)
|
| base::RecordAction(UserMetricsAction("MobileToolbarShareMenu"));
|
| else
|
| NOTREACHED();
|
|
|