Browse Source

iOS LocationService thread safety architecture changes.

pull/521/head
David Britch 7 years ago
parent
commit
01cf30ebb8
2 changed files with 15 additions and 26 deletions
  1. +15
    -12
      src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/LocationServiceImplementation.cs
  2. +0
    -14
      src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/PermissionsService.cs

+ 15
- 12
src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/LocationServiceImplementation.cs View File

@ -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<IPermissionsService> _permissionsService;
public LocationServiceImplementation()
{
DesiredAccuracy = 100;
_permissionsService = new Lazy<IPermissionsService>(() => new PermissionsService(), LazyThreadSafetyMode.PublicationOnly);
}
#region Internal Implementation
async Task<bool> 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<Position> GetPositionAsync(TimeSpan? timeout, CancellationToken? cancelToken = null)
{
var permission = Permission.LocationWhenInUse;


+ 0
- 14
src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/PermissionsService.cs View File

@ -13,20 +13,6 @@ namespace eShopOnContainers.iOS.Services
{
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
PermissionStatus GetLocationPermissionStatus(Permission permission)


Loading…
Cancel
Save