iOS LocationService thread safety architecture changes.

This commit is contained in:
David Britch 2018-02-21 17:11:17 +00:00
parent 32c85b327f
commit 01cf30ebb8
2 changed files with 15 additions and 26 deletions

View File

@ -15,32 +15,24 @@ namespace eShopOnContainers.iOS.Services
{ {
public class LocationServiceImplementation : ILocationServiceImplementation public class LocationServiceImplementation : ILocationServiceImplementation
{ {
public double DesiredAccuracy { get; set; } Lazy<IPermissionsService> _permissionsService;
public bool IsGeolocationAvailable => true;
public bool IsGeolocationEnabled
{
get
{
var status = CLLocationManager.Status;
return CLLocationManager.LocationServicesEnabled;
}
}
public LocationServiceImplementation() public LocationServiceImplementation()
{ {
DesiredAccuracy = 100; DesiredAccuracy = 100;
_permissionsService = new Lazy<IPermissionsService>(() => new PermissionsService(), LazyThreadSafetyMode.PublicationOnly);
} }
#region Internal Implementation #region Internal Implementation
async Task<bool> CheckPermissions(Permission permission) async Task<bool> CheckPermissions(Permission permission)
{ {
var status = await PermissionsService.Current.CheckPermissionStatusAsync(permission); var status = await _permissionsService.Value.CheckPermissionStatusAsync(permission);
if (status != PermissionStatus.Granted) if (status != PermissionStatus.Granted)
{ {
Console.WriteLine("Currently do not have Location permissions, requesting permissions"); 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) if (request[permission] != PermissionStatus.Granted)
{ {
Console.WriteLine("Location permission denied, can not get positions async."); Console.WriteLine("Location permission denied, can not get positions async.");
@ -61,6 +53,17 @@ namespace eShopOnContainers.iOS.Services
#region ILocationServiceImplementation #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<Position> GetPositionAsync(TimeSpan? timeout, CancellationToken? cancelToken = null) public async Task<Position> GetPositionAsync(TimeSpan? timeout, CancellationToken? cancelToken = null)
{ {
var permission = Permission.LocationWhenInUse; var permission = Permission.LocationWhenInUse;

View File

@ -13,20 +13,6 @@ namespace eShopOnContainers.iOS.Services
{ {
CLLocationManager _locationManager; CLLocationManager _locationManager;
static Lazy<IPermissionsService> implementation = new Lazy<IPermissionsService>(CreatePermissions, System.Threading.LazyThreadSafetyMode.PublicationOnly);
static IPermissionsService CreatePermissions()
{
return new PermissionsService();
}
public static IPermissionsService Current
{
get
{
return implementation.Value;
}
}
#region Internal Implementation #region Internal Implementation
PermissionStatus GetLocationPermissionStatus(Permission permission) PermissionStatus GetLocationPermissionStatus(Permission permission)