iOS LocationService thread safety architecture changes.
This commit is contained in:
parent
32c85b327f
commit
01cf30ebb8
@ -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;
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user