Skip to content

Commit 0fe33b7

Browse files
committed
2 parents cd42c17 + 6a4088d commit 0fe33b7

12 files changed

Lines changed: 204 additions & 78 deletions

File tree

src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
using eShopOnContainers.Core.Helpers;
1+
using System;
2+
using eShopOnContainers.Core.Helpers;
23
using eShopOnContainers.Services;
34
using eShopOnContainers.Core.ViewModels.Base;
45
using System.Threading.Tasks;
6+
using eShopOnContainers.Core.Models.Location;
7+
using eShopOnContainers.Core.Services.Location;
8+
using Plugin.Geolocator;
59
using Xamarin.Forms;
610
using Xamarin.Forms.Xaml;
711

@@ -36,6 +40,7 @@ private Task InitNavigation()
3640
return navigationService.InitializeAsync();
3741
}
3842

43+
3944
protected override async void OnStart()
4045
{
4146
base.OnStart();
@@ -44,16 +49,48 @@ protected override async void OnStart()
4449
{
4550
await InitNavigation();
4651
}
52+
53+
if (!Settings.UseFakeLocation)
54+
{
55+
await GetRealLocation();
56+
}
57+
58+
if (!Settings.UseMocks && !string.IsNullOrEmpty(Settings.UserId))
59+
{
60+
await SendCurrentLocation();
61+
}
62+
63+
base.OnResume();
4764
}
4865

4966
protected override void OnSleep()
5067
{
5168
// Handle when your app sleeps
5269
}
5370

54-
protected override void OnResume()
71+
private async Task GetRealLocation()
5572
{
56-
// Handle when your app resumes
73+
var locator = CrossGeolocator.Current;
74+
locator.AllowsBackgroundUpdates = true;
75+
locator.DesiredAccuracy = 50;
76+
77+
var position = await locator.GetPositionAsync(20000);
78+
79+
Settings.Latitude = position.Latitude;
80+
Settings.Longitude = position.Longitude;
81+
}
82+
83+
private async Task SendCurrentLocation()
84+
{
85+
var location = new Location
86+
{
87+
Latitude = Settings.Latitude,
88+
Longitude = Settings.Longitude
89+
};
90+
91+
var locationService = ViewModelLocator.Resolve<ILocationService>();
92+
await locationService.UpdateUserLocation(location,
93+
Settings.AuthAccessToken);
5794
}
5895
}
59-
}
96+
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs

Lines changed: 20 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ private static ISettings AppSettings
2626
private const string IdUseMocks = "use_mocks";
2727
private const string IdUrlBase = "url_base";
2828
private const string IdUseFakeLocation = "use_fake_location";
29-
private const string IdFakeLatitude = "fake_latitude";
30-
private const string IdFakeLongitude = "fake_longitude";
29+
private const string IdLatitude = "latitude";
30+
private const string IdLongitude = "flongitude";
3131
private static readonly string AccessTokenDefault = string.Empty;
3232
private static readonly string IdTokenDefault = string.Empty;
3333
private static readonly bool UseMocksDefault = true;
@@ -40,91 +40,49 @@ private static ISettings AppSettings
4040

4141
public static string UserId
4242
{
43-
get { return AppSettings.GetValueOrDefault<string>(IdUserId); }
44-
set { AppSettings.AddOrUpdateValue<string>(IdUserId, value); }
43+
get => AppSettings.GetValueOrDefault<string>(IdUserId);
44+
set => AppSettings.AddOrUpdateValue<string>(IdUserId, value);
4545
}
4646

4747
public static string AuthAccessToken
4848
{
49-
get
50-
{
51-
return AppSettings.GetValueOrDefault<string>(AccessToken, AccessTokenDefault);
52-
}
53-
set
54-
{
55-
AppSettings.AddOrUpdateValue<string>(AccessToken, value);
56-
}
49+
get => AppSettings.GetValueOrDefault<string>(AccessToken, AccessTokenDefault);
50+
set => AppSettings.AddOrUpdateValue<string>(AccessToken, value);
5751
}
5852

5953
public static string AuthIdToken
6054
{
61-
get
62-
{
63-
return AppSettings.GetValueOrDefault<string>(IdToken, IdTokenDefault);
64-
}
65-
set
66-
{
67-
AppSettings.AddOrUpdateValue<string>(IdToken, value);
68-
}
55+
get => AppSettings.GetValueOrDefault<string>(IdToken, IdTokenDefault);
56+
set => AppSettings.AddOrUpdateValue<string>(IdToken, value);
6957
}
7058

7159
public static bool UseMocks
7260
{
73-
get
74-
{
75-
return AppSettings.GetValueOrDefault<bool>(IdUseMocks, UseMocksDefault);
76-
}
77-
set
78-
{
79-
AppSettings.AddOrUpdateValue<bool>(IdUseMocks, value);
80-
}
61+
get => AppSettings.GetValueOrDefault<bool>(IdUseMocks, UseMocksDefault);
62+
set => AppSettings.AddOrUpdateValue<bool>(IdUseMocks, value);
8163
}
8264

8365
public static string UrlBase
8466
{
85-
get
86-
{
87-
return AppSettings.GetValueOrDefault<string>(IdUrlBase, UrlBaseDefault);
88-
}
89-
set
90-
{
91-
AppSettings.AddOrUpdateValue<string>(IdUrlBase, value);
92-
}
67+
get => AppSettings.GetValueOrDefault<string>(IdUrlBase, UrlBaseDefault);
68+
set => AppSettings.AddOrUpdateValue<string>(IdUrlBase, value);
9369
}
9470

9571
public static bool UseFakeLocation
9672
{
97-
get
98-
{
99-
return AppSettings.GetValueOrDefault<bool>(IdUseFakeLocation, UseFakeLocationDefault);
100-
}
101-
set
102-
{
103-
AppSettings.AddOrUpdateValue<bool>(IdUseFakeLocation, value);
104-
}
73+
get => AppSettings.GetValueOrDefault<bool>(IdUseFakeLocation, UseFakeLocationDefault);
74+
set => AppSettings.AddOrUpdateValue<bool>(IdUseFakeLocation, value);
10575
}
10676

107-
public static double FakeLatitude
77+
public static double Latitude
10878
{
109-
get
110-
{
111-
return AppSettings.GetValueOrDefault<double>(IdFakeLatitude, FakeLatitudeValue);
112-
}
113-
set
114-
{
115-
AppSettings.AddOrUpdateValue<double>(IdFakeLatitude, value);
116-
}
79+
get => AppSettings.GetValueOrDefault<double>(IdLatitude, FakeLatitudeValue);
80+
set => AppSettings.AddOrUpdateValue<double>(IdLatitude, value);
11781
}
118-
public static double FakeLongitude
82+
public static double Longitude
11983
{
120-
get
121-
{
122-
return AppSettings.GetValueOrDefault<double>(IdFakeLongitude, FakeLongitudeValue);
123-
}
124-
set
125-
{
126-
AppSettings.AddOrUpdateValue<double>(IdFakeLongitude, value);
127-
}
84+
get => AppSettings.GetValueOrDefault<double>(IdLongitude, FakeLongitudeValue);
85+
set => AppSettings.AddOrUpdateValue<double>(IdLongitude, value);
12886
}
12987
}
13088
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public SettingsViewModel(ILocationService locationService)
2727
{
2828
UseAzureServices = !Settings.UseMocks;
2929
_useFakeLocation = Settings.UseFakeLocation;
30-
_latitude = Settings.FakeLatitude;
31-
_longitude = Settings.FakeLongitude;
30+
_latitude = Settings.Latitude;
31+
_longitude = Settings.Longitude;
3232
_locationService = locationService;
3333
}
3434

@@ -154,8 +154,8 @@ public override Task InitializeAsync(object navigationData)
154154
UpdateInfoFakeLocation();
155155

156156
Endpoint = Settings.UrlBase;
157-
_latitude = Settings.FakeLatitude;
158-
_longitude = Settings.FakeLongitude;
157+
_latitude = Settings.Latitude;
158+
_longitude = Settings.Longitude;
159159
_useFakeLocation = Settings.UseFakeLocation;
160160
return base.InitializeAsync(navigationData);
161161
}
@@ -191,14 +191,17 @@ private void ToggleFakeLocationAsync()
191191

192192
private async Task ToggleSendLocationAsync()
193193
{
194-
Location locationRequest = new Location
194+
if (!Settings.UseMocks)
195195
{
196-
Latitude = _latitude,
197-
Longitude = _longitude
198-
};
199-
var authToken = Settings.AuthAccessToken;
196+
var locationRequest = new Location
197+
{
198+
Latitude = _latitude,
199+
Longitude = _longitude
200+
};
201+
var authToken = Settings.AuthAccessToken;
200202

201-
await _locationService.UpdateUserLocation(locationRequest, authToken);
203+
await _locationService.UpdateUserLocation(locationRequest, authToken);
204+
}
202205
}
203206

204207
private void UpdateInfo()
@@ -238,13 +241,13 @@ private void UpdateEndpoint(string endpoint)
238241
private void UpdateLatitude(double latitude)
239242
{
240243
// Update fake latitude (save to local storage)
241-
Settings.FakeLatitude = latitude;
244+
Settings.Latitude = latitude;
242245
}
243246

244247
private void UpdateLongitude(double longitude)
245248
{
246249
// Update fake longitude (save to local storage)
247-
Settings.FakeLongitude = longitude;
250+
Settings.Longitude = longitude;
248251
}
249252
}
250253
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/project.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"Newtonsoft.Json": "9.0.1",
1111
"SlideOverKit": "2.1.4",
1212
"Splat": "1.6.2",
13+
"Xam.Plugin.Geolocator": "3.0.4",
1314
"Xam.Plugins.Settings": "2.6.0.12-beta",
1415
"Xamarin.FFImageLoading": "2.2.9",
1516
"Xamarin.FFImageLoading.Forms": "2.2.9",

src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Android.Runtime;
1010
using FFImageLoading;
1111
using System;
12+
using Plugin.Permissions;
1213

1314
namespace eShopOnContainers.Droid.Activities
1415
{
@@ -56,6 +57,11 @@ public override void OnTrimMemory([GeneratedEnum] TrimMemory level)
5657
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
5758
base.OnTrimMemory(level);
5859
}
60+
61+
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
62+
{
63+
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
64+
}
5965
}
6066
}
6167

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using System;
2+
3+
using Android.App;
4+
using Android.OS;
5+
using Android.Runtime;
6+
using Plugin.CurrentActivity;
7+
8+
namespace eShopOnContainers.Droid
9+
{
10+
//You can specify additional application information in this attribute
11+
[Application]
12+
public class MainApplication : Application, Application.IActivityLifecycleCallbacks
13+
{
14+
public MainApplication(IntPtr handle, JniHandleOwnership transer)
15+
:base(handle, transer)
16+
{
17+
}
18+
19+
public override void OnCreate()
20+
{
21+
base.OnCreate();
22+
RegisterActivityLifecycleCallbacks(this);
23+
//A great place to initialize Xamarin.Insights and Dependency Services!
24+
}
25+
26+
public override void OnTerminate()
27+
{
28+
base.OnTerminate();
29+
UnregisterActivityLifecycleCallbacks(this);
30+
}
31+
32+
public void OnActivityCreated(Activity activity, Bundle savedInstanceState)
33+
{
34+
CrossCurrentActivity.Current.Activity = activity;
35+
}
36+
37+
public void OnActivityDestroyed(Activity activity)
38+
{
39+
}
40+
41+
public void OnActivityPaused(Activity activity)
42+
{
43+
}
44+
45+
public void OnActivityResumed(Activity activity)
46+
{
47+
CrossCurrentActivity.Current.Activity = activity;
48+
}
49+
50+
public void OnActivitySaveInstanceState(Activity activity, Bundle outState)
51+
{
52+
}
53+
54+
public void OnActivityStarted(Activity activity)
55+
{
56+
CrossCurrentActivity.Current.Activity = activity;
57+
}
58+
59+
public void OnActivityStopped(Activity activity)
60+
{
61+
}
62+
}
63+
}

src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Properties/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto">
33
<uses-sdk android:minSdkVersion="15" android:targetSdkVersion="23" />
44
<uses-permission android:name="android.permission.INTERNET" />
5+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
6+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
57
<application android:label="eShopOnContainers" android:icon="@drawable/icon" android:largeHeap="true"></application>
68
</manifest>

src/Mobile/eShopOnContainers/eShopOnContainers.Droid/app.config

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22
<configuration>
33
<runtime>
44
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
5+
<dependentAssembly>
6+
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
7+
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
8+
</dependentAssembly>
9+
<dependentAssembly>
10+
<assemblyIdentity name="System.Net.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
11+
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
12+
</dependentAssembly>
513
<dependentAssembly>
614
<assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
715
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />

0 commit comments

Comments
 (0)