Chromium Code Reviews| 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 3eb51c61eca69a187f4aed516de3ddd5dea89ae4..7dd27ef31e01929f573355fa5d96ff80b22d4021 100644 |
| --- a/ios/chrome/browser/ui/toolbar/toolbar_controller.mm |
| +++ b/ios/chrome/browser/ui/toolbar/toolbar_controller.mm |
| @@ -76,6 +76,10 @@ NSString* const kToolbarShareButtonIdentifier = |
| // Makes a two-element C array of CGRects as described above, one for each |
| // device idiom. |
| #define FRAME_PAIR(H) { IPHONE_FRAME(H), IPAD_FRAME(H) } |
| + |
| +#if !defined(__has_feature) || !__has_feature(objc_arc) |
|
sdefresne
2017/04/28 08:02:50
This should move just below the "#include/#import"
|
| +#error "This file requires ARC support." |
| +#endif |
| // clang-format on |
| const CGRect kToolbarFrame[INTERFACE_IDIOM_COUNT] = FRAME_PAIR(56); |
| @@ -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(); |