diff options
| author | Andreas Lif <andreas.lif@shortcut.io> | 2022-08-04 11:29:23 +0200 |
|---|---|---|
| committer | Andreas Lif <andreas.lif@shortcut.io> | 2022-08-16 13:44:35 +0200 |
| commit | a8be84b07f8d04deca587b9a73133d9e0c802fe7 (patch) | |
| tree | d943c8d5f5c9932cf7394cd6135c0df280092bf3 /ios/MullvadVPN/StatusActivityView.swift | |
| parent | cfe03f2c74e3803ea3819ae5a1e6977bbdfc191e (diff) | |
| download | mullvadvpn-a8be84b07f8d04deca587b9a73133d9e0c802fe7.tar.xz mullvadvpn-a8be84b07f8d04deca587b9a73133d9e0c802fe7.zip | |
Add out of time view
Diffstat (limited to 'ios/MullvadVPN/StatusActivityView.swift')
| -rw-r--r-- | ios/MullvadVPN/StatusActivityView.swift | 80 |
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() + } + } +} |
