diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2021-04-08 12:29:13 +0200 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2021-04-14 20:21:24 +0200 |
| commit | 29d281f18d3d0cda2169dd2ff19b80a38d59d275 (patch) | |
| tree | 299d5d2abef0822f328ca461f2e2fbc8f2bc2ad2 | |
| parent | b1a69829e9499dbdd026e4778398d33701614bd3 (diff) | |
| download | mullvadvpn-29d281f18d3d0cda2169dd2ff19b80a38d59d275.tar.xz mullvadvpn-29d281f18d3d0cda2169dd2ff19b80a38d59d275.zip | |
Connect: adapt for iPad
| -rw-r--r-- | ios/MullvadVPN/ConnectMainContentView.swift | 42 | ||||
| -rw-r--r-- | ios/MullvadVPN/ConnectViewController.swift | 25 | ||||
| -rw-r--r-- | ios/MullvadVPN/UIMetrics.swift | 4 |
3 files changed, 63 insertions, 8 deletions
diff --git a/ios/MullvadVPN/ConnectMainContentView.swift b/ios/MullvadVPN/ConnectMainContentView.swift index 95e97128e3..a92d18fdda 100644 --- a/ios/MullvadVPN/ConnectMainContentView.swift +++ b/ios/MullvadVPN/ConnectMainContentView.swift @@ -61,11 +61,13 @@ class ConnectMainContentView: UIView { return view }() + private var traitConstraints = [NSLayoutConstraint]() + override init(frame: CGRect) { super.init(frame: frame) backgroundColor = .primaryColor - layoutMargins = UIEdgeInsets(top: 24, left: 24, bottom: 24, right: 24) + layoutMargins = UIMetrics.contentLayoutMargins addSubviews() } @@ -95,7 +97,6 @@ class ConnectMainContentView: UIView { NSLayoutConstraint.activate([ containerView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor), containerView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor), - containerView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor), containerView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor), secureLabel.topAnchor.constraint(greaterThanOrEqualTo: containerView.topAnchor), @@ -119,6 +120,43 @@ class ConnectMainContentView: UIView { buttonsStackView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor), buttonsStackView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor) ]) + + updateTraitConstraints() + } + + private func updateTraitConstraints() { + var layoutConstraints = [NSLayoutConstraint]() + + switch traitCollection.userInterfaceIdiom { + case .pad: + // Max container width is 70% width of iPad in portrait mode + let maxWidth = min(UIScreen.main.nativeBounds.width * 0.7, UIMetrics.maximumSplitViewContentContainerWidth) + let containerWidthConstraint = containerView.widthAnchor.constraint(equalToConstant: maxWidth) + containerWidthConstraint.priority = .defaultHigh + + layoutConstraints.append(contentsOf:[ + containerView.trailingAnchor.constraint(lessThanOrEqualTo: layoutMarginsGuide.trailingAnchor), + containerWidthConstraint + ]) + + case .phone: + layoutConstraints.append(containerView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor)) + + default: + break + } + + traitConstraints = layoutConstraints + removeConstraints(traitConstraints) + NSLayoutConstraint.activate(layoutConstraints) + } + + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + + if traitCollection.userInterfaceIdiom != previousTraitCollection?.userInterfaceIdiom { + updateTraitConstraints() + } } private func setArrangedButtons(_ newButtons: [UIView]) { diff --git a/ios/MullvadVPN/ConnectViewController.swift b/ios/MullvadVPN/ConnectViewController.swift index f8968b1ad3..90c6c5f205 100644 --- a/ios/MullvadVPN/ConnectViewController.swift +++ b/ios/MullvadVPN/ConnectViewController.swift @@ -347,12 +347,27 @@ private extension TunnelState { } var actionButtons: [ConnectMainContentView.ActionButton] { - switch self { - case .disconnected, .disconnecting: - return [.selectLocation, .connect] + switch UIDevice.current.userInterfaceIdiom { + case .phone: + switch self { + case .disconnected, .disconnecting: + return [.selectLocation, .connect] - case .connecting, .connected, .reconnecting: - return [.selectLocation, .disconnect] + case .connecting, .connected, .reconnecting: + return [.selectLocation, .disconnect] + } + + case .pad: + switch self { + case .disconnected, .disconnecting: + return [.connect] + + case .connecting, .connected, .reconnecting: + return [.disconnect] + } + + default: + fatalError("Not supported") } } diff --git a/ios/MullvadVPN/UIMetrics.swift b/ios/MullvadVPN/UIMetrics.swift index 5d766d749c..12520b0982 100644 --- a/ios/MullvadVPN/UIMetrics.swift +++ b/ios/MullvadVPN/UIMetrics.swift @@ -12,8 +12,10 @@ enum UIMetrics {} extension UIMetrics { - // Common layout margins for content presentation + /// Common layout margins for content presentation static var contentLayoutMargins = UIEdgeInsets(top: 24, left: 24, bottom: 24, right: 24) + /// Maximum width of the split view content container on iPad + static var maximumSplitViewContentContainerWidth: CGFloat = 810 * 0.7 } |
