From 4d0d69b5502bc4053a14de0f0f392fc32020e8d6 Mon Sep 17 00:00:00 2001 From: David Britch Date: Wed, 17 Jan 2018 12:55:38 +0000 Subject: [PATCH] Added settings implementation to Windows project. --- .../Services/SettingsServiceImplementation.cs | 99 +++++++++++++++++++ .../eShopOnContainers.Windows.csproj | 1 + 2 files changed, 100 insertions(+) create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/SettingsServiceImplementation.cs diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/SettingsServiceImplementation.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/SettingsServiceImplementation.cs new file mode 100644 index 000000000..e13fafd9f --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Services/SettingsServiceImplementation.cs @@ -0,0 +1,99 @@ +using eShopOnContainers.Core.Services.Settings; +using eShopOnContainers.Windows.Services; +using Windows.Storage; + +[assembly: Xamarin.Forms.Dependency(typeof(SettingsServiceImplementation))] +namespace eShopOnContainers.Windows.Services +{ + public class SettingsServiceImplementation : ISettingsServiceImplementation + { + #region Internal Implementation + + readonly object _locker = new object(); + + ApplicationDataContainer GetAppSettings() + { + return ApplicationData.Current.LocalSettings; + } + + bool AddOrUpdateValueInternal(string key, T value) + { + bool valueChanged = false; + + if (value == null) + { + Remove(key); + return true; + } + + lock (_locker) + { + var settings = GetAppSettings(); + if (settings.Values.ContainsKey(key)) + { + if (settings.Values[key] != (object)value) + { + settings.Values[key] = value; + valueChanged = true; + } + } + else + { + settings.Values[key] = value; + valueChanged = true; + } + } + + return valueChanged; + } + + T GetValueOrDefaultInternal(string key, T defaultValue = default(T)) + { + object value; + + lock (_locker) + { + var settings = GetAppSettings(); + if (settings.Values.ContainsKey(key)) + { + var tempValue = settings.Values[key]; + if (tempValue != null) + value = (T)tempValue; + else + value = defaultValue; + } + else + { + value = defaultValue; + } + } + return null != value ? (T)value : defaultValue; + } + + #endregion + + #region ISettingsServiceImplementation + + public bool AddOrUpdateValue(string key, bool value) => AddOrUpdateValueInternal(key, value); + + public bool AddOrUpdateValue(string key, string value) => AddOrUpdateValueInternal(key, value); + + public bool GetValueOrDefault(string key, bool defaultValue) => GetValueOrDefaultInternal(key, defaultValue); + + public string GetValueOrDefault(string key, string defaultValue) => GetValueOrDefaultInternal(key, defaultValue); + + public void Remove(string key) + { + lock (_locker) + { + var settings = GetAppSettings(); + if (settings.Values.ContainsKey(key)) + { + settings.Values.Remove(key); + } + } + } + + #endregion + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/eShopOnContainers.Windows.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/eShopOnContainers.Windows.csproj index 79d4d6572..ae5286efb 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/eShopOnContainers.Windows.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/eShopOnContainers.Windows.csproj @@ -121,6 +121,7 @@ +