From 01cf30ebb8317f4944c110e1573e7ad3750168f9 Mon Sep 17 00:00:00 2001 From: David Britch Date: Wed, 21 Feb 2018 17:11:17 +0000 Subject: [PATCH] iOS LocationService thread safety architecture changes. --- .../Services/LocationServiceImplementation.cs | 27 ++++++++++--------- .../Services/PermissionsService.cs | 14 ---------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/LocationServiceImplementation.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/LocationServiceImplementation.cs index abd85b17d..ee7aabed4 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/LocationServiceImplementation.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/LocationServiceImplementation.cs @@ -15,32 +15,24 @@ namespace eShopOnContainers.iOS.Services { public class LocationServiceImplementation : ILocationServiceImplementation { - public double DesiredAccuracy { get; set; } - public bool IsGeolocationAvailable => true; - public bool IsGeolocationEnabled - { - get - { - var status = CLLocationManager.Status; - return CLLocationManager.LocationServicesEnabled; - } - } + Lazy _permissionsService; public LocationServiceImplementation() { DesiredAccuracy = 100; + _permissionsService = new Lazy(() => new PermissionsService(), LazyThreadSafetyMode.PublicationOnly); } #region Internal Implementation async Task CheckPermissions(Permission permission) { - var status = await PermissionsService.Current.CheckPermissionStatusAsync(permission); + var status = await _permissionsService.Value.CheckPermissionStatusAsync(permission); if (status != PermissionStatus.Granted) { Console.WriteLine("Currently do not have Location permissions, requesting permissions"); - var request = await PermissionsService.Current.RequestPermissionsAsync(permission); + var request = await _permissionsService.Value.RequestPermissionsAsync(permission); if (request[permission] != PermissionStatus.Granted) { Console.WriteLine("Location permission denied, can not get positions async."); @@ -61,6 +53,17 @@ namespace eShopOnContainers.iOS.Services #region ILocationServiceImplementation + public double DesiredAccuracy { get; set; } + public bool IsGeolocationAvailable => true; + public bool IsGeolocationEnabled + { + get + { + var status = CLLocationManager.Status; + return CLLocationManager.LocationServicesEnabled; + } + } + public async Task GetPositionAsync(TimeSpan? timeout, CancellationToken? cancelToken = null) { var permission = Permission.LocationWhenInUse; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/PermissionsService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/PermissionsService.cs index 2b7ce5c43..d0d3e06c8 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/PermissionsService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/PermissionsService.cs @@ -13,20 +13,6 @@ namespace eShopOnContainers.iOS.Services { CLLocationManager _locationManager; - static Lazy implementation = new Lazy(CreatePermissions, System.Threading.LazyThreadSafetyMode.PublicationOnly); - static IPermissionsService CreatePermissions() - { - return new PermissionsService(); - } - - public static IPermissionsService Current - { - get - { - return implementation.Value; - } - } - #region Internal Implementation PermissionStatus GetLocationPermissionStatus(Permission permission)