From d6245e33b1ad1ca9d2ec7d4dc6bd6c834c3593e2 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Fri, 11 Jul 2025 19:42:59 -0700 Subject: [PATCH] A little more cleanup --- Meshtastic/Helpers/LocationsHandler.swift | 2 +- .../Views/Onboarding/DeviceOnboarding.swift | 67 +++++++++++-------- 2 files changed, 41 insertions(+), 28 deletions(-) diff --git a/Meshtastic/Helpers/LocationsHandler.swift b/Meshtastic/Helpers/LocationsHandler.swift index 7ec4c77a..efd817db 100644 --- a/Meshtastic/Helpers/LocationsHandler.swift +++ b/Meshtastic/Helpers/LocationsHandler.swift @@ -40,7 +40,7 @@ import OSLog } // The continuation we will use to asynchronously ask the user permission to track their location. - private var permissionContinuation: CheckedContinuation? + var permissionContinuation: CheckedContinuation? func requestLocationAlwaysPermissions() async -> CLAuthorizationStatus { self.manager.requestAlwaysAuthorization() diff --git a/Meshtastic/Views/Onboarding/DeviceOnboarding.swift b/Meshtastic/Views/Onboarding/DeviceOnboarding.swift index d48a1015..f48d1af7 100644 --- a/Meshtastic/Views/Onboarding/DeviceOnboarding.swift +++ b/Meshtastic/Views/Onboarding/DeviceOnboarding.swift @@ -10,8 +10,9 @@ struct DeviceOnboarding: View { case location } - @State var navigationPath: [SetupGuide] = [] @EnvironmentObject var bleManager: BLEManager + @State var navigationPath: [SetupGuide] = [] + @State var locationStatus = LocationsHandler.shared.manager.authorizationStatus @Environment(\.dismiss) var dismiss @@ -61,19 +62,20 @@ struct DeviceOnboarding: View { .interactiveDismissDisabled() } Spacer() - - Button { - Task { - await goToNextStep(after: nil) + if bleManager.isSwitchedOn { + Button { + Task { + await goToNextStep(after: nil) + } + } label: { + Text("Get started") + .frame(maxWidth: .infinity) } - } label: { - Text("Get started") - .frame(maxWidth: .infinity) + .buttonBorderShape(.capsule) + .controlSize(.large) + .padding() + .buttonStyle(.borderedProminent) } - .buttonBorderShape(.capsule) - .controlSize(.large) - .padding() - .buttonStyle(.borderedProminent) } } @@ -169,22 +171,33 @@ struct DeviceOnboarding: View { } .padding() Spacer() - Button { - Task { - let status = await LocationsHandler.shared.requestLocationAlwaysPermissions() - if status != .notDetermined { - dismiss() + if locationStatus == .notDetermined { + Button { + Task { + locationStatus = await LocationsHandler.shared.requestLocationAlwaysPermissions() // LocationsHandler.shared.requestLocationAlwaysPermissions() } + } label: { + Text("Configure Location Permissions") + .frame(maxWidth: .infinity) } - } label: { - Text("Configure Location Permissions") - .frame(maxWidth: .infinity) + .padding() + .buttonBorderShape(.capsule) + .controlSize(.large) + .padding() + .buttonStyle(.borderedProminent) + } else { + Button { + dismiss() + } label: { + Text("Finish") + .frame(maxWidth: .infinity) + } + .padding() + .buttonBorderShape(.capsule) + .controlSize(.large) + .padding() + .buttonStyle(.borderedProminent) } - .padding() - .buttonBorderShape(.capsule) - .controlSize(.large) - .padding() - .buttonStyle(.borderedProminent) } } @@ -244,8 +257,8 @@ struct DeviceOnboarding: View { fallthrough } case .notifications: - let status = LocationsHandler.shared.manager.authorizationStatus - if status == .notDetermined || status == .restricted || status == .denied { + locationStatus = LocationsHandler.shared.manager.authorizationStatus + if locationStatus == .notDetermined || locationStatus == .restricted || locationStatus == .denied { navigationPath.append(.location) } else { fallthrough