From ad4116864f457fedfda814cab6bf6780a2027ff7 Mon Sep 17 00:00:00 2001
From: Jon Petersson <jon.petersson@mullvad.net>
Date: Fri, 17 Jan 2025 16:49:30 +0100
Subject: [PATCH] Fix connection view background in iOS15

---
 .../ConnectionView/ConnectionView.swift       | 35 +++++++------------
 .../Tunnel/TunnelViewController.swift         | 11 ++----
 ios/MullvadVPN/Views/BlurView.swift           |  7 ++--
 3 files changed, 17 insertions(+), 36 deletions(-)

diff --git a/ios/MullvadVPN/View controllers/Tunnel/ConnectionView/ConnectionView.swift b/ios/MullvadVPN/View controllers/Tunnel/ConnectionView/ConnectionView.swift
index 6dfee3abed08..791948292f4c 100644
--- a/ios/MullvadVPN/View controllers/Tunnel/ConnectionView/ConnectionView.swift	
+++ b/ios/MullvadVPN/View controllers/Tunnel/ConnectionView/ConnectionView.swift	
@@ -15,7 +15,6 @@ struct ConnectionView: View {
     @State private(set) var isExpanded = false
 
     var action: ButtonPanel.Action?
-    var onContentUpdate: (() -> Void)?
 
     var body: some View {
         Spacer()
@@ -25,32 +24,26 @@ struct ConnectionView: View {
             CustomProgressView(style: .large)
                 .showIf(connectionViewModel.showsActivityIndicator)
 
-            ZStack {
-                BlurView(style: .dark)
+            VStack(alignment: .leading, spacing: 0) {
+                HeaderView(viewModel: connectionViewModel, isExpanded: $isExpanded)
+                    .padding(.bottom, headerViewBottomPadding)
 
-                VStack(alignment: .leading, spacing: 0) {
-                    HeaderView(viewModel: connectionViewModel, isExpanded: $isExpanded)
-                        .padding(.bottom, headerViewBottomPadding)
+                DetailsContainer(
+                    connectionViewModel: connectionViewModel,
+                    indicatorsViewModel: indicatorsViewModel,
+                    isExpanded: $isExpanded
+                )
+                .showIf(connectionViewModel.showConnectionDetails)
 
-                    DetailsContainer(
-                        connectionViewModel: connectionViewModel,
-                        indicatorsViewModel: indicatorsViewModel,
-                        isExpanded: $isExpanded
-                    )
-                    .showIf(connectionViewModel.showConnectionDetails)
-
-                    ButtonPanel(viewModel: connectionViewModel, action: action)
-                        .padding(.top, 16)
-                }
-                .padding(16)
+                ButtonPanel(viewModel: connectionViewModel, action: action)
+                    .padding(.top, 16)
             }
+            .padding(16)
+            .background(BlurView(style: .dark))
             .cornerRadius(12)
             .padding(16)
         }
         .padding(.bottom, 8) // Some spacing to avoid overlap with the map legal link.
-        .onChange(of: isExpanded) { _ in
-            onContentUpdate?()
-        }
         .onReceive(connectionViewModel.combinedState) { _, _ in
             // Only update expanded state when connections details should be hidden.
             // This will contract the view on eg. disconnect, but leave it as-is on
@@ -59,8 +52,6 @@ struct ConnectionView: View {
                 isExpanded = false
                 return
             }
-
-            onContentUpdate?()
         }
     }
 }
diff --git a/ios/MullvadVPN/View controllers/Tunnel/TunnelViewController.swift b/ios/MullvadVPN/View controllers/Tunnel/TunnelViewController.swift
index a486014e7241..24596d1fdc79 100644
--- a/ios/MullvadVPN/View controllers/Tunnel/TunnelViewController.swift	
+++ b/ios/MullvadVPN/View controllers/Tunnel/TunnelViewController.swift	
@@ -58,18 +58,11 @@ class TunnelViewController: UIViewController, RootContainment {
         )
 
         connectionView = ConnectionView(
-            connectionViewModel: self.connectionViewViewModel,
-            indicatorsViewModel: self.indicatorsViewViewModel
+            connectionViewModel: connectionViewViewModel,
+            indicatorsViewModel: indicatorsViewViewModel
         )
 
         super.init(nibName: nil, bundle: nil)
-
-        // When content size is updated in SwiftUI we need to explicitly tell UIKit to
-        // update its view size. This is not necessary on iOS 16 where we can set
-        // hostingController.sizingOptions instead.
-        connectionView.onContentUpdate = { [weak self] in
-            self?.connectionController?.view.setNeedsUpdateConstraints()
-        }
     }
 
     required init?(coder: NSCoder) {
diff --git a/ios/MullvadVPN/Views/BlurView.swift b/ios/MullvadVPN/Views/BlurView.swift
index eb976efb74a4..081cbb99da2f 100644
--- a/ios/MullvadVPN/Views/BlurView.swift
+++ b/ios/MullvadVPN/Views/BlurView.swift
@@ -13,10 +13,7 @@ struct BlurView: View {
     var style: UIBlurEffect.Style
 
     var body: some View {
-        Spacer()
-            .overlay {
-                VisualEffectView(effect: UIBlurEffect(style: style))
-                    .opacity(0.8)
-            }
+        VisualEffectView(effect: UIBlurEffect(style: style))
+            .opacity(0.8)
     }
 }