diff options
| author | Mojgan <mojgan.jelodar@mullvad.net> | 2026-04-23 16:47:40 +0200 |
|---|---|---|
| committer | Mojgan <mojgan.jelodar@mullvad.net> | 2026-04-23 16:47:40 +0200 |
| commit | 7944e9b1982feb3deba8871ab49e05d65886a235 (patch) | |
| tree | 7b9c2482cf13631a4442b9f1d5a97f77b7eb78eb /ios/SpeedConnection/SpeedConnectionView.swift | |
| parent | 8ccdcafd4ce312f75ffabafc4ae93f8ef5bad736 (diff) | |
| download | mullvadvpn-speed-connetcion-hackday.tar.xz mullvadvpn-speed-connetcion-hackday.zip | |
Speed connection testspeed-connetcion-hackday
Diffstat (limited to 'ios/SpeedConnection/SpeedConnectionView.swift')
| -rw-r--r-- | ios/SpeedConnection/SpeedConnectionView.swift | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/ios/SpeedConnection/SpeedConnectionView.swift b/ios/SpeedConnection/SpeedConnectionView.swift new file mode 100644 index 0000000000..0071f9cbc1 --- /dev/null +++ b/ios/SpeedConnection/SpeedConnectionView.swift @@ -0,0 +1,66 @@ +// +// SpeedConnectionView.swift +// MullvadVPN +// +// Created by Mojgan on 2025-10-31. +// Copyright © 2025 Mullvad VPN AB. All rights reserved. +// + +import SwiftUI + +struct SpeedConnectionView<ViewModel: SpeedConnectionViewModelProtocol>: View { + @State private var uploadValue: Double = 0.0 + @State private var downloadValue: Double = 0.0 + + var viewModel: ViewModel + + init(viewModel: ViewModel) { + self.viewModel = viewModel + } + + var body: some View { + VStack { + Text("Download: \(uploadValue / 1024.0) KB") + .font(.mullvadTiny) + Text("Upload: \(downloadValue / 1024.0) KB") + .font(.mullvadTiny) + } + .padding(8.0) + .onAppear { + viewModel.startMonitoring() + } + .onDisappear { + viewModel.stopMonitoring() + } + } +} + +#Preview { + SpeedConnectionView(viewModel: MockSpeedConnectionViewModel()) +} + +final class MockSpeedConnectionViewModel: SpeedConnectionViewModelProtocol,@unchecked Sendable { + + var uploadValue: Double = 0.0 + var downloadValue: Double = 0.0 + + private var timer: Timer? + + func startMonitoring() { + timer?.invalidate() + + timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in + let upload = Double.random(in: 10_000...100_000) + let download = Double.random(in: 10_000...100_000) + Task { @MainActor in + self.uploadValue = upload + self.downloadValue = download + } + } + } + + func stopMonitoring() { + timer?.invalidate() + timer = nil + } +} |
