From fe06db77f807ada8ae3bb39958fbc435530b2096 Mon Sep 17 00:00:00 2001 From: Gary Tokman Date: Tue, 4 May 2021 23:19:09 -0400 Subject: [PATCH] feat: add experimental always authorization publisher --- .../CoreLocation/CLLocationManager.swift | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/Sources/ExtensionKit/CoreLocation/CLLocationManager.swift b/Sources/ExtensionKit/CoreLocation/CLLocationManager.swift index fd1a230..5347ac0 100644 --- a/Sources/ExtensionKit/CoreLocation/CLLocationManager.swift +++ b/Sources/ExtensionKit/CoreLocation/CLLocationManager.swift @@ -3,19 +3,6 @@ import CoreLocation public extension CLLocationManager { - /* - /// Upgrade the user authoriztion status - requestLocationAuthorization() - .flatMap { status -> AnyPublisher in - if status == CLAuthorizationStatus.authorizedAlways { - return AuthorizationPublisher(manager: manager, authorizationType: type) - .eraseToAnyPublisher() - } else { - return Just(status) - .eraseToAnyPublisher() - } - } - **/ /// Request locaton authorization and subscribe to `CLAuthorizationStatus` updates /// - Parameters: /// - manager: `CLLocationManager` @@ -29,6 +16,27 @@ public extension CLLocationManager { .eraseToAnyPublisher() } + /// Request locaton **always** authorization `CLAuthorizationStatus` with **upgrade** prompt (experimental) + /// - Parameters: + /// - manager: `CLLocationManager` + /// - Returns: Publisher with `AuthorizationType` + static func requestLocationAlwaysAuthorization( + with manager: CLLocationManager = .init() + ) -> AnyPublisher { + AuthorizationPublisher(manager: manager, authorizationType: .always) + .flatMap { status -> AnyPublisher in + if status == CLAuthorizationStatus.authorizedAlways { + return AuthorizationPublisher( + manager: manager, + authorizationType: .always + ) + .eraseToAnyPublisher() + } + return Just(status).eraseToAnyPublisher() + } + .eraseToAnyPublisher() + } + /// Receive location updates from the `CLLocationManager` /// - Parameter manager: `CLLocationManager` /// - Returns: Publisher with `[CLLocation]` or `Error`