Merge branch 'feature/track-user-location-mongodb' of https://github.com/dotnet-architecture/eShopOnContainers into feature/track-user-location-mongodb
This commit is contained in:
commit
f21747109b
@ -43,6 +43,8 @@
|
|||||||
|
|
||||||
public string IdentityEndpoint { get; set; }
|
public string IdentityEndpoint { get; set; }
|
||||||
|
|
||||||
|
public string LocationEndpoint { get; set; }
|
||||||
|
|
||||||
public string UserInfoEndpoint { get; set; }
|
public string UserInfoEndpoint { get; set; }
|
||||||
|
|
||||||
public string LogoutEndpoint { get; set; }
|
public string LogoutEndpoint { get; set; }
|
||||||
@ -62,6 +64,7 @@
|
|||||||
LogoutEndpoint = string.Format("{0}:5105/connect/endsession", baseEndpoint);
|
LogoutEndpoint = string.Format("{0}:5105/connect/endsession", baseEndpoint);
|
||||||
IdentityCallback = string.Format("{0}:5105/xamarincallback", baseEndpoint);
|
IdentityCallback = string.Format("{0}:5105/xamarincallback", baseEndpoint);
|
||||||
LogoutCallback = string.Format("{0}:5105/Account/Redirecting", baseEndpoint);
|
LogoutCallback = string.Format("{0}:5105/Account/Redirecting", baseEndpoint);
|
||||||
|
LocationEndpoint = string.Format("{0}:5109", baseEndpoint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,9 +24,13 @@ namespace eShopOnContainers.Core.Helpers
|
|||||||
private const string IdToken = "id_token";
|
private const string IdToken = "id_token";
|
||||||
private const string IdUseMocks = "use_mocks";
|
private const string IdUseMocks = "use_mocks";
|
||||||
private const string IdUrlBase = "url_base";
|
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 static readonly string AccessTokenDefault = string.Empty;
|
private static readonly string AccessTokenDefault = string.Empty;
|
||||||
private static readonly string IdTokenDefault = string.Empty;
|
private static readonly string IdTokenDefault = string.Empty;
|
||||||
private static readonly bool UseMocksDefault = true;
|
private static readonly bool UseMocksDefault = true;
|
||||||
|
private static readonly bool UseFakeLocationDefault = false;
|
||||||
private static readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint;
|
private static readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -78,5 +82,40 @@ namespace eShopOnContainers.Core.Helpers
|
|||||||
AppSettings.AddOrUpdateValue<string>(IdUrlBase, value);
|
AppSettings.AddOrUpdateValue<string>(IdUrlBase, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool UseFakeLocation
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return AppSettings.GetValueOrDefault<bool>(IdUseFakeLocation, UseFakeLocationDefault);
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
AppSettings.AddOrUpdateValue<bool>(IdUseFakeLocation, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double FakeLatitude
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return AppSettings.GetValueOrDefault<double>(IdFakeLatitude);
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
AppSettings.AddOrUpdateValue<double>(IdFakeLatitude, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static double FakeLongitude
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return AppSettings.GetValueOrDefault<double>(IdFakeLongitude);
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
AppSettings.AddOrUpdateValue<double>(IdFakeLongitude, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
namespace eShopOnContainers.Core.Models.Location
|
||||||
|
{
|
||||||
|
public class LocationRequest
|
||||||
|
{
|
||||||
|
public double Longitude { get; set; }
|
||||||
|
public double Latitude { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
namespace eShopOnContainers.Core.Services.Location
|
||||||
|
{
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using eShopOnContainers.Core.Models.Location;
|
||||||
|
|
||||||
|
public interface ILocationService
|
||||||
|
{
|
||||||
|
Task UpdateUserLocation(LocationRequest newLocReq);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
namespace eShopOnContainers.Core.Services.Location
|
||||||
|
{
|
||||||
|
using eShopOnContainers.Core.Models.Location;
|
||||||
|
using eShopOnContainers.Core.Services.RequestProvider;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
public class LocationService : ILocationService
|
||||||
|
{
|
||||||
|
private readonly IRequestProvider _requestProvider;
|
||||||
|
|
||||||
|
public LocationService(IRequestProvider requestProvider)
|
||||||
|
{
|
||||||
|
_requestProvider = requestProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task UpdateUserLocation(LocationRequest newLocReq)
|
||||||
|
{
|
||||||
|
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.LocationEndpoint);
|
||||||
|
|
||||||
|
builder.Path = "api/v1/locations";
|
||||||
|
|
||||||
|
string uri = builder.ToString();
|
||||||
|
|
||||||
|
var result = await _requestProvider.PostAsync(uri, newLocReq);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,7 @@ using eShopOnContainers.Core.Services.Identity;
|
|||||||
using eShopOnContainers.Core.Services.Order;
|
using eShopOnContainers.Core.Services.Order;
|
||||||
using eShopOnContainers.Core.Services.User;
|
using eShopOnContainers.Core.Services.User;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
using eShopOnContainers.Core.Services.Location;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.ViewModels.Base
|
namespace eShopOnContainers.Core.ViewModels.Base
|
||||||
{
|
{
|
||||||
@ -53,24 +54,25 @@ namespace eShopOnContainers.Core.ViewModels.Base
|
|||||||
builder.RegisterType<OpenUrlService>().As<IOpenUrlService>();
|
builder.RegisterType<OpenUrlService>().As<IOpenUrlService>();
|
||||||
builder.RegisterType<IdentityService>().As<IIdentityService>();
|
builder.RegisterType<IdentityService>().As<IIdentityService>();
|
||||||
builder.RegisterType<RequestProvider>().As<IRequestProvider>();
|
builder.RegisterType<RequestProvider>().As<IRequestProvider>();
|
||||||
|
builder.RegisterType<LocationService>().As<ILocationService>().SingleInstance();
|
||||||
|
|
||||||
if (useMockServices)
|
if (useMockServices)
|
||||||
{
|
{
|
||||||
builder.RegisterInstance(new CatalogMockService()).As<ICatalogService>();
|
builder.RegisterInstance(new CatalogMockService()).As<ICatalogService>();
|
||||||
builder.RegisterInstance(new BasketMockService()).As<IBasketService>();
|
builder.RegisterInstance(new BasketMockService()).As<IBasketService>();
|
||||||
builder.RegisterInstance(new OrderMockService()).As<IOrderService>();
|
builder.RegisterInstance(new OrderMockService()).As<IOrderService>();
|
||||||
builder.RegisterInstance(new UserMockService()).As<IUserService>();
|
builder.RegisterInstance(new UserMockService()).As<IUserService>();
|
||||||
|
|
||||||
UseMockService = true;
|
UseMockService = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
builder.RegisterType<CatalogService>().As<ICatalogService>().SingleInstance();
|
builder.RegisterType<CatalogService>().As<ICatalogService>().SingleInstance();
|
||||||
builder.RegisterType<BasketService>().As<IBasketService>().SingleInstance();
|
builder.RegisterType<BasketService>().As<IBasketService>().SingleInstance();
|
||||||
builder.RegisterType<OrderService>().As<IOrderService>().SingleInstance();
|
builder.RegisterType<OrderService>().As<IOrderService>().SingleInstance();
|
||||||
builder.RegisterType<UserService>().As<IUserService>().SingleInstance();
|
builder.RegisterType<UserService>().As<IUserService>().SingleInstance();
|
||||||
|
|
||||||
UseMockService = false;
|
UseMockService = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_container != null)
|
if (_container != null)
|
||||||
|
@ -4,38 +4,51 @@ using Xamarin.Forms;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using eShopOnContainers.Core.Helpers;
|
using eShopOnContainers.Core.Helpers;
|
||||||
using eShopOnContainers.Core.Models.User;
|
using eShopOnContainers.Core.Models.User;
|
||||||
|
using System;
|
||||||
|
using eShopOnContainers.Core.Models.Location;
|
||||||
|
using eShopOnContainers.Core.Services.Location;
|
||||||
|
|
||||||
namespace eShopOnContainers.Core.ViewModels
|
namespace eShopOnContainers.Core.ViewModels
|
||||||
{
|
{
|
||||||
public class SettingsViewModel : ViewModelBase
|
public class SettingsViewModel : ViewModelBase
|
||||||
{
|
{
|
||||||
private string _title;
|
private string _titleUseAzureServices;
|
||||||
private string _description;
|
private string _descriptionUseAzureServices;
|
||||||
private bool _useAzureServices;
|
private bool _useAzureServices;
|
||||||
|
private string _titleUseFakeLocation;
|
||||||
|
private string _descriptionUseFakeLocation;
|
||||||
|
private bool _useFakeLocation;
|
||||||
private string _endpoint;
|
private string _endpoint;
|
||||||
|
private double _latitude;
|
||||||
|
private double _longitude;
|
||||||
|
private ILocationService _locationService;
|
||||||
|
|
||||||
public SettingsViewModel()
|
public SettingsViewModel(ILocationService locationService)
|
||||||
{
|
{
|
||||||
UseAzureServices = !Settings.UseMocks;
|
UseAzureServices = !Settings.UseMocks;
|
||||||
|
_useFakeLocation = Settings.UseFakeLocation;
|
||||||
|
_latitude = Settings.FakeLatitude;
|
||||||
|
_longitude = Settings.FakeLongitude;
|
||||||
|
_locationService = locationService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Title
|
public string TitleUseAzureServices
|
||||||
{
|
{
|
||||||
get { return _title; }
|
get { return _titleUseAzureServices; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_title = value;
|
_titleUseAzureServices = value;
|
||||||
RaisePropertyChanged(() => Title);
|
RaisePropertyChanged(() => TitleUseAzureServices);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Description
|
public string DescriptionUseAzureServices
|
||||||
{
|
{
|
||||||
get { return _description; }
|
get { return _descriptionUseAzureServices; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_description = value;
|
_descriptionUseAzureServices = value;
|
||||||
RaisePropertyChanged(() => Description);
|
RaisePropertyChanged(() => DescriptionUseAzureServices);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,6 +65,39 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string TitleUseFakeLocation
|
||||||
|
{
|
||||||
|
get { return _titleUseFakeLocation; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_titleUseFakeLocation = value;
|
||||||
|
RaisePropertyChanged(() => TitleUseFakeLocation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string DescriptionUseFakeLocation
|
||||||
|
{
|
||||||
|
get { return _descriptionUseFakeLocation; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_descriptionUseFakeLocation = value;
|
||||||
|
RaisePropertyChanged(() => DescriptionUseFakeLocation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool UseFakeLocation
|
||||||
|
{
|
||||||
|
get { return _useFakeLocation; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_useFakeLocation = value;
|
||||||
|
|
||||||
|
// Save use fake location services to local storage
|
||||||
|
Settings.UseFakeLocation = _useFakeLocation;
|
||||||
|
RaisePropertyChanged(() => UseFakeLocation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string Endpoint
|
public string Endpoint
|
||||||
{
|
{
|
||||||
get { return _endpoint; }
|
get { return _endpoint; }
|
||||||
@ -68,12 +114,47 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double Latitude
|
||||||
|
{
|
||||||
|
get { return _latitude; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_latitude = value;
|
||||||
|
|
||||||
|
UpdateLatitude(_latitude);
|
||||||
|
|
||||||
|
RaisePropertyChanged(() => Latitude);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public double Longitude
|
||||||
|
{
|
||||||
|
get { return _longitude; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_longitude = value;
|
||||||
|
|
||||||
|
UpdateLongitude(_longitude);
|
||||||
|
|
||||||
|
RaisePropertyChanged(() => Longitude);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ICommand ToggleMockServicesCommand => new Command(async () => await ToggleMockServicesAsync());
|
public ICommand ToggleMockServicesCommand => new Command(async () => await ToggleMockServicesAsync());
|
||||||
|
|
||||||
|
public ICommand ToggleFakeLocationCommand => new Command(() => ToggleFakeLocationAsync());
|
||||||
|
|
||||||
|
public ICommand ToggleSendLocationCommand => new Command(async () => await ToggleSendLocationAsync());
|
||||||
|
|
||||||
public override Task InitializeAsync(object navigationData)
|
public override Task InitializeAsync(object navigationData)
|
||||||
{
|
{
|
||||||
UpdateInfo();
|
UpdateInfo();
|
||||||
|
UpdateInfoFakeLocation();
|
||||||
|
|
||||||
Endpoint = Settings.UrlBase;
|
Endpoint = Settings.UrlBase;
|
||||||
|
_latitude = Settings.FakeLatitude;
|
||||||
|
_longitude = Settings.FakeLongitude;
|
||||||
|
_useFakeLocation = Settings.UseFakeLocation;
|
||||||
return base.InitializeAsync(navigationData);
|
return base.InitializeAsync(navigationData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,17 +181,48 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateInfo()
|
private void ToggleFakeLocationAsync()
|
||||||
|
{
|
||||||
|
ViewModelLocator.RegisterDependencies(!UseAzureServices);
|
||||||
|
UpdateInfoFakeLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task ToggleSendLocationAsync()
|
||||||
|
{
|
||||||
|
LocationRequest locationRequest = new LocationRequest
|
||||||
|
{
|
||||||
|
Latitude = _latitude,
|
||||||
|
Longitude = _longitude
|
||||||
|
};
|
||||||
|
|
||||||
|
await _locationService.UpdateUserLocation(locationRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateInfo()
|
||||||
{
|
{
|
||||||
if (!UseAzureServices)
|
if (!UseAzureServices)
|
||||||
{
|
{
|
||||||
Title = "Use Mock Services";
|
TitleUseAzureServices = "Use Mock Services";
|
||||||
Description = "Mock Services are simulated objects that mimic the behavior of real services using a controlled approach.";
|
DescriptionUseAzureServices = "Mock Services are simulated objects that mimic the behavior of real services using a controlled approach.";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Title = "Use Microservices/Containers from eShopOnContainers";
|
TitleUseAzureServices = "Use Microservices/Containers from eShopOnContainers";
|
||||||
Description = "When enabling the use of microservices/containers, the app will attempt to use real services deployed as Docker containers at the specified base endpoint, which will must be reachable through the network.";
|
DescriptionUseAzureServices = "When enabling the use of microservices/containers, the app will attempt to use real services deployed as Docker containers at the specified base endpoint, which will must be reachable through the network.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateInfoFakeLocation()
|
||||||
|
{
|
||||||
|
if (!UseFakeLocation)
|
||||||
|
{
|
||||||
|
TitleUseFakeLocation = "Use Fake Location";
|
||||||
|
DescriptionUseFakeLocation = "Fake Location are added for marketing campaign testing.";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TitleUseFakeLocation = "Use Real Location";
|
||||||
|
DescriptionUseFakeLocation = "When enabling the use of real location, the app will attempt to use real location from the device.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,5 +231,17 @@ namespace eShopOnContainers.Core.ViewModels
|
|||||||
// Update remote endpoint (save to local storage)
|
// Update remote endpoint (save to local storage)
|
||||||
Settings.UrlBase = endpoint;
|
Settings.UrlBase = endpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateLatitude(double latitude)
|
||||||
|
{
|
||||||
|
// Update fake latitude (save to local storage)
|
||||||
|
Settings.FakeLatitude = latitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateLongitude(double longitude)
|
||||||
|
{
|
||||||
|
// Update fake longitude (save to local storage)
|
||||||
|
Settings.FakeLongitude = longitude;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -108,11 +108,11 @@
|
|||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
Grid.Row="1">
|
Grid.Row="1">
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Title}"
|
Text="{Binding TitleUseAzureServices}"
|
||||||
TextColor="{StaticResource GreenColor}"
|
TextColor="{StaticResource GreenColor}"
|
||||||
Style="{StaticResource SettingsTitleStyle}"/>
|
Style="{StaticResource SettingsTitleStyle}"/>
|
||||||
<Label
|
<Label
|
||||||
Text="{Binding Description}"
|
Text="{Binding DescriptionUseAzureServices}"
|
||||||
Style="{StaticResource SettingsDescriptionStyle}"/>
|
Style="{StaticResource SettingsDescriptionStyle}"/>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
<!-- ON / OFF -->
|
<!-- ON / OFF -->
|
||||||
@ -160,8 +160,79 @@
|
|||||||
<Grid
|
<Grid
|
||||||
Grid.Row="3"
|
Grid.Row="3"
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
|
Grid.ColumnSpan="2"/>
|
||||||
|
<StackLayout
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.Row="4">
|
||||||
|
<Label
|
||||||
|
Text="{Binding TitleUseFakeLocation}"
|
||||||
|
TextColor="{StaticResource GreenColor}"
|
||||||
|
Style="{StaticResource SettingsTitleStyle}"/>
|
||||||
|
<Label
|
||||||
|
Text="{Binding DescriptionUseFakeLocation}"
|
||||||
|
Style="{StaticResource SettingsDescriptionStyle}"/>
|
||||||
|
</StackLayout>
|
||||||
|
<!-- ON / OFF -->
|
||||||
|
<controls:ToggleButton
|
||||||
|
Grid.Column="1"
|
||||||
|
Grid.Row="4"
|
||||||
|
Animate="True"
|
||||||
|
Checked="{Binding UseFakeLocation, Mode=TwoWay}"
|
||||||
|
Command="{Binding ToggleFakeLocationCommand}"
|
||||||
|
Style="{StaticResource SettingsToggleButtonStyle}">
|
||||||
|
<controls:ToggleButton.CheckedImage>
|
||||||
|
<OnPlatform x:TypeArguments="ImageSource"
|
||||||
|
Android="switch_on.png"
|
||||||
|
iOS="switchOn.png"
|
||||||
|
WinPhone="Assets/switchOn.png"/>
|
||||||
|
</controls:ToggleButton.CheckedImage>
|
||||||
|
<controls:ToggleButton.UnCheckedImage>
|
||||||
|
<OnPlatform x:TypeArguments="ImageSource"
|
||||||
|
Android="switch_off.png"
|
||||||
|
iOS="switchOff.png"
|
||||||
|
WinPhone="Assets/switchOff.png"/>
|
||||||
|
</controls:ToggleButton.UnCheckedImage>
|
||||||
|
</controls:ToggleButton>
|
||||||
|
<!-- ENDPOINT -->
|
||||||
|
<StackLayout
|
||||||
|
Grid.Row="5"
|
||||||
|
Grid.Column="0"
|
||||||
Grid.ColumnSpan="2"
|
Grid.ColumnSpan="2"
|
||||||
BackgroundColor="Gray"/>
|
Margin="12, 0, 12, 12"
|
||||||
|
IsVisible="{Binding UseFakeLocation}">
|
||||||
|
<Label
|
||||||
|
Text="Latitude"
|
||||||
|
Style="{StaticResource HeaderLabelStyle}"/>
|
||||||
|
<Entry
|
||||||
|
Text="{Binding Latitude, Mode=TwoWay}"
|
||||||
|
Keyboard="Numeric">
|
||||||
|
<Entry.Style>
|
||||||
|
<OnPlatform
|
||||||
|
x:TypeArguments="Style"
|
||||||
|
iOS="{StaticResource EntryStyle}"
|
||||||
|
Android="{StaticResource EntryStyle}"
|
||||||
|
WinPhone="{StaticResource UwpEntryStyle}"/>
|
||||||
|
</Entry.Style>
|
||||||
|
</Entry>
|
||||||
|
<Label
|
||||||
|
Text="Longitude"
|
||||||
|
Style="{StaticResource HeaderLabelStyle}"/>
|
||||||
|
<Entry
|
||||||
|
Text="{Binding Longitude, Mode=TwoWay}"
|
||||||
|
Keyboard="Numeric">
|
||||||
|
<Entry.Style>
|
||||||
|
<OnPlatform
|
||||||
|
x:TypeArguments="Style"
|
||||||
|
iOS="{StaticResource EntryStyle}"
|
||||||
|
Android="{StaticResource EntryStyle}"
|
||||||
|
WinPhone="{StaticResource UwpEntryStyle}"/>
|
||||||
|
</Entry.Style>
|
||||||
|
</Entry>
|
||||||
|
<Button
|
||||||
|
Command="{Binding ToggleSendLocationCommand}"
|
||||||
|
Text="Send Location"/>
|
||||||
|
</StackLayout>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
@ -70,6 +70,7 @@
|
|||||||
<Compile Include="Models\Catalog\CatalogItem.cs" />
|
<Compile Include="Models\Catalog\CatalogItem.cs" />
|
||||||
<Compile Include="Models\Catalog\CatalogRoot.cs" />
|
<Compile Include="Models\Catalog\CatalogRoot.cs" />
|
||||||
<Compile Include="Models\Catalog\CatalogType.cs" />
|
<Compile Include="Models\Catalog\CatalogType.cs" />
|
||||||
|
<Compile Include="Models\Location\LocationRequest.cs" />
|
||||||
<Compile Include="Models\Navigation\TabParameter.cs" />
|
<Compile Include="Models\Navigation\TabParameter.cs" />
|
||||||
<Compile Include="Models\Orders\CardType.CS" />
|
<Compile Include="Models\Orders\CardType.CS" />
|
||||||
<Compile Include="Models\Orders\Order.cs" />
|
<Compile Include="Models\Orders\Order.cs" />
|
||||||
@ -91,6 +92,8 @@
|
|||||||
<Compile Include="Services\Dialog\IDialogService.cs" />
|
<Compile Include="Services\Dialog\IDialogService.cs" />
|
||||||
<Compile Include="Services\Identity\IdentityService.cs" />
|
<Compile Include="Services\Identity\IdentityService.cs" />
|
||||||
<Compile Include="Services\Identity\IIdentityService.cs" />
|
<Compile Include="Services\Identity\IIdentityService.cs" />
|
||||||
|
<Compile Include="Services\Location\ILocationService.cs" />
|
||||||
|
<Compile Include="Services\Location\LocationService.cs" />
|
||||||
<Compile Include="Services\Navigation\INavigationService.cs" />
|
<Compile Include="Services\Navigation\INavigationService.cs" />
|
||||||
<Compile Include="Services\Navigation\NavigationService.cs" />
|
<Compile Include="Services\Navigation\NavigationService.cs" />
|
||||||
<Compile Include="Services\OpenUrl\IOpenUrlService.cs" />
|
<Compile Include="Services\OpenUrl\IOpenUrlService.cs" />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user