Browse Source

SettingsService works on iOS.

pull/469/head
David Britch 7 years ago
parent
commit
a86a11694a
4 changed files with 34 additions and 30 deletions
  1. +2
    -3
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs
  2. +3
    -0
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs
  3. +1
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs
  4. +28
    -26
      src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/SettingsServiceImplementation.cs

+ 2
- 3
src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs View File

@ -15,7 +15,6 @@ namespace eShopOnContainers
public partial class App : Application
{
ISettingsService _settingsService;
bool _useMockServices;
public App()
{
@ -30,9 +29,9 @@ namespace eShopOnContainers
private void InitApp()
{
_useMockServices = true;//_settingsService.UseMocks;
ViewModelLocator.RegisterDependencies(_useMockServices);
_settingsService = ViewModelLocator.Resolve<ISettingsService>();
if (!_settingsService.UseMocks)
ViewModelLocator.UpdateDependencies(_settingsService.UseMocks);
}
private Task InitNavigation()


+ 3
- 0
src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs View File

@ -60,6 +60,9 @@ namespace eShopOnContainers.Core.ViewModels.Base
_container.Register<IOpenUrlService, OpenUrlService>();
_container.Register<IIdentityService, IdentityService>();
_container.Register<IRequestProvider, RequestProvider>();
_container.Register<IDependencyService, Services.Dependency.DependencyService>();
_container.Register<ISettingsService, SettingsService>().AsSingleton();
_container.Register<IFixUriService, FixUriService>().AsSingleton();
_container.Register<ILocationService, LocationService>().AsSingleton();
_container.Register<ICatalogService, CatalogMockService>().AsSingleton();
_container.Register<IBasketService, BasketMockService>().AsSingleton();


+ 1
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs View File

@ -35,7 +35,7 @@ namespace eShopOnContainers.Core.ViewModels
_settingsService = settingsService;
_locationService = locationService;
_useAzureServices = _settingsService.UseMocks;
_useAzureServices = !_settingsService.UseMocks;
_endpoint = _settingsService.UrlBase;
_latitude = double.Parse(_settingsService.Latitude, CultureInfo.CurrentCulture);
_longitude = double.Parse(_settingsService.Longitude, CultureInfo.CurrentCulture);


+ 28
- 26
src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Services/SettingsServiceImplementation.cs View File

@ -2,7 +2,6 @@
using Foundation;
using eShopOnContainers.Core.Services.Settings;
using eShopOnContainers.iOS.Services;
using System.Globalization;
[assembly: Xamarin.Forms.Dependency(typeof(SettingsServiceImplementation))]
namespace eShopOnContainers.iOS.Services
@ -34,7 +33,7 @@ namespace eShopOnContainers.iOS.Services
switch (typeCode)
{
case TypeCode.Boolean:
defaults.SetString(Convert.ToString(value, CultureInfo.InvariantCulture), key);
defaults.SetBool(Convert.ToBoolean(value), key);
break;
case TypeCode.String:
defaults.SetString(Convert.ToString(value), key);
@ -57,34 +56,37 @@ namespace eShopOnContainers.iOS.Services
T GetValueOrDefaultInternal<T>(string key, T defaultValue = default(T))
{
var defaults = GetUserDefaults();
if (defaults[key] == null)
lock (locker)
{
return defaultValue;
}
var defaults = GetUserDefaults();
var type = typeof(T);
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
type = Nullable.GetUnderlyingType(type);
}
if (defaults[key] == null)
{
return defaultValue;
}
object value = null;
var typeCode = Type.GetTypeCode(type);
switch (typeCode)
{
case TypeCode.Boolean:
value = defaults.BoolForKey(key);
break;
case TypeCode.String:
value = defaults.StringForKey(key);
break;
default:
throw new ArgumentException($"Value of type {typeCode} is unsupported.");
}
var type = typeof(T);
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
type = Nullable.GetUnderlyingType(type);
}
return null != value ? (T)value : defaultValue;
object value = null;
var typeCode = Type.GetTypeCode(type);
switch (typeCode)
{
case TypeCode.Boolean:
value = defaults.BoolForKey(key);
break;
case TypeCode.String:
value = defaults.StringForKey(key);
break;
default:
throw new ArgumentException($"Value of type {typeCode} is unsupported.");
}
return null != value ? (T)value : defaultValue;
}
}
#region ISettingsService Implementation


Loading…
Cancel
Save