diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs index b6d93adfa..8f965004f 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs @@ -1,7 +1,9 @@ -using eShopOnContainers.Core.Helpers; +using System; +using eShopOnContainers.Core.Helpers; using eShopOnContainers.Services; using eShopOnContainers.Core.ViewModels.Base; using System.Threading.Tasks; +using Plugin.Geolocator; using Xamarin.Forms; using Xamarin.Forms.Xaml; @@ -36,6 +38,7 @@ namespace eShopOnContainers return navigationService.InitializeAsync(); } + protected override async void OnStart() { base.OnStart(); @@ -44,6 +47,11 @@ namespace eShopOnContainers { await InitNavigation(); } + + if (!Settings.UseFakeLocation) + { + await GetRealLocation(); + } } protected override void OnSleep() @@ -55,5 +63,16 @@ namespace eShopOnContainers { // Handle when your app resumes } + + private async Task GetRealLocation() + { + var locator = CrossGeolocator.Current; + locator.DesiredAccuracy = 50; + + var position = await locator.GetPositionAsync(20000); + + Settings.Latitude = position.Latitude; + Settings.Longitude = position.Longitude; + } } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs index bd6e1e420..243659d09 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs @@ -26,8 +26,8 @@ namespace eShopOnContainers.Core.Helpers private const string IdUseMocks = "use_mocks"; private const string IdUrlBase = "url_base"; private const string IdUseFakeLocation = "use_fake_location"; - private const string IdFakeLatitude = "fake_latitude"; - private const string IdFakeLongitude = "fake_longitude"; + private const string IdLatitude = "latitude"; + private const string IdLongitude = "flongitude"; private static readonly string AccessTokenDefault = string.Empty; private static readonly string IdTokenDefault = string.Empty; private static readonly bool UseMocksDefault = true; @@ -40,91 +40,49 @@ namespace eShopOnContainers.Core.Helpers public static string UserId { - get { return AppSettings.GetValueOrDefault(IdUserId); } - set { AppSettings.AddOrUpdateValue(IdUserId, value); } + get => AppSettings.GetValueOrDefault(IdUserId); + set => AppSettings.AddOrUpdateValue(IdUserId, value); } public static string AuthAccessToken { - get - { - return AppSettings.GetValueOrDefault(AccessToken, AccessTokenDefault); - } - set - { - AppSettings.AddOrUpdateValue(AccessToken, value); - } + get => AppSettings.GetValueOrDefault(AccessToken, AccessTokenDefault); + set => AppSettings.AddOrUpdateValue(AccessToken, value); } public static string AuthIdToken { - get - { - return AppSettings.GetValueOrDefault(IdToken, IdTokenDefault); - } - set - { - AppSettings.AddOrUpdateValue(IdToken, value); - } + get => AppSettings.GetValueOrDefault(IdToken, IdTokenDefault); + set => AppSettings.AddOrUpdateValue(IdToken, value); } public static bool UseMocks { - get - { - return AppSettings.GetValueOrDefault(IdUseMocks, UseMocksDefault); - } - set - { - AppSettings.AddOrUpdateValue(IdUseMocks, value); - } + get => AppSettings.GetValueOrDefault(IdUseMocks, UseMocksDefault); + set => AppSettings.AddOrUpdateValue(IdUseMocks, value); } public static string UrlBase { - get - { - return AppSettings.GetValueOrDefault(IdUrlBase, UrlBaseDefault); - } - set - { - AppSettings.AddOrUpdateValue(IdUrlBase, value); - } + get => AppSettings.GetValueOrDefault(IdUrlBase, UrlBaseDefault); + set => AppSettings.AddOrUpdateValue(IdUrlBase, value); } public static bool UseFakeLocation { - get - { - return AppSettings.GetValueOrDefault(IdUseFakeLocation, UseFakeLocationDefault); - } - set - { - AppSettings.AddOrUpdateValue(IdUseFakeLocation, value); - } + get => AppSettings.GetValueOrDefault(IdUseFakeLocation, UseFakeLocationDefault); + set => AppSettings.AddOrUpdateValue(IdUseFakeLocation, value); } - public static double FakeLatitude + public static double Latitude { - get - { - return AppSettings.GetValueOrDefault(IdFakeLatitude, FakeLatitudeValue); - } - set - { - AppSettings.AddOrUpdateValue(IdFakeLatitude, value); - } + get => AppSettings.GetValueOrDefault(IdLatitude, FakeLatitudeValue); + set => AppSettings.AddOrUpdateValue(IdLatitude, value); } - public static double FakeLongitude + public static double Longitude { - get - { - return AppSettings.GetValueOrDefault(IdFakeLongitude, FakeLongitudeValue); - } - set - { - AppSettings.AddOrUpdateValue(IdFakeLongitude, value); - } + get => AppSettings.GetValueOrDefault(IdLongitude, FakeLongitudeValue); + set => AppSettings.AddOrUpdateValue(IdLongitude, value); } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs index 943b5a597..9ffb4f830 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs @@ -27,8 +27,8 @@ namespace eShopOnContainers.Core.ViewModels { UseAzureServices = !Settings.UseMocks; _useFakeLocation = Settings.UseFakeLocation; - _latitude = Settings.FakeLatitude; - _longitude = Settings.FakeLongitude; + _latitude = Settings.Latitude; + _longitude = Settings.Longitude; _locationService = locationService; } @@ -154,8 +154,8 @@ namespace eShopOnContainers.Core.ViewModels UpdateInfoFakeLocation(); Endpoint = Settings.UrlBase; - _latitude = Settings.FakeLatitude; - _longitude = Settings.FakeLongitude; + _latitude = Settings.Latitude; + _longitude = Settings.Longitude; _useFakeLocation = Settings.UseFakeLocation; return base.InitializeAsync(navigationData); } @@ -191,14 +191,17 @@ namespace eShopOnContainers.Core.ViewModels private async Task ToggleSendLocationAsync() { - Location locationRequest = new Location + if (!Settings.UseMocks) { - Latitude = _latitude, - Longitude = _longitude - }; - var authToken = Settings.AuthAccessToken; + var locationRequest = new Location + { + Latitude = _latitude, + Longitude = _longitude + }; + var authToken = Settings.AuthAccessToken; - await _locationService.UpdateUserLocation(locationRequest, authToken); + await _locationService.UpdateUserLocation(locationRequest, authToken); + } } private void UpdateInfo() @@ -238,13 +241,13 @@ namespace eShopOnContainers.Core.ViewModels private void UpdateLatitude(double latitude) { // Update fake latitude (save to local storage) - Settings.FakeLatitude = latitude; + Settings.Latitude = latitude; } private void UpdateLongitude(double longitude) { // Update fake longitude (save to local storage) - Settings.FakeLongitude = longitude; + Settings.Longitude = longitude; } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/project.json b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/project.json index db6ef9116..dcca8ed8f 100755 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/project.json +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/project.json @@ -10,6 +10,7 @@ "Newtonsoft.Json": "9.0.1", "SlideOverKit": "2.1.4", "Splat": "1.6.2", + "Xam.Plugin.Geolocator": "3.0.4", "Xam.Plugins.Settings": "2.6.0.12-beta", "Xamarin.FFImageLoading": "2.2.9", "Xamarin.FFImageLoading.Forms": "2.2.9", diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs index f2b531f4e..190186e9b 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs @@ -9,6 +9,7 @@ using Android.Content; using Android.Runtime; using FFImageLoading; using System; +using Plugin.Permissions; namespace eShopOnContainers.Droid.Activities { @@ -56,6 +57,11 @@ namespace eShopOnContainers.Droid.Activities GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); base.OnTrimMemory(level); } + + public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults) + { + PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults); + } } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/MainApplication.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/MainApplication.cs new file mode 100644 index 000000000..b1e6dd104 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/MainApplication.cs @@ -0,0 +1,63 @@ +using System; + +using Android.App; +using Android.OS; +using Android.Runtime; +using Plugin.CurrentActivity; + +namespace eShopOnContainers.Droid +{ + //You can specify additional application information in this attribute + [Application] + public class MainApplication : Application, Application.IActivityLifecycleCallbacks + { + public MainApplication(IntPtr handle, JniHandleOwnership transer) + :base(handle, transer) + { + } + + public override void OnCreate() + { + base.OnCreate(); + RegisterActivityLifecycleCallbacks(this); + //A great place to initialize Xamarin.Insights and Dependency Services! + } + + public override void OnTerminate() + { + base.OnTerminate(); + UnregisterActivityLifecycleCallbacks(this); + } + + public void OnActivityCreated(Activity activity, Bundle savedInstanceState) + { + CrossCurrentActivity.Current.Activity = activity; + } + + public void OnActivityDestroyed(Activity activity) + { + } + + public void OnActivityPaused(Activity activity) + { + } + + public void OnActivityResumed(Activity activity) + { + CrossCurrentActivity.Current.Activity = activity; + } + + public void OnActivitySaveInstanceState(Activity activity, Bundle outState) + { + } + + public void OnActivityStarted(Activity activity) + { + CrossCurrentActivity.Current.Activity = activity; + } + + public void OnActivityStopped(Activity activity) + { + } + } +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Properties/AndroidManifest.xml b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Properties/AndroidManifest.xml index 236f0754b..f778d5fa5 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Properties/AndroidManifest.xml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Properties/AndroidManifest.xml @@ -2,5 +2,7 @@ + + \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/app.config b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/app.config index d19c2e35d..7e55c6fc6 100755 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/app.config +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/app.config @@ -2,6 +2,14 @@ + + + + + + + + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj index aeb9b6102..8443790d8 100755 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj @@ -100,6 +100,21 @@ ..\..\..\..\packages\modernhttpclient.2.4.2\lib\MonoAndroid\OkHttp.dll True + + ..\..\..\..\packages\Plugin.CurrentActivity.1.0.1\lib\MonoAndroid10\Plugin.CurrentActivity.dll + + + ..\..\..\..\packages\Xam.Plugin.Geolocator.3.0.4\lib\MonoAndroid10\Plugin.Geolocator.dll + + + ..\..\..\..\packages\Xam.Plugin.Geolocator.3.0.4\lib\MonoAndroid10\Plugin.Geolocator.Abstractions.dll + + + ..\..\..\..\packages\Plugin.Permissions.1.1.7\lib\MonoAndroid10\Plugin.Permissions.dll + + + ..\..\..\..\packages\Plugin.Permissions.1.1.7\lib\MonoAndroid10\Plugin.Permissions.Abstractions.dll + ..\..\..\..\packages\Xam.Plugins.Settings.2.6.0.12-beta\lib\MonoAndroid10\Plugin.Settings.dll True @@ -207,6 +222,7 @@ + diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/packages.config b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/packages.config index 22d2c2a91..55c835f31 100755 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/packages.config +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/packages.config @@ -14,6 +14,8 @@ + + @@ -61,6 +63,7 @@ +