element-ios/matrixConsole/View/AuthInputsView.m

209 lines
No EOL
6 KiB
Objective-C

/*
Copyright 2014 OpenMarket Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#import "AuthInputsView.h"
#import "MatrixSDKHandler.h"
@implementation AuthInputsView
- (CGFloat)actualHeight {
return self.frame.size.height;
}
- (BOOL)areAllRequiredFieldsFilled {
// Currently no field to check here
return YES;
}
- (void)setAuthType:(AuthenticationType)authType {
if (authType == AuthenticationTypeLogin) {
self.displayNameTextField.hidden = YES;
} else {
self.displayNameTextField.hidden = NO;
}
_authType = authType;
}
- (void)dismissKeyboard {
[self.displayNameTextField resignFirstResponder];
}
- (void)nextStep {
self.displayNameTextField.hidden = YES;
}
- (void)resetStep {
self.authType = _authType;
}
@end
#pragma mark - AuthInputsPasswordBasedView
@implementation AuthInputsPasswordBasedView
- (CGFloat)actualHeight {
if (self.authType == AuthenticationTypeLogin) {
return self.displayNameTextField.frame.origin.y;
}
return super.actualHeight;
}
- (BOOL)areAllRequiredFieldsFilled {
BOOL ret = [super areAllRequiredFieldsFilled];
// Check user login and pass fields
ret = (ret && self.userLoginTextField.text.length && self.passWordTextField.text.length);
return ret;
}
- (void)setAuthType:(AuthenticationType)authType {
if (authType == AuthenticationTypeLogin) {
self.passWordTextField.returnKeyType = UIReturnKeyDone;
self.emailTextField.hidden = YES;
self.emailInfoLabel.hidden = YES;
} else {
self.passWordTextField.returnKeyType = UIReturnKeyNext;
self.emailTextField.hidden = NO;
self.emailInfoLabel.hidden = NO;
}
super.authType = authType;
// Prefill text field
self.userLoginTextField.text = [[MatrixSDKHandler sharedHandler] userLogin];
self.passWordTextField.text = nil;
}
- (void)dismissKeyboard {
[self.userLoginTextField resignFirstResponder];
[self.passWordTextField resignFirstResponder];
[self.emailTextField resignFirstResponder];
[super dismissKeyboard];
}
#pragma mark UITextField delegate
- (void)textFieldDidEndEditing:(UITextField *)textField {
if (textField == self.userLoginTextField) {
[[MatrixSDKHandler sharedHandler] setUserLogin:textField.text];
}
}
- (BOOL)textFieldShouldReturn:(UITextField*)textField {
if (textField.returnKeyType == UIReturnKeyDone) {
// "Done" key has been pressed
[textField resignFirstResponder];
if (self.delegate && [self.delegate respondsToSelector:@selector(authInputsDoneKeyHasBeenPressed:)]) {
// Launch authentication now
[self.delegate authInputsDoneKeyHasBeenPressed:self];
}
} else {
//"Next" key has been pressed
if (textField == self.userLoginTextField) {
[self.passWordTextField becomeFirstResponder];
} else if (textField == self.passWordTextField) {
[self.displayNameTextField becomeFirstResponder];
} else if (textField == self.displayNameTextField) {
[self.emailTextField becomeFirstResponder];
}
}
return YES;
}
@end
#pragma mark - AuthInputsEmailCodeBasedView
@implementation AuthInputsEmailCodeBasedView
- (CGFloat)actualHeight {
if (self.authType == AuthenticationTypeLogin) {
return self.displayNameTextField.frame.origin.y;
}
return super.actualHeight;
}
- (BOOL)areAllRequiredFieldsFilled {
BOOL ret = [super areAllRequiredFieldsFilled];
// Check required fields //FIXME what are required fields in this authentication flow?
ret = (ret && self.userLoginTextField.text.length && self.emailAndTokenTextField.text.length);
return ret;
}
- (void)setAuthType:(AuthenticationType)authType {
// Set initial layout
self.userLoginTextField.hidden = NO;
self.promptEmailTokenLabel.hidden = YES;
if (authType == AuthenticationTypeLogin) {
self.emailAndTokenTextField.returnKeyType = UIReturnKeyDone;
} else {
self.emailAndTokenTextField.returnKeyType = UIReturnKeyNext;
}
super.authType = authType;
}
- (void)dismissKeyboard {
[self.userLoginTextField resignFirstResponder];
[self.emailAndTokenTextField resignFirstResponder];
[super dismissKeyboard];
}
- (void)nextStep {
// Consider here the email token has been requested with success
[super nextStep];
self.userLoginTextField.hidden = YES;
self.promptEmailTokenLabel.hidden = NO;
self.emailAndTokenTextField.returnKeyType = UIReturnKeyDone;
}
#pragma mark UITextField delegate
- (void)textFieldDidEndEditing:(UITextField *)textField {
if (textField == self.userLoginTextField) {
[[MatrixSDKHandler sharedHandler] setUserLogin:textField.text];
}
// FIXME store user's email in matrixSDKHandler like userId
}
- (BOOL)textFieldShouldReturn:(UITextField*)textField {
if (textField.returnKeyType == UIReturnKeyDone) {
// "Done" key has been pressed
[textField resignFirstResponder];
if (self.delegate && [self.delegate respondsToSelector:@selector(authInputsDoneKeyHasBeenPressed:)]) {
// Launch authentication now
[self.delegate authInputsDoneKeyHasBeenPressed:self];
}
} else {
//"Next" key has been pressed
if (textField == self.userLoginTextField) {
[self.emailAndTokenTextField becomeFirstResponder];
} else if (textField == self.emailAndTokenTextField) {
[self.displayNameTextField becomeFirstResponder];
}
}
return YES;
}
@end