summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadVPN/StatusActivityView.swift
diff options
context:
space:
mode:
authorAndreas Lif <andreas.lif@shortcut.io>2022-08-04 11:29:23 +0200
committerAndreas Lif <andreas.lif@shortcut.io>2022-08-16 13:44:35 +0200
commita8be84b07f8d04deca587b9a73133d9e0c802fe7 (patch)
treed943c8d5f5c9932cf7394cd6135c0df280092bf3 /ios/MullvadVPN/StatusActivityView.swift
parentcfe03f2c74e3803ea3819ae5a1e6977bbdfc191e (diff)
downloadmullvadvpn-a8be84b07f8d04deca587b9a73133d9e0c802fe7.tar.xz
mullvadvpn-a8be84b07f8d04deca587b9a73133d9e0c802fe7.zip
Add out of time view
Diffstat (limited to 'ios/MullvadVPN/StatusActivityView.swift')
-rw-r--r--ios/MullvadVPN/StatusActivityView.swift80
1 files changed, 80 insertions, 0 deletions
diff --git a/ios/MullvadVPN/StatusActivityView.swift b/ios/MullvadVPN/StatusActivityView.swift
new file mode 100644
index 0000000000..c44cbf82fb
--- /dev/null
+++ b/ios/MullvadVPN/StatusActivityView.swift
@@ -0,0 +1,80 @@
+//
+// StatusActivityView.swift
+// MullvadVPN
+//
+// Created by Andreas Lif on 2022-08-15.
+// Copyright © 2022 Mullvad VPN AB. All rights reserved.
+//
+
+import Foundation
+import UIKit
+
+class StatusActivityView: UIView {
+ enum State {
+ case hidden, activity, success, failure
+ }
+
+ var state: State = .hidden {
+ didSet {
+ updateView()
+ }
+ }
+
+ private let statusImageView: StatusImageView = {
+ let imageView = StatusImageView(style: .failure)
+ imageView.translatesAutoresizingMaskIntoConstraints = false
+ imageView.contentMode = .scaleAspectFit
+ return imageView
+ }()
+
+ private let activityIndicator: SpinnerActivityIndicatorView = {
+ let view = SpinnerActivityIndicatorView(style: .large)
+ view.tintColor = .white
+ view.translatesAutoresizingMaskIntoConstraints = false
+ return view
+ }()
+
+ init(state: State) {
+ super.init(frame: .zero)
+
+ self.state = state
+ addSubview(statusImageView)
+ addSubview(activityIndicator)
+
+ NSLayoutConstraint.activate([
+ activityIndicator.heightAnchor.constraint(equalTo: statusImageView.heightAnchor),
+ statusImageView.topAnchor.constraint(equalTo: topAnchor),
+ statusImageView.bottomAnchor.constraint(equalTo: bottomAnchor),
+
+ statusImageView.centerXAnchor.constraint(equalTo: centerXAnchor),
+ statusImageView.centerYAnchor.constraint(equalTo: centerYAnchor),
+ activityIndicator.centerXAnchor.constraint(equalTo: centerXAnchor),
+ activityIndicator.centerYAnchor.constraint(equalTo: centerYAnchor),
+ ])
+
+ updateView()
+ }
+
+ required init?(coder: NSCoder) {
+ super.init(coder: coder)
+ }
+
+ private func updateView() {
+ switch state {
+ case .hidden:
+ statusImageView.alpha = 0
+ activityIndicator.stopAnimating()
+ case .activity:
+ statusImageView.alpha = 0
+ activityIndicator.startAnimating()
+ case .success:
+ statusImageView.alpha = 1
+ statusImageView.style = .success
+ activityIndicator.stopAnimating()
+ case .failure:
+ statusImageView.alpha = 1
+ statusImageView.style = .failure
+ activityIndicator.stopAnimating()
+ }
+ }
+}