summaryrefslogtreecommitdiffhomepage
path: root/ios/SpeedConnection/SpeedConnectionView.swift
diff options
context:
space:
mode:
authorMojgan <mojgan.jelodar@mullvad.net>2026-04-23 16:47:40 +0200
committerMojgan <mojgan.jelodar@mullvad.net>2026-04-23 16:47:40 +0200
commit7944e9b1982feb3deba8871ab49e05d65886a235 (patch)
tree7b9c2482cf13631a4442b9f1d5a97f77b7eb78eb /ios/SpeedConnection/SpeedConnectionView.swift
parent8ccdcafd4ce312f75ffabafc4ae93f8ef5bad736 (diff)
downloadmullvadvpn-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.swift66
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
+ }
+}