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

Unified Diff: remoting/ios/app/pin_entry_view.mm

Issue 2971903002: Adding error handling to the connection flow. (Closed)
Patch Set: Trying out activateConstraints. Created 3 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/ios/app/pin_entry_view.h ('k') | remoting/ios/app/session_reconnect_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/ios/app/pin_entry_view.mm
diff --git a/remoting/ios/app/pin_entry_view.mm b/remoting/ios/app/pin_entry_view.mm
index 87a5a6b2523419773823b9488783e7d36bfe962b..c483fee586b44207aab6e8e5f7c8ffb895b99a44 100644
--- a/remoting/ios/app/pin_entry_view.mm
+++ b/remoting/ios/app/pin_entry_view.mm
@@ -12,10 +12,12 @@
#import "remoting/ios/app/remoting_theme.h"
static const CGFloat kMargin = 5.f;
-static const CGFloat kPadding = 6.f;
+static const CGFloat kPadding = 8.f;
static const CGFloat kLineSpace = 12.f;
-@interface PinEntryView () {
+static const int kMinPinLength = 6;
+
+@interface PinEntryView ()<UITextFieldDelegate> {
UISwitch* _pairingSwitch;
UILabel* _pairingLabel;
MDCFloatingButton* _pinButton;
@@ -36,6 +38,7 @@ static const CGFloat kLineSpace = 12.f;
_pairingSwitch.tintColor =
[UIColor colorWithRed:1.f green:1.f blue:1.f alpha:0.5];
_pairingSwitch.transform = CGAffineTransformMakeScale(0.5, 0.5);
+ _pairingSwitch.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_pairingSwitch];
_pairingLabel = [[UILabel alloc] init];
@@ -43,6 +46,7 @@ static const CGFloat kLineSpace = 12.f;
[UIColor colorWithRed:1.f green:1.f blue:1.f alpha:0.5];
_pairingLabel.font = [UIFont systemFontOfSize:12.f];
_pairingLabel.text = @"Remember my PIN on this device.";
+ _pairingLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_pairingLabel];
_pinButton =
@@ -52,6 +56,8 @@ static const CGFloat kLineSpace = 12.f;
action:@selector(didTapPinEntry:)
forControlEvents:UIControlEventTouchUpInside];
_pinButton.translatesAutoresizingMaskIntoConstraints = NO;
+ _pinButton.enabled = NO;
+ _pinButton.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:_pinButton];
_pinEntry = [[UITextField alloc] init];
@@ -65,11 +71,51 @@ static const CGFloat kLineSpace = 12.f;
NSForegroundColorAttributeName :
[UIColor colorWithRed:1.f green:1.f blue:1.f alpha:0.5]
}];
+ _pinEntry.translatesAutoresizingMaskIntoConstraints = NO;
+ _pinEntry.delegate = self;
[self addSubview:_pinEntry];
+
+ [self
+ initializeLayoutConstraintsWithViews:NSDictionaryOfVariableBindings(
+ _pairingSwitch, _pairingLabel,
+ _pinButton, _pinEntry)];
}
return self;
}
+- (void)initializeLayoutConstraintsWithViews:(NSDictionary*)views {
+ // Metrics to use in visual format strings.
+ NSDictionary* layoutMetrics = @{
+ @"margin" : @(kMargin),
+ @"padding" : @(kPadding),
+ @"lineSpace" : @(kLineSpace),
+ };
+
+ [self addConstraints:
+ [NSLayoutConstraint
+ constraintsWithVisualFormat:
+ @"H:|-[_pinEntry]-(padding)-[_pinButton]-|"
+ options:NSLayoutFormatAlignAllCenterY
+ metrics:layoutMetrics
+ views:views]];
+
+ [self addConstraints:
+ [NSLayoutConstraint
+ constraintsWithVisualFormat:
+ @"H:|-[_pairingSwitch]-(padding)-[_pairingLabel]-|"
+ options:NSLayoutFormatAlignAllCenterY
+ metrics:layoutMetrics
+ views:views]];
+
+ [self addConstraints:[NSLayoutConstraint
+ constraintsWithVisualFormat:
+ @"V:|-[_pinButton]-(lineSpace)-[_pairingSwitch]"
+ options:0
+ metrics:layoutMetrics
+ views:views]];
+ [self setNeedsUpdateConstraints];
+}
+
#pragma mark - UIView
- (BOOL)canBecomeFirstResponder {
@@ -84,31 +130,32 @@ static const CGFloat kLineSpace = 12.f;
return [_pinEntry endEditing:force];
}
-- (void)layoutSubviews {
- [super layoutSubviews];
+#pragma mark - UITextFieldDelegate
- [_pinButton sizeToFit];
- CGFloat buttonSize = _pinButton.frame.size.width; // Assume circle.
-
- _pinEntry.frame =
- CGRectMake(kMargin, 0.f,
- self.frame.size.width - kPadding - kMargin * 2.f - buttonSize,
- buttonSize);
+- (BOOL)textField:(UITextField*)textField
+ shouldChangeCharactersInRange:(NSRange)range
+ replacementString:(NSString*)string {
+ if (textField == _pinEntry) {
+ NSUInteger length = _pinEntry.text.length - range.length + string.length;
+ _pinButton.enabled = length >= kMinPinLength;
+ }
+ return YES;
+}
- [_pinButton sizeToFit];
- _pinButton.frame =
- CGRectMake(self.frame.size.width - kPadding - kMargin - buttonSize, 0.f,
- buttonSize, buttonSize);
+- (BOOL)textFieldShouldReturn:(UITextField*)textField {
+ NSLog(@"textFieldShouldReturn");
+ if ([_pinButton isEnabled]) {
+ [self didTapPinEntry:textField];
+ return YES;
+ }
+ return NO;
+}
- [_pairingSwitch sizeToFit];
- _pairingSwitch.center = CGPointMake(
- kMargin + _pairingSwitch.frame.size.width / 2.f,
- buttonSize + _pairingSwitch.frame.size.height / 2.f + kLineSpace);
+#pragma mark - Public
- _pairingLabel.frame =
- CGRectMake(kMargin + _pairingSwitch.frame.size.width + kPadding,
- buttonSize + kLineSpace, 0.f, 0.f);
- [_pairingLabel sizeToFit];
+- (void)clearPinEntry {
+ _pinEntry.text = @"";
+ _pinButton.enabled = NO;
}
#pragma mark - Private
« no previous file with comments | « remoting/ios/app/pin_entry_view.h ('k') | remoting/ios/app/session_reconnect_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698