diff options
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 + } +} |
