mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-05-19 22:22:14 +02:00
Merge pull request #61 from vector-im/authentication_screen
Authentication screen
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 3.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 6.8 KiB |
@@ -35,14 +35,15 @@
|
||||
"camera" = "Camera";
|
||||
|
||||
// Authentication
|
||||
"auth_sign_in" = "Sign in";
|
||||
"auth_login" = "Log in";
|
||||
"auth_create_account" = "Create a new account";
|
||||
"auth_create_account_title" = "Create an account";
|
||||
"auth_register" = "Register";
|
||||
"auth_back_to_login" = "I already have an account";
|
||||
"auth_email_placeholder" = "Email address";
|
||||
"auth_user_id_placeholder" = "Email or user name";
|
||||
"auth_password_placeholder" = "Password";
|
||||
"auth_user_name_placeholder" = "Your name";
|
||||
"auth_email_placeholder" = "Email address";
|
||||
"auth_repeat_password_placeholder" = "Repeat password";
|
||||
"auth_forgot_password" = "Forgot password?";
|
||||
"auth_use_server_options" = "Use custom server options (advanced)";
|
||||
|
||||
// Chat creation
|
||||
"room_creation_title" = "New Chat";
|
||||
|
||||
@@ -103,7 +103,6 @@
|
||||
<navigationItem key="navigationItem" title="Settings" id="7NM-zW-wJT"/>
|
||||
<connections>
|
||||
<segue destination="KeQ-Sp-kmH" kind="show" identifier="showAccountDetails" id="flf-61-vgV"/>
|
||||
<segue destination="ZlD-EU-ncw" kind="show" identifier="addAccount" id="17E-G9-IZ6"/>
|
||||
</connections>
|
||||
</tableViewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="ZKJ-22-Asy" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
@@ -281,6 +280,5 @@
|
||||
</resources>
|
||||
<inferredMetricsTieBreakers>
|
||||
<segue reference="agy-3r-khl"/>
|
||||
<segue reference="17E-G9-IZ6"/>
|
||||
</inferredMetricsTieBreakers>
|
||||
</document>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<key>pusherAppIdProd</key>
|
||||
<string>im.vector.app.ios.prod</string>
|
||||
<key>identityserverurl</key>
|
||||
<string>https://matrix.org</string>
|
||||
<string>https://vector.im</string>
|
||||
<key>homeserverurl</key>
|
||||
<string>https://matrix.org</string>
|
||||
<key>homeserver</key>
|
||||
|
||||
@@ -18,5 +18,18 @@
|
||||
|
||||
@interface AuthenticationViewController : MXKAuthenticationViewController <MXKAuthenticationViewControllerDelegate>
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UINavigationItem *mainNavigationItem;
|
||||
@property (weak, nonatomic) IBOutlet UIBarButtonItem *rightBarButtonItem;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *forgotPasswordButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *serverOptionsTickButton;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView *serverOptionsContainer;
|
||||
@property (weak, nonatomic) IBOutlet UIView *homeServerContainer;
|
||||
@property (weak, nonatomic) IBOutlet UIView *identityServerContainer;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView *homeServerSeparator;
|
||||
@property (weak, nonatomic) IBOutlet UIView *identityServerSeparator;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@@ -16,12 +16,26 @@
|
||||
|
||||
#import "AuthenticationViewController.h"
|
||||
|
||||
#import "AuthInputsEmailIdentityBasedView.h"
|
||||
#import "AuthInputsPasswordBasedView.h"
|
||||
|
||||
#import "RageShakeManager.h"
|
||||
|
||||
#import "VectorDesignValues.h"
|
||||
|
||||
@implementation AuthenticationViewController
|
||||
|
||||
+ (UINib *)nib
|
||||
{
|
||||
return [UINib nibWithNibName:NSStringFromClass(self)
|
||||
bundle:[NSBundle bundleForClass:self]];
|
||||
}
|
||||
|
||||
+ (instancetype)authenticationViewController
|
||||
{
|
||||
return [[[self class] alloc] initWithNibName:NSStringFromClass(self)
|
||||
bundle:[NSBundle bundleForClass:self]];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
@@ -29,71 +43,166 @@
|
||||
// Setup `MXKAuthenticationViewController` properties
|
||||
self.rageShakeManager = [RageShakeManager sharedManager];
|
||||
|
||||
self.defaultHomeServerUrl = [[NSUserDefaults standardUserDefaults] objectForKey:@"homeserverurl"];
|
||||
self.defaultIdentityServerUrl = [[NSUserDefaults standardUserDefaults] objectForKey:@"identityserverurl"];
|
||||
self.mainNavigationItem.title = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
|
||||
self.rightBarButtonItem.title = NSLocalizedStringFromTable(@"auth_register", @"Vector", nil);
|
||||
|
||||
self.defaultHomeServerUrl = [[NSUserDefaults standardUserDefaults] objectForKey:@"homeserverurl"];
|
||||
self.homeServerTextField.textColor = VECTOR_TEXT_BLACK_COLOR;
|
||||
self.homeServerLabel.textColor = VECTOR_TEXT_GRAY_COLOR;
|
||||
|
||||
self.defaultIdentityServerUrl = [[NSUserDefaults standardUserDefaults] objectForKey:@"identityserverurl"];
|
||||
self.identityServerTextField.textColor = VECTOR_TEXT_BLACK_COLOR;
|
||||
self.identityServerLabel.textColor = VECTOR_TEXT_GRAY_COLOR;
|
||||
|
||||
// Load welcome image from MatrixKit asset bundle
|
||||
self.welcomeImageView.image = [UIImage imageNamed:@"logo"];
|
||||
|
||||
self.subTitleLabel.hidden = NO;
|
||||
[self.submitButton.layer setCornerRadius:5];
|
||||
self.submitButton.clipsToBounds = YES;
|
||||
self.submitButton.backgroundColor = VECTOR_GREEN_COLOR;
|
||||
[self.submitButton setTitle:NSLocalizedStringFromTable(@"auth_login", @"Vector", nil) forState:UIControlStateNormal];
|
||||
[self.submitButton setTitle:NSLocalizedStringFromTable(@"auth_login", @"Vector", nil) forState:UIControlStateHighlighted];
|
||||
|
||||
[self.forgotPasswordButton setTitle:NSLocalizedStringFromTable(@"auth_forgot_password", @"Vector", nil) forState:UIControlStateNormal];
|
||||
[self.forgotPasswordButton setTitle:NSLocalizedStringFromTable(@"auth_forgot_password", @"Vector", nil) forState:UIControlStateHighlighted];
|
||||
[self.forgotPasswordButton setTitleColor:VECTOR_TEXT_GRAY_COLOR forState:UIControlStateNormal];
|
||||
[self.forgotPasswordButton setTitleColor:VECTOR_TEXT_GRAY_COLOR forState:UIControlStateHighlighted];
|
||||
|
||||
[self.serverOptionsTickButton setImage:[UIImage imageNamed:@"selection_untick"] forState:UIControlStateNormal];
|
||||
[self.serverOptionsTickButton setImage:[UIImage imageNamed:@"selection_untick"] forState:UIControlStateHighlighted];
|
||||
|
||||
NSAttributedString *serverOptionsTitle = [[NSAttributedString alloc] initWithString:NSLocalizedStringFromTable(@"auth_use_server_options", @"Vector", nil) attributes:@{NSForegroundColorAttributeName : VECTOR_TEXT_GRAY_COLOR, NSFontAttributeName: [UIFont systemFontOfSize:14]}];
|
||||
[self.serverOptionsTickButton setAttributedTitle:serverOptionsTitle forState:UIControlStateNormal];
|
||||
[self.serverOptionsTickButton setAttributedTitle:serverOptionsTitle forState:UIControlStateHighlighted];
|
||||
|
||||
[self hideServerOptionsContainer:YES];
|
||||
|
||||
// The view controller dismiss itself on successful login.
|
||||
self.delegate = self;
|
||||
|
||||
// Custom used authInputsView
|
||||
[self registerAuthInputsViewClass:AuthInputsEmailIdentityBasedView.class forFlowType:kMXLoginFlowTypeEmailIdentity andAuthType:MXKAuthenticationTypeRegister];
|
||||
[self registerAuthInputsViewClass:AuthInputsPasswordBasedView.class forFlowType:kMXLoginFlowTypePassword andAuthType:MXKAuthenticationTypeLogin];
|
||||
[self registerAuthInputsViewClass:AuthInputsPasswordBasedView.class forFlowType:kMXLoginFlowTypeEmailIdentity andAuthType:MXKAuthenticationTypeRegister];
|
||||
|
||||
// Initialize the auth inputs display
|
||||
self.selectedFlow = [MXLoginFlow modelFromJSON:@{@"type": kMXLoginFlowTypePassword}];
|
||||
|
||||
// FIXME handle "Forgot password"
|
||||
self.forgotPasswordButton.hidden = YES;
|
||||
}
|
||||
|
||||
- (void)setAuthType:(MXKAuthenticationType)authType
|
||||
{
|
||||
super.authType = authType;
|
||||
self.subTitleLabel.hidden = NO;
|
||||
|
||||
if (authType == MXKAuthenticationTypeLogin)
|
||||
{
|
||||
self.subTitleLabel.text = NSLocalizedStringFromTable(@"auth_sign_in", @"Vector", nil);
|
||||
|
||||
[self.submitButton setTitle:NSLocalizedStringFromTable(@"auth_login", @"Vector", nil) forState:UIControlStateNormal];
|
||||
[self.submitButton setTitle:NSLocalizedStringFromTable(@"auth_login", @"Vector", nil) forState:UIControlStateHighlighted];
|
||||
[self.authSwitchButton setTitle:NSLocalizedStringFromTable(@"auth_create_account", @"Vector", nil) forState:UIControlStateNormal];
|
||||
[self.authSwitchButton setTitle:NSLocalizedStringFromTable(@"auth_create_account", @"Vector", nil) forState:UIControlStateHighlighted];
|
||||
}
|
||||
else
|
||||
{
|
||||
self.subTitleLabel.text = NSLocalizedStringFromTable(@"auth_create_account_title", @"Vector", nil);
|
||||
|
||||
[self.submitButton setTitle:NSLocalizedStringFromTable(@"auth_register", @"Vector", nil) forState:UIControlStateNormal];
|
||||
[self.submitButton setTitle:NSLocalizedStringFromTable(@"auth_register", @"Vector", nil) forState:UIControlStateHighlighted];
|
||||
[self.authSwitchButton setTitle:NSLocalizedStringFromTable(@"auth_back_to_login", @"Vector", nil) forState:UIControlStateNormal];
|
||||
[self.authSwitchButton setTitle:NSLocalizedStringFromTable(@"auth_back_to_login", @"Vector", nil) forState:UIControlStateHighlighted];
|
||||
}
|
||||
|
||||
// Update supported authentication flow
|
||||
[self refreshSupportedAuthFlow];
|
||||
}
|
||||
|
||||
- (IBAction)onButtonPressed:(id)sender
|
||||
{
|
||||
if (sender == self.serverOptionsTickButton)
|
||||
{
|
||||
[self hideServerOptionsContainer:!self.serverOptionsContainer.hidden];
|
||||
}
|
||||
else if (sender == self.forgotPasswordButton)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
else if (sender == self.rightBarButtonItem)
|
||||
{
|
||||
if (self.authType == MXKAuthenticationTypeLogin)
|
||||
{
|
||||
self.authType = MXKAuthenticationTypeRegister;
|
||||
self.rightBarButtonItem.title = NSLocalizedStringFromTable(@"auth_login", @"Vector", nil);
|
||||
self.forgotPasswordButton.hidden = YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.authType = MXKAuthenticationTypeLogin;
|
||||
self.rightBarButtonItem.title = NSLocalizedStringFromTable(@"auth_register", @"Vector", nil);
|
||||
self.forgotPasswordButton.hidden = NO;
|
||||
}
|
||||
|
||||
[self hideServerOptionsContainer:YES];
|
||||
}
|
||||
else
|
||||
{
|
||||
[super onButtonPressed:sender];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (void)hideServerOptionsContainer:(BOOL)hidden
|
||||
{
|
||||
if (self.serverOptionsContainer.isHidden == hidden)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (hidden)
|
||||
{
|
||||
[self.homeServerTextField resignFirstResponder];
|
||||
[self.identityServerTextField resignFirstResponder];
|
||||
|
||||
[self.serverOptionsTickButton setImage:[UIImage imageNamed:@"selection_untick"] forState:UIControlStateNormal];
|
||||
self.serverOptionsContainer.hidden = YES;
|
||||
|
||||
// Refresh content view height
|
||||
self.contentViewHeightConstraint.constant -= self.serverOptionsContainer.frame.size.height;
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.serverOptionsTickButton setImage:[UIImage imageNamed:@"selection_tick"] forState:UIControlStateNormal];
|
||||
self.serverOptionsContainer.hidden = NO;
|
||||
|
||||
// Refresh content view height
|
||||
self.contentViewHeightConstraint.constant += self.serverOptionsContainer.frame.size.height;
|
||||
|
||||
// Scroll to display server options
|
||||
CGPoint offset = self.authenticationScrollView.contentOffset;
|
||||
offset.y += self.serverOptionsContainer.frame.size.height;
|
||||
self.authenticationScrollView.contentOffset = offset;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - MXKAuthenticationViewControllerDelegate
|
||||
|
||||
- (void)authenticationViewController:(MXKAuthenticationViewController *)authenticationViewController didLogWithUserId:(NSString *)userId {
|
||||
|
||||
- (void)authenticationViewController:(MXKAuthenticationViewController *)authenticationViewController didLogWithUserId:(NSString *)userId
|
||||
{
|
||||
// Report server url typed by the user as default url.
|
||||
if (self.homeServerTextField.text.length) {
|
||||
if (self.homeServerTextField.text.length)
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] setObject:self.homeServerTextField.text forKey:@"homeserverurl"];
|
||||
}
|
||||
if (self.identityServerTextField.text.length) {
|
||||
if (self.identityServerTextField.text.length)
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] setObject:self.identityServerTextField.text forKey:@"identityserverurl"];
|
||||
}
|
||||
[[NSUserDefaults standardUserDefaults] synchronize];
|
||||
|
||||
// Remove auth view controller on successful login
|
||||
if (self.navigationController) {
|
||||
if (self.navigationController)
|
||||
{
|
||||
// Pop the view controller
|
||||
[self.navigationController popViewControllerAnimated:YES];
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
// Dismiss on successful login
|
||||
[self dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -0,0 +1,368 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="AuthenticationViewController">
|
||||
<connections>
|
||||
<outlet property="authFallbackContentView" destination="q1e-Wg-6t7" id="mR6-hS-5YB"/>
|
||||
<outlet property="authFallbackWebView" destination="Vhh-m0-nXN" id="YWJ-8T-74t"/>
|
||||
<outlet property="authInputContainerViewHeightConstraint" destination="e04-1Y-4gZ" id="5qa-cu-M8v"/>
|
||||
<outlet property="authInputContainerViewMinHeightConstraint" destination="8K0-es-Aee" id="PVf-si-yet"/>
|
||||
<outlet property="authInputsContainerView" destination="xWb-IJ-v7F" id="DEo-Ji-wPT"/>
|
||||
<outlet property="authScrollViewBottomConstraint" destination="g7o-eO-7Yr" id="kVv-Xp-aTT"/>
|
||||
<outlet property="authenticationActivityIndicator" destination="30E-gm-z6O" id="DDw-QJ-ND8"/>
|
||||
<outlet property="authenticationScrollView" destination="OHV-KQ-Ww0" id="gyc-zq-fA1"/>
|
||||
<outlet property="cancelAuthFallbackButton" destination="9qj-5c-Sfb" id="IH4-cc-kKx"/>
|
||||
<outlet property="contentView" destination="rhx-dD-4EJ" id="XXc-2j-Gi6"/>
|
||||
<outlet property="contentViewHeightConstraint" destination="6v6-fz-e8o" id="wHX-YX-3gE"/>
|
||||
<outlet property="forgotPasswordButton" destination="AJ2-lJ-NUq" id="DZw-3o-ioE"/>
|
||||
<outlet property="homeServerContainer" destination="1YY-gb-LG4" id="ASO-JT-0iV"/>
|
||||
<outlet property="homeServerLabel" destination="kHf-s1-cZa" id="nSI-4K-aQq"/>
|
||||
<outlet property="homeServerSeparator" destination="ZZP-eI-bXP" id="Vip-yy-WPd"/>
|
||||
<outlet property="homeServerTextField" destination="G8l-AP-iRs" id="F4s-Sf-TTZ"/>
|
||||
<outlet property="identityServerContainer" destination="kjJ-Tb-SIW" id="xVi-uN-2to"/>
|
||||
<outlet property="identityServerLabel" destination="5CT-Ht-Z3v" id="9h4-6J-n3X"/>
|
||||
<outlet property="identityServerSeparator" destination="t08-ua-0mJ" id="Sbf-ps-zeK"/>
|
||||
<outlet property="identityServerTextField" destination="PZC-Hd-Q6a" id="vKg-sd-dzJ"/>
|
||||
<outlet property="mainNavigationItem" destination="rj9-wP-8QS" id="yNN-Dg-4Yw"/>
|
||||
<outlet property="noFlowLabel" destination="54b-4O-ip9" id="f18-H1-cQm"/>
|
||||
<outlet property="retryButton" destination="wIH-Kd-r7q" id="42j-Ad-zVS"/>
|
||||
<outlet property="rightBarButtonItem" destination="Kwt-KN-aVL" id="Y3F-wA-tf8"/>
|
||||
<outlet property="serverOptionsContainer" destination="uOi-KN-l9I" id="DPa-Kr-caW"/>
|
||||
<outlet property="serverOptionsTickButton" destination="6yx-o1-vbD" id="bep-34-8UU"/>
|
||||
<outlet property="submitButton" destination="k3J-Eg-itz" id="fiZ-wK-6YM"/>
|
||||
<outlet property="view" destination="5rn-KE-plm" id="bFJ-yJ-vc0"/>
|
||||
<outlet property="welcomeImageView" destination="d8r-TX-pwX" id="vzD-zK-EeC"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="5rn-KE-plm">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<navigationBar contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="k7D-Gy-yBR">
|
||||
<rect key="frame" x="0.0" y="20" width="600" height="44"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="44" id="GiL-7R-Wm2"/>
|
||||
</constraints>
|
||||
<color key="barTintColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<items>
|
||||
<navigationItem title="Vector" id="rj9-wP-8QS">
|
||||
<barButtonItem key="rightBarButtonItem" title="Register" id="Kwt-KN-aVL">
|
||||
<connections>
|
||||
<action selector="onButtonPressed:" destination="-1" id="nwk-aV-eBO"/>
|
||||
</connections>
|
||||
</barButtonItem>
|
||||
</navigationItem>
|
||||
</items>
|
||||
</navigationBar>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="izX-ya-hXh">
|
||||
<rect key="frame" x="0.0" y="63" width="600" height="1"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="ZiW-uP-cgo"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" keyboardDismissMode="onDrag" translatesAutoresizingMaskIntoConstraints="NO" id="OHV-KQ-Ww0">
|
||||
<rect key="frame" x="0.0" y="64" width="600" height="536"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rhx-dD-4EJ" userLabel="Content View">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="555"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="logo.png" translatesAutoresizingMaskIntoConstraints="NO" id="d8r-TX-pwX" userLabel="Welcome Image View">
|
||||
<rect key="frame" x="280" y="30" width="40" height="40"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="40" id="ZFx-Mn-Kzq"/>
|
||||
<constraint firstAttribute="height" constant="40" id="zA1-WN-LdU"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xWb-IJ-v7F" userLabel="AuthInputsContainerView">
|
||||
<rect key="frame" x="0.0" y="76" width="600" height="200"/>
|
||||
<subviews>
|
||||
<activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" hidesWhenStopped="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="30E-gm-z6O">
|
||||
<rect key="frame" x="290" y="90" width="20" height="20"/>
|
||||
</activityIndicatorView>
|
||||
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Currently we do not support authentication flows defined by this Home Server" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="54b-4O-ip9" userLabel="noFlowLabel">
|
||||
<rect key="frame" x="49" y="8" width="503" height="17"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wIH-Kd-r7q" userLabel="retryButton">
|
||||
<rect key="frame" x="278" y="30" width="45" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="WtO-NT-ei8"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="45" id="YYb-6s-rgd"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Retry">
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="onButtonPressed:" destination="-1" eventType="touchUpInside" id="ZW9-lZ-tLj"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="centerX" secondItem="54b-4O-ip9" secondAttribute="centerX" id="0bV-x1-MhX"/>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="200" id="8K0-es-Aee"/>
|
||||
<constraint firstItem="54b-4O-ip9" firstAttribute="top" secondItem="xWb-IJ-v7F" secondAttribute="top" constant="8" id="Ddp-gU-nLY"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="54b-4O-ip9" secondAttribute="trailing" constant="8" id="VEQ-w9-9Ln"/>
|
||||
<constraint firstAttribute="centerY" secondItem="30E-gm-z6O" secondAttribute="centerY" id="ctL-D3-bgP"/>
|
||||
<constraint firstAttribute="height" constant="200" id="e04-1Y-4gZ"/>
|
||||
<constraint firstItem="wIH-Kd-r7q" firstAttribute="top" secondItem="54b-4O-ip9" secondAttribute="bottom" constant="5" id="grf-0I-rwT"/>
|
||||
<constraint firstItem="54b-4O-ip9" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="xWb-IJ-v7F" secondAttribute="leading" constant="8" id="phW-Yy-zN7"/>
|
||||
<constraint firstAttribute="centerX" secondItem="wIH-Kd-r7q" secondAttribute="centerX" id="rTd-Qc-xrD"/>
|
||||
<constraint firstAttribute="centerX" secondItem="30E-gm-z6O" secondAttribute="centerX" id="sSN-PO-Q6t"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AJ2-lJ-NUq">
|
||||
<rect key="frame" x="19" y="333" width="123" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="1mr-dZ-KtP"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Forgot password?">
|
||||
<color key="titleColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="onButtonPressed:" destination="-1" eventType="touchUpInside" id="UVJ-Re-xe2"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="k3J-Eg-itz" userLabel="SubmitBtn">
|
||||
<rect key="frame" x="469" y="333" width="120" height="30"/>
|
||||
<color key="backgroundColor" red="0.028153735480000001" green="0.82494870580000002" blue="0.051896891280000003" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="120" id="H9x-Zc-0sE"/>
|
||||
<constraint firstAttribute="height" constant="30" id="rR8-KH-2z5"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/>
|
||||
<state key="normal" title="Log In">
|
||||
<color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="onButtonPressed:" destination="-1" eventType="touchUpInside" id="Ocd-Ag-6hf"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" lineBreakMode="middleTruncation" hasAttributedTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="6yx-o1-vbD">
|
||||
<rect key="frame" x="19" y="373" width="562" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="buF-NU-DPO"/>
|
||||
</constraints>
|
||||
<inset key="titleEdgeInsets" minX="8" minY="0.0" maxX="0.0" maxY="0.0"/>
|
||||
<state key="normal" image="untick.png">
|
||||
<attributedString key="attributedTitle">
|
||||
<fragment content="Use custom server options">
|
||||
<attributes>
|
||||
<font key="NSFont" size="14" name="HelveticaNeue"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
</attributedString>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="onButtonPressed:" destination="-1" eventType="touchUpInside" id="oEd-H1-EDj"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uOi-KN-l9I" userLabel="ServerOptionsContainerView">
|
||||
<rect key="frame" x="0.0" y="406" width="600" height="140"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1YY-gb-LG4">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="70"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Home Server:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kHf-s1-cZa">
|
||||
<rect key="frame" x="18" y="8" width="564" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="SgI-dz-C8b"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="URL (e.g. https://matrix.org)" adjustsFontSizeToFit="NO" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="G8l-AP-iRs">
|
||||
<rect key="frame" x="18" y="36" width="564" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="21" id="RT2-FT-tLZ"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="UVr-c4-V8L"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZZP-eI-bXP">
|
||||
<rect key="frame" x="10" y="69" width="580" height="1"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="XdZ-tB-v6d"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="G8l-AP-iRs" firstAttribute="leading" secondItem="1YY-gb-LG4" secondAttribute="leading" constant="18" id="0tL-7X-7HQ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ZZP-eI-bXP" secondAttribute="bottom" id="1JS-eI-7hU"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ZZP-eI-bXP" secondAttribute="trailing" constant="10" id="9q3-GY-TrI"/>
|
||||
<constraint firstItem="kHf-s1-cZa" firstAttribute="leading" secondItem="1YY-gb-LG4" secondAttribute="leading" constant="18" id="Bww-He-GGJ"/>
|
||||
<constraint firstItem="G8l-AP-iRs" firstAttribute="top" secondItem="kHf-s1-cZa" secondAttribute="bottom" constant="8" id="HUb-A5-Fnn"/>
|
||||
<constraint firstAttribute="trailing" secondItem="kHf-s1-cZa" secondAttribute="trailing" constant="18" id="K4u-XW-UqK"/>
|
||||
<constraint firstAttribute="trailing" secondItem="G8l-AP-iRs" secondAttribute="trailing" constant="18" id="O7t-Uf-wPo"/>
|
||||
<constraint firstItem="kHf-s1-cZa" firstAttribute="top" secondItem="1YY-gb-LG4" secondAttribute="top" constant="8" id="l9i-gw-NaZ"/>
|
||||
<constraint firstItem="ZZP-eI-bXP" firstAttribute="leading" secondItem="1YY-gb-LG4" secondAttribute="leading" constant="10" id="rbh-mU-NLC"/>
|
||||
<constraint firstAttribute="height" constant="70" id="wa1-77-Lb4"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kjJ-Tb-SIW">
|
||||
<rect key="frame" x="0.0" y="70" width="600" height="70"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Identity Server:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5CT-Ht-Z3v">
|
||||
<rect key="frame" x="18" y="8" width="564" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="aWu-GG-POi"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="URL (e.g. https://matrix.org)" adjustsFontSizeToFit="NO" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="PZC-Hd-Q6a">
|
||||
<rect key="frame" x="18" y="36" width="564" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="21" id="XTt-dw-c6p"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="nZF-by-6t6"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="t08-ua-0mJ">
|
||||
<rect key="frame" x="10" y="69" width="580" height="1"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="h6p-cH-vPq"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="PZC-Hd-Q6a" firstAttribute="leading" secondItem="kjJ-Tb-SIW" secondAttribute="leading" constant="18" id="Khv-I4-mWb"/>
|
||||
<constraint firstAttribute="trailing" secondItem="PZC-Hd-Q6a" secondAttribute="trailing" constant="18" id="VJ7-z3-LW3"/>
|
||||
<constraint firstAttribute="bottom" secondItem="t08-ua-0mJ" secondAttribute="bottom" id="VNJ-sn-cbd"/>
|
||||
<constraint firstItem="t08-ua-0mJ" firstAttribute="leading" secondItem="kjJ-Tb-SIW" secondAttribute="leading" constant="10" id="aaN-eN-yz7"/>
|
||||
<constraint firstItem="PZC-Hd-Q6a" firstAttribute="top" secondItem="5CT-Ht-Z3v" secondAttribute="bottom" constant="8" id="bZn-CT-m7K"/>
|
||||
<constraint firstItem="5CT-Ht-Z3v" firstAttribute="leading" secondItem="kjJ-Tb-SIW" secondAttribute="leading" constant="18" id="e5q-YY-hSP"/>
|
||||
<constraint firstAttribute="height" constant="70" id="kCj-jw-q4B"/>
|
||||
<constraint firstItem="5CT-Ht-Z3v" firstAttribute="top" secondItem="kjJ-Tb-SIW" secondAttribute="top" constant="8" id="r5R-Ap-b9I"/>
|
||||
<constraint firstAttribute="trailing" secondItem="5CT-Ht-Z3v" secondAttribute="trailing" constant="18" id="smO-Tz-CPx"/>
|
||||
<constraint firstAttribute="trailing" secondItem="t08-ua-0mJ" secondAttribute="trailing" constant="10" id="z9T-Cv-5SH"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="1YY-gb-LG4" firstAttribute="top" secondItem="uOi-KN-l9I" secondAttribute="top" id="6LT-5K-ftH"/>
|
||||
<constraint firstItem="kjJ-Tb-SIW" firstAttribute="leading" secondItem="uOi-KN-l9I" secondAttribute="leading" id="GJK-3l-t3Y"/>
|
||||
<constraint firstAttribute="trailing" secondItem="1YY-gb-LG4" secondAttribute="trailing" id="M3s-AR-hKf"/>
|
||||
<constraint firstAttribute="height" constant="140" id="aWW-v9-LSk"/>
|
||||
<constraint firstAttribute="trailing" secondItem="kjJ-Tb-SIW" secondAttribute="trailing" id="eIu-yM-Lhs"/>
|
||||
<constraint firstItem="1YY-gb-LG4" firstAttribute="leading" secondItem="uOi-KN-l9I" secondAttribute="leading" id="mGS-4h-HKB"/>
|
||||
<constraint firstItem="kjJ-Tb-SIW" firstAttribute="top" secondItem="uOi-KN-l9I" secondAttribute="top" constant="70" id="n8T-xk-7sh"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="uOi-KN-l9I" secondAttribute="trailing" id="1Sf-bE-wYd"/>
|
||||
<constraint firstItem="uOi-KN-l9I" firstAttribute="leading" secondItem="rhx-dD-4EJ" secondAttribute="leading" id="2fA-Yk-wWM"/>
|
||||
<constraint firstAttribute="height" constant="555" id="6v6-fz-e8o"/>
|
||||
<constraint firstItem="k3J-Eg-itz" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="AJ2-lJ-NUq" secondAttribute="trailing" constant="10" id="Dqz-kf-feR"/>
|
||||
<constraint firstItem="6yx-o1-vbD" firstAttribute="leading" secondItem="rhx-dD-4EJ" secondAttribute="leading" constant="19" id="N10-Ro-yH2"/>
|
||||
<constraint firstAttribute="trailing" secondItem="6yx-o1-vbD" secondAttribute="trailing" constant="19" id="OOw-6o-Tgu"/>
|
||||
<constraint firstItem="uOi-KN-l9I" firstAttribute="top" secondItem="rhx-dD-4EJ" secondAttribute="top" constant="406" id="XV1-Eu-q2K"/>
|
||||
<constraint firstItem="xWb-IJ-v7F" firstAttribute="leading" secondItem="rhx-dD-4EJ" secondAttribute="leading" id="YnP-Nk-QxR"/>
|
||||
<constraint firstItem="6yx-o1-vbD" firstAttribute="top" secondItem="AJ2-lJ-NUq" secondAttribute="bottom" constant="10" id="aKJ-nR-LVK"/>
|
||||
<constraint firstItem="k3J-Eg-itz" firstAttribute="top" secondItem="rhx-dD-4EJ" secondAttribute="top" constant="333" id="bga-yP-JTC"/>
|
||||
<constraint firstAttribute="width" constant="600" placeholder="YES" id="hOT-Wn-hIb"/>
|
||||
<constraint firstAttribute="trailing" secondItem="xWb-IJ-v7F" secondAttribute="trailing" id="hko-ol-XDd"/>
|
||||
<constraint firstAttribute="trailing" secondItem="k3J-Eg-itz" secondAttribute="trailing" constant="11" id="i9P-es-EQL"/>
|
||||
<constraint firstItem="AJ2-lJ-NUq" firstAttribute="leading" secondItem="rhx-dD-4EJ" secondAttribute="leading" constant="19" id="j4p-mo-ZxL"/>
|
||||
<constraint firstItem="xWb-IJ-v7F" firstAttribute="top" secondItem="rhx-dD-4EJ" secondAttribute="top" constant="76" id="khR-Uj-OTH"/>
|
||||
<constraint firstItem="d8r-TX-pwX" firstAttribute="top" secondItem="rhx-dD-4EJ" secondAttribute="top" constant="30" id="l68-Ta-YKg"/>
|
||||
<constraint firstAttribute="centerX" secondItem="d8r-TX-pwX" secondAttribute="centerX" id="l6k-EH-Yb8"/>
|
||||
<constraint firstItem="AJ2-lJ-NUq" firstAttribute="centerY" secondItem="k3J-Eg-itz" secondAttribute="centerY" id="xNG-4j-ETw"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="rhx-dD-4EJ" secondAttribute="bottom" id="0Ex-X9-7WC"/>
|
||||
<constraint firstAttribute="trailing" secondItem="rhx-dD-4EJ" secondAttribute="trailing" id="Ztq-8U-wlX"/>
|
||||
<constraint firstItem="rhx-dD-4EJ" firstAttribute="top" secondItem="OHV-KQ-Ww0" secondAttribute="top" id="ePD-me-ymh"/>
|
||||
<constraint firstItem="rhx-dD-4EJ" firstAttribute="leading" secondItem="OHV-KQ-Ww0" secondAttribute="leading" id="h1J-cn-QL1"/>
|
||||
</constraints>
|
||||
</scrollView>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="q1e-Wg-6t7" userLabel="Authentication Fallback ContentView">
|
||||
<rect key="frame" x="0.0" y="20" width="600" height="580"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9qj-5c-Sfb">
|
||||
<rect key="frame" x="542" y="5" width="50" height="35"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="50" id="GMq-PF-fBv"/>
|
||||
<constraint firstAttribute="height" constant="35" id="KfQ-gX-IHF"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Cancel">
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="onButtonPressed:" destination="-1" eventType="touchUpInside" id="Pxo-2q-AdE"/>
|
||||
</connections>
|
||||
</button>
|
||||
<webView contentMode="scaleToFill" scalesPageToFit="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Vhh-m0-nXN" userLabel="fallback WebView" customClass="MXKAuthenticationFallbackWebView">
|
||||
<rect key="frame" x="0.0" y="40" width="600" height="540"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</webView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Vhh-m0-nXN" firstAttribute="leading" secondItem="q1e-Wg-6t7" secondAttribute="leading" id="8zH-1r-Jgh"/>
|
||||
<constraint firstAttribute="trailing" secondItem="9qj-5c-Sfb" secondAttribute="trailing" constant="8" id="AUi-MV-V60"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Vhh-m0-nXN" secondAttribute="trailing" id="K9n-rL-E72"/>
|
||||
<constraint firstItem="9qj-5c-Sfb" firstAttribute="top" secondItem="q1e-Wg-6t7" secondAttribute="top" constant="5" id="ZKZ-pg-xzV"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Vhh-m0-nXN" secondAttribute="bottom" id="qEl-Dd-BlB"/>
|
||||
<constraint firstItem="Vhh-m0-nXN" firstAttribute="top" secondItem="9qj-5c-Sfb" secondAttribute="bottom" id="uCo-aG-Xa8"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="OHV-KQ-Ww0" firstAttribute="leading" secondItem="5rn-KE-plm" secondAttribute="leading" id="1Rd-Il-6MW"/>
|
||||
<constraint firstAttribute="trailing" secondItem="k7D-Gy-yBR" secondAttribute="trailing" id="5VB-NY-mpo"/>
|
||||
<constraint firstAttribute="trailing" secondItem="izX-ya-hXh" secondAttribute="trailing" id="8Ae-F5-jr2"/>
|
||||
<constraint firstAttribute="bottom" secondItem="q1e-Wg-6t7" secondAttribute="bottom" id="8Bc-V7-iP3"/>
|
||||
<constraint firstItem="k7D-Gy-yBR" firstAttribute="top" secondItem="5rn-KE-plm" secondAttribute="top" constant="20" id="BIH-pR-miA"/>
|
||||
<constraint firstItem="q1e-Wg-6t7" firstAttribute="leading" secondItem="5rn-KE-plm" secondAttribute="leading" id="DiC-Ui-3Wk"/>
|
||||
<constraint firstItem="OHV-KQ-Ww0" firstAttribute="top" secondItem="izX-ya-hXh" secondAttribute="bottom" id="Epg-2f-qa1"/>
|
||||
<constraint firstItem="OHV-KQ-Ww0" firstAttribute="top" secondItem="5rn-KE-plm" secondAttribute="top" constant="20" symbolic="YES" id="FGm-jm-8r0"/>
|
||||
<constraint firstAttribute="trailing" secondItem="OHV-KQ-Ww0" secondAttribute="trailing" id="KAu-Wf-ojt"/>
|
||||
<constraint firstItem="izX-ya-hXh" firstAttribute="leading" secondItem="5rn-KE-plm" secondAttribute="leading" id="MrU-gL-vGG"/>
|
||||
<constraint firstAttribute="trailing" secondItem="q1e-Wg-6t7" secondAttribute="trailing" id="XIS-Jp-qZf"/>
|
||||
<constraint firstItem="OHV-KQ-Ww0" firstAttribute="top" secondItem="k7D-Gy-yBR" secondAttribute="bottom" id="aCW-Po-Hty"/>
|
||||
<constraint firstAttribute="bottom" secondItem="OHV-KQ-Ww0" secondAttribute="bottom" id="g7o-eO-7Yr"/>
|
||||
<constraint firstItem="q1e-Wg-6t7" firstAttribute="top" secondItem="5rn-KE-plm" secondAttribute="top" constant="20" id="sT2-HR-vou"/>
|
||||
<constraint firstItem="k7D-Gy-yBR" firstAttribute="leading" secondItem="5rn-KE-plm" secondAttribute="leading" id="z6D-6L-5Ud"/>
|
||||
</constraints>
|
||||
<variation key="default">
|
||||
<mask key="constraints">
|
||||
<exclude reference="FGm-jm-8r0"/>
|
||||
</mask>
|
||||
</variation>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="logo.png" width="40" height="40"/>
|
||||
<image name="untick.png" width="31" height="31"/>
|
||||
</resources>
|
||||
</document>
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
Copyright 2015 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 <MatrixKit/MatrixKit.h>
|
||||
|
||||
@interface AuthInputsEmailIdentityBasedView : MXKAuthInputsView
|
||||
|
||||
/**
|
||||
The input text field used to fill an email.
|
||||
*/
|
||||
@property (weak, nonatomic) IBOutlet UITextField *emailTextField;
|
||||
|
||||
/**
|
||||
The input text field used to fill the password.
|
||||
*/
|
||||
@property (weak, nonatomic) IBOutlet UITextField *passWordTextField;
|
||||
|
||||
@end
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
Copyright 2015 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 "AuthInputsEmailIdentityBasedView.h"
|
||||
|
||||
@implementation AuthInputsEmailIdentityBasedView
|
||||
|
||||
+ (UINib *)nib
|
||||
{
|
||||
return [UINib nibWithNibName:NSStringFromClass([AuthInputsEmailIdentityBasedView class])
|
||||
bundle:[NSBundle bundleForClass:[AuthInputsEmailIdentityBasedView class]]];
|
||||
}
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
|
||||
_emailTextField.placeholder = NSLocalizedStringFromTable(@"auth_email_placeholder", @"Vector", nil);
|
||||
_passWordTextField.placeholder = NSLocalizedStringFromTable(@"auth_password_placeholder", @"Vector", nil);
|
||||
|
||||
self.passWordTextField.returnKeyType = UIReturnKeyDone;
|
||||
}
|
||||
|
||||
- (BOOL)areAllRequiredFieldsFilled
|
||||
{
|
||||
BOOL ret = [super areAllRequiredFieldsFilled];
|
||||
|
||||
// Check user email and pass fields
|
||||
ret = (ret && self.emailTextField.text.length && self.passWordTextField.text.length);
|
||||
return ret;
|
||||
}
|
||||
|
||||
- (void)dismissKeyboard
|
||||
{
|
||||
[self.passWordTextField resignFirstResponder];
|
||||
[self.emailTextField resignFirstResponder];
|
||||
|
||||
[super dismissKeyboard];
|
||||
}
|
||||
|
||||
#pragma mark UITextField delegate
|
||||
|
||||
- (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.emailTextField)
|
||||
{
|
||||
[self.passWordTextField becomeFirstResponder];
|
||||
}
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
@end
|
||||
@@ -1,57 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="8191" systemVersion="14F27" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8154"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="x74-04-ezp" customClass="AuthInputsEmailIdentityBasedView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="84"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Email address" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="i51-ym-i9T">
|
||||
<rect key="frame" x="14" y="8" width="272" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="272" id="IhR-uY-MJZ"/>
|
||||
<constraint firstAttribute="height" constant="30" id="x3j-uC-j0U"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits" returnKeyType="next"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="x74-04-ezp" id="LcQ-A2-9mF"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="Password" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="6rs-rR-DkS">
|
||||
<rect key="frame" x="14" y="46" width="272" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="Fh2-oZ-UBe"/>
|
||||
<constraint firstAttribute="width" constant="272" id="pCs-je-5Rd"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done" secureTextEntry="YES"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="x74-04-ezp" id="QPi-9N-663"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="i51-ym-i9T" firstAttribute="top" secondItem="x74-04-ezp" secondAttribute="top" constant="8" id="2sO-Wi-AFi"/>
|
||||
<constraint firstItem="6rs-rR-DkS" firstAttribute="top" secondItem="i51-ym-i9T" secondAttribute="bottom" constant="8" id="EJf-md-dcj"/>
|
||||
<constraint firstAttribute="width" constant="300" id="ERU-Wm-hMV"/>
|
||||
<constraint firstAttribute="bottom" secondItem="6rs-rR-DkS" secondAttribute="bottom" constant="8" id="Nip-Se-aLL"/>
|
||||
<constraint firstAttribute="centerX" secondItem="i51-ym-i9T" secondAttribute="centerX" id="WKP-y0-Jon"/>
|
||||
<constraint firstAttribute="centerX" secondItem="6rs-rR-DkS" secondAttribute="centerX" id="nIk-ev-cFe"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<nil key="simulatedTopBarMetrics"/>
|
||||
<nil key="simulatedBottomBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<connections>
|
||||
<outlet property="emailTextField" destination="i51-ym-i9T" id="0Ti-aL-YWl"/>
|
||||
<outlet property="passWordTextField" destination="6rs-rR-DkS" id="VeL-kt-Fpp"/>
|
||||
</connections>
|
||||
</view>
|
||||
</objects>
|
||||
</document>
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
Copyright 2016 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 "MXKAuthInputsPasswordBasedView.h"
|
||||
|
||||
@interface AuthInputsPasswordBasedView : MXKAuthInputsPasswordBasedView
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UITextField *repeatPasswordTextField;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView *userLoginContainer;
|
||||
@property (weak, nonatomic) IBOutlet UIView *emailContainer;
|
||||
@property (weak, nonatomic) IBOutlet UIView *passwordContainer;
|
||||
@property (weak, nonatomic) IBOutlet UIView *repeatPasswordContainer;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView *userLoginSeparator;
|
||||
@property (weak, nonatomic) IBOutlet UIView *emailSeparator;
|
||||
@property (weak, nonatomic) IBOutlet UIView *passwordSeparator;
|
||||
@property (weak, nonatomic) IBOutlet UIView *repeatPasswordSeparator;
|
||||
|
||||
|
||||
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *passwordContainerTopConstraint;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
Copyright 2016 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 "AuthInputsPasswordBasedView.h"
|
||||
|
||||
#import "NSBundle+MatrixKit.h"
|
||||
|
||||
#import "VectorDesignValues.h"
|
||||
|
||||
@implementation AuthInputsPasswordBasedView
|
||||
|
||||
+ (UINib *)nib
|
||||
{
|
||||
return [UINib nibWithNibName:NSStringFromClass(self)
|
||||
bundle:[NSBundle bundleForClass:self]];
|
||||
}
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
|
||||
_repeatPasswordTextField.placeholder = NSLocalizedStringFromTable(@"auth_repeat_password_placeholder", @"Vector", nil);
|
||||
_repeatPasswordTextField.textColor = VECTOR_TEXT_BLACK_COLOR;
|
||||
|
||||
self.userLoginTextField.placeholder = NSLocalizedStringFromTable(@"auth_user_id_placeholder", @"Vector", nil);
|
||||
self.userLoginTextField.textColor = VECTOR_TEXT_BLACK_COLOR;
|
||||
|
||||
self.passWordTextField.placeholder = NSLocalizedStringFromTable(@"auth_password_placeholder", @"Vector", nil);
|
||||
self.passWordTextField.textColor = VECTOR_TEXT_BLACK_COLOR;
|
||||
|
||||
self.emailTextField.placeholder = NSLocalizedStringFromTable(@"auth_email_placeholder", @"Vector", nil);
|
||||
self.emailTextField.textColor = VECTOR_TEXT_BLACK_COLOR;
|
||||
}
|
||||
|
||||
- (CGFloat)actualHeight
|
||||
{
|
||||
return self.viewHeightConstraint.constant;
|
||||
}
|
||||
|
||||
- (BOOL)areAllRequiredFieldsFilled
|
||||
{
|
||||
if (self.authType == MXKAuthenticationTypeLogin)
|
||||
{
|
||||
return (self.userLoginTextField.text.length && self.passWordTextField.text.length);
|
||||
}
|
||||
|
||||
return (self.userLoginTextField.text.length && self.emailTextField.text.length && self.passWordTextField.text.length && self.repeatPasswordTextField.text.length);
|
||||
}
|
||||
|
||||
- (void)setAuthType:(MXKAuthenticationType)authType
|
||||
{
|
||||
super.authType = authType;
|
||||
|
||||
if (authType == MXKAuthenticationTypeLogin)
|
||||
{
|
||||
self.userLoginTextField.placeholder = NSLocalizedStringFromTable(@"auth_user_id_placeholder", @"Vector", nil);
|
||||
|
||||
self.passwordContainerTopConstraint.constant = 50;
|
||||
|
||||
self.emailContainer.hidden = YES;
|
||||
self.repeatPasswordContainer.hidden = YES;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.userLoginTextField.placeholder = NSLocalizedStringFromTable(@"auth_user_name_placeholder", @"Vector", nil);
|
||||
|
||||
self.passwordContainerTopConstraint.constant = 100;
|
||||
|
||||
self.emailContainer.hidden = NO;
|
||||
self.repeatPasswordContainer.hidden = NO;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)dismissKeyboard
|
||||
{
|
||||
[self.userLoginTextField resignFirstResponder];
|
||||
[self.passWordTextField resignFirstResponder];
|
||||
[self.emailTextField resignFirstResponder];
|
||||
[self.repeatPasswordTextField resignFirstResponder];
|
||||
}
|
||||
|
||||
#pragma mark UITextField delegate
|
||||
|
||||
- (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)
|
||||
{
|
||||
if (self.emailContainer.isHidden)
|
||||
{
|
||||
[self.passWordTextField becomeFirstResponder];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.emailTextField becomeFirstResponder];
|
||||
}
|
||||
}
|
||||
else if (textField == self.emailTextField)
|
||||
{
|
||||
[self.passwordContainer becomeFirstResponder];
|
||||
}
|
||||
else if (textField == self.passWordTextField)
|
||||
{
|
||||
[self.repeatPasswordTextField becomeFirstResponder];
|
||||
}
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
@end
|
||||
@@ -0,0 +1,184 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="x74-04-ezp" customClass="AuthInputsPasswordBasedView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="200"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xOW-lo-QGC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="50"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Email or user name" adjustsFontSizeToFit="NO" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="i51-ym-i9T">
|
||||
<rect key="frame" x="18" y="18" width="564" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="21" id="x3j-uC-j0U"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="x74-04-ezp" id="cIj-f6-NKj"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Kqj-Ol-DR6">
|
||||
<rect key="frame" x="10" y="49" width="580" height="1"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="nbP-a0-tLN"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="Kqj-Ol-DR6" secondAttribute="trailing" constant="10" id="Fc5-Fe-lsm"/>
|
||||
<constraint firstItem="i51-ym-i9T" firstAttribute="leading" secondItem="xOW-lo-QGC" secondAttribute="leading" constant="18" id="GmY-6I-8F9"/>
|
||||
<constraint firstAttribute="trailing" secondItem="i51-ym-i9T" secondAttribute="trailing" constant="18" id="XSY-7f-BTe"/>
|
||||
<constraint firstItem="i51-ym-i9T" firstAttribute="top" secondItem="xOW-lo-QGC" secondAttribute="top" constant="18" id="cUj-8U-uxp"/>
|
||||
<constraint firstAttribute="height" constant="50" id="crt-JN-TaR"/>
|
||||
<constraint firstItem="Kqj-Ol-DR6" firstAttribute="leading" secondItem="xOW-lo-QGC" secondAttribute="leading" constant="10" id="qAe-fc-Omy"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Kqj-Ol-DR6" secondAttribute="bottom" id="xhI-Sl-SEv"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UfH-jv-6w4">
|
||||
<rect key="frame" x="0.0" y="50" width="600" height="50"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Password" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="6rs-rR-DkS">
|
||||
<rect key="frame" x="18" y="18" width="564" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="21" id="iai-tB-l7T"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done" secureTextEntry="YES"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="x74-04-ezp" id="GjY-xZ-s5J"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vUH-bJ-5gJ">
|
||||
<rect key="frame" x="10" y="49" width="580" height="1"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="31n-kG-Ka9"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="6rs-rR-DkS" firstAttribute="leading" secondItem="UfH-jv-6w4" secondAttribute="leading" constant="18" id="3x6-dS-z8n"/>
|
||||
<constraint firstItem="6rs-rR-DkS" firstAttribute="top" secondItem="UfH-jv-6w4" secondAttribute="top" constant="18" id="On3-vo-idU"/>
|
||||
<constraint firstAttribute="height" constant="50" id="Tfr-nK-79j"/>
|
||||
<constraint firstAttribute="trailing" secondItem="vUH-bJ-5gJ" secondAttribute="trailing" constant="10" id="Unk-xg-I4s"/>
|
||||
<constraint firstItem="vUH-bJ-5gJ" firstAttribute="leading" secondItem="UfH-jv-6w4" secondAttribute="leading" constant="10" id="kDs-d1-r3h"/>
|
||||
<constraint firstAttribute="trailing" secondItem="6rs-rR-DkS" secondAttribute="trailing" constant="18" id="p8i-KE-71B"/>
|
||||
<constraint firstAttribute="bottom" secondItem="vUH-bJ-5gJ" secondAttribute="bottom" id="zwd-xh-eDk"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bXz-VI-5FS">
|
||||
<rect key="frame" x="0.0" y="50" width="600" height="50"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Email address" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="odF-W1-Vdr">
|
||||
<rect key="frame" x="18" y="18" width="564" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="21" id="Kvu-hz-22A"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done" secureTextEntry="YES"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="x74-04-ezp" id="ViI-x8-eWu"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YQ4-Kj-XPh">
|
||||
<rect key="frame" x="10" y="49" width="580" height="1"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="ZLw-Hh-BkN"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="YQ4-Kj-XPh" firstAttribute="leading" secondItem="bXz-VI-5FS" secondAttribute="leading" constant="10" id="0Lj-tL-8mV"/>
|
||||
<constraint firstAttribute="trailing" secondItem="YQ4-Kj-XPh" secondAttribute="trailing" constant="10" id="JTP-Rx-FsE"/>
|
||||
<constraint firstItem="odF-W1-Vdr" firstAttribute="leading" secondItem="bXz-VI-5FS" secondAttribute="leading" constant="18" id="LlG-Lg-woQ"/>
|
||||
<constraint firstAttribute="trailing" secondItem="odF-W1-Vdr" secondAttribute="trailing" constant="18" id="VLl-bq-aHE"/>
|
||||
<constraint firstItem="odF-W1-Vdr" firstAttribute="top" secondItem="bXz-VI-5FS" secondAttribute="top" constant="18" id="fso-d2-GyZ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="YQ4-Kj-XPh" secondAttribute="bottom" id="tOd-El-ztB"/>
|
||||
<constraint firstAttribute="height" constant="50" id="toP-dC-Aiz"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rb1-L5-udI">
|
||||
<rect key="frame" x="0.0" y="150" width="600" height="50"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Repeat password" adjustsFontSizeToFit="NO" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="BQM-LP-8Eq">
|
||||
<rect key="frame" x="18" y="18" width="564" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="21" id="87Q-0f-X45"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next" secureTextEntry="YES"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="x74-04-ezp" id="28g-3U-BBM"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ddx-5u-PbG">
|
||||
<rect key="frame" x="10" y="49" width="580" height="1"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="1" id="XYi-5d-bZs"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="ddx-5u-PbG" secondAttribute="trailing" constant="10" id="1BD-IR-hbK"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ddx-5u-PbG" secondAttribute="bottom" id="20V-Dg-8wr"/>
|
||||
<constraint firstAttribute="height" constant="50" id="3q4-4P-iJB"/>
|
||||
<constraint firstItem="ddx-5u-PbG" firstAttribute="leading" secondItem="rb1-L5-udI" secondAttribute="leading" constant="10" id="5hT-vS-fCs"/>
|
||||
<constraint firstItem="BQM-LP-8Eq" firstAttribute="leading" secondItem="rb1-L5-udI" secondAttribute="leading" constant="18" id="Q4d-UG-Pdq"/>
|
||||
<constraint firstAttribute="trailing" secondItem="BQM-LP-8Eq" secondAttribute="trailing" constant="18" id="szW-TY-aUw"/>
|
||||
<constraint firstItem="BQM-LP-8Eq" firstAttribute="top" secondItem="rb1-L5-udI" secondAttribute="top" constant="18" id="yhI-hm-zp5"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="UfH-jv-6w4" firstAttribute="top" secondItem="x74-04-ezp" secondAttribute="top" constant="50" id="1LY-GW-rgL"/>
|
||||
<constraint firstItem="rb1-L5-udI" firstAttribute="top" secondItem="x74-04-ezp" secondAttribute="top" constant="150" id="75U-tx-PsQ"/>
|
||||
<constraint firstItem="UfH-jv-6w4" firstAttribute="leading" secondItem="x74-04-ezp" secondAttribute="leading" id="7Bk-GF-MZ0"/>
|
||||
<constraint firstAttribute="trailing" secondItem="UfH-jv-6w4" secondAttribute="trailing" id="8dz-wY-Kxx"/>
|
||||
<constraint firstItem="bXz-VI-5FS" firstAttribute="leading" secondItem="x74-04-ezp" secondAttribute="leading" id="Frq-sH-HZT"/>
|
||||
<constraint firstItem="xOW-lo-QGC" firstAttribute="leading" secondItem="x74-04-ezp" secondAttribute="leading" id="NOu-LR-RvE"/>
|
||||
<constraint firstAttribute="trailing" secondItem="bXz-VI-5FS" secondAttribute="trailing" id="NiV-pJ-PfV"/>
|
||||
<constraint firstAttribute="trailing" secondItem="xOW-lo-QGC" secondAttribute="trailing" id="SNm-WQ-Piu"/>
|
||||
<constraint firstItem="xOW-lo-QGC" firstAttribute="top" secondItem="x74-04-ezp" secondAttribute="top" id="WmX-gO-hPJ"/>
|
||||
<constraint firstItem="rb1-L5-udI" firstAttribute="leading" secondItem="x74-04-ezp" secondAttribute="leading" id="XAJ-ST-sWV"/>
|
||||
<constraint firstAttribute="trailing" secondItem="rb1-L5-udI" secondAttribute="trailing" id="c49-Cf-H9a"/>
|
||||
<constraint firstItem="bXz-VI-5FS" firstAttribute="top" secondItem="x74-04-ezp" secondAttribute="top" constant="50" id="enV-j0-cgR"/>
|
||||
<constraint firstAttribute="height" constant="200" id="qBF-0J-3VM"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<nil key="simulatedTopBarMetrics"/>
|
||||
<nil key="simulatedBottomBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<connections>
|
||||
<outlet property="emailContainer" destination="bXz-VI-5FS" id="4J7-D0-Dmf"/>
|
||||
<outlet property="emailSeparator" destination="YQ4-Kj-XPh" id="iub-NG-iJR"/>
|
||||
<outlet property="emailTextField" destination="odF-W1-Vdr" id="DOS-H7-MZy"/>
|
||||
<outlet property="passWordTextField" destination="6rs-rR-DkS" id="VeL-kt-Fpp"/>
|
||||
<outlet property="passwordContainer" destination="UfH-jv-6w4" id="aGz-rZ-j5q"/>
|
||||
<outlet property="passwordContainerTopConstraint" destination="1LY-GW-rgL" id="feb-7y-uob"/>
|
||||
<outlet property="passwordSeparator" destination="vUH-bJ-5gJ" id="mub-of-o9s"/>
|
||||
<outlet property="repeatPasswordContainer" destination="rb1-L5-udI" id="NjO-O7-WYX"/>
|
||||
<outlet property="repeatPasswordSeparator" destination="ddx-5u-PbG" id="MtA-Rf-dhU"/>
|
||||
<outlet property="repeatPasswordTextField" destination="BQM-LP-8Eq" id="mgM-dU-mJo"/>
|
||||
<outlet property="userLoginContainer" destination="xOW-lo-QGC" id="K4T-Jo-AQz"/>
|
||||
<outlet property="userLoginSeparator" destination="Kqj-Ol-DR6" id="ZjO-Gx-bXl"/>
|
||||
<outlet property="userLoginTextField" destination="i51-ym-i9T" id="XKi-6m-tFv"/>
|
||||
<outlet property="viewHeightConstraint" destination="qBF-0J-3VM" id="GLh-gg-bh5"/>
|
||||
</connections>
|
||||
</view>
|
||||
</objects>
|
||||
</document>
|
||||
Reference in New Issue
Block a user