Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.mm

Issue 2933123002: [ObjC ARC] Converts ios/chrome/browser/ui/overscroll_actions:overscroll_actions to ARC. (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller. h" 5 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller. h"
6 6
7 #import <QuartzCore/QuartzCore.h> 7 #import <QuartzCore/QuartzCore.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/mac/objc_property_releaser.h"
12 #include "base/mac/scoped_nsobject.h"
13 #include "base/metrics/histogram_macros.h" 11 #include "base/metrics/histogram_macros.h"
14 #import "ios/chrome/browser/ui/browser_view_controller.h" 12 #import "ios/chrome/browser/ui/browser_view_controller.h"
15 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_rec ognizer.h" 13 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_gesture_rec ognizer.h"
16 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.h" 14 #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_view.h"
17 #include "ios/chrome/browser/ui/rtl_geometry.h" 15 #include "ios/chrome/browser/ui/rtl_geometry.h"
18 #import "ios/chrome/browser/ui/toolbar/toolbar_controller.h" 16 #import "ios/chrome/browser/ui/toolbar/toolbar_controller.h"
19 #import "ios/chrome/browser/ui/toolbar/web_toolbar_controller.h" 17 #import "ios/chrome/browser/ui/toolbar/web_toolbar_controller.h"
20 #include "ios/chrome/browser/ui/uikit_ui_util.h" 18 #include "ios/chrome/browser/ui/uikit_ui_util.h"
21 #import "ios/chrome/browser/ui/voice/voice_search_notification_names.h" 19 #import "ios/chrome/browser/ui/voice/voice_search_notification_names.h"
22 #import "ios/web/public/web_state/ui/crw_web_view_proxy.h" 20 #import "ios/web/public/web_state/ui/crw_web_view_proxy.h"
23 21
22 #if !defined(__has_feature) || !__has_feature(objc_arc)
23 #error "This file requires ARC support."
24 #endif
25
24 namespace { 26 namespace {
25 // This enum is used to record the overscroll actions performed by the user on 27 // This enum is used to record the overscroll actions performed by the user on
26 // the histogram named |OverscrollActions|. 28 // the histogram named |OverscrollActions|.
27 enum { 29 enum {
28 // Records each time the user selects the new tab action. 30 // Records each time the user selects the new tab action.
29 OVERSCROLL_ACTION_NEW_TAB, 31 OVERSCROLL_ACTION_NEW_TAB,
30 // Records each time the user selects the refresh action. 32 // Records each time the user selects the refresh action.
31 OVERSCROLL_ACTION_REFRESH, 33 OVERSCROLL_ACTION_REFRESH,
32 // Records each time the user selects the close tab action. 34 // Records each time the user selects the close tab action.
33 OVERSCROLL_ACTION_CLOSE_TAB, 35 OVERSCROLL_ACTION_CLOSE_TAB,
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 BOOL _allowPullingActions; 145 BOOL _allowPullingActions;
144 // Records if a transition to the overscroll state ACTION_READY was made. 146 // Records if a transition to the overscroll state ACTION_READY was made.
145 // This is used to record a cancel gesture. 147 // This is used to record a cancel gesture.
146 BOOL _didTransitionToActionReady; 148 BOOL _didTransitionToActionReady;
147 // Records that the controller will be dismissed at the end of the current 149 // Records that the controller will be dismissed at the end of the current
148 // animation. No new action should be started. 150 // animation. No new action should be started.
149 BOOL _shouldInvalidate; 151 BOOL _shouldInvalidate;
150 // Store the set of notifications that did increment the overscroll actions 152 // Store the set of notifications that did increment the overscroll actions
151 // lock. It is used in order to enforce the fact that the lock should only be 153 // lock. It is used in order to enforce the fact that the lock should only be
152 // incremented/decremented once for a given notification. 154 // incremented/decremented once for a given notification.
153 base::scoped_nsobject<NSMutableSet> _lockIncrementNotifications; 155 NSMutableSet* _lockIncrementNotifications;
154 // Store the notification name counterpart of another notification name. 156 // Store the notification name counterpart of another notification name.
155 // Overscroll actions locking and unlocking works by listening to balanced 157 // Overscroll actions locking and unlocking works by listening to balanced
156 // notifications. One notification lock and it's counterpart unlock. This 158 // notifications. One notification lock and it's counterpart unlock. This
157 // dictionary is used to retrieve the notification name from it's notification 159 // dictionary is used to retrieve the notification name from it's notification
158 // counterpart name. Exemple: 160 // counterpart name. Exemple:
159 // UIKeyboardWillShowNotification trigger a lock. Its counterpart notification 161 // UIKeyboardWillShowNotification trigger a lock. Its counterpart notification
160 // name is UIKeyboardWillHideNotification. 162 // name is UIKeyboardWillHideNotification.
161 base::scoped_nsobject<NSDictionary> _lockNotificationsCounterparts; 163 NSDictionary* _lockNotificationsCounterparts;
162 // A view used to catch touches on the webview. 164 // A view used to catch touches on the webview.
163 base::scoped_nsobject<UIView> _dummyView; 165 UIView* _dummyView;
164 // The proxy used to interact with the webview. 166 // The proxy used to interact with the webview.
165 base::scoped_nsprotocol<id<CRWWebViewProxy>> _webViewProxy; 167 id<CRWWebViewProxy> _webViewProxy;
166 // The proxy used to interact with the webview's scrollview. 168 // The proxy used to interact with the webview's scrollview.
167 base::scoped_nsobject<CRWWebViewScrollViewProxy> _webViewScrollViewProxy; 169 CRWWebViewScrollViewProxy* _webViewScrollViewProxy;
168 // The scrollview driving the OverscrollActionsController when not using 170 // The scrollview driving the OverscrollActionsController when not using
169 // the scrollview from the CRWWebControllerObserver. 171 // the scrollview from the CRWWebControllerObserver.
170 base::scoped_nsobject<UIScrollView> _scrollview; 172 UIScrollView* _scrollview;
171 base::mac::ObjCPropertyReleaser _propertyReleaser_OverscrollActionsController;
172 } 173 }
173 174
174 // The view displayed over the header view holding the actions. 175 // The view displayed over the header view holding the actions.
175 @property(nonatomic, retain) OverscrollActionsView* overscrollActionView; 176 @property(nonatomic, strong) OverscrollActionsView* overscrollActionView;
176 // Initial top inset added to the scrollview for the header. 177 // Initial top inset added to the scrollview for the header.
177 // This property is set from the delegate headerInset and cached on first 178 // This property is set from the delegate headerInset and cached on first
178 // call. The cached value is reset when the webview proxy is set. 179 // call. The cached value is reset when the webview proxy is set.
179 @property(nonatomic, readonly) CGFloat initialContentInset; 180 @property(nonatomic, readonly) CGFloat initialContentInset;
180 // Initial top inset for the header. 181 // Initial top inset for the header.
181 // This property is set from the delegate headerInset and cached on first 182 // This property is set from the delegate headerInset and cached on first
182 // call. The cached value is reset when the webview proxy is set. 183 // call. The cached value is reset when the webview proxy is set.
183 @property(nonatomic, readonly) CGFloat initialHeaderInset; 184 @property(nonatomic, readonly) CGFloat initialHeaderInset;
184 // Initial height of the header view. 185 // Initial height of the header view.
185 // This property is set from the delegate headerHeight and cached on first 186 // This property is set from the delegate headerHeight and cached on first
186 // call. The cached value is reset when the webview proxy is set. 187 // call. The cached value is reset when the webview proxy is set.
187 @property(nonatomic, readonly) CGFloat initialHeaderHeight; 188 @property(nonatomic, readonly) CGFloat initialHeaderHeight;
188 // Redefined to be read-write. 189 // Redefined to be read-write.
189 @property(nonatomic, assign, readwrite) OverscrollState overscrollState; 190 @property(nonatomic, assign, readwrite) OverscrollState overscrollState;
190 // Point where the horizontal gesture started when the state of the 191 // Point where the horizontal gesture started when the state of the
191 // overscroll controller is in OverscrollStateActionReady. 192 // overscroll controller is in OverscrollStateActionReady.
192 @property(nonatomic, assign) CGPoint panPointScreenOrigin; 193 @property(nonatomic, assign) CGPoint panPointScreenOrigin;
193 // Pan gesture recognizer used to track horizontal touches. 194 // Pan gesture recognizer used to track horizontal touches.
194 @property(nonatomic, retain) UIPanGestureRecognizer* panGestureRecognizer; 195 @property(nonatomic, strong) UIPanGestureRecognizer* panGestureRecognizer;
195 196
196 // Registers notifications to lock the overscroll actions on certain UI states. 197 // Registers notifications to lock the overscroll actions on certain UI states.
197 - (void)registerNotifications; 198 - (void)registerNotifications;
198 // Setup/tearDown methods are used to register values when the delegate is set. 199 // Setup/tearDown methods are used to register values when the delegate is set.
199 - (void)tearDown; 200 - (void)tearDown;
200 - (void)setup; 201 - (void)setup;
201 // Resets scroll view's top content inset to |self.initialContentInset|. 202 // Resets scroll view's top content inset to |self.initialContentInset|.
202 - (void)resetScrollViewTopContentInset; 203 - (void)resetScrollViewTopContentInset;
203 // Access the headerView from the delegate. 204 // Access the headerView from the delegate.
204 - (UIView<RelaxedBoundsConstraintsHitTestSupport>*)headerView; 205 - (UIView<RelaxedBoundsConstraintsHitTestSupport>*)headerView;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 @synthesize panPointScreenOrigin = _panPointScreenOrigin; 240 @synthesize panPointScreenOrigin = _panPointScreenOrigin;
240 @synthesize panGestureRecognizer = _panGestureRecognizer; 241 @synthesize panGestureRecognizer = _panGestureRecognizer;
241 242
242 - (instancetype)init { 243 - (instancetype)init {
243 return [self initWithScrollView:nil]; 244 return [self initWithScrollView:nil];
244 } 245 }
245 246
246 - (instancetype)initWithScrollView:(UIScrollView*)scrollView { 247 - (instancetype)initWithScrollView:(UIScrollView*)scrollView {
247 self = [super init]; 248 self = [super init];
248 if (self) { 249 if (self) {
249 _propertyReleaser_OverscrollActionsController.Init(
250 self, [OverscrollActionsController class]);
251 _overscrollActionView = 250 _overscrollActionView =
252 [[OverscrollActionsView alloc] initWithFrame:CGRectZero]; 251 [[OverscrollActionsView alloc] initWithFrame:CGRectZero];
253 _overscrollActionView.delegate = self; 252 _overscrollActionView.delegate = self;
254 _scrollview.reset([scrollView retain]); 253 _scrollview = scrollView;
255 if (_scrollview) { 254 if (_scrollview) {
256 [self setup]; 255 [self setup];
257 } 256 }
258 _lockIncrementNotifications.reset([[NSMutableSet alloc] init]); 257 _lockIncrementNotifications = [[NSMutableSet alloc] init];
259 258
260 _lockNotificationsCounterparts.reset([@{ 259 _lockNotificationsCounterparts = @{
261 UIKeyboardWillHideNotification : UIKeyboardWillShowNotification, 260 UIKeyboardWillHideNotification : UIKeyboardWillShowNotification,
262 kMenuWillHideNotification : kMenuWillShowNotification, 261 kMenuWillHideNotification : kMenuWillShowNotification,
263 kTabHistoryPopupWillHideNotification : 262 kTabHistoryPopupWillHideNotification :
264 kTabHistoryPopupWillShowNotification, 263 kTabHistoryPopupWillShowNotification,
265 kVoiceSearchWillHideNotification : kVoiceSearchWillShowNotification, 264 kVoiceSearchWillHideNotification : kVoiceSearchWillShowNotification,
266 kVoiceSearchBarViewButtonDeselectedNotification : 265 kVoiceSearchBarViewButtonDeselectedNotification :
267 kVoiceSearchBarViewButtonSelectedNotification, 266 kVoiceSearchBarViewButtonSelectedNotification,
268 ios_internal::kPageInfoWillHideNotification : 267 ios_internal::kPageInfoWillHideNotification :
269 ios_internal::kPageInfoWillShowNotification, 268 ios_internal::kPageInfoWillShowNotification,
270 ios_internal::kLocationBarResignsFirstResponderNotification : 269 ios_internal::kLocationBarResignsFirstResponderNotification :
271 ios_internal::kLocationBarBecomesFirstResponderNotification, 270 ios_internal::kLocationBarBecomesFirstResponderNotification,
272 ios_internal::kSideSwipeDidStopNotification : 271 ios_internal::kSideSwipeDidStopNotification :
273 ios_internal::kSideSwipeWillStartNotification 272 ios_internal::kSideSwipeWillStartNotification
274 } retain]); 273 };
275 [self registerNotifications]; 274 [self registerNotifications];
276 } 275 }
277 return self; 276 return self;
278 } 277 }
279 278
280 - (void)dealloc { 279 - (void)dealloc {
281 self.overscrollActionView.delegate = nil; 280 self.overscrollActionView.delegate = nil;
282 [self invalidate]; 281 [self invalidate];
283 [super dealloc];
284 } 282 }
285 283
286 - (void)scheduleInvalidate { 284 - (void)scheduleInvalidate {
287 if (self.overscrollState == OverscrollState::NO_PULL_STARTED) { 285 if (self.overscrollState == OverscrollState::NO_PULL_STARTED) {
288 [self invalidate]; 286 [self invalidate];
289 } else { 287 } else {
290 _shouldInvalidate = YES; 288 _shouldInvalidate = YES;
291 } 289 }
292 } 290 }
293 291
294 - (void)invalidate { 292 - (void)invalidate {
295 [self clear]; 293 [self clear];
296 [self stopBounce]; 294 [self stopBounce];
297 [self tearDown]; 295 [self tearDown];
298 [[NSNotificationCenter defaultCenter] removeObserver:self]; 296 [[NSNotificationCenter defaultCenter] removeObserver:self];
299 [self setWebViewInteractionEnabled:YES]; 297 [self setWebViewInteractionEnabled:YES];
300 _delegate = nil; 298 _delegate = nil;
301 _webViewProxy.reset(); 299 _webViewProxy = nil;
302 [_webViewScrollViewProxy removeObserver:self]; 300 [_webViewScrollViewProxy removeObserver:self];
303 _webViewScrollViewProxy.reset(); 301 _webViewScrollViewProxy = nil;
304 } 302 }
305 303
306 - (void)clear { 304 - (void)clear {
307 self.overscrollState = OverscrollState::NO_PULL_STARTED; 305 self.overscrollState = OverscrollState::NO_PULL_STARTED;
308 } 306 }
309 307
310 - (void)enableOverscrollActions { 308 - (void)enableOverscrollActions {
311 _isOverscrollActionsDisabledForLoading = NO; 309 _isOverscrollActionsDisabledForLoading = NO;
312 [self setup]; 310 [self setup];
313 } 311 }
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 return YES; 506 return YES;
509 } 507 }
510 508
511 #pragma mark - CRWWebControllerObserver methods 509 #pragma mark - CRWWebControllerObserver methods
512 510
513 - (void)setWebViewProxy:(id<CRWWebViewProxy>)webViewProxy 511 - (void)setWebViewProxy:(id<CRWWebViewProxy>)webViewProxy
514 controller:(CRWWebController*)webController { 512 controller:(CRWWebController*)webController {
515 DCHECK([webViewProxy scrollViewProxy]); 513 DCHECK([webViewProxy scrollViewProxy]);
516 _initialHeaderInset = 0; 514 _initialHeaderInset = 0;
517 _initialHeaderHeight = 0; 515 _initialHeaderHeight = 0;
518 _webViewProxy.reset([webViewProxy retain]); 516 _webViewProxy = webViewProxy;
519 [_webViewScrollViewProxy removeObserver:self]; 517 [_webViewScrollViewProxy removeObserver:self];
520 _webViewScrollViewProxy.reset([[webViewProxy scrollViewProxy] retain]); 518 _webViewScrollViewProxy = [webViewProxy scrollViewProxy];
521 [_webViewScrollViewProxy addObserver:self]; 519 [_webViewScrollViewProxy addObserver:self];
522 [self enableOverscrollActions]; 520 [self enableOverscrollActions];
523 } 521 }
524 522
525 - (void)webControllerWillClose:(CRWWebController*)webController { 523 - (void)webControllerWillClose:(CRWWebController*)webController {
526 [self disableOverscrollActions]; 524 [self disableOverscrollActions];
527 [_webViewScrollViewProxy removeObserver:self]; 525 [_webViewScrollViewProxy removeObserver:self];
528 _webViewScrollViewProxy.reset(); 526 _webViewScrollViewProxy = nil;
529 } 527 }
530 528
531 #pragma mark - Private 529 #pragma mark - Private
532 530
533 - (void)recordMetricForTriggeredAction:(OverscrollAction)action { 531 - (void)recordMetricForTriggeredAction:(OverscrollAction)action {
534 switch (action) { 532 switch (action) {
535 case OverscrollAction::NONE: 533 case OverscrollAction::NONE:
536 UMA_HISTOGRAM_ENUMERATION(kOverscrollActionsHistogram, 534 UMA_HISTOGRAM_ENUMERATION(kOverscrollActionsHistogram,
537 OVERSCROLL_ACTION_CANCELED, 535 OVERSCROLL_ACTION_CANCELED,
538 OVERSCROLL_ACTION_COUNT); 536 OVERSCROLL_ACTION_COUNT);
(...skipping 12 matching lines...) Expand all
551 UMA_HISTOGRAM_ENUMERATION(kOverscrollActionsHistogram, 549 UMA_HISTOGRAM_ENUMERATION(kOverscrollActionsHistogram,
552 OVERSCROLL_ACTION_CLOSE_TAB, 550 OVERSCROLL_ACTION_CLOSE_TAB,
553 OVERSCROLL_ACTION_COUNT); 551 OVERSCROLL_ACTION_COUNT);
554 break; 552 break;
555 } 553 }
556 } 554 }
557 555
558 - (void)registerNotifications { 556 - (void)registerNotifications {
559 NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; 557 NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
560 for (NSString* counterpartNotificationName in _lockNotificationsCounterparts 558 for (NSString* counterpartNotificationName in _lockNotificationsCounterparts
561 .get()) { 559 .allKeys) {
562 [center addObserver:self 560 [center addObserver:self
563 selector:@selector(incrementOverscrollActionLockForNotification:) 561 selector:@selector(incrementOverscrollActionLockForNotification:)
564 name:[_lockNotificationsCounterparts 562 name:[_lockNotificationsCounterparts
565 objectForKey:counterpartNotificationName] 563 objectForKey:counterpartNotificationName]
566 object:nil]; 564 object:nil];
567 [center addObserver:self 565 [center addObserver:self
568 selector:@selector(decrementOverscrollActionLockForNotification:) 566 selector:@selector(decrementOverscrollActionLockForNotification:)
569 name:counterpartNotificationName 567 name:counterpartNotificationName
570 object:nil]; 568 object:nil];
571 } 569 }
572 [center addObserver:self 570 [center addObserver:self
573 selector:@selector(deviceOrientationDidChange) 571 selector:@selector(deviceOrientationDidChange)
574 name:UIDeviceOrientationDidChangeNotification 572 name:UIDeviceOrientationDidChangeNotification
575 object:nil]; 573 object:nil];
576 } 574 }
577 575
578 - (void)tearDown { 576 - (void)tearDown {
579 [[self scrollView] removeGestureRecognizer:self.panGestureRecognizer]; 577 [[self scrollView] removeGestureRecognizer:self.panGestureRecognizer];
580 self.panGestureRecognizer = nil; 578 self.panGestureRecognizer = nil;
581 } 579 }
582 580
583 - (void)setup { 581 - (void)setup {
584 base::scoped_nsobject<UIPanGestureRecognizer> panGesture; 582 UIPanGestureRecognizer* panGesture;
585 // Workaround a bug occuring when Speak Selection is enabled. 583 // Workaround a bug occuring when Speak Selection is enabled.
586 // See crbug.com/699655. 584 // See crbug.com/699655.
587 if (UIAccessibilityIsSpeakSelectionEnabled()) { 585 if (UIAccessibilityIsSpeakSelectionEnabled()) {
588 panGesture.reset([[OverscrollActionsGestureRecognizer alloc] 586 panGesture = [[OverscrollActionsGestureRecognizer alloc]
589 initWithTarget:self 587 initWithTarget:self
590 action:@selector(panGesture:)]); 588 action:@selector(panGesture:)];
591 } else { 589 } else {
592 panGesture.reset([[UIPanGestureRecognizer alloc] 590 panGesture =
593 initWithTarget:self 591 [[UIPanGestureRecognizer alloc] initWithTarget:self
594 action:@selector(panGesture:)]); 592 action:@selector(panGesture:)];
595 } 593 }
596 [panGesture setMaximumNumberOfTouches:1]; 594 [panGesture setMaximumNumberOfTouches:1];
597 [panGesture setDelegate:self]; 595 [panGesture setDelegate:self];
598 [[self scrollView] addGestureRecognizer:panGesture]; 596 [[self scrollView] addGestureRecognizer:panGesture];
599 self.panGestureRecognizer = panGesture.get(); 597 self.panGestureRecognizer = panGesture;
600 } 598 }
601 599
602 - (id<OverscrollActionsScrollView>)scrollView { 600 - (id<OverscrollActionsScrollView>)scrollView {
603 if (_scrollview) { 601 if (_scrollview) {
604 return static_cast<id<OverscrollActionsScrollView>>(_scrollview.get()); 602 return static_cast<id<OverscrollActionsScrollView>>(_scrollview);
605 } else { 603 } else {
606 return static_cast<id<OverscrollActionsScrollView>>( 604 return static_cast<id<OverscrollActionsScrollView>>(
607 _webViewScrollViewProxy.get()); 605 _webViewScrollViewProxy);
608 } 606 }
609 } 607 }
610 608
611 - (void)setScrollViewContentInset:(UIEdgeInsets)contentInset { 609 - (void)setScrollViewContentInset:(UIEdgeInsets)contentInset {
612 if (_scrollview) 610 if (_scrollview)
613 [_scrollview setContentInset:contentInset]; 611 [_scrollview setContentInset:contentInset];
614 else 612 else
615 [_webViewScrollViewProxy setContentInset:contentInset]; 613 [_webViewScrollViewProxy setContentInset:contentInset];
616 } 614 }
617 615
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 for (UIGestureRecognizer* gesture in 779 for (UIGestureRecognizer* gesture in
782 [_webViewScrollViewProxy gestureRecognizers]) { 780 [_webViewScrollViewProxy gestureRecognizers]) {
783 if (![gesture isKindOfClass:[UIPanGestureRecognizer class]]) { 781 if (![gesture isKindOfClass:[UIPanGestureRecognizer class]]) {
784 [gesture setEnabled:enabled]; 782 [gesture setEnabled:enabled];
785 } 783 }
786 } 784 }
787 // Add a dummy view on top of the webview in order to catch touches on some 785 // Add a dummy view on top of the webview in order to catch touches on some
788 // specific subviews. 786 // specific subviews.
789 if (!enabled) { 787 if (!enabled) {
790 if (!_dummyView) 788 if (!_dummyView)
791 _dummyView.reset([[UIView alloc] init]); 789 _dummyView = [[UIView alloc] init];
792 [_dummyView setFrame:[_webViewProxy bounds]]; 790 [_dummyView setFrame:[_webViewProxy bounds]];
793 [_webViewProxy addSubview:_dummyView]; 791 [_webViewProxy addSubview:_dummyView];
794 } else { 792 } else {
795 [_dummyView removeFromSuperview]; 793 [_dummyView removeFromSuperview];
796 } 794 }
797 } 795 }
798 796
799 - (void)updateWithVerticalOffset:(CGFloat)verticalOffset { 797 - (void)updateWithVerticalOffset:(CGFloat)verticalOffset {
800 self.overscrollActionView.backgroundView.alpha = 798 self.overscrollActionView.backgroundView.alpha =
801 1.0 - 799 1.0 -
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 overscrollActionsController:self 915 overscrollActionsController:self
918 didTriggerAction:self.overscrollActionView.selectedAction]; 916 didTriggerAction:self.overscrollActionView.selectedAction];
919 } 917 }
920 918
921 - (void)overscrollActionsView:(OverscrollActionsView*)view 919 - (void)overscrollActionsView:(OverscrollActionsView*)view
922 selectedActionDidChange:(OverscrollAction)newAction { 920 selectedActionDidChange:(OverscrollAction)newAction {
923 TriggerHapticFeedbackForSelectionChange(); 921 TriggerHapticFeedbackForSelectionChange();
924 } 922 }
925 923
926 @end 924 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698