From 6e7a0ace16a6da5080770a6ede8b5bc2ee3df50d Mon Sep 17 00:00:00 2001 From: David Britch Date: Wed, 21 Feb 2018 17:31:51 +0000 Subject: [PATCH] LocationService threading issues fixed on Android. --- .../eShopOnContainers/eShopOnContainers.Core/App.xaml.cs | 1 - .../eShopOnContainers.Droid/Activities/MainActivity.cs | 5 +---- .../Services/LocationServiceImplementation.cs | 5 ++--- .../eShopOnContainers.Droid/Services/PermissionsService.cs | 3 +++ 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs index adecba788..207d076f9 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs @@ -79,7 +79,6 @@ namespace eShopOnContainers try { var position = await locator.GetPositionAsync(); - _settingsService.Latitude = position.Latitude.ToString(); _settingsService.Longitude = position.Longitude.ToString(); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs index 4cb0bc83f..c6f49b090 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs @@ -10,7 +10,6 @@ using FFImageLoading.Forms.Droid; using System; using Xamarin.Forms.Platform.Android; using eShopOnContainers.Droid.Services; -using eShopOnContainers.Core.Services.Permissions; namespace eShopOnContainers.Droid.Activities { @@ -21,8 +20,6 @@ namespace eShopOnContainers.Droid.Activities ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] public class MainActivity : FormsAppCompatActivity { - public static IPermissionsService PermissionsService = new PermissionsService(); - protected override void OnCreate(Bundle bundle) { FormsAppCompatActivity.ToolbarResource = Resource.Layout.Toolbar; @@ -60,7 +57,7 @@ namespace eShopOnContainers.Droid.Activities public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults) { base.OnRequestPermissionsResult(requestCode, permissions, grantResults); - ((PermissionsService)PermissionsService).OnRequestPermissionResult(requestCode, permissions, grantResults); + ((PermissionsService)PermissionsService.Current.Value).OnRequestPermissionResult(requestCode, permissions, grantResults); } } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Services/LocationServiceImplementation.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Services/LocationServiceImplementation.cs index f44527741..7d6f5f40f 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Services/LocationServiceImplementation.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Services/LocationServiceImplementation.cs @@ -5,7 +5,6 @@ using Android.OS; using eShopOnContainers.Core.Models.Location; using eShopOnContainers.Core.Models.Permissions; using eShopOnContainers.Core.Services.Location; -using eShopOnContainers.Droid.Activities; using eShopOnContainers.Droid.Services; using System; using System.Collections.Generic; @@ -45,12 +44,12 @@ namespace eShopOnContainers.Droid.Services async Task CheckPermissionsAsync() { - var status = await MainActivity.PermissionsService.CheckPermissionStatusAsync(Permission.Location); + var status = await PermissionsService.Current.Value.CheckPermissionStatusAsync(Permission.Location); if (status != PermissionStatus.Granted) { Console.WriteLine("Currently do not have Location permissions, requesting permissions."); - var request = await MainActivity.PermissionsService.RequestPermissionsAsync(Permission.Location); + var request = await PermissionsService.Current.Value.RequestPermissionsAsync(Permission.Location); if (request[Permission.Location] != PermissionStatus.Granted) { Console.WriteLine("Location permission denied."); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Services/PermissionsService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Services/PermissionsService.cs index a9b1a0845..c1fbd2f98 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Services/PermissionsService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Services/PermissionsService.cs @@ -8,6 +8,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Threading; using System.Threading.Tasks; namespace eShopOnContainers.Droid.Services @@ -20,6 +21,8 @@ namespace eShopOnContainers.Droid.Services Dictionary _results; IList _requestedPermissions; + public static Lazy Current = new Lazy(() => new PermissionsService(), LazyThreadSafetyMode.PublicationOnly); + #region Internal Implementation List GetManifestNames(Permission permission)