diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2020-09-01 18:50:09 +0200 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2020-09-03 19:45:31 +0200 |
| commit | 5dbd6f48e76bf2459e740ab5538865df50534126 (patch) | |
| tree | 7b363595350b60f400807b269ee11fefd8e3e1be | |
| parent | 533a0097a17839c78f2687999fe2be4b467e0422 (diff) | |
| download | mullvadvpn-5dbd6f48e76bf2459e740ab5538865df50534126.tar.xz mullvadvpn-5dbd6f48e76bf2459e740ab5538865df50534126.zip | |
Move WireguardKeysViewController to XIB
| -rw-r--r-- | ios/MullvadVPN.xcodeproj/project.pbxproj | 6 | ||||
| -rw-r--r-- | ios/MullvadVPN/Base.lproj/Main.storyboard | 237 | ||||
| -rw-r--r-- | ios/MullvadVPN/SegueIdentifier.swift | 1 | ||||
| -rw-r--r-- | ios/MullvadVPN/SettingsViewController.swift | 6 | ||||
| -rw-r--r-- | ios/MullvadVPN/WireguardKeysViewController.swift | 2 | ||||
| -rw-r--r-- | ios/MullvadVPN/WireguardKeysViewController.xib | 259 |
6 files changed, 269 insertions, 242 deletions
diff --git a/ios/MullvadVPN.xcodeproj/project.pbxproj b/ios/MullvadVPN.xcodeproj/project.pbxproj index 8f3cfbd48d..1c73476c2b 100644 --- a/ios/MullvadVPN.xcodeproj/project.pbxproj +++ b/ios/MullvadVPN.xcodeproj/project.pbxproj @@ -144,6 +144,7 @@ 58B0A2AD238EE6EC00BC001D /* MullvadEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5840250322B11AB700E4CFEC /* MullvadEndpoint.swift */; }; 58B8743222B25A7600015324 /* WireguardAssociatedAddresses.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B8743122B25A7600015324 /* WireguardAssociatedAddresses.swift */; }; 58B8743B22B788D200015324 /* PacketTunnelSettingsGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B8743722B25EAB00015324 /* PacketTunnelSettingsGenerator.swift */; }; + 58B9814E24FEA70D00C0D59E /* WireguardKeysViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 58B9814D24FEA70D00C0D59E /* WireguardKeysViewController.xib */; }; 58B9EB132488ED2100095626 /* AlertPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B9EB122488ED2100095626 /* AlertPresenter.swift */; }; 58B9EB152489139B00095626 /* DisplayChainedError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58B9EB142489139B00095626 /* DisplayChainedError.swift */; }; 58BA692E23E99EFF009DC256 /* Locking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58BA692D23E99EFF009DC256 /* Locking.swift */; }; @@ -336,6 +337,7 @@ 58B0A2A4238EE67E00BC001D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 58B8743122B25A7600015324 /* WireguardAssociatedAddresses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WireguardAssociatedAddresses.swift; sourceTree = "<group>"; }; 58B8743722B25EAB00015324 /* PacketTunnelSettingsGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PacketTunnelSettingsGenerator.swift; sourceTree = "<group>"; }; + 58B9814D24FEA70D00C0D59E /* WireguardKeysViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WireguardKeysViewController.xib; sourceTree = "<group>"; }; 58B9EB122488ED2100095626 /* AlertPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertPresenter.swift; sourceTree = "<group>"; }; 58B9EB142489139B00095626 /* DisplayChainedError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayChainedError.swift; sourceTree = "<group>"; }; 58BA692D23E99EFF009DC256 /* Locking.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Locking.swift; sourceTree = "<group>"; }; @@ -579,6 +581,7 @@ 5811DE4F239014550011EB53 /* NEVPNStatus+Debug.swift */, 58CC40EE24A601900019D96E /* ObserverList.swift */, 580EE1FF24B3218800F9D8A1 /* Operations */, + 583BC70624FE4DC400C9DE04 /* Optional+DispatchQueue.swift */, 5845F841236CBACD00B2D93C /* PacketTunnelIpc.swift */, 58BFA5C522A7C97F00A6173D /* RelayCache.swift */, 58781CC822AE7CA8009B9D8E /* RelayConstraints.swift */, @@ -612,10 +615,10 @@ 581CBCE52296B97300727D7F /* ViewControllerIdentifier.swift */, 58B8743122B25A7600015324 /* WireguardAssociatedAddresses.swift */, 5877152F23981F7B001F8237 /* WireguardKeysViewController.swift */, + 58B9814D24FEA70D00C0D59E /* WireguardKeysViewController.xib */, 58C6B35322BB87C4003C19AD /* WireguardPrivateKey.swift */, 58F3C098249B978C003E76BE /* x25519.c */, 58F3C097249B978C003E76BE /* x25519.h */, - 583BC70624FE4DC400C9DE04 /* Optional+DispatchQueue.swift */, ); path = MullvadVPN; sourceTree = "<group>"; @@ -849,6 +852,7 @@ 58CE5E6E224146210008646E /* LaunchScreen.storyboard in Resources */, 58CE5E6B224146210008646E /* Assets.xcassets in Resources */, 58CE5E69224146200008646E /* Main.storyboard in Resources */, + 58B9814E24FEA70D00C0D59E /* WireguardKeysViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/MullvadVPN/Base.lproj/Main.storyboard b/ios/MullvadVPN/Base.lproj/Main.storyboard index f2ce083c98..9e01cd6423 100644 --- a/ios/MullvadVPN/Base.lproj/Main.storyboard +++ b/ios/MullvadVPN/Base.lproj/Main.storyboard @@ -448,7 +448,6 @@ </navigationItem> <connections> <outlet property="staticDataSource" destination="9xf-6a-8vR" id="E8j-Z4-Ljk"/> - <segue destination="vAK-MJ-h3c" kind="show" identifier="ShowWireguardKeys" id="eDY-gl-kvu"/> </connections> </tableViewController> <placeholder placeholderIdentifier="IBFirstResponder" id="sR5-ix-4x7" userLabel="First Responder" sceneMemberID="firstResponder"/> @@ -460,242 +459,6 @@ </objects> <point key="canvasLocation" x="1690" y="-832"/> </scene> - <!--WireGuard key--> - <scene sceneID="fcg-jd-GmS"> - <objects> - <viewController id="vAK-MJ-h3c" customClass="WireguardKeysViewController" customModule="MullvadVPN" customModuleProvider="target" sceneMemberID="viewController"> - <view key="view" contentMode="scaleToFill" id="NHk-FR-Mwy"> - <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> - <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> - <subviews> - <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fa2-zl-Fc4"> - <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> - <subviews> - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5VO-oQ-4jM" userLabel="Container"> - <rect key="frame" x="0.0" y="0.0" width="375" height="295.5"/> - <subviews> - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Lx5-tV-hNL" userLabel="Content"> - <rect key="frame" x="24" y="24" width="327" height="247.5"/> - <subviews> - <view contentMode="scaleToFill" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="xch-VD-kOQ" userLabel="Account number"> - <rect key="frame" x="0.0" y="0.0" width="327" height="46"/> - <subviews> - <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="CtE-XF-2uJ"> - <rect key="frame" x="0.0" y="0.0" width="327" height="46"/> - <subviews> - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="29J-lm-A4D"> - <rect key="frame" x="0.0" y="0.0" width="327" height="17"/> - <subviews> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="751" text="Public key" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="riQ-cz-0de"> - <rect key="frame" x="0.0" y="0.0" width="66" height="17"/> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <color key="textColor" white="1" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <nil key="highlightedColor"/> - </label> - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Z76-2G-dkn" customClass="EmbeddedViewContainerView" customModule="MullvadVPN" customModuleProvider="target"> - <rect key="frame" x="185" y="0.0" width="142" height="17"/> - <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <constraints> - <constraint firstAttribute="width" constant="142" placeholder="YES" id="v4m-dU-J71"/> - </constraints> - <connections> - <outlet property="embeddedView" destination="1Ue-pb-GCu" id="uUI-08-4yA"/> - </connections> - </view> - </subviews> - <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <constraints> - <constraint firstAttribute="bottom" secondItem="Z76-2G-dkn" secondAttribute="bottom" id="I4r-uc-kgH"/> - <constraint firstItem="riQ-cz-0de" firstAttribute="leading" secondItem="29J-lm-A4D" secondAttribute="leading" id="TZy-KN-DUR"/> - <constraint firstAttribute="trailing" secondItem="Z76-2G-dkn" secondAttribute="trailing" id="cto-xJ-P12"/> - <constraint firstItem="Z76-2G-dkn" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="riQ-cz-0de" secondAttribute="trailing" constant="8" id="kUO-SM-ut1"/> - <constraint firstItem="riQ-cz-0de" firstAttribute="top" secondItem="29J-lm-A4D" secondAttribute="top" id="pef-9R-fZa"/> - <constraint firstAttribute="bottom" secondItem="riQ-cz-0de" secondAttribute="bottom" id="sTe-ay-g1z"/> - <constraint firstItem="Z76-2G-dkn" firstAttribute="top" secondItem="29J-lm-A4D" secondAttribute="top" id="w1K-nl-2QW"/> - </constraints> - </view> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="leading" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="F0p-ra-1bv"> - <rect key="frame" x="0.0" y="25" width="327" height="21"/> - <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/> - <inset key="contentEdgeInsets" minX="0.01" minY="0.0" maxX="1" maxY="0.0"/> - <state key="normal" title="123456789"> - <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - </state> - <connections> - <action selector="copyPublicKey:" destination="vAK-MJ-h3c" eventType="touchUpInside" id="xqz-Xp-I45"/> - </connections> - </button> - </subviews> - </stackView> - </subviews> - <constraints> - <constraint firstItem="CtE-XF-2uJ" firstAttribute="top" secondItem="xch-VD-kOQ" secondAttribute="top" id="9pN-dP-gTH"/> - <constraint firstAttribute="trailing" secondItem="CtE-XF-2uJ" secondAttribute="trailing" id="Kjq-dh-nxS"/> - <constraint firstAttribute="bottom" secondItem="CtE-XF-2uJ" secondAttribute="bottom" id="coJ-q9-t0B"/> - <constraint firstItem="CtE-XF-2uJ" firstAttribute="leading" secondItem="xch-VD-kOQ" secondAttribute="leading" id="wHk-cr-fV2"/> - </constraints> - </view> - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Bjs-D6-NVj" userLabel="Expiry"> - <rect key="frame" x="0.0" y="70" width="327" height="45.5"/> - <subviews> - <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="8f3-SD-t3K"> - <rect key="frame" x="0.0" y="0.0" width="327" height="45.5"/> - <subviews> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Key generated" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FMt-bt-4gy"> - <rect key="frame" x="0.0" y="0.0" width="327" height="17"/> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <color key="textColor" white="1" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <nil key="highlightedColor"/> - </label> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="6 days ago" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsLetterSpacingToFitWidth="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CvU-pV-ixr"> - <rect key="frame" x="0.0" y="25" width="327" height="20.5"/> - <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/> - <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <nil key="highlightedColor"/> - </label> - </subviews> - </stackView> - </subviews> - <constraints> - <constraint firstAttribute="bottom" secondItem="8f3-SD-t3K" secondAttribute="bottom" id="Lou-NI-gF9"/> - <constraint firstAttribute="trailing" secondItem="8f3-SD-t3K" secondAttribute="trailing" id="Xok-g3-2S0"/> - <constraint firstItem="8f3-SD-t3K" firstAttribute="top" secondItem="Bjs-D6-NVj" secondAttribute="top" id="asr-RD-H6w"/> - <constraint firstItem="8f3-SD-t3K" firstAttribute="leading" secondItem="Bjs-D6-NVj" secondAttribute="leading" id="fvj-uI-LRp"/> - </constraints> - </view> - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ydQ-IP-KZb" userLabel="Buttons"> - <rect key="frame" x="0.0" y="139.5" width="327" height="108"/> - <subviews> - <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="24" translatesAutoresizingMaskIntoConstraints="NO" id="zF0-5W-t7M"> - <rect key="frame" x="0.0" y="0.0" width="327" height="108"/> - <subviews> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OCa-Jz-b7W" customClass="AppButton" customModule="MullvadVPN" customModuleProvider="target"> - <rect key="frame" x="0.0" y="0.0" width="327" height="42"/> - <constraints> - <constraint firstAttribute="height" constant="42" placeholder="YES" id="IpC-KC-l52"/> - </constraints> - <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/> - <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <state key="normal" title="Regenerate key" backgroundImage="SuccessButton"/> - <connections> - <action selector="handleRegenerateKey:" destination="vAK-MJ-h3c" eventType="touchUpInside" id="s39-bg-vkG"/> - </connections> - </button> - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qEF-8w-MdR" customClass="AppButton" customModule="MullvadVPN" customModuleProvider="target"> - <rect key="frame" x="0.0" y="66" width="327" height="42"/> - <constraints> - <constraint firstAttribute="height" constant="42" placeholder="YES" id="299-Lu-yIB"/> - </constraints> - <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/> - <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <state key="normal" title="Verify key" backgroundImage="DefaultButton"/> - <connections> - <action selector="handleVerifyKey:" destination="vAK-MJ-h3c" eventType="touchUpInside" id="wGf-5k-Zw2"/> - </connections> - </button> - </subviews> - </stackView> - </subviews> - <constraints> - <constraint firstAttribute="bottom" secondItem="zF0-5W-t7M" secondAttribute="bottom" id="Hb8-OT-rIo"/> - <constraint firstAttribute="trailing" secondItem="zF0-5W-t7M" secondAttribute="trailing" id="bO9-9j-LGw"/> - <constraint firstItem="zF0-5W-t7M" firstAttribute="leading" secondItem="ydQ-IP-KZb" secondAttribute="leading" id="d8z-bR-Gjl"/> - <constraint firstItem="zF0-5W-t7M" firstAttribute="top" secondItem="ydQ-IP-KZb" secondAttribute="top" id="ylb-xz-fnV"/> - </constraints> - </view> - </subviews> - <constraints> - <constraint firstItem="ydQ-IP-KZb" firstAttribute="top" secondItem="Bjs-D6-NVj" secondAttribute="bottom" constant="24" id="37w-fI-zi8"/> - <constraint firstItem="Bjs-D6-NVj" firstAttribute="top" secondItem="xch-VD-kOQ" secondAttribute="bottom" constant="24" id="8F9-gx-ngL"/> - <constraint firstAttribute="trailing" secondItem="xch-VD-kOQ" secondAttribute="trailing" id="GLB-vv-DDi"/> - <constraint firstAttribute="trailing" secondItem="Bjs-D6-NVj" secondAttribute="trailing" id="Hpo-go-tU4"/> - <constraint firstAttribute="trailing" secondItem="ydQ-IP-KZb" secondAttribute="trailing" id="OwJ-Xb-q8O"/> - <constraint firstItem="ydQ-IP-KZb" firstAttribute="leading" secondItem="Lx5-tV-hNL" secondAttribute="leading" id="P69-3O-u0S"/> - <constraint firstItem="Bjs-D6-NVj" firstAttribute="leading" secondItem="Lx5-tV-hNL" secondAttribute="leading" id="Qj6-44-14Q"/> - <constraint firstItem="xch-VD-kOQ" firstAttribute="leading" secondItem="Lx5-tV-hNL" secondAttribute="leading" id="Y3H-6z-JyF"/> - <constraint firstAttribute="bottom" secondItem="ydQ-IP-KZb" secondAttribute="bottom" id="aRW-Pg-yg6"/> - <constraint firstItem="xch-VD-kOQ" firstAttribute="top" secondItem="Lx5-tV-hNL" secondAttribute="top" id="i3j-2f-8vV"/> - </constraints> - </view> - </subviews> - <constraints> - <constraint firstAttribute="bottom" secondItem="Lx5-tV-hNL" secondAttribute="bottom" constant="24" id="1sW-Lm-fPs"/> - <constraint firstItem="Lx5-tV-hNL" firstAttribute="top" secondItem="5VO-oQ-4jM" secondAttribute="top" constant="24" id="6F1-G5-kJW"/> - <constraint firstAttribute="trailing" secondItem="Lx5-tV-hNL" secondAttribute="trailing" constant="24" id="YZH-zj-zvM"/> - <constraint firstItem="Lx5-tV-hNL" firstAttribute="leading" secondItem="5VO-oQ-4jM" secondAttribute="leading" constant="24" id="rHz-2D-i6n"/> - </constraints> - </view> - </subviews> - <constraints> - <constraint firstItem="5VO-oQ-4jM" firstAttribute="width" secondItem="fa2-zl-Fc4" secondAttribute="width" id="86a-VC-VLn"/> - <constraint firstAttribute="bottom" secondItem="5VO-oQ-4jM" secondAttribute="bottom" id="ERb-9i-nFf"/> - <constraint firstItem="5VO-oQ-4jM" firstAttribute="leading" secondItem="fa2-zl-Fc4" secondAttribute="leading" id="KdL-EB-Idq"/> - <constraint firstItem="5VO-oQ-4jM" firstAttribute="top" secondItem="fa2-zl-Fc4" secondAttribute="top" id="avu-mu-m90"/> - <constraint firstAttribute="trailing" secondItem="5VO-oQ-4jM" secondAttribute="trailing" id="sUD-Wq-7oa"/> - </constraints> - </scrollView> - </subviews> - <color key="backgroundColor" name="Secondary"/> - <constraints> - <constraint firstItem="fa2-zl-Fc4" firstAttribute="top" secondItem="NHk-FR-Mwy" secondAttribute="top" id="0XS-W3-vV4"/> - <constraint firstItem="fa2-zl-Fc4" firstAttribute="bottom" secondItem="uHO-zG-HAA" secondAttribute="bottom" id="3Uo-OT-Y0q"/> - <constraint firstItem="fa2-zl-Fc4" firstAttribute="leading" secondItem="uHO-zG-HAA" secondAttribute="leading" id="4rW-4C-pRs"/> - <constraint firstItem="fa2-zl-Fc4" firstAttribute="trailing" secondItem="uHO-zG-HAA" secondAttribute="trailing" id="VuC-Wb-6U4"/> - </constraints> - <viewLayoutGuide key="safeArea" id="uHO-zG-HAA"/> - </view> - <navigationItem key="navigationItem" title="WireGuard key" id="6ve-v7-tYQ"/> - <connections> - <outlet property="creationDateLabel" destination="CvU-pV-ixr" id="qSg-Be-sO0"/> - <outlet property="publicKeyButton" destination="F0p-ra-1bv" id="pZV-nS-lIs"/> - <outlet property="regenerateKeyButton" destination="OCa-Jz-b7W" id="BZD-Qc-8lO"/> - <outlet property="verifyKeyButton" destination="qEF-8w-MdR" id="zuU-Ts-QNG"/> - <outlet property="wireguardKeyStatusView" destination="1Ue-pb-GCu" id="VV8-bG-SgD"/> - </connections> - </viewController> - <placeholder placeholderIdentifier="IBFirstResponder" id="WDa-g6-tXg" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/> - <view contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="1Ue-pb-GCu" customClass="WireguardKeyStatusView" customModule="MullvadVPN" customModuleProvider="target"> - <rect key="frame" x="0.0" y="0.0" width="240" height="16"/> - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> - <subviews> - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="751" text="Key is valid" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ocb-Gs-xuo"> - <rect key="frame" x="0.0" y="0.0" width="240" height="16"/> - <fontDescription key="fontDescription" type="system" pointSize="14"/> - <color key="textColor" name="Success"/> - <nil key="highlightedColor"/> - </label> - <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZN9-r7-vKB" customClass="SpinnerActivityIndicatorView" customModule="MullvadVPN" customModuleProvider="target"> - <rect key="frame" x="224" y="0.0" width="16" height="16"/> - <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <constraints> - <constraint firstAttribute="width" secondItem="ZN9-r7-vKB" secondAttribute="height" multiplier="1:1" id="7dm-3X-rB1"/> - </constraints> - <userDefinedRuntimeAttributes> - <userDefinedRuntimeAttribute type="number" keyPath="thickness"> - <real key="value" value="2"/> - </userDefinedRuntimeAttribute> - </userDefinedRuntimeAttributes> - </view> - </subviews> - <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> - <constraints> - <constraint firstItem="ZN9-r7-vKB" firstAttribute="height" secondItem="Ocb-Gs-xuo" secondAttribute="height" id="0GM-ky-aMe"/> - <constraint firstAttribute="trailing" secondItem="Ocb-Gs-xuo" secondAttribute="trailing" id="C6Q-Ie-omp"/> - <constraint firstItem="Ocb-Gs-xuo" firstAttribute="leading" secondItem="1Ue-pb-GCu" secondAttribute="leading" id="M7j-bw-5Ye"/> - <constraint firstAttribute="trailing" secondItem="ZN9-r7-vKB" secondAttribute="trailing" id="YRs-9L-5CY"/> - <constraint firstItem="ZN9-r7-vKB" firstAttribute="centerY" secondItem="Ocb-Gs-xuo" secondAttribute="centerY" id="d43-KC-IK5"/> - <constraint firstAttribute="bottom" secondItem="Ocb-Gs-xuo" secondAttribute="bottom" id="ivo-8C-Rj8"/> - <constraint firstItem="Ocb-Gs-xuo" firstAttribute="top" secondItem="1Ue-pb-GCu" secondAttribute="top" id="kgV-z9-gxp"/> - </constraints> - <connections> - <outlet property="activityIndicator" destination="ZN9-r7-vKB" id="lj5-xB-7Ra"/> - <outlet property="textLabel" destination="Ocb-Gs-xuo" id="LoV-ls-1BU"/> - </connections> - </view> - </objects> - <point key="canvasLocation" x="2576.8000000000002" y="-513.19340329835086"/> - </scene> <!--Account--> <scene sceneID="Ca0-W1-eLb"> <objects> diff --git a/ios/MullvadVPN/SegueIdentifier.swift b/ios/MullvadVPN/SegueIdentifier.swift index 2edf12abeb..df15be6bd7 100644 --- a/ios/MullvadVPN/SegueIdentifier.swift +++ b/ios/MullvadVPN/SegueIdentifier.swift @@ -18,7 +18,6 @@ extension SegueIdentifier { } enum Settings: String, SegueConvertible { - case showWireguardKeys = "ShowWireguardKeys" case showAccount = "ShowAccount" } diff --git a/ios/MullvadVPN/SettingsViewController.swift b/ios/MullvadVPN/SettingsViewController.swift index 6991202afc..4e625eec17 100644 --- a/ios/MullvadVPN/SettingsViewController.swift +++ b/ios/MullvadVPN/SettingsViewController.swift @@ -78,9 +78,9 @@ class SettingsViewController: UITableViewController { } wireguardKeyRow.actionBlock = { [weak self] (indexPath) in - self?.performSegue( - withIdentifier: SegueIdentifier.Settings.showWireguardKeys.rawValue, - sender: nil) + let controller = WireguardKeysViewController() + + self?.navigationController?.pushViewController(controller, animated: true) } self.accountRow = accountRow diff --git a/ios/MullvadVPN/WireguardKeysViewController.swift b/ios/MullvadVPN/WireguardKeysViewController.swift index 66cd8abf33..8c0ab1f486 100644 --- a/ios/MullvadVPN/WireguardKeysViewController.swift +++ b/ios/MullvadVPN/WireguardKeysViewController.swift @@ -46,6 +46,8 @@ class WireguardKeysViewController: UIViewController, TunnelObserver { override func viewDidLoad() { super.viewDidLoad() + navigationItem.title = NSLocalizedString("WireGuard key", comment: "Navigation title") + TunnelManager.shared.addObserver(self) updatePublicKey(publicKey: TunnelManager.shared.publicKey, animated: false) diff --git a/ios/MullvadVPN/WireguardKeysViewController.xib b/ios/MullvadVPN/WireguardKeysViewController.xib new file mode 100644 index 0000000000..46e0084a49 --- /dev/null +++ b/ios/MullvadVPN/WireguardKeysViewController.xib @@ -0,0 +1,259 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16097.2" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> + <device id="retina6_1" orientation="portrait" appearance="light"/> + <dependencies> + <deployment identifier="iOS"/> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/> + <capability name="Named colors" minToolsVersion="9.0"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <objects> + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WireguardKeysViewController" customModule="MullvadVPN" customModuleProvider="target"> + <connections> + <outlet property="creationDateLabel" destination="lzi-4c-l9v" id="0Z2-ew-RhM"/> + <outlet property="publicKeyButton" destination="bD5-xv-y6Z" id="C0z-zj-s1r"/> + <outlet property="regenerateKeyButton" destination="moM-8X-Qyw" id="Lk5-iu-49e"/> + <outlet property="verifyKeyButton" destination="aB5-uU-WIR" id="KXV-vp-x6x"/> + <outlet property="view" destination="0KT-g1-t9r" id="QAy-jD-drf"/> + <outlet property="wireguardKeyStatusView" destination="UWn-xd-nij" id="det-Vn-9ID"/> + </connections> + </placeholder> + <view contentMode="scaleToFill" id="0KT-g1-t9r"> + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Ef2-EJ-GbD"> + <rect key="frame" x="0.0" y="0.0" width="414" height="862"/> + <subviews> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8RA-l5-l5o" userLabel="Container"> + <rect key="frame" x="0.0" y="0.0" width="414" height="295.5"/> + <subviews> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nm3-Kj-ONm" userLabel="Content"> + <rect key="frame" x="24" y="24" width="366" height="247.5"/> + <subviews> + <view contentMode="scaleToFill" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="TQT-yd-nbI" userLabel="Account number"> + <rect key="frame" x="0.0" y="0.0" width="366" height="46"/> + <subviews> + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="vMc-wW-ggf"> + <rect key="frame" x="0.0" y="0.0" width="366" height="46"/> + <subviews> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="OrE-dl-8bW"> + <rect key="frame" x="0.0" y="0.0" width="366" height="17"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="751" text="Public key" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="g23-nO-ste"> + <rect key="frame" x="0.0" y="0.0" width="66" height="17"/> + <fontDescription key="fontDescription" type="system" pointSize="14"/> + <color key="textColor" white="1" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <nil key="highlightedColor"/> + </label> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UgW-XB-q8E" customClass="EmbeddedViewContainerView" customModule="MullvadVPN" customModuleProvider="target"> + <rect key="frame" x="224" y="0.0" width="142" height="17"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <constraints> + <constraint firstAttribute="width" constant="142" placeholder="YES" id="tdi-3g-eCH"/> + </constraints> + <connections> + <outlet property="embeddedView" destination="UWn-xd-nij" id="DCV-o7-ddF"/> + </connections> + </view> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <constraints> + <constraint firstItem="UgW-XB-q8E" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="g23-nO-ste" secondAttribute="trailing" constant="8" id="L13-rB-Uy0"/> + <constraint firstAttribute="trailing" secondItem="UgW-XB-q8E" secondAttribute="trailing" id="YCs-71-hye"/> + <constraint firstItem="g23-nO-ste" firstAttribute="leading" secondItem="OrE-dl-8bW" secondAttribute="leading" id="YI1-PR-QX4"/> + <constraint firstItem="UgW-XB-q8E" firstAttribute="top" secondItem="OrE-dl-8bW" secondAttribute="top" id="aUr-hg-Omr"/> + <constraint firstAttribute="bottom" secondItem="g23-nO-ste" secondAttribute="bottom" id="cPa-1N-3xG"/> + <constraint firstAttribute="bottom" secondItem="UgW-XB-q8E" secondAttribute="bottom" id="dEW-6v-kNP"/> + <constraint firstItem="g23-nO-ste" firstAttribute="top" secondItem="OrE-dl-8bW" secondAttribute="top" id="r9d-Wb-cDT"/> + </constraints> + </view> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="leading" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="tailTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bD5-xv-y6Z"> + <rect key="frame" x="0.0" y="25" width="366" height="21"/> + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/> + <inset key="contentEdgeInsets" minX="0.01" minY="0.0" maxX="1" maxY="0.0"/> + <state key="normal" title="123456789"> + <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + </state> + <connections> + <action selector="copyPublicKey:" destination="-1" eventType="touchUpInside" id="lcS-i9-vnc"/> + </connections> + </button> + </subviews> + </stackView> + </subviews> + <constraints> + <constraint firstItem="vMc-wW-ggf" firstAttribute="top" secondItem="TQT-yd-nbI" secondAttribute="top" id="0h8-eE-6HJ"/> + <constraint firstAttribute="bottom" secondItem="vMc-wW-ggf" secondAttribute="bottom" id="Biu-i4-kLE"/> + <constraint firstItem="vMc-wW-ggf" firstAttribute="leading" secondItem="TQT-yd-nbI" secondAttribute="leading" id="aLi-aW-dRS"/> + <constraint firstAttribute="trailing" secondItem="vMc-wW-ggf" secondAttribute="trailing" id="j8I-aY-laA"/> + </constraints> + </view> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WE4-cD-dXV" userLabel="Expiry"> + <rect key="frame" x="0.0" y="70" width="366" height="45.5"/> + <subviews> + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="qQz-cx-MJT"> + <rect key="frame" x="0.0" y="0.0" width="366" height="45.5"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Key generated" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="017-qu-nUG"> + <rect key="frame" x="0.0" y="0.0" width="366" height="17"/> + <fontDescription key="fontDescription" type="system" pointSize="14"/> + <color key="textColor" white="1" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <nil key="highlightedColor"/> + </label> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="6 days ago" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsLetterSpacingToFitWidth="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lzi-4c-l9v"> + <rect key="frame" x="0.0" y="25" width="366" height="20.5"/> + <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/> + <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <nil key="highlightedColor"/> + </label> + </subviews> + </stackView> + </subviews> + <constraints> + <constraint firstAttribute="bottom" secondItem="qQz-cx-MJT" secondAttribute="bottom" id="7CP-kA-aNk"/> + <constraint firstItem="qQz-cx-MJT" firstAttribute="leading" secondItem="WE4-cD-dXV" secondAttribute="leading" id="Cdg-Vz-UPX"/> + <constraint firstAttribute="trailing" secondItem="qQz-cx-MJT" secondAttribute="trailing" id="aYR-XF-Fm4"/> + <constraint firstItem="qQz-cx-MJT" firstAttribute="top" secondItem="WE4-cD-dXV" secondAttribute="top" id="vC6-tk-rlS"/> + </constraints> + </view> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Rnk-UH-rRP" userLabel="Buttons"> + <rect key="frame" x="0.0" y="139.5" width="366" height="108"/> + <subviews> + <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="24" translatesAutoresizingMaskIntoConstraints="NO" id="hTO-tb-TtE"> + <rect key="frame" x="0.0" y="0.0" width="366" height="108"/> + <subviews> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="moM-8X-Qyw" customClass="AppButton" customModule="MullvadVPN" customModuleProvider="target"> + <rect key="frame" x="0.0" y="0.0" width="366" height="42"/> + <constraints> + <constraint firstAttribute="height" constant="42" placeholder="YES" id="hcH-5Y-7hH"/> + </constraints> + <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/> + <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <state key="normal" title="Regenerate key" backgroundImage="SuccessButton"/> + <connections> + <action selector="handleRegenerateKey:" destination="-1" eventType="touchUpInside" id="MPC-g8-z3f"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aB5-uU-WIR" customClass="AppButton" customModule="MullvadVPN" customModuleProvider="target"> + <rect key="frame" x="0.0" y="66" width="366" height="42"/> + <constraints> + <constraint firstAttribute="height" constant="42" placeholder="YES" id="lzN-hG-dmz"/> + </constraints> + <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/> + <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <state key="normal" title="Verify key" backgroundImage="DefaultButton"/> + <connections> + <action selector="handleVerifyKey:" destination="-1" eventType="touchUpInside" id="tkx-8o-gGK"/> + </connections> + </button> + </subviews> + </stackView> + </subviews> + <constraints> + <constraint firstAttribute="bottom" secondItem="hTO-tb-TtE" secondAttribute="bottom" id="XYT-Mh-nOc"/> + <constraint firstItem="hTO-tb-TtE" firstAttribute="top" secondItem="Rnk-UH-rRP" secondAttribute="top" id="eLy-gb-ayb"/> + <constraint firstItem="hTO-tb-TtE" firstAttribute="leading" secondItem="Rnk-UH-rRP" secondAttribute="leading" id="lBy-5I-ndg"/> + <constraint firstAttribute="trailing" secondItem="hTO-tb-TtE" secondAttribute="trailing" id="m07-nv-nWj"/> + </constraints> + </view> + </subviews> + <constraints> + <constraint firstItem="Rnk-UH-rRP" firstAttribute="top" secondItem="WE4-cD-dXV" secondAttribute="bottom" constant="24" id="2sI-jI-10o"/> + <constraint firstAttribute="trailing" secondItem="Rnk-UH-rRP" secondAttribute="trailing" id="7kY-ED-xKR"/> + <constraint firstItem="TQT-yd-nbI" firstAttribute="leading" secondItem="nm3-Kj-ONm" secondAttribute="leading" id="9ok-6a-WGz"/> + <constraint firstItem="Rnk-UH-rRP" firstAttribute="leading" secondItem="nm3-Kj-ONm" secondAttribute="leading" id="DIF-4p-U9a"/> + <constraint firstAttribute="trailing" secondItem="TQT-yd-nbI" secondAttribute="trailing" id="Msk-pE-y04"/> + <constraint firstItem="WE4-cD-dXV" firstAttribute="top" secondItem="TQT-yd-nbI" secondAttribute="bottom" constant="24" id="XYW-Zd-IB6"/> + <constraint firstAttribute="bottom" secondItem="Rnk-UH-rRP" secondAttribute="bottom" id="amK-et-wSg"/> + <constraint firstAttribute="trailing" secondItem="WE4-cD-dXV" secondAttribute="trailing" id="c5R-u5-ncH"/> + <constraint firstItem="TQT-yd-nbI" firstAttribute="top" secondItem="nm3-Kj-ONm" secondAttribute="top" id="yWj-DN-anI"/> + <constraint firstItem="WE4-cD-dXV" firstAttribute="leading" secondItem="nm3-Kj-ONm" secondAttribute="leading" id="zcQ-MS-Mkz"/> + </constraints> + </view> + </subviews> + <constraints> + <constraint firstItem="nm3-Kj-ONm" firstAttribute="leading" secondItem="8RA-l5-l5o" secondAttribute="leading" constant="24" id="6xO-Yz-LyP"/> + <constraint firstAttribute="trailing" secondItem="nm3-Kj-ONm" secondAttribute="trailing" constant="24" id="8ps-I8-JZz"/> + <constraint firstAttribute="bottom" secondItem="nm3-Kj-ONm" secondAttribute="bottom" constant="24" id="SNO-Jm-cFh"/> + <constraint firstItem="nm3-Kj-ONm" firstAttribute="top" secondItem="8RA-l5-l5o" secondAttribute="top" constant="24" id="xhA-R2-TRH"/> + </constraints> + </view> + </subviews> + <constraints> + <constraint firstItem="8RA-l5-l5o" firstAttribute="width" secondItem="Ef2-EJ-GbD" secondAttribute="width" id="2wa-Gf-kAz"/> + <constraint firstItem="8RA-l5-l5o" firstAttribute="top" secondItem="Ef2-EJ-GbD" secondAttribute="top" id="5US-02-mPv"/> + <constraint firstAttribute="trailing" secondItem="8RA-l5-l5o" secondAttribute="trailing" id="Woy-WL-LaP"/> + <constraint firstAttribute="bottom" secondItem="8RA-l5-l5o" secondAttribute="bottom" id="weK-v1-ewb"/> + <constraint firstItem="8RA-l5-l5o" firstAttribute="leading" secondItem="Ef2-EJ-GbD" secondAttribute="leading" id="xbl-T4-0ym"/> + </constraints> + </scrollView> + </subviews> + <color key="backgroundColor" name="Secondary"/> + <constraints> + <constraint firstItem="Ef2-EJ-GbD" firstAttribute="trailing" secondItem="BeY-Zt-zoO" secondAttribute="trailing" id="AVa-p6-gnL"/> + <constraint firstItem="Ef2-EJ-GbD" firstAttribute="top" secondItem="0KT-g1-t9r" secondAttribute="top" id="DUA-7u-Tpr"/> + <constraint firstItem="Ef2-EJ-GbD" firstAttribute="bottom" secondItem="BeY-Zt-zoO" secondAttribute="bottom" id="Xqi-8g-wIh"/> + <constraint firstItem="Ef2-EJ-GbD" firstAttribute="leading" secondItem="BeY-Zt-zoO" secondAttribute="leading" id="sST-q5-QMi"/> + </constraints> + <viewLayoutGuide key="safeArea" id="BeY-Zt-zoO"/> + <point key="canvasLocation" x="3274" y="-451"/> + </view> + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> + <view contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="UWn-xd-nij" customClass="WireguardKeyStatusView" customModule="MullvadVPN" customModuleProvider="target"> + <rect key="frame" x="0.0" y="0.0" width="332" height="30"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <subviews> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="751" text="Key is valid" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Hfe-qt-Bfg"> + <rect key="frame" x="0.0" y="0.0" width="332" height="30"/> + <fontDescription key="fontDescription" type="system" pointSize="14"/> + <color key="textColor" name="Success"/> + <nil key="highlightedColor"/> + </label> + <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="izE-NT-b2X" customClass="SpinnerActivityIndicatorView" customModule="MullvadVPN" customModuleProvider="target"> + <rect key="frame" x="302" y="0.0" width="30" height="30"/> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <color key="tintColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <constraints> + <constraint firstAttribute="width" secondItem="izE-NT-b2X" secondAttribute="height" multiplier="1:1" id="Hb3-oO-ph9"/> + </constraints> + <userDefinedRuntimeAttributes> + <userDefinedRuntimeAttribute type="number" keyPath="thickness"> + <real key="value" value="2"/> + </userDefinedRuntimeAttribute> + </userDefinedRuntimeAttributes> + </view> + </subviews> + <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <constraints> + <constraint firstItem="izE-NT-b2X" firstAttribute="height" secondItem="Hfe-qt-Bfg" secondAttribute="height" id="5CX-7Y-dTK"/> + <constraint firstItem="Hfe-qt-Bfg" firstAttribute="top" secondItem="UWn-xd-nij" secondAttribute="top" id="8c7-fU-nCj"/> + <constraint firstAttribute="bottom" secondItem="Hfe-qt-Bfg" secondAttribute="bottom" id="FdG-Wt-XTb"/> + <constraint firstItem="Hfe-qt-Bfg" firstAttribute="leading" secondItem="UWn-xd-nij" secondAttribute="leading" id="Rwl-nz-b8C"/> + <constraint firstAttribute="trailing" secondItem="Hfe-qt-Bfg" secondAttribute="trailing" id="dhs-MG-8Va"/> + <constraint firstAttribute="trailing" secondItem="izE-NT-b2X" secondAttribute="trailing" id="iIb-6W-Xx6"/> + <constraint firstItem="izE-NT-b2X" firstAttribute="centerY" secondItem="Hfe-qt-Bfg" secondAttribute="centerY" id="iiN-wu-4SO"/> + </constraints> + <nil key="simulatedTopBarMetrics"/> + <nil key="simulatedBottomBarMetrics"/> + <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> + <viewLayoutGuide key="safeArea" id="4Jg-lh-k5T"/> + <connections> + <outlet property="activityIndicator" destination="izE-NT-b2X" id="BrH-U3-uZU"/> + <outlet property="textLabel" destination="Hfe-qt-Bfg" id="An4-Wb-wtv"/> + </connections> + <point key="canvasLocation" x="2561" y="-159"/> + </view> + </objects> + <resources> + <image name="DefaultButton" width="9" height="9"/> + <image name="SuccessButton" width="9" height="9"/> + <namedColor name="Secondary"> + <color red="0.098039215686274508" green="0.1803921568627451" blue="0.27058823529411763" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + </namedColor> + <namedColor name="Success"> + <color red="0.26666666666666666" green="0.67843137254901964" blue="0.30196078431372547" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + </namedColor> + </resources> +</document> |
