OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/find_bar/find_bar_controller_ios.h" | 5 #import "ios/chrome/browser/ui/find_bar/find_bar_controller_ios.h" |
6 | 6 |
7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
8 #include "base/i18n/rtl.h" | 8 #include "base/i18n/rtl.h" |
9 #include "base/ios/ios_util.h" | 9 #include "base/ios/ios_util.h" |
10 #include "base/mac/bundle_locations.h" | 10 #include "base/mac/bundle_locations.h" |
11 #include "base/mac/foundation_util.h" | 11 #include "base/mac/foundation_util.h" |
12 #include "base/mac/objc_property_releaser.h" | |
13 #include "base/mac/scoped_nsobject.h" | |
14 #include "base/strings/sys_string_conversions.h" | 12 #include "base/strings/sys_string_conversions.h" |
15 #include "components/strings/grit/components_strings.h" | 13 #include "components/strings/grit/components_strings.h" |
16 #import "ios/chrome/browser/find_in_page/find_in_page_controller.h" | 14 #import "ios/chrome/browser/find_in_page/find_in_page_controller.h" |
17 #import "ios/chrome/browser/find_in_page/find_in_page_model.h" | 15 #import "ios/chrome/browser/find_in_page/find_in_page_model.h" |
18 #import "ios/chrome/browser/ui/UIView+SizeClassSupport.h" | 16 #import "ios/chrome/browser/ui/UIView+SizeClassSupport.h" |
19 #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" | 17 #import "ios/chrome/browser/ui/commands/UIKit+ChromeExecuteCommand.h" |
20 #import "ios/chrome/browser/ui/find_bar/find_bar_view.h" | 18 #import "ios/chrome/browser/ui/find_bar/find_bar_view.h" |
21 #include "ios/chrome/browser/ui/ui_util.h" | 19 #include "ios/chrome/browser/ui/ui_util.h" |
22 #include "ui/base/l10n/l10n_util_mac.h" | 20 #include "ui/base/l10n/l10n_util_mac.h" |
23 #include "ui/base/resource/resource_bundle.h" | 21 #include "ui/base/resource/resource_bundle.h" |
24 | 22 |
| 23 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 24 #error "This file requires ARC support." |
| 25 #endif |
| 26 |
25 NSString* const kFindInPageContainerViewId = @"kFindInPageContainerViewId"; | 27 NSString* const kFindInPageContainerViewId = @"kFindInPageContainerViewId"; |
26 | 28 |
27 namespace { | 29 namespace { |
28 | 30 |
29 // Find Bar height. | 31 // Find Bar height. |
30 // Right padding on iPad find bar. | 32 // Right padding on iPad find bar. |
31 const CGFloat kFindBarIPhoneHeight = 56; | 33 const CGFloat kFindBarIPhoneHeight = 56; |
32 const CGFloat kFindBarIPadHeight = 62; | 34 const CGFloat kFindBarIPadHeight = 62; |
33 | 35 |
34 // Find Bar animation drop down duration. | 36 // Find Bar animation drop down duration. |
35 const CGFloat kAnimationDuration = 0.15; | 37 const CGFloat kAnimationDuration = 0.15; |
36 | 38 |
37 // For the first |kSearchDelayChars| characters, delay by |kSearchLongDelay| | 39 // For the first |kSearchDelayChars| characters, delay by |kSearchLongDelay| |
38 // For the remaining characters, delay by |kSearchShortDelay|. | 40 // For the remaining characters, delay by |kSearchShortDelay|. |
39 const NSUInteger kSearchDelayChars = 3; | 41 const NSUInteger kSearchDelayChars = 3; |
40 const NSTimeInterval kSearchLongDelay = 1.0; | 42 const NSTimeInterval kSearchLongDelay = 1.0; |
41 const NSTimeInterval kSearchShortDelay = 0.100; | 43 const NSTimeInterval kSearchShortDelay = 0.100; |
42 | 44 |
43 } // anonymous namespace | 45 } // anonymous namespace |
44 | 46 |
45 #pragma mark - FindBarControllerIOS | 47 #pragma mark - FindBarControllerIOS |
46 | 48 |
47 @interface FindBarControllerIOS ()<UITextFieldDelegate> { | 49 @interface FindBarControllerIOS ()<UITextFieldDelegate> |
48 base::mac::ObjCPropertyReleaser _propertyReleaser_FindInPageController; | |
49 } | |
50 | 50 |
51 // Set up iPad UI | 51 // Set up iPad UI |
52 - (void)setUpIPad; | 52 - (void)setUpIPad; |
53 // Set up iPhone UI | 53 // Set up iPhone UI |
54 - (void)setUpIPhone; | 54 - (void)setUpIPhone; |
55 // Animate find bar to iPad top right, or, when possible, to align find bar | 55 // Animate find bar to iPad top right, or, when possible, to align find bar |
56 // horizontally with |alignmentFrame|. | 56 // horizontally with |alignmentFrame|. |
57 - (void)showIPadFindBarView:(BOOL)animate | 57 - (void)showIPadFindBarView:(BOOL)animate |
58 intoView:(UIView*)parentView | 58 intoView:(UIView*)parentView |
59 withFrame:(CGRect)targetFrame | 59 withFrame:(CGRect)targetFrame |
(...skipping 17 matching lines...) Expand all Loading... |
77 // Selects text in such way that selection menu does not appear and | 77 // Selects text in such way that selection menu does not appear and |
78 // a11y label is read. When -[UITextField selectAll:] is used, iOS | 78 // a11y label is read. When -[UITextField selectAll:] is used, iOS |
79 // will read "Select All" instead of a11y label. | 79 // will read "Select All" instead of a11y label. |
80 - (void)selectAllText; | 80 - (void)selectAllText; |
81 | 81 |
82 // Redefined to be readwrite. This view acts as background for |findBarView| and | 82 // Redefined to be readwrite. This view acts as background for |findBarView| and |
83 // contains it as a subview. | 83 // contains it as a subview. |
84 @property(nonatomic, readwrite, strong) UIView* view; | 84 @property(nonatomic, readwrite, strong) UIView* view; |
85 // The view containing all the buttons and textfields that is common between | 85 // The view containing all the buttons and textfields that is common between |
86 // iPhone and iPad. | 86 // iPhone and iPad. |
87 @property(nonatomic, retain) FindBarView* findBarView; | 87 @property(nonatomic, strong) FindBarView* findBarView; |
88 // Typing delay timer. | 88 // Typing delay timer. |
89 @property(nonatomic, retain) NSTimer* delayTimer; | 89 @property(nonatomic, strong) NSTimer* delayTimer; |
90 // Yes if incognito. | 90 // Yes if incognito. |
91 @property(nonatomic, assign) BOOL isIncognito; | 91 @property(nonatomic, assign) BOOL isIncognito; |
92 @end | 92 @end |
93 | 93 |
94 @implementation FindBarControllerIOS | 94 @implementation FindBarControllerIOS |
95 | 95 |
96 @synthesize view = _view; | 96 @synthesize view = _view; |
97 @synthesize findBarView = _findBarView; | 97 @synthesize findBarView = _findBarView; |
98 @synthesize delayTimer = _delayTimer; | 98 @synthesize delayTimer = _delayTimer; |
99 @synthesize isIncognito = _isIncognito; | 99 @synthesize isIncognito = _isIncognito; |
100 | 100 |
101 #pragma mark - Lifecycle | 101 #pragma mark - Lifecycle |
102 | 102 |
103 - (instancetype)initWithIncognito:(BOOL)isIncognito { | 103 - (instancetype)initWithIncognito:(BOOL)isIncognito { |
104 self = [super init]; | 104 self = [super init]; |
105 if (self) { | 105 if (self) { |
106 _propertyReleaser_FindInPageController.Init(self, | |
107 [FindBarControllerIOS class]); | |
108 _isIncognito = isIncognito; | 106 _isIncognito = isIncognito; |
109 } | 107 } |
110 return self; | 108 return self; |
111 } | 109 } |
112 | 110 |
113 #pragma mark View Setup & Teardown | 111 #pragma mark View Setup & Teardown |
114 | 112 |
115 - (UIView*)newFindBarView { | 113 - (UIView*)constructFindBarView { |
116 BOOL isIPad = IsIPadIdiom(); | 114 BOOL isIPad = IsIPadIdiom(); |
117 UIView* findBarBackground = nil; | 115 UIView* findBarBackground = nil; |
118 if (isIPad) { | 116 if (isIPad) { |
119 // Future self.view. Contains only |contentView|. Is an image view that is | 117 // Future self.view. Contains only |contentView|. Is an image view that is |
120 // typecast elsewhere but always is exposed as a UIView. | 118 // typecast elsewhere but always is exposed as a UIView. |
121 findBarBackground = | 119 findBarBackground = |
122 [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 345, 62)]; | 120 [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 345, 62)]; |
123 findBarBackground.backgroundColor = [UIColor clearColor]; | 121 findBarBackground.backgroundColor = [UIColor clearColor]; |
124 findBarBackground.userInteractionEnabled = YES; | 122 findBarBackground.userInteractionEnabled = YES; |
125 } else { | 123 } else { |
126 findBarBackground = | 124 findBarBackground = |
127 [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 56)]; | 125 [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 56)]; |
128 findBarBackground.backgroundColor = [UIColor whiteColor]; | 126 findBarBackground.backgroundColor = [UIColor whiteColor]; |
129 } | 127 } |
130 | 128 |
131 self.findBarView = [[[FindBarView alloc] | 129 self.findBarView = [[FindBarView alloc] |
132 initWithDarkAppearance:self.isIncognito && !IsIPadIdiom()] autorelease]; | 130 initWithDarkAppearance:self.isIncognito && !IsIPadIdiom()]; |
133 [findBarBackground addSubview:self.findBarView]; | 131 [findBarBackground addSubview:self.findBarView]; |
134 self.findBarView.translatesAutoresizingMaskIntoConstraints = NO; | 132 self.findBarView.translatesAutoresizingMaskIntoConstraints = NO; |
135 base::scoped_nsobject<NSMutableArray> constraints( | 133 NSMutableArray* constraints = [[NSMutableArray alloc] init]; |
136 [[NSMutableArray alloc] init]); | |
137 [constraints addObjectsFromArray:@[ | 134 [constraints addObjectsFromArray:@[ |
138 [self.findBarView.trailingAnchor | 135 [self.findBarView.trailingAnchor |
139 constraintEqualToAnchor:findBarBackground.trailingAnchor], | 136 constraintEqualToAnchor:findBarBackground.trailingAnchor], |
140 [self.findBarView.leadingAnchor | 137 [self.findBarView.leadingAnchor |
141 constraintEqualToAnchor:findBarBackground.leadingAnchor], | 138 constraintEqualToAnchor:findBarBackground.leadingAnchor], |
142 [self.findBarView.heightAnchor constraintEqualToConstant:56.0f] | 139 [self.findBarView.heightAnchor constraintEqualToConstant:56.0f] |
143 ]]; | 140 ]]; |
144 | 141 |
145 if (isIPad) { | 142 if (isIPad) { |
146 [constraints | 143 [constraints |
(...skipping 16 matching lines...) Expand all Loading... |
163 action:@selector(hideKeyboard:) | 160 action:@selector(hideKeyboard:) |
164 forControlEvents:UIControlEventTouchUpInside]; | 161 forControlEvents:UIControlEventTouchUpInside]; |
165 [self.findBarView.previousButton addTarget:self | 162 [self.findBarView.previousButton addTarget:self |
166 action:@selector(hideKeyboard:) | 163 action:@selector(hideKeyboard:) |
167 forControlEvents:UIControlEventTouchUpInside]; | 164 forControlEvents:UIControlEventTouchUpInside]; |
168 | 165 |
169 return findBarBackground; | 166 return findBarBackground; |
170 } | 167 } |
171 | 168 |
172 - (void)setupViewInView:(UIView*)view { | 169 - (void)setupViewInView:(UIView*)view { |
173 self.view = [[self newFindBarView] autorelease]; | 170 self.view = [self constructFindBarView]; |
174 | 171 |
175 // Idiom specific setup. | 172 // Idiom specific setup. |
176 if ([self shouldShowCompactSearchBarInView:view]) | 173 if ([self shouldShowCompactSearchBarInView:view]) |
177 [self setUpIPhone]; | 174 [self setUpIPhone]; |
178 else | 175 else |
179 [self setUpIPad]; | 176 [self setUpIPad]; |
180 | 177 |
181 self.view.accessibilityIdentifier = kFindInPageContainerViewId; | 178 self.view.accessibilityIdentifier = kFindInPageContainerViewId; |
182 } | 179 } |
183 | 180 |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 object:self]; | 468 object:self]; |
472 } | 469 } |
473 | 470 |
474 - (BOOL)textFieldShouldReturn:(UITextField*)textField { | 471 - (BOOL)textFieldShouldReturn:(UITextField*)textField { |
475 DCHECK(textField == self.findBarView.inputField); | 472 DCHECK(textField == self.findBarView.inputField); |
476 [self.findBarView.inputField resignFirstResponder]; | 473 [self.findBarView.inputField resignFirstResponder]; |
477 return YES; | 474 return YES; |
478 } | 475 } |
479 | 476 |
480 @end | 477 @end |
OLD | NEW |