From 2efb00115db327d34d19270bc19d9c804b51a04d Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Mon, 19 Oct 2020 10:29:00 +1100 Subject: [PATCH] Show a loader over the playback toggle while a voice message is loading --- Signal/src/Loki/Components/VoiceMessageView.swift | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Signal/src/Loki/Components/VoiceMessageView.swift b/Signal/src/Loki/Components/VoiceMessageView.swift index 5dde35138..3f79345f8 100644 --- a/Signal/src/Loki/Components/VoiceMessageView.swift +++ b/Signal/src/Loki/Components/VoiceMessageView.swift @@ -1,4 +1,5 @@ import Accelerate +import NVActivityIndicatorView @objc(LKVoiceMessageView) final class VoiceMessageView : UIView { @@ -14,6 +15,8 @@ final class VoiceMessageView : UIView { // MARK: Components private lazy var toggleImageView = UIImageView(image: #imageLiteral(resourceName: "Play")) + private lazy var spinner = NVActivityIndicatorView(frame: CGRect.zero, type: .circleStrokeSpin, color: .black, padding: nil) + private lazy var durationLabel: UILabel = { let result = UILabel() result.textColor = Colors.text @@ -97,6 +100,10 @@ final class VoiceMessageView : UIView { toggleImageView.set(.width, to: 12) toggleImageView.set(.height, to: 12) toggleImageView.center(in: toggleContainer) + toggleContainer.addSubview(spinner) + spinner.set(.width, to: 24) + spinner.set(.height, to: 24) + spinner.center(in: toggleContainer) toggleContainer.set(.width, to: toggleContainerSize) toggleContainer.set(.height, to: toggleContainerSize) toggleContainer.layer.cornerRadius = toggleContainerSize / 2 @@ -116,6 +123,9 @@ final class VoiceMessageView : UIView { // MARK: UI & Updating private func showLoader() { isLoading = true + toggleImageView.isHidden = true + spinner.startAnimating() + spinner.isHidden = false Timer.scheduledTimer(withTimeInterval: 0.25, repeats: true) { [weak self] timer in guard let self = self else { return timer.invalidate() } if self.isLoading { @@ -134,6 +144,9 @@ final class VoiceMessageView : UIView { private func hideLoader() { isLoading = false + toggleImageView.isHidden = false + spinner.stopAnimating() + spinner.isHidden = true } override func layoutSubviews() {