diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs index c4aea5cd7..2c5a73cfb 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs @@ -1,4 +1,5 @@ -using eShopOnContainers.Services; +using eShopOnContainers.Core.Helpers; +using eShopOnContainers.Services; using eShopOnContainers.ViewModels.Base; using System.Threading.Tasks; using Xamarin.Forms; @@ -25,7 +26,7 @@ namespace eShopOnContainers private void InitApp() { - UseMockServices = true; + UseMockServices = Settings.UseMocks; ViewModelLocator.Instance.UpdateDependencies(UseMockServices); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs index 71bb60557..46d08ebb7 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs @@ -8,7 +8,7 @@ public GlobalSetting() { AuthToken = "INSERT AUTHENTICATION TOKEN"; - BaseEndpoint = "http://10.106.144.28"; + BaseEndpoint = "http://13.88.8.119"; } public static GlobalSetting Instance diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs index bf3313193..71bd832bc 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs @@ -1,3 +1,4 @@ +using eShopOnContainers.ViewModels.Base; using Plugin.Settings; using Plugin.Settings.Abstractions; @@ -22,8 +23,12 @@ namespace eShopOnContainers.Core.Helpers private const string AccessToken = "access_token"; private const string IdToken = "id_token"; + private const string IdUseMocks = "use_mocks"; + private const string IdUrlBase = "url_base"; private static readonly string AccessTokenDefault = string.Empty; private static readonly string IdTokenDefault = string.Empty; + private static readonly bool UseMocksDefault = ViewModelLocator.Instance.UseMockService; + private static readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint; #endregion @@ -51,5 +56,30 @@ namespace eShopOnContainers.Core.Helpers AppSettings.AddOrUpdateValue(IdToken, value); } } + + + public static bool UseMocks + { + get + { + return AppSettings.GetValueOrDefault(IdUseMocks, UseMocksDefault); + } + set + { + AppSettings.AddOrUpdateValue(IdUseMocks, value); + } + } + + public static string UrlBase + { + get + { + return AppSettings.GetValueOrDefault(IdUrlBase, UrlBaseDefault); + } + set + { + AppSettings.AddOrUpdateValue(IdUrlBase, value); + } + } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs index 2f824b61d..82145d466 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs @@ -9,13 +9,6 @@ using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Services.Identity; using eShopOnContainers.Core.Services.Order; using eShopOnContainers.Core.Services.User; -using Xamarin.Forms; -using System.Collections.Generic; -using eShopOnContainers.Core.Models.Basket; -using eShopOnContainers.Core.Models.Catalog; -using eShopOnContainers.Core.ViewModels.Base; -using eShopOnContainers.Core.Helpers; -using eShopOnContainers.Core; namespace eShopOnContainers.ViewModels.Base { diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs index 2d466a6c1..27a833fa7 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs @@ -9,7 +9,6 @@ using System.Windows.Input; using System.Linq; using eShopOnContainers.Core.Services.Basket; using eShopOnContainers.Core.Helpers; -using System; using eShopOnContainers.Core.Services.User; namespace eShopOnContainers.Core.ViewModels @@ -121,6 +120,7 @@ namespace eShopOnContainers.Core.ViewModels private void AddCatalogItem(CatalogItem catalogItem) { + // Add new item to Basket MessagingCenter.Send(this, MessengerKeys.AddProduct, catalogItem); } @@ -133,7 +133,7 @@ namespace eShopOnContainers.Core.ViewModels IsBusy = true; - // Filter + // Filter catalog products MessagingCenter.Send(this, MessengerKeys.Filter); Products = await _productsService.FilterAsync(Brand.Id, Type.Id); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs index 96c5009cd..ef1f4f31b 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs @@ -4,7 +4,6 @@ using eShopOnContainers.Core.Services.Identity; using eShopOnContainers.Core.Services.OpenUrl; using eShopOnContainers.Core.Services.User; using eShopOnContainers.Core.Validations; -using eShopOnContainers.Core.ViewModels.Base; using eShopOnContainers.ViewModels.Base; using IdentityModel.Client; using System; @@ -40,8 +39,7 @@ namespace eShopOnContainers.Core.ViewModels _userName = new ValidatableObject(); _password = new ValidatableObject(); - IsMock = ViewModelLocator.Instance.UseMockService; - + InvalidateMock(); AddValidations(); } @@ -214,7 +212,7 @@ namespace eShopOnContainers.Core.ViewModels LoginUrl = logoutRequest; } - if(ViewModelLocator.Instance.UseMockService) + if(Settings.UseMocks) { Settings.AuthAccessToken = string.Empty; Settings.AuthIdToken = string.Empty; @@ -266,5 +264,10 @@ namespace eShopOnContainers.Core.ViewModels _userName.Validations.Add(new IsNotNullOrEmptyRule { ValidationMessage = "Username should not be empty" }); _password.Validations.Add(new IsNotNullOrEmptyRule { ValidationMessage = "Password should not be empty" }); } + + public void InvalidateMock() + { + IsMock = Settings.UseMocks; + } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs index e9332c887..0d529e65f 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs @@ -3,14 +3,11 @@ using eShopOnContainers.ViewModels.Base; using eShopOnContainers.Core.Models.Navigation; using Xamarin.Forms; using eShopOnContainers.Core.ViewModels.Base; -using System.Windows.Input; namespace eShopOnContainers.Core.ViewModels { public class MainViewModel : ViewModelBase { - public ICommand SettingsCommand => new Command(Settings); - public override Task InitializeAsync(object navigationData) { IsBusy = true; @@ -24,10 +21,5 @@ namespace eShopOnContainers.Core.ViewModels return base.InitializeAsync(navigationData); } - - private void Settings() - { - NavigationService.NavigateToAsync(); - } } } \ 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 5b9102cbc..1fa5b54b6 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs @@ -2,6 +2,7 @@ using System.Windows.Input; using Xamarin.Forms; using System.Threading.Tasks; +using eShopOnContainers.Core.Helpers; namespace eShopOnContainers.Core.ViewModels { @@ -14,7 +15,7 @@ namespace eShopOnContainers.Core.ViewModels public SettingsViewModel() { - UseAzureServices = !ViewModelLocator.Instance.UseMockService; + UseAzureServices = !Settings.UseMocks; } public string Title @@ -43,6 +44,9 @@ namespace eShopOnContainers.Core.ViewModels set { _useAzureServices = value; + + // Save use mocks services to local storage + Settings.UseMocks = !_useAzureServices; RaisePropertyChanged(() => UseAzureServices); } } @@ -75,7 +79,7 @@ namespace eShopOnContainers.Core.ViewModels { UpdateInfo(); - Endpoint = GlobalSetting.Instance.BaseEndpoint; + Endpoint = Settings.UrlBase; return base.InitializeAsync(navigationData); } @@ -89,15 +93,15 @@ namespace eShopOnContainers.Core.ViewModels } else { - Title = "Use Azure Services"; - Description = "Azure Services are real objects that required a valid internet connection"; + Title = "Use Microservices/Containers from eShopOnContainers"; + Description = "When enabling the use of microservices/containers the Xamarin.Forms app will try to use real services deployed as Docker containers in the specified base IP that will need to be reachable through the network"; } } private void UpdateEndpoint(string endpoint) { - // Update remote endpoint - GlobalSetting.Instance.BaseEndpoint = endpoint; + // Update remote endpoint (save to local storage) + Settings.UrlBase = endpoint; } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml index a933a2ac8..5e8434729 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml @@ -5,286 +5,334 @@ xmlns:animations="clr-namespace:eShopOnContainers.Core.Animations;assembly=eShopOnContainers.Core" xmlns:triggers="clr-namespace:eShopOnContainers.Core.Triggers;assembly=eShopOnContainers.Core" xmlns:behaviors="clr-namespace:eShopOnContainers.Core.Behaviors;assembly=eShopOnContainers.Core"> - - - - - + + + + + - + - + - + - + - + - - - + - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - + BackgroundColor="{StaticResource BackgroundColor}"> + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml.cs index 4d3a5762e..ad41dcf9f 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml.cs @@ -1,4 +1,5 @@ -using System; +using eShopOnContainers.Core.ViewModels; +using System; using System.Diagnostics; using System.Threading.Tasks; using Xamarin.Forms; @@ -22,6 +23,13 @@ namespace eShopOnContainers.Core.Views _animate = true; await AnimateIn(); + + var vm = BindingContext as LoginViewModel; + + if(vm != null) + { + vm.InvalidateMock(); + } } protected override void OnDisappearing() diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/MainView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/MainView.xaml index 2bf39db64..260a66a5c 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/MainView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/MainView.xaml @@ -13,19 +13,6 @@ iOS="eShop on Containers" WinPhone="eShop on Containers"/> - - - - - - - diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj index 5e83a91c3..6e6ab0b31 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj @@ -16,7 +16,7 @@ Resources\Resource.Designer.cs Off Properties\AndroidManifest.xml - true + False v6.0 armeabi,armeabi-v7a,x86 diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Properties/AssemblyInfo.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Properties/AssemblyInfo.cs index 011a27756..3892d1e63 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Properties/AssemblyInfo.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Properties/AssemblyInfo.cs @@ -8,9 +8,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyTitle("eShopOnContainers.UWP")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] +[assembly: AssemblyCompany("Microsoft")] [assembly: AssemblyProduct("eShopOnContainers.UWP")] -[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyCopyright("Copyright Microsoft © 2017")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")]