Redesign Sip Configuration Form
Gitlab: #291
Change-Id: Ic87ceba2d52c3b2abdb02462d9f2602b60a60fd3
diff --git a/Ring/Ring/Constants/Generated/Strings.swift b/Ring/Ring/Constants/Generated/Strings.swift
index f63e696..c8e9488 100644
--- a/Ring/Ring/Constants/Generated/Strings.swift
+++ b/Ring/Ring/Constants/Generated/Strings.swift
@@ -15,6 +15,8 @@
internal static let accountStatus = L10n.tr("Localizable", "account.accountStatus", fallback: "Account Status")
/// Advanced Features
internal static let advancedFeatures = L10n.tr("Localizable", "account.advancedFeatures", fallback: "Advanced Features")
+ /// Configure
+ internal static let configure = L10n.tr("Localizable", "account.configure", fallback: "Configure")
/// Configure a SIP Account
internal static let createSipAccount = L10n.tr("Localizable", "account.createSipAccount", fallback: "Configure a SIP Account")
/// Enable Account
@@ -31,6 +33,8 @@
internal static let proxyServer = L10n.tr("Localizable", "account.proxyServer", fallback: "Proxy")
/// Enter Address
internal static let serverLabel = L10n.tr("Localizable", "account.serverLabel", fallback: "Enter Address")
+ /// SIP Account
+ internal static let sipAccount = L10n.tr("Localizable", "account.sipAccount", fallback: "SIP Account")
/// SIP Server
internal static let sipServer = L10n.tr("Localizable", "account.sipServer", fallback: "SIP Server")
/// User Name
diff --git a/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewController.storyboard b/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewController.storyboard
index 6d14e03..5b1681b 100644
--- a/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewController.storyboard
+++ b/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewController.storyboard
@@ -1,254 +1,314 @@
<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="byn-Xz-pFs">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="tk5-JC-lLy">
<device id="ipad12_9rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
+ <capability name="Named colors" minToolsVersion="9.0"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Create Sip Account View Controller-->
- <scene sceneID="Yj7-CV-TmR">
+ <scene sceneID="n5M-dZ-pfY">
<objects>
- <viewController id="byn-Xz-pFs" customClass="CreateSipAccountViewController" customModule="Ring" customModuleProvider="target" sceneMemberID="viewController">
- <view key="view" contentMode="scaleToFill" id="aFo-X0-5xr">
+ <viewController id="tk5-JC-lLy" customClass="CreateSipAccountViewController" customModule="Ring" customModuleProvider="target" sceneMemberID="viewController">
+ <view key="view" clipsSubviews="YES" contentMode="scaleToFill" id="GkN-sI-a1h">
<rect key="frame" x="0.0" y="0.0" width="1024" height="1366"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
- <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" bounces="NO" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bWc-84-zq0">
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rnk-Ml-lRi">
<rect key="frame" x="0.0" y="0.0" width="1024" height="1346"/>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ </view>
+ <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fSo-UP-cIM">
+ <rect key="frame" x="0.0" y="20" width="1024" height="800"/>
<subviews>
- <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="daQ-3e-VKq">
- <rect key="frame" x="0.0" y="0.0" width="1024" height="510"/>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ggB-y9-1IX">
+ <rect key="frame" x="0.0" y="0.0" width="1024" height="44"/>
<subviews>
- <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="hXV-Wg-kt6">
- <rect key="frame" x="262" y="20" width="500" height="490"/>
- <subviews>
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enter username" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="egE-LH-3eV">
- <rect key="frame" x="0.0" y="0.0" width="125" height="25"/>
- <constraints>
- <constraint firstAttribute="height" constant="25" id="9vc-0c-G5e"/>
- </constraints>
- <fontDescription key="fontDescription" type="system" weight="thin" pointSize="18"/>
- <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
- <nil key="highlightedColor"/>
- </label>
- <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Username" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="z8V-FO-hxu" customClass="DesignableTextField" customModule="Ring" customModuleProvider="target">
- <rect key="frame" x="0.0" y="35" width="500" height="50"/>
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
- <constraints>
- <constraint firstAttribute="height" constant="50" id="u9v-7k-LVp"/>
- </constraints>
- <fontDescription key="fontDescription" type="system" weight="thin" pointSize="18"/>
- <textInputTraits key="textInputTraits" autocorrectionType="no"/>
- <userDefinedRuntimeAttributes>
- <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
- <real key="value" value="1.5"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
- <color key="value" red="0.1215686275" green="0.28627450980000002" blue="0.4431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
- <real key="value" value="0.0"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="boolean" keyPath="roundedCorners" value="YES"/>
- </userDefinedRuntimeAttributes>
- </textField>
- <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PXC-NU-oae">
- <rect key="frame" x="0.0" y="95" width="240" height="5"/>
- <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
- <constraints>
- <constraint firstAttribute="height" constant="5" id="Rj8-pH-S9A"/>
- </constraints>
- </view>
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enter password" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h1h-xB-2Im">
- <rect key="frame" x="0.0" y="110" width="122" height="25"/>
- <constraints>
- <constraint firstAttribute="height" constant="25" id="oaL-if-aDl"/>
- </constraints>
- <fontDescription key="fontDescription" type="system" weight="thin" pointSize="18"/>
- <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
- <nil key="highlightedColor"/>
- </label>
- <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Password" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="N2t-MA-mli" customClass="DesignableTextField" customModule="Ring" customModuleProvider="target">
- <rect key="frame" x="0.0" y="145" width="500" height="50"/>
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
- <constraints>
- <constraint firstAttribute="height" constant="50" id="cE3-Nh-dtO"/>
- </constraints>
- <fontDescription key="fontDescription" type="system" weight="thin" pointSize="18"/>
- <textInputTraits key="textInputTraits" autocorrectionType="no" secureTextEntry="YES"/>
- <userDefinedRuntimeAttributes>
- <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
- <real key="value" value="1.5"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
- <color key="value" red="0.1215686275" green="0.28627450980000002" blue="0.4431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
- <real key="value" value="0.0"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="boolean" keyPath="roundedCorners" value="YES"/>
- </userDefinedRuntimeAttributes>
- </textField>
- <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GBs-8X-160">
- <rect key="frame" x="0.0" y="205" width="240" height="5"/>
- <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
- <constraints>
- <constraint firstAttribute="height" constant="5" id="Nfw-l5-Btp"/>
- </constraints>
- </view>
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enter address" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fvE-N1-hV5">
- <rect key="frame" x="0.0" y="220" width="109" height="25"/>
- <constraints>
- <constraint firstAttribute="height" constant="25" id="l8j-PP-hGk"/>
- </constraints>
- <fontDescription key="fontDescription" type="system" weight="thin" pointSize="18"/>
- <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
- <nil key="highlightedColor"/>
- </label>
- <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="SIP server" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Cvg-vc-c1h" customClass="DesignableTextField" customModule="Ring" customModuleProvider="target">
- <rect key="frame" x="0.0" y="255" width="500" height="50"/>
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
- <constraints>
- <constraint firstAttribute="height" constant="50" id="RY0-bS-AlD"/>
- </constraints>
- <fontDescription key="fontDescription" type="system" weight="thin" pointSize="18"/>
- <textInputTraits key="textInputTraits" autocorrectionType="no"/>
- <userDefinedRuntimeAttributes>
- <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
- <real key="value" value="1.5"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
- <color key="value" red="0.1215686275" green="0.28627450980000002" blue="0.4431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
- <real key="value" value="0.0"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="boolean" keyPath="roundedCorners" value="YES"/>
- </userDefinedRuntimeAttributes>
- </textField>
- <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8dc-VU-ZYw">
- <rect key="frame" x="0.0" y="315" width="240" height="5"/>
- <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
- <constraints>
- <constraint firstAttribute="height" constant="5" id="7t5-jC-VH8"/>
- </constraints>
- </view>
- <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Enter port number" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7Ty-fL-k78">
- <rect key="frame" x="0.0" y="330" width="143.5" height="25"/>
- <constraints>
- <constraint firstAttribute="height" constant="25" id="xic-Xq-kDh"/>
- </constraints>
- <fontDescription key="fontDescription" type="system" weight="thin" pointSize="18"/>
- <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
- <nil key="highlightedColor"/>
- </label>
- <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Port" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Qnv-UR-Yys" customClass="DesignableTextField" customModule="Ring" customModuleProvider="target">
- <rect key="frame" x="0.0" y="365" width="500" height="50"/>
- <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
- <constraints>
- <constraint firstAttribute="height" constant="50" id="3Rx-v3-noT"/>
- </constraints>
- <fontDescription key="fontDescription" type="system" weight="thin" pointSize="18"/>
- <textInputTraits key="textInputTraits" autocorrectionType="no"/>
- <userDefinedRuntimeAttributes>
- <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
- <real key="value" value="1.5"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
- <color key="value" red="0.1215686275" green="0.28627450980000002" blue="0.4431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
- <real key="value" value="0.0"/>
- </userDefinedRuntimeAttribute>
- <userDefinedRuntimeAttribute type="boolean" keyPath="roundedCorners" value="YES"/>
- </userDefinedRuntimeAttributes>
- </textField>
- <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tAe-tp-fMs">
- <rect key="frame" x="0.0" y="425" width="240" height="5"/>
- <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
- <constraints>
- <constraint firstAttribute="height" constant="5" id="ajc-60-oYL"/>
- </constraints>
- </view>
- <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="31a-Gd-rzz" customClass="DesignableButton" customModule="Ring" customModuleProvider="target">
- <rect key="frame" x="0.0" y="440" width="500" height="50"/>
- <constraints>
- <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="250" id="cfM-2g-N92"/>
- <constraint firstAttribute="height" constant="50" id="gOi-cQ-1dn"/>
- <constraint firstAttribute="width" relation="lessThanOrEqual" constant="500" id="lC5-QK-Vni"/>
- </constraints>
- <fontDescription key="fontDescription" type="system" weight="thin" pointSize="18"/>
- <color key="tintColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
- <state key="normal" title="Create account"/>
- <userDefinedRuntimeAttributes>
- <userDefinedRuntimeAttribute type="boolean" keyPath="roundedCorners" value="YES"/>
- </userDefinedRuntimeAttributes>
- </button>
- </subviews>
- <constraints>
- <constraint firstItem="31a-Gd-rzz" firstAttribute="trailing" secondItem="z8V-FO-hxu" secondAttribute="trailing" id="6XO-Wf-Kmr"/>
- <constraint firstItem="N2t-MA-mli" firstAttribute="leading" secondItem="z8V-FO-hxu" secondAttribute="leading" id="Acr-sj-UHT"/>
- <constraint firstItem="Qnv-UR-Yys" firstAttribute="leading" secondItem="z8V-FO-hxu" secondAttribute="leading" id="BEK-Zp-ucN"/>
- <constraint firstItem="N2t-MA-mli" firstAttribute="trailing" secondItem="z8V-FO-hxu" secondAttribute="trailing" id="V4K-Yu-NzQ"/>
- <constraint firstItem="Cvg-vc-c1h" firstAttribute="trailing" secondItem="z8V-FO-hxu" secondAttribute="trailing" id="XxH-Mj-AxB"/>
- <constraint firstItem="Cvg-vc-c1h" firstAttribute="leading" secondItem="z8V-FO-hxu" secondAttribute="leading" id="mUc-GG-N9b"/>
- <constraint firstAttribute="trailing" secondItem="31a-Gd-rzz" secondAttribute="trailing" id="sKj-U2-J65"/>
- <constraint firstItem="Qnv-UR-Yys" firstAttribute="trailing" secondItem="z8V-FO-hxu" secondAttribute="trailing" id="v6i-U1-pPv"/>
- <constraint firstItem="31a-Gd-rzz" firstAttribute="leading" secondItem="z8V-FO-hxu" secondAttribute="leading" id="wK4-xm-lJu"/>
- <constraint firstItem="31a-Gd-rzz" firstAttribute="leading" secondItem="hXV-Wg-kt6" secondAttribute="leading" id="z6Z-fw-Kka"/>
- </constraints>
- </stackView>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Join Jami" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JCX-E2-w12">
+ <rect key="frame" x="473.5" y="12" width="77.5" height="20.5"/>
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="CVH-D1-obP" customClass="DesignableButton" customModule="Ring" customModuleProvider="target">
+ <rect key="frame" x="970" y="5.5" width="34" height="33"/>
+ <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/>
+ <color key="tintColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <state key="normal" title="Join">
+ <color key="titleColor" systemColor="tintColor"/>
+ </state>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Gix-tm-Jvy" customClass="DesignableButton" customModule="Ring" customModuleProvider="target">
+ <rect key="frame" x="16" y="0.0" width="53" height="44"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="tintColor" systemColor="labelColor"/>
+ <state key="normal" title="Cancel">
+ <color key="titleColor" systemColor="tintColor"/>
+ </state>
+ </button>
</subviews>
- <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
- <constraint firstAttribute="bottom" secondItem="hXV-Wg-kt6" secondAttribute="bottom" id="Bm9-i4-cTi"/>
- <constraint firstAttribute="trailing" secondItem="hXV-Wg-kt6" secondAttribute="trailing" priority="750" constant="20" id="JJO-KH-cOP"/>
- <constraint firstItem="hXV-Wg-kt6" firstAttribute="centerX" secondItem="daQ-3e-VKq" secondAttribute="centerX" id="RFU-L5-BJo"/>
- <constraint firstItem="hXV-Wg-kt6" firstAttribute="top" secondItem="daQ-3e-VKq" secondAttribute="top" constant="20" id="VAG-cb-TWE"/>
- <constraint firstItem="hXV-Wg-kt6" firstAttribute="leading" secondItem="daQ-3e-VKq" secondAttribute="leading" priority="750" constant="20" id="tdh-cX-abZ"/>
+ <constraint firstItem="Gix-tm-Jvy" firstAttribute="top" secondItem="ggB-y9-1IX" secondAttribute="top" id="4nS-8V-daa"/>
+ <constraint firstItem="JCX-E2-w12" firstAttribute="centerX" secondItem="ggB-y9-1IX" secondAttribute="centerX" id="MkJ-cz-rSd"/>
+ <constraint firstAttribute="height" constant="44" id="Sly-s8-Zdt"/>
+ <constraint firstAttribute="trailing" secondItem="CVH-D1-obP" secondAttribute="trailing" constant="20" id="W7d-kv-AbG"/>
+ <constraint firstAttribute="bottom" secondItem="Gix-tm-Jvy" secondAttribute="bottom" id="byu-Oe-SAg"/>
+ <constraint firstItem="JCX-E2-w12" firstAttribute="centerY" secondItem="ggB-y9-1IX" secondAttribute="centerY" id="elZ-oE-Y4O"/>
+ <constraint firstItem="CVH-D1-obP" firstAttribute="centerY" secondItem="JCX-E2-w12" secondAttribute="centerY" id="hlg-px-G1C"/>
+ <constraint firstItem="Gix-tm-Jvy" firstAttribute="leading" secondItem="ggB-y9-1IX" secondAttribute="leading" constant="16" id="yhY-NB-rHX"/>
</constraints>
</view>
+ <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="9SD-Gg-OhQ">
+ <rect key="frame" x="0.0" y="80" width="1024" height="670"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="70M-fB-388">
+ <rect key="frame" x="0.0" y="0.0" width="1024" height="126"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YZc-U6-vjb">
+ <rect key="frame" x="0.0" y="0.0" width="1024" height="42"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="v01-eG-JFD">
+ <rect key="frame" x="0.0" y="0.0" width="1024" height="0.5"/>
+ <color key="backgroundColor" name="jamiSeperatorColor"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="0.5" id="NB5-PE-W1i"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8dV-0B-5Hz">
+ <rect key="frame" x="0.0" y="41.5" width="1024" height="0.5"/>
+ <color key="backgroundColor" name="jamiSeperatorColor"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="0.5" id="5Pb-c3-n1J"/>
+ </constraints>
+ </view>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UoY-Ma-CLF">
+ <rect key="frame" x="15" y="0.5" width="37.5" height="41"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="rDl-PB-aGn">
+ <rect key="frame" x="72.5" y="0.5" width="951.5" height="41"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <textInputTraits key="textInputTraits"/>
+ </textField>
+ </subviews>
+ <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+ <constraints>
+ <constraint firstItem="UoY-Ma-CLF" firstAttribute="top" secondItem="v01-eG-JFD" secondAttribute="bottom" id="1H3-AS-Y3B"/>
+ <constraint firstAttribute="bottom" secondItem="8dV-0B-5Hz" secondAttribute="bottom" id="3Ps-pC-UDF"/>
+ <constraint firstItem="8dV-0B-5Hz" firstAttribute="leading" secondItem="YZc-U6-vjb" secondAttribute="leading" id="LAC-aA-Ta4"/>
+ <constraint firstItem="rDl-PB-aGn" firstAttribute="top" secondItem="v01-eG-JFD" secondAttribute="bottom" id="NEO-0n-b1j"/>
+ <constraint firstAttribute="trailing" secondItem="v01-eG-JFD" secondAttribute="trailing" id="Ps5-aa-kDz"/>
+ <constraint firstItem="rDl-PB-aGn" firstAttribute="leading" secondItem="UoY-Ma-CLF" secondAttribute="trailing" constant="20" id="SRW-N2-p4l"/>
+ <constraint firstItem="v01-eG-JFD" firstAttribute="top" secondItem="YZc-U6-vjb" secondAttribute="top" id="dFx-eu-Pnh"/>
+ <constraint firstItem="8dV-0B-5Hz" firstAttribute="top" secondItem="UoY-Ma-CLF" secondAttribute="bottom" id="eqF-rp-abE"/>
+ <constraint firstItem="8dV-0B-5Hz" firstAttribute="top" secondItem="rDl-PB-aGn" secondAttribute="bottom" id="kOd-BN-dGx"/>
+ <constraint firstAttribute="trailing" secondItem="rDl-PB-aGn" secondAttribute="trailing" id="pYj-UX-cjh"/>
+ <constraint firstItem="UoY-Ma-CLF" firstAttribute="leading" secondItem="YZc-U6-vjb" secondAttribute="leading" constant="15" id="qKH-hC-BbN"/>
+ <constraint firstAttribute="height" constant="42" id="qfB-kP-s4c"/>
+ <constraint firstAttribute="trailing" secondItem="8dV-0B-5Hz" secondAttribute="trailing" id="y1P-c1-0PG"/>
+ <constraint firstItem="v01-eG-JFD" firstAttribute="leading" secondItem="YZc-U6-vjb" secondAttribute="leading" id="z5M-se-U3n"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="y5i-16-zwK">
+ <rect key="frame" x="0.0" y="42" width="1024" height="42"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bI8-Eo-Plv">
+ <rect key="frame" x="0.0" y="0.0" width="1024" height="0.5"/>
+ <color key="backgroundColor" name="jamiSeperatorColor"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="0.5" id="Mnh-Th-QiK"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6dl-dN-Z4D">
+ <rect key="frame" x="0.0" y="41.5" width="1024" height="0.5"/>
+ <color key="backgroundColor" name="jamiSeperatorColor"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="0.5" id="Paj-E2-icu"/>
+ </constraints>
+ </view>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eit-UI-cXF">
+ <rect key="frame" x="15" y="0.5" width="37.5" height="41"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="BGE-9M-HRz">
+ <rect key="frame" x="72.5" y="0.5" width="951.5" height="41"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <textInputTraits key="textInputTraits"/>
+ </textField>
+ </subviews>
+ <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+ <constraints>
+ <constraint firstItem="bI8-Eo-Plv" firstAttribute="leading" secondItem="y5i-16-zwK" secondAttribute="leading" id="7GA-LT-fH0"/>
+ <constraint firstItem="eit-UI-cXF" firstAttribute="top" secondItem="bI8-Eo-Plv" secondAttribute="bottom" id="HPD-6r-I8l"/>
+ <constraint firstItem="6dl-dN-Z4D" firstAttribute="leading" secondItem="y5i-16-zwK" secondAttribute="leading" id="IL3-TY-CnV"/>
+ <constraint firstItem="BGE-9M-HRz" firstAttribute="top" secondItem="bI8-Eo-Plv" secondAttribute="bottom" id="IWq-aq-rum"/>
+ <constraint firstAttribute="trailing" secondItem="bI8-Eo-Plv" secondAttribute="trailing" id="NBC-G1-hd6"/>
+ <constraint firstItem="BGE-9M-HRz" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="eit-UI-cXF" secondAttribute="trailing" constant="20" id="Oi4-P4-O3t"/>
+ <constraint firstItem="6dl-dN-Z4D" firstAttribute="top" secondItem="eit-UI-cXF" secondAttribute="bottom" id="hlV-MS-5CX"/>
+ <constraint firstItem="6dl-dN-Z4D" firstAttribute="top" secondItem="BGE-9M-HRz" secondAttribute="bottom" id="mF1-dc-CcQ"/>
+ <constraint firstItem="eit-UI-cXF" firstAttribute="leading" secondItem="y5i-16-zwK" secondAttribute="leading" constant="15" id="pDm-KY-JOY"/>
+ <constraint firstAttribute="trailing" secondItem="BGE-9M-HRz" secondAttribute="trailing" id="r9x-dL-hgi"/>
+ <constraint firstItem="bI8-Eo-Plv" firstAttribute="top" secondItem="y5i-16-zwK" secondAttribute="top" id="smz-1t-Bag"/>
+ <constraint firstAttribute="height" constant="42" id="wBk-nb-2Wz"/>
+ <constraint firstAttribute="bottom" secondItem="6dl-dN-Z4D" secondAttribute="bottom" id="wPN-gb-rfJ"/>
+ <constraint firstAttribute="trailing" secondItem="6dl-dN-Z4D" secondAttribute="trailing" id="wZ1-QQ-B2x"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Q47-d1-krO">
+ <rect key="frame" x="0.0" y="84" width="1024" height="42"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qey-QG-kL5">
+ <rect key="frame" x="0.0" y="0.0" width="1024" height="0.5"/>
+ <color key="backgroundColor" name="jamiSeperatorColor"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="0.5" id="erX-vg-hY6"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="YM8-tI-fCU">
+ <rect key="frame" x="0.0" y="41.5" width="1024" height="0.5"/>
+ <color key="backgroundColor" name="jamiSeperatorColor"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="0.5" id="6OL-q8-UVT"/>
+ </constraints>
+ </view>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M2J-8M-Hh7">
+ <rect key="frame" x="15" y="0.5" width="37.5" height="41"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="8XN-2d-cUY">
+ <rect key="frame" x="72.5" y="0.5" width="951.5" height="41"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <textInputTraits key="textInputTraits"/>
+ </textField>
+ </subviews>
+ <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+ <constraints>
+ <constraint firstItem="8XN-2d-cUY" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="M2J-8M-Hh7" secondAttribute="trailing" constant="20" id="0z2-wB-x4h"/>
+ <constraint firstAttribute="height" constant="42" id="1cZ-Mr-QZ0"/>
+ <constraint firstItem="YM8-tI-fCU" firstAttribute="top" secondItem="8XN-2d-cUY" secondAttribute="bottom" id="4Sk-Q9-jcC"/>
+ <constraint firstAttribute="trailing" secondItem="8XN-2d-cUY" secondAttribute="trailing" id="85u-ct-XIR"/>
+ <constraint firstAttribute="trailing" secondItem="qey-QG-kL5" secondAttribute="trailing" id="Bmp-FP-XXg"/>
+ <constraint firstAttribute="trailing" secondItem="YM8-tI-fCU" secondAttribute="trailing" id="MYF-2W-0kS"/>
+ <constraint firstItem="M2J-8M-Hh7" firstAttribute="leading" secondItem="Q47-d1-krO" secondAttribute="leading" constant="15" id="aZs-uD-5Do"/>
+ <constraint firstItem="M2J-8M-Hh7" firstAttribute="top" secondItem="qey-QG-kL5" secondAttribute="bottom" id="cOV-a8-qM7"/>
+ <constraint firstItem="qey-QG-kL5" firstAttribute="leading" secondItem="Q47-d1-krO" secondAttribute="leading" id="hPR-pP-7nw"/>
+ <constraint firstAttribute="bottom" secondItem="YM8-tI-fCU" secondAttribute="bottom" id="k3N-FK-0or"/>
+ <constraint firstItem="YM8-tI-fCU" firstAttribute="leading" secondItem="Q47-d1-krO" secondAttribute="leading" id="nIp-gP-piA"/>
+ <constraint firstItem="YM8-tI-fCU" firstAttribute="top" secondItem="M2J-8M-Hh7" secondAttribute="bottom" id="uB1-7p-Cf3"/>
+ <constraint firstItem="8XN-2d-cUY" firstAttribute="top" secondItem="qey-QG-kL5" secondAttribute="bottom" id="unT-gn-LQC"/>
+ <constraint firstItem="qey-QG-kL5" firstAttribute="top" secondItem="Q47-d1-krO" secondAttribute="top" id="wk9-AH-bie"/>
+ </constraints>
+ </view>
+ </subviews>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstItem="Q47-d1-krO" firstAttribute="leading" secondItem="y5i-16-zwK" secondAttribute="leading" id="EwZ-hJ-wev"/>
+ <constraint firstAttribute="trailing" secondItem="YZc-U6-vjb" secondAttribute="trailing" id="P97-Vn-aBD"/>
+ <constraint firstItem="BGE-9M-HRz" firstAttribute="leading" secondItem="rDl-PB-aGn" secondAttribute="leading" id="Sb3-pT-Sdf"/>
+ <constraint firstItem="Q47-d1-krO" firstAttribute="trailing" secondItem="y5i-16-zwK" secondAttribute="trailing" id="VVR-ci-OJi"/>
+ <constraint firstItem="y5i-16-zwK" firstAttribute="leading" secondItem="70M-fB-388" secondAttribute="leading" id="Wmq-20-xoY"/>
+ <constraint firstItem="y5i-16-zwK" firstAttribute="top" secondItem="YZc-U6-vjb" secondAttribute="bottom" id="Xo4-bM-Ssr"/>
+ <constraint firstAttribute="trailing" secondItem="y5i-16-zwK" secondAttribute="trailing" id="aPV-WV-0zo"/>
+ <constraint firstItem="8XN-2d-cUY" firstAttribute="leading" secondItem="rDl-PB-aGn" secondAttribute="leading" id="eL6-VX-VuJ"/>
+ <constraint firstItem="YZc-U6-vjb" firstAttribute="top" secondItem="70M-fB-388" secondAttribute="top" id="fE4-Yq-1af"/>
+ <constraint firstItem="Q47-d1-krO" firstAttribute="top" secondItem="y5i-16-zwK" secondAttribute="bottom" id="gD6-bc-wWv"/>
+ <constraint firstItem="YZc-U6-vjb" firstAttribute="leading" secondItem="70M-fB-388" secondAttribute="leading" id="lU2-bI-E57"/>
+ <constraint firstAttribute="bottom" secondItem="Q47-d1-krO" secondAttribute="bottom" id="tlo-vJ-VZw"/>
+ </constraints>
+ </view>
+ </subviews>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstItem="70M-fB-388" firstAttribute="top" secondItem="FSh-5Z-Yju" secondAttribute="top" id="ADy-oS-D3J"/>
+ <constraint firstItem="70M-fB-388" firstAttribute="trailing" secondItem="FSh-5Z-Yju" secondAttribute="trailing" id="Ch1-gq-tEm"/>
+ <constraint firstItem="70M-fB-388" firstAttribute="width" secondItem="emr-wt-FI5" secondAttribute="width" id="Nq3-YT-bUn"/>
+ <constraint firstItem="70M-fB-388" firstAttribute="bottom" secondItem="FSh-5Z-Yju" secondAttribute="bottom" id="ZXm-Wh-zHZ"/>
+ <constraint firstItem="70M-fB-388" firstAttribute="leading" secondItem="FSh-5Z-Yju" secondAttribute="leading" id="aJy-Ww-imm"/>
+ </constraints>
+ <viewLayoutGuide key="contentLayoutGuide" id="FSh-5Z-Yju"/>
+ <viewLayoutGuide key="frameLayoutGuide" id="emr-wt-FI5"/>
+ </scrollView>
</subviews>
+ <color key="backgroundColor" systemColor="secondarySystemBackgroundColor"/>
<constraints>
- <constraint firstItem="daQ-3e-VKq" firstAttribute="trailing" secondItem="KRr-aS-KGV" secondAttribute="trailing" id="2j2-PN-wAR"/>
- <constraint firstItem="daQ-3e-VKq" firstAttribute="width" secondItem="bWc-84-zq0" secondAttribute="width" id="QX6-4x-Qdq"/>
- <constraint firstItem="daQ-3e-VKq" firstAttribute="leading" secondItem="KRr-aS-KGV" secondAttribute="leading" id="hC1-QE-J5Z"/>
- <constraint firstItem="daQ-3e-VKq" firstAttribute="bottom" secondItem="KRr-aS-KGV" secondAttribute="bottom" id="iBz-ha-O9K"/>
- <constraint firstItem="daQ-3e-VKq" firstAttribute="top" secondItem="KRr-aS-KGV" secondAttribute="top" id="tk9-N6-pmH"/>
+ <constraint firstAttribute="trailing" secondItem="9SD-Gg-OhQ" secondAttribute="trailing" id="3Da-k2-Vb3"/>
+ <constraint firstAttribute="bottom" secondItem="9SD-Gg-OhQ" secondAttribute="bottom" constant="50" id="4AD-A9-T90"/>
+ <constraint firstItem="9SD-Gg-OhQ" firstAttribute="leading" secondItem="fSo-UP-cIM" secondAttribute="leading" id="4Jd-lO-HhS"/>
+ <constraint firstItem="ggB-y9-1IX" firstAttribute="top" secondItem="fSo-UP-cIM" secondAttribute="top" id="Lhl-C6-p5H"/>
+ <constraint firstAttribute="trailing" secondItem="ggB-y9-1IX" secondAttribute="trailing" id="aw9-ee-nn8"/>
+ <constraint firstItem="9SD-Gg-OhQ" firstAttribute="top" secondItem="ggB-y9-1IX" secondAttribute="bottom" constant="36" id="eGn-BH-2aI"/>
+ <constraint firstItem="ggB-y9-1IX" firstAttribute="leading" secondItem="fSo-UP-cIM" secondAttribute="leading" id="xm9-xV-LEe"/>
</constraints>
- <viewLayoutGuide key="contentLayoutGuide" id="KRr-aS-KGV"/>
- <viewLayoutGuide key="frameLayoutGuide" id="mB0-cN-odP"/>
- </scrollView>
+ </view>
</subviews>
- <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <viewLayoutGuide key="safeArea" id="E9n-PH-UB4"/>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
- <constraint firstItem="bWc-84-zq0" firstAttribute="top" secondItem="asY-zx-uYD" secondAttribute="top" id="BWt-Ts-r1X"/>
- <constraint firstItem="bWc-84-zq0" firstAttribute="bottom" secondItem="asY-zx-uYD" secondAttribute="bottom" id="NaE-Gc-UqN"/>
- <constraint firstItem="bWc-84-zq0" firstAttribute="trailing" secondItem="asY-zx-uYD" secondAttribute="trailing" id="caV-LG-Eex"/>
- <constraint firstItem="bWc-84-zq0" firstAttribute="leading" secondItem="asY-zx-uYD" secondAttribute="leading" id="hpi-wM-YSd"/>
+ <constraint firstItem="fSo-UP-cIM" firstAttribute="leading" secondItem="E9n-PH-UB4" secondAttribute="leading" id="7vn-I2-Lb1"/>
+ <constraint firstAttribute="bottom" secondItem="fSo-UP-cIM" secondAttribute="bottom" priority="100" id="MuZ-8Q-yhX"/>
+ <constraint firstItem="E9n-PH-UB4" firstAttribute="trailing" secondItem="fSo-UP-cIM" secondAttribute="trailing" id="Pyi-B1-fc5"/>
+ <constraint firstItem="Rnk-Ml-lRi" firstAttribute="top" secondItem="GkN-sI-a1h" secondAttribute="top" id="QvU-ds-nE8"/>
+ <constraint firstItem="Rnk-Ml-lRi" firstAttribute="bottom" secondItem="E9n-PH-UB4" secondAttribute="bottom" id="RoI-FE-vkw"/>
+ <constraint firstItem="E9n-PH-UB4" firstAttribute="trailing" secondItem="Rnk-Ml-lRi" secondAttribute="trailing" id="Vor-ER-NpE"/>
+ <constraint firstItem="Rnk-Ml-lRi" firstAttribute="leading" secondItem="E9n-PH-UB4" secondAttribute="leading" id="mny-aD-en0"/>
+ <constraint firstItem="fSo-UP-cIM" firstAttribute="top" relation="greaterThanOrEqual" secondItem="E9n-PH-UB4" secondAttribute="top" id="qJc-cA-LZk"/>
</constraints>
- <viewLayoutGuide key="safeArea" id="asY-zx-uYD"/>
</view>
+ <navigationItem key="navigationItem" id="qVO-Dh-u99"/>
<connections>
- <outlet property="backgroundView" destination="daQ-3e-VKq" id="RtR-Mp-68e"/>
- <outlet property="createAccountButton" destination="31a-Gd-rzz" id="emU-Tv-WdU"/>
- <outlet property="passwordLabel" destination="h1h-xB-2Im" id="gNl-Yq-JdG"/>
- <outlet property="passwordTextField" destination="N2t-MA-mli" id="A0W-4E-Lmu"/>
- <outlet property="portLabel" destination="7Ty-fL-k78" id="nOP-9u-2R3"/>
- <outlet property="portTextField" destination="Qnv-UR-Yys" id="eVH-9r-c6f"/>
- <outlet property="scrollView" destination="bWc-84-zq0" id="muI-Rn-Iq9"/>
- <outlet property="serverLabel" destination="fvE-N1-hV5" id="Xdp-bb-NBs"/>
- <outlet property="serverTextField" destination="Cvg-vc-c1h" id="5Du-L5-BpZ"/>
- <outlet property="userNameLabel" destination="egE-LH-3eV" id="NwQ-dr-0Pt"/>
- <outlet property="userNameTextField" destination="z8V-FO-hxu" id="HqG-Si-G5S"/>
+ <outlet property="cancelButton" destination="Gix-tm-Jvy" id="Xq8-fH-AvS"/>
+ <outlet property="containerViewBottomConstraint" destination="MuZ-8Q-yhX" id="e27-XB-s3d"/>
+ <outlet property="contentView" destination="fSo-UP-cIM" id="ZTA-ac-Yit"/>
+ <outlet property="createAccountButton" destination="CVH-D1-obP" id="7aP-ey-6aQ"/>
+ <outlet property="passwordLabel" destination="eit-UI-cXF" id="PcE-hT-b8a"/>
+ <outlet property="passwordTextField" destination="BGE-9M-HRz" id="yms-Po-oY9"/>
+ <outlet property="scrollView" destination="9SD-Gg-OhQ" id="cqh-W6-3tU"/>
+ <outlet property="serverLabel" destination="M2J-8M-Hh7" id="krl-Xi-v6O"/>
+ <outlet property="serverTextField" destination="8XN-2d-cUY" id="CCA-zs-WFo"/>
+ <outlet property="titleLabel" destination="JCX-E2-w12" id="Pz7-Gy-IFS"/>
+ <outlet property="userNameLabel" destination="UoY-Ma-CLF" id="tLj-eM-RWK"/>
+ <outlet property="userNameTextField" destination="rDl-PB-aGn" id="8Ym-E6-7ER"/>
</connections>
</viewController>
- <placeholder placeholderIdentifier="IBFirstResponder" id="4Xf-UL-hcY" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="7vh-Gy-rPH" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
- <point key="canvasLocation" x="45.185185185185183" y="147.77777777777777"/>
+ <point key="canvasLocation" x="913" y="410"/>
</scene>
</scenes>
+ <designables>
+ <designable name="CVH-D1-obP">
+ <size key="intrinsicContentSize" width="34" height="33"/>
+ </designable>
+ <designable name="Gix-tm-Jvy">
+ <size key="intrinsicContentSize" width="53" height="33"/>
+ </designable>
+ </designables>
+ <resources>
+ <namedColor name="jamiSeperatorColor">
+ <color red="0.73299998044967651" green="0.7369999885559082" blue="0.74900001287460327" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </namedColor>
+ <systemColor name="labelColor">
+ <color red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </systemColor>
+ <systemColor name="secondarySystemBackgroundColor">
+ <color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </systemColor>
+ <systemColor name="systemBackgroundColor">
+ <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ </systemColor>
+ <systemColor name="tintColor">
+ <color red="0.0" green="0.47843137254901963" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </systemColor>
+ </resources>
</document>
diff --git a/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewController.swift b/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewController.swift
index 1f68563..1a1ec7c 100644
--- a/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewController.swift
+++ b/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewController.swift
@@ -25,49 +25,50 @@
class CreateSipAccountViewController: UIViewController, StoryboardBased, ViewModelBased {
var viewModel: CreateSipAccountViewModel!
- @IBOutlet weak var createAccountButton: DesignableButton!
- @IBOutlet weak var passwordTextField: DesignableTextField!
- @IBOutlet weak var userNameTextField: DesignableTextField!
- @IBOutlet weak var serverTextField: DesignableTextField!
- @IBOutlet weak var portTextField: DesignableTextField!
+ @IBOutlet weak var titleLabel: UILabel!
+ @IBOutlet weak var cancelButton: DesignableButton!
@IBOutlet weak var scrollView: UIScrollView!
+ @IBOutlet weak var contentView: UIView!
+ @IBOutlet weak var createAccountButton: DesignableButton!
+ @IBOutlet weak var containerViewBottomConstraint: NSLayoutConstraint!
+ @IBOutlet weak var userNameTextField: UITextField!
+ @IBOutlet weak var passwordTextField: UITextField!
+ @IBOutlet weak var serverTextField: UITextField!
@IBOutlet weak var userNameLabel: UILabel!
@IBOutlet weak var passwordLabel: UILabel!
@IBOutlet weak var serverLabel: UILabel!
- @IBOutlet weak var portLabel: UILabel!
- @IBOutlet weak var backgroundView: UIView!
var keyboardDismissTapRecognizer: UITapGestureRecognizer!
var isKeyboardOpened: Bool = false
var disposeBag = DisposeBag()
+ weak var containerViewHeightConstraint: NSLayoutConstraint?
+ let formHeight: CGFloat = 258
override func viewDidLoad() {
self.applyL10n()
super.viewDidLoad()
+ setupUI()
self.buindViewToViewModel()
- self.configureWalkrhroughNavigationBar()
self.userNameTextField.becomeFirstResponder()
self.configurePasswordField()
- self.createAccountButton.applyGradient(with: [UIColor.jamiButtonLight, UIColor.jamiButtonDark], gradient: .horizontal)
createAccountButton.titleLabel?.ajustToTextSize()
- // handle keyboard
- self.adaptToKeyboardState(for: self.scrollView, with: self.disposeBag)
- keyboardDismissTapRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
- NotificationCenter.default.rx
- .notification(UIDevice.orientationDidChangeNotification)
+ adaptToSystemColor()
+
+ self.adaptToWelcomeFormKeyboardState(for: self.scrollView, with: self.disposeBag)
+ NotificationCenter.default.rx.notification(UIDevice.orientationDidChangeNotification)
.observe(on: MainScheduler.instance)
.subscribe(onNext: { [weak self] (_) in
guard UIDevice.current.portraitOrLandscape else { return }
- self?.createAccountButton.updateGradientFrame()
- self?.configureWalkrhroughNavigationBar()
+ self?.setupUI()
})
.disposed(by: self.disposeBag)
- adaptToSystemColor()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear(withNotification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
+ NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear(withNotification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
+ setupUI()
}
override func viewWillDisappear(_ animated: Bool) {
@@ -76,60 +77,97 @@
}
func adaptToSystemColor() {
- view.backgroundColor = UIColor.jamiBackgroundColor
- backgroundView.backgroundColor = UIColor.jamiBackgroundColor
- scrollView.backgroundColor = UIColor.jamiBackgroundColor
+ view.backgroundColor = .clear
userNameLabel.textColor = UIColor.jamiTextSecondary
passwordLabel.textColor = UIColor.jamiTextSecondary
serverLabel.textColor = UIColor.jamiTextSecondary
- portLabel.textColor = UIColor.jamiTextSecondary
- userNameTextField.backgroundColor = UIColor.jamiBackgroundColor
- passwordTextField.backgroundColor = UIColor.jamiBackgroundColor
- serverTextField.backgroundColor = UIColor.jamiBackgroundColor
- portTextField.backgroundColor = UIColor.jamiBackgroundColor
- userNameTextField.borderColor = UIColor.jamiTextBlue
- passwordTextField.borderColor = UIColor.jamiTextBlue
- serverTextField.borderColor = UIColor.jamiTextBlue
- portTextField.borderColor = UIColor.jamiTextBlue
+ userNameTextField.tintColor = UIColor.jamiSecondary
+ passwordTextField.tintColor = UIColor.jamiSecondary
+ serverTextField.tintColor = UIColor.jamiSecondary
+ createAccountButton.tintColor = .jamiButtonDark
+ }
+
+ func setContentInset(keyboardHeight: CGFloat = 0) {
+ self.containerViewBottomConstraint.constant = keyboardHeight
}
@objc
- func dismissKeyboard() {
- self.isKeyboardOpened = false
- view.endEditing(true)
- view.removeGestureRecognizer(keyboardDismissTapRecognizer)
- }
-
- @objc
- func keyboardWillAppear(withNotification: NSNotification) {
+ func keyboardWillAppear(withNotification notification: NSNotification) {
self.isKeyboardOpened = true
- self.view.addGestureRecognizer(keyboardDismissTapRecognizer)
+
+ if let userInfo = notification.userInfo,
+ let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect,
+ ScreenHelper.welcomeFormPresentationStyle() != .fullScreen {
+ let keyboardHeight = keyboardFrame.size.height
+ self.setContentInset(keyboardHeight: keyboardHeight)
+ }
+ }
+
+ @objc
+ func keyboardWillDisappear(withNotification: NSNotification) {
+ self.setContentInset()
+ }
+
+ func setupUI() {
+ let welcomeFormPresentationStyle = ScreenHelper.welcomeFormPresentationStyle()
+ if welcomeFormPresentationStyle == .fullScreen {
+ contentView.removeCorners()
+ view.backgroundColor = .secondarySystemBackground
+ } else {
+ DispatchQueue.main.async { [weak self] in
+ self?.contentView.roundTopCorners(radius: 12)
+ }
+ view.backgroundColor = .clear
+ }
+
+ DispatchQueue.main.async { [weak self] in
+ self?.setupConstraint()
+ self?.view.setNeedsLayout()
+ self?.view.layoutIfNeeded()
+ }
+ }
+
+ func setupConstraint() {
+ // Remove the existing top constraint (if it exists)
+ containerViewHeightConstraint?.isActive = false
+ containerViewHeightConstraint = nil
+
+ // Create a new constraint with the desired relationship
+ let newConstraint: NSLayoutConstraint
+ if ScreenHelper.welcomeFormPresentationStyle() == .fullScreen || UIDevice.current.userInterfaceIdiom == .pad {
+ newConstraint = contentView.heightAnchor.constraint(equalToConstant: UIScreen.main.bounds.size.height)
+ } else {
+ newConstraint = contentView.heightAnchor.constraint(equalToConstant: formHeight)
+ }
+
+ // Activate the constraint
+ newConstraint.isActive = true
+
+ // Assign it to the property for later reference
+ containerViewHeightConstraint = newConstraint
}
func configurePasswordField() {
+ passwordTextField.isSecureTextEntry = true
let isSecureTextEntry = PublishSubject<Bool>()
let rightButton = UIButton(type: .custom)
rightButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
rightButton.setImage(UIImage(asset: Asset.icHideInput), for: .normal)
passwordTextField.rx.text.orEmpty.distinctUntilChanged()
- .bind { text in
- rightButton.isHidden = text.isEmpty
- rightButton.isEnabled = !text.isEmpty
+ .bind { [weak rightButton] text in
+ rightButton?.isHidden = text.isEmpty
+ rightButton?.isEnabled = !text.isEmpty
}
.disposed(by: self.disposeBag)
passwordTextField.rightViewMode = .always
let rightView = UIView(frame: CGRect( x: 0, y: 0, width: 50, height: 30))
rightView.addSubview(rightButton)
passwordTextField.rightView = rightView
- passwordTextField.leftViewMode = .always
- let leftView = UIView(frame: CGRect( x: 0, y: 0, width: 50, height: 30))
- rightButton.tintColor = UIColor.darkGray
- passwordTextField.leftView = leftView
rightButton.rx.tap
- .subscribe(onNext: { [weak self, isSecureTextEntry] _ in
+ .subscribe(onNext: { [weak self, weak isSecureTextEntry] _ in
guard let self = self else { return }
self.passwordTextField.isSecureTextEntry.toggle()
- isSecureTextEntry
+ isSecureTextEntry?
.onNext(self.passwordTextField.isSecureTextEntry)
})
.disposed(by: self.disposeBag)
@@ -155,9 +193,6 @@
.disposed(by: self.disposeBag)
self.passwordTextField.rx.text.orEmpty.bind(to: self.viewModel.password).disposed(by: self.disposeBag)
self.serverTextField.rx.text.orEmpty.bind(to: self.viewModel.sipServer).disposed(by: self.disposeBag)
- self.portTextField.rx.text.orEmpty
- .bind(to: self.viewModel.port)
- .disposed(by: self.disposeBag)
self.createAccountButton.rx.tap
.subscribe(onNext: { [weak self] in
guard let self = self else { return }
@@ -166,19 +201,22 @@
}
})
.disposed(by: self.disposeBag)
+ self.cancelButton.rx.tap
+ .subscribe(onNext: { [weak self] in
+ guard let self = self else { return }
+ self.dismiss(animated: true)
+ })
+ .disposed(by: self.disposeBag)
}
func applyL10n() {
- self.createAccountButton
- .setTitle(L10n.Account.createSipAccount, for: .normal)
- self.navigationItem.title = L10n.Account.createSipAccount
+ self.createAccountButton.setTitle(L10n.Account.configure, for: .normal)
+ titleLabel.text = L10n.Account.sipAccount
self.userNameLabel.text = L10n.Global.enterUsername
self.passwordLabel.text = L10n.Global.enterPassword
self.serverLabel.text = L10n.Account.serverLabel
- self.portLabel.text = L10n.Account.portLabel
self.passwordTextField.placeholder = L10n.Global.password
self.userNameTextField.placeholder = L10n.Account.sipUsername
self.serverTextField.placeholder = L10n.Account.sipServer
- self.portTextField.placeholder = L10n.Account.port
}
}
diff --git a/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewModel.swift b/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewModel.swift
index 209ae4f..320e6ec 100644
--- a/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewModel.swift
+++ b/Ring/Ring/Features/Walkthrough/CreateSipAccount/CreateSipAccountViewModel.swift
@@ -31,7 +31,6 @@
var userName = BehaviorRelay<String>(value: "")
var password = BehaviorRelay<String>(value: "")
var sipServer = BehaviorRelay<String>(value: "")
- var port = BehaviorRelay<String>(value: "")
private let accountsService: AccountsService
required init(with injectionBag: InjectionBag) {
@@ -41,8 +40,7 @@
func createSipaccount() {
let created = self.accountsService.addSipAccount(userName: userName.value,
password: password.value,
- sipServer: sipServer.value,
- port: port.value)
+ sipServer: sipServer.value)
if created {
DispatchQueue.main.async {
self.stateSubject.onNext(WalkthroughState.accountCreated)
diff --git a/Ring/Ring/Features/Walkthrough/LinkToAccountManager/LinkToAccountManagerViewController.swift b/Ring/Ring/Features/Walkthrough/LinkToAccountManager/LinkToAccountManagerViewController.swift
index ae3d0b0..1dff919 100644
--- a/Ring/Ring/Features/Walkthrough/LinkToAccountManager/LinkToAccountManagerViewController.swift
+++ b/Ring/Ring/Features/Walkthrough/LinkToAccountManager/LinkToAccountManagerViewController.swift
@@ -53,7 +53,6 @@
configurePasswordField()
self.userNameTextField.becomeFirstResponder()
signInButton.titleLabel?.ajustToTextSize()
- configureWalkrhroughNavigationBar()
self.adaptToWelcomeFormKeyboardState(for: self.scrollView, with: self.disposeBag)
NotificationCenter.default.rx.notification(UIDevice.orientationDidChangeNotification)
diff --git a/Ring/Ring/Features/Walkthrough/WalkthroughCoordinator.swift b/Ring/Ring/Features/Walkthrough/WalkthroughCoordinator.swift
index c7877d4..c03f310 100644
--- a/Ring/Ring/Features/Walkthrough/WalkthroughCoordinator.swift
+++ b/Ring/Ring/Features/Walkthrough/WalkthroughCoordinator.swift
@@ -101,7 +101,7 @@
self.present(viewController: createAccountViewController, withStyle: .formModal, withAnimation: true, withStateable: createAccountViewController.viewModel)
case .createSipAccount:
let sipAccountViewController = CreateSipAccountViewController.instantiate(with: self.injectionBag)
- self.present(viewController: sipAccountViewController, withStyle: .show, withAnimation: true, withStateable: sipAccountViewController.viewModel)
+ self.present(viewController: sipAccountViewController, withStyle: .formModal, withAnimation: true, withStateable: sipAccountViewController.viewModel)
case .linkDevice:
let linkDeviceViewController = LinkDeviceViewController.instantiate(with: self.injectionBag)
self.present(viewController: linkDeviceViewController, withStyle: .formModal, withAnimation: true, withStateable: linkDeviceViewController.viewModel)
diff --git a/Ring/Ring/Resources/en.lproj/Localizable.strings b/Ring/Ring/Resources/en.lproj/Localizable.strings
index 38b86b0..31b49a7 100644
--- a/Ring/Ring/Resources/en.lproj/Localizable.strings
+++ b/Ring/Ring/Resources/en.lproj/Localizable.strings
@@ -296,6 +296,8 @@
"account.port" = "Port";
"account.proxyServer" = "Proxy";
"account.createSipAccount" = "Configure a SIP Account";
+"account.sipAccount" = "SIP Account";
+"account.configure" = "Configure";
"account.advancedFeatures" = "Advanced Features";
"account.serverLabel" = "Enter Address";
"account.portLabel" = "Enter Port Number";
diff --git a/Ring/Ring/Services/AccountsService.swift b/Ring/Ring/Services/AccountsService.swift
index ac4160d..f7e6e1f 100644
--- a/Ring/Ring/Services/AccountsService.swift
+++ b/Ring/Ring/Services/AccountsService.swift
@@ -349,16 +349,12 @@
func addSipAccount(userName: String,
password: String,
- sipServer: String,
- port: String) -> Bool {
+ sipServer: String) -> Bool {
do {
var accountDetails = try self.getInitialAccountDetails(accountType: AccountType.sip.rawValue)
accountDetails.updateValue(userName, forKey: ConfigKey.accountUsername.rawValue)
accountDetails.updateValue(sipServer, forKey: ConfigKey.accountHostname.rawValue)
accountDetails.updateValue(password, forKey: ConfigKey.accountPassword.rawValue)
- if !port.isEmpty {
- accountDetails.updateValue(port, forKey: ConfigKey.localPort.rawValue)
- }
guard let account = self.accountAdapter.addAccount(accountDetails) else { return false }
_ = try self.dbManager.createDatabaseForAccount(accountId: account, createFolder: true)
self.loadAccountsFromDaemon()