Adding system-settings module
authorAditya <a.aswani@samsung.com>
Mon, 20 Jun 2016 10:23:06 +0000 (15:53 +0530)
committerAditya <a.aswani@samsung.com>
Mon, 20 Jun 2016 10:43:28 +0000 (16:13 +0530)
Implementation + TCTs
Modified the Tizen.System.SystemSettings namespace to Tizen.System

Change-Id: I2f5cfae46a328a816b3ac5b686f9b4a62d498911
Signed-off-by: Aditya <a.aswani@samsung.com>
src/Tizen.System/Interop/Interop.SystemSettings.cs [new file with mode: 0644]
src/Tizen.System/SystemSettings/SystemSettings.cs [new file with mode: 0644]
src/Tizen.System/SystemSettings/SystemSettingsEnums.cs [new file with mode: 0644]
src/Tizen.System/SystemSettings/SystemSettingsEventArgs.cs [new file with mode: 0644]
src/Tizen.System/SystemSettings/SystemSettingsExceptionFactory.cs [new file with mode: 0644]
src/Tizen.System/Tizen.System.csproj

diff --git a/src/Tizen.System/Interop/Interop.SystemSettings.cs b/src/Tizen.System/Interop/Interop.SystemSettings.cs
new file mode 100644 (file)
index 0000000..df56956
--- /dev/null
@@ -0,0 +1,45 @@
+/// Copyright 2016 by Samsung Electronics, Inc.,
+///
+/// This software is the confidential and proprietary information
+/// of Samsung Electronics, Inc. ("Confidential Information"). You
+/// shall not disclose such Confidential Information and shall use
+/// it only in accordance with the terms of the license agreement
+/// you entered into with Samsung.
+
+
+using System;
+using System.Runtime.InteropServices;
+using Tizen.System;
+
+internal static partial class Interop
+{
+    internal static partial class Settings
+    {
+        [DllImport("capi-system-system-settings.so.0", EntryPoint = "system_settings_set_value_int", CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int SystemSettingsSetValueInt(SystemSettingsKeys key, int value);
+
+        [DllImport("capi-system-system-settings.so.0", EntryPoint = "system_settings_set_value_bool", CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int SystemSettingsSetValueBool(SystemSettingsKeys key, bool value);
+
+        [DllImport("capi-system-system-settings.so.0", EntryPoint = "system_settings_set_value_string", CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int SystemSettingsSetValueString(SystemSettingsKeys key, string value);
+
+
+        [DllImport("capi-system-system-settings.so.0", EntryPoint = "system_settings_get_value_int", CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int SystemSettingsGetValueInt(SystemSettingsKeys key, out int value);
+
+        [DllImport("capi-system-system-settings.so.0", EntryPoint = "system_settings_get_value_bool", CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int SystemSettingsGetValueBool(SystemSettingsKeys key, out bool value);
+
+        [DllImport("capi-system-system-settings.so.0", EntryPoint = "system_settings_get_value_string", CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int SystemSettingsGetValueString(SystemSettingsKeys key, out string value);
+
+        // Callback
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void SystemSettingsChangedCallback(SystemSettingsKeys key, IntPtr data);
+        [DllImport("capi-system-system-settings.so.0", EntryPoint = "system_settings_set_changed_cb", CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int SystemSettingsSetCallback(SystemSettingsKeys systemSettingsKey, SystemSettingsChangedCallback cb, IntPtr data);
+        [DllImport("capi-system-system-settings.so.0", EntryPoint = "system_settings_unset_changed_cb", CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int SystemSettingsRemoveCallback(SystemSettingsKeys systemSettingsKey);
+    }
+}
diff --git a/src/Tizen.System/SystemSettings/SystemSettings.cs b/src/Tizen.System/SystemSettings/SystemSettings.cs
new file mode 100644 (file)
index 0000000..e20325b
--- /dev/null
@@ -0,0 +1,1727 @@
+using System;
+
+namespace Tizen.System
+{
+    /// <summary>
+    /// The System Settings API provides APIs for sharing configuration over a system
+    /// </summary>
+    /// <remarks>
+    /// System Settings API provides functions for getting the system configuration related to user preferences.
+    /// The main features of the System Settings API include accessing system-wide configurations, such as ringtones, wallpapers, and etc
+    /// </remarks>
+    public static class SystemSettings
+    {
+        /// <summary>
+        /// The file path of the current ringtone
+        /// </summary>
+        public static string IncomingCallRingtone
+        {
+            get
+            {
+                string filePath;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.IncomingCallRingtone, out filePath);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get IncomingCallRingtone system setting value.");
+                }
+                return filePath;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.IncomingCallRingtone, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set IncomingCallRingtone system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// The file path of the current home screen wallpaper
+        /// </summary>
+        public static string WallpaperHomeScreen
+        {
+            get
+            {
+                string filePath;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.WallpaperHomeScreen, out filePath);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get WallpaperHomeScreen system setting value.");
+                }
+                return filePath;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.WallpaperHomeScreen, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set WallpaperHomeScreen system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// The file path of the current lock screen wallpaper
+        /// </summary>
+        public static string WallpaperLockScreen
+        {
+            get
+            {
+                string filePath;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.WallpaperLockScreen, out filePath);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get WallpaperLockScreen system setting value.");
+                }
+                return filePath;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.WallpaperLockScreen, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set WallpaperLockScreen system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// The current system font size
+        /// </summary>
+        public static SystemSettingsFontSize FontSize
+        {
+            get
+            {
+                int fontSize;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueInt(SystemSettingsKeys.FontSize, out fontSize);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get FontSize system setting value.");
+                }
+                return (SystemSettingsFontSize)fontSize;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueInt(SystemSettingsKeys.FontSize, (int)value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set FontSize system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// The current system font type
+        /// </summary>
+        public static string FontType
+        {
+            get
+            {
+                string fontType;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.FontType, out fontType);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get FontType system setting value.");
+                }
+                return fontType;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.FontType, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set FontType system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicates whether the motion service is activated
+        /// </summary>
+        public static bool MotionActivationEnabled
+        {
+            get
+            {
+                bool isMotionServiceActivated;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.MotionActivationEnabled, out isMotionServiceActivated);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get MotionActivation system setting value.");
+                }
+                return isMotionServiceActivated;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueBool(SystemSettingsKeys.MotionActivationEnabled, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set MotionActivation system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// The file path of the current email alert ringtone
+        /// </summary>
+        public static string EmailAlertRingtone
+        {
+            get
+            {
+                string filePath;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.EmailAlertRingtone, out filePath);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get EmailAlertRingtone system setting value.");
+                }
+                return filePath;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.EmailAlertRingtone, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set EmailAlertRingtone system setting.");
+                }
+            }
+        }
+        /// <summary>
+        /// Indicates whether the USB debugging is enabled (Since 2.4)
+        /// </summary>
+        public static bool UsbDebuggingEnabled
+        {
+            get
+            {
+                bool isusbDebuggingEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.UsbDebuggingEnabled, out isusbDebuggingEnabled);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get UsbDebuggingEnabled system setting value.");
+                }
+                return isusbDebuggingEnabled;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueBool(SystemSettingsKeys.UsbDebuggingEnabled, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set UsbDebuggingEnabled system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicates whether the 3G data network is enabled (Since 2.4)
+        /// </summary>
+        public static bool Data3GNetworkEnabled
+        {
+            get
+            {
+                bool is3GDataEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.Data3GNetworkEnabled, out is3GDataEnabled);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get Data3GNetworkEnabled system setting value.");
+                }
+                return is3GDataEnabled;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueBool(SystemSettingsKeys.Data3GNetworkEnabled, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set Data3GNetworkEnabled system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicates lockscreen app pkg name
+        /// </summary>
+        public static string LockscreenApp
+        {
+            get
+            {
+                string pkgName;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.LockscreenApp, out pkgName);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get LockscreenApp system setting value.");
+                }
+                return pkgName;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.LockscreenApp, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set LockscreenApp system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// The current system default font type (only support Get)
+        /// </summary>
+        public static string DefaultFontType
+        {
+            get
+            {
+                string defaultFontType;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.DefaultFontType, out defaultFontType);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get DefaultFontType system setting value.");
+                }
+                return defaultFontType;
+            }
+        }
+
+        /// <summary>
+        /// Indicates the current country setting in the <LANGUAGE>_<REGION> syntax.
+        /// The country setting is in the ISO 639-2 format,
+        /// and the region setting is in the ISO 3166-1 alpha-2 format
+        /// </summary>
+        public static string LocaleCountry
+        {
+            get
+            {
+                string countrySetting;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.LocaleCountry, out countrySetting);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get LocaleCountry system setting value.");
+                }
+                return countrySetting;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.LocaleCountry, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set LocaleCountry system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicates the current language setting in the <LANGUAGE>_<REGION> syntax.
+        /// The language setting is in the ISO 639-2 format
+        /// and the region setting is in the ISO 3166-1 alpha-2 format.
+        /// </summary>
+        public static string LocaleLanguage
+        {
+            get
+            {
+                string languageSetting;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.LocaleLanguage, out languageSetting);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get LocaleLanguage system setting value.");
+                }
+                return languageSetting;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.LocaleLanguage, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set LocaleLanguage system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicates whether the 24-hour clock is used.
+        /// If the value is false, the 12-hour clock is used.
+        /// </summary>
+        public static bool LocaleTimeFormat24HourEnabled
+        {
+            get
+            {
+                bool is24HrFormat;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.LocaleTimeFormat24HourEnabled, out is24HrFormat);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get LocaleTimeFormat24Hour system setting value.");
+                }
+                return is24HrFormat;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueBool(SystemSettingsKeys.LocaleTimeFormat24HourEnabled, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set LocaleTimeFormat24Hour system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicates the current time zone.
+        /// </summary>
+        public static string LocaleTimeZone
+        {
+            get
+            {
+                string timeZone;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.LocaleTimeZone, out timeZone);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get LocaleTimeZone system setting value.");
+                }
+                return timeZone;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.LocaleTimeZone, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set LocaleTimeZone system setting.");
+                }
+            }
+        }
+        /// <summary>
+        /// Indicates whether the screen lock sound is enabled on the device. ex) LCD on/off sound
+        /// </summary>
+        public static bool SoundLockEnabled
+        {
+            get
+            {
+                bool isSoundLockEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.SoundLockEnabled, out isSoundLockEnabled);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get SoundLock system setting value.");
+                }
+                return isSoundLockEnabled;
+            }
+        }
+
+        /// <summary>
+        /// Indicates whether the device is in the silent mode.
+        /// </summary>
+        public static bool SoundSilentModeEnabled
+        {
+            get
+            {
+                bool isSilent;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.SoundSilentModeEnabled, out isSilent);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get SoundSilentMode system setting value.");
+                }
+                return isSilent;
+            }
+        }
+
+        /// <summary>
+        /// Indicates whether the screen touch sound is enabled on the device.
+        /// </summary>
+        public static bool SoundTouchEnabled
+        {
+            get
+            {
+                bool isTouchSoundEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.SoundTouchEnabled, out isTouchSoundEnabled);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get SoundTouch system setting value.");
+                }
+                return isTouchSoundEnabled;
+            }
+        }
+
+        /// <summary>
+        /// Indicates whether rotation control is automatic.
+        /// </summary>
+        public static bool DisplayScreenRotationAutoEnabled
+        {
+            get
+            {
+                bool isRotationAutomatic;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.DisplayScreenRotationAutoEnabled, out isRotationAutomatic);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get DisplayScreenRotationAuto system setting value.");
+                }
+                return isRotationAutomatic;
+            }
+        }
+
+        /// <summary>
+        /// Indicates device name.
+        /// </summary>
+        public static string DeviceName
+        {
+            get
+            {
+                string deviceName;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.DeviceName, out deviceName);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get DeviceName system setting value.");
+                }
+                return deviceName;
+            }
+        }
+        /// <summary>
+        /// Indicates whether the device user has enabled motion feature.
+        /// </summary>
+        public static bool MotionEnabled
+        {
+            get
+            {
+                bool isMotionEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.MotionEnabled, out isMotionEnabled);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get MotionEnabled system setting value.");
+                }
+                return isMotionEnabled;
+            }
+        }
+
+        /// <summary>
+        /// Indicates whether Wi-Fi-related notifications are enabled on the device.
+        /// </summary>
+        public static bool NetworkWifiNotificationEnabled
+        {
+            get
+            {
+                bool isWifiNotificationEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.NetworkWifiNotificationEnabled, out isWifiNotificationEnabled);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get NetworkWifiNotification system setting value.");
+                }
+                return isWifiNotificationEnabled;
+            }
+        }
+
+        /// <summary>
+        /// Indicates whether the device is in the flight mode.
+        /// </summary>
+        public static bool NetworkFlightModeEnabled
+        {
+            get
+            {
+                bool isFlightModeEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.NetworkFlightModeEnabled, out isFlightModeEnabled);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get NetworkFlightMode system setting value.");
+                }
+                return isFlightModeEnabled;
+            }
+        }
+
+        /// <summary>
+        /// Indicates the backlight time (in seconds). The following values can be used: 15, 30, 60, 120, 300, and 600.
+        /// </summary>
+        public static int ScreenBacklightTime
+        {
+            get
+            {
+                int backlightTime;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueInt(SystemSettingsKeys.ScreenBacklightTime, out backlightTime);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get ScreenBacklightTime system setting value.");
+                }
+                return backlightTime;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueInt(SystemSettingsKeys.ScreenBacklightTime, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set ScreenBacklightTime system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicates the file path of the current notification tone set by the user.
+        /// </summary>
+        public static string SoundNotification
+        {
+            get
+            {
+                string filePath;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.SoundNotification, out filePath);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get SoundNotification system setting value.");
+                }
+                return filePath;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.SoundNotification, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set SoundNotification system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicates the time period for notification repetitions.
+        /// </summary>
+        public static int SoundNotificationRepetitionPeriod
+        {
+            get
+            {
+                int notificationRepetitionPeriod;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueInt(SystemSettingsKeys.SoundNotificationRepetitionPeriod, out notificationRepetitionPeriod);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get SoundNotificationRepetitionPeriod system setting value.");
+                }
+                return notificationRepetitionPeriod;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueInt(SystemSettingsKeys.SoundNotificationRepetitionPeriod, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set SoundNotificationRepetitionPeriod system setting.");
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicates the current lock state
+        /// </summary>
+        public static SystemSettingsIdleLockState LockState
+        {
+            get
+            {
+                int LockState;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueInt(SystemSettingsKeys.LockState, out LockState);
+                if (res != SystemSettingsError.None)
+                {
+                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get LockState system setting value.");
+                }
+                return (SystemSettingsIdleLockState)LockState;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueInt(SystemSettingsKeys.LockState, (int)value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set LockState system setting.");
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_incomingCallRingtoneChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string path = SystemSettings.IncomingCallRingtone;
+            IncomingCallRingtoneChangedEventArgs eventArgs = new IncomingCallRingtoneChangedEventArgs(path);
+            s_incomingCallRingtoneChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<IncomingCallRingtoneChangedEventArgs> s_incomingCallRingtoneChanged;
+        /// <summary>
+        /// IncomingCallRingtoneChanged event is triggered when the file path of the incoming ringtone is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A IncomingCallRingtoneChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<IncomingCallRingtoneChangedEventArgs> IncomingCallRingtoneChanged
+        {
+            add
+            {
+                if (s_incomingCallRingtoneChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.IncomingCallRingtone, s_incomingCallRingtoneChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_incomingCallRingtoneChanged += value;
+            }
+
+            remove
+            {
+                s_incomingCallRingtoneChanged -= value;
+                if (s_incomingCallRingtoneChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.IncomingCallRingtone);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_wallpaperHomeScreenChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string path = SystemSettings.WallpaperHomeScreen;
+            WallpaperHomeScreenChangedEventArgs eventArgs = new WallpaperHomeScreenChangedEventArgs(path);
+            s_wallpaperHomeScreenChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<WallpaperHomeScreenChangedEventArgs> s_wallpaperHomeScreenChanged;
+        /// <summary>
+        /// WallpaperHomeScreenChanged event is triggered when the file path of the current home screen wallpaper is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A WallpaperHomeScreenChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<WallpaperHomeScreenChangedEventArgs> WallpaperHomeScreenChanged
+        {
+            add
+            {
+                if (s_wallpaperHomeScreenChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.WallpaperHomeScreen, s_wallpaperHomeScreenChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_wallpaperHomeScreenChanged += value;
+            }
+
+            remove
+            {
+                s_wallpaperHomeScreenChanged -= value;
+                if (s_wallpaperHomeScreenChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.WallpaperHomeScreen);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_wallpaperLockScreenChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string path = SystemSettings.WallpaperLockScreen;
+            WallpaperLockScreenChangedEventArgs eventArgs = new WallpaperLockScreenChangedEventArgs(path);
+            s_wallpaperLockScreenChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<WallpaperLockScreenChangedEventArgs> s_wallpaperLockScreenChanged;
+        /// <summary>
+        /// WallpaperLockScreenChanged event is triggered when the file path of the current lock screen wallpaper is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A WallpaperLockScreenChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<WallpaperLockScreenChangedEventArgs> WallpaperLockScreenChanged
+        {
+            add
+            {
+                if (s_wallpaperLockScreenChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.WallpaperLockScreen, s_wallpaperLockScreenChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_wallpaperLockScreenChanged += value;
+            }
+
+            remove
+            {
+                s_wallpaperLockScreenChanged -= value;
+                if (s_wallpaperLockScreenChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.WallpaperLockScreen);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_fontSizeChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            SystemSettingsFontSize fontSize = SystemSettings.FontSize;
+            FontSizeChangedEventArgs eventArgs = new FontSizeChangedEventArgs(fontSize);
+            s_fontSizeChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<FontSizeChangedEventArgs> s_fontSizeChanged;
+        /// <summary>
+        /// FontSizeChanged event is triggered when the current system font size is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A FontSizeChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<FontSizeChangedEventArgs> FontSizeChanged
+        {
+            add
+            {
+                if (s_fontSizeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.FontSize, s_fontSizeChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_fontSizeChanged += value;
+            }
+
+            remove
+            {
+                s_fontSizeChanged -= value;
+                if (s_fontSizeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.FontSize);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_fontTypeChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string fontType = SystemSettings.FontType;
+            FontTypeChangedEventArgs eventArgs = new FontTypeChangedEventArgs(fontType);
+            s_fontTypeChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<FontTypeChangedEventArgs> s_fontTypeChanged;
+        /// <summary>
+        /// FontTypeChanged event is triggered when the current system font type is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A FontTypeChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<FontTypeChangedEventArgs> FontTypeChanged
+        {
+            add
+            {
+                if (s_fontTypeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.FontType, s_fontTypeChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_fontTypeChanged += value;
+            }
+
+            remove
+            {
+                s_fontTypeChanged -= value;
+                if (s_fontTypeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.FontType);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_motionActivationChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool motionActivation = SystemSettings.MotionActivationEnabled;
+            MotionActivationSettingChangedEventArgs eventArgs = new MotionActivationSettingChangedEventArgs(motionActivation);
+            s_motionActivationChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<MotionActivationSettingChangedEventArgs> s_motionActivationChanged;
+        /// <summary>
+        /// MotionActivationChanged event is triggered when the motion service status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A MotionActivationChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<MotionActivationSettingChangedEventArgs> MotionActivationSettingChanged
+        {
+            add
+            {
+                if (s_motionActivationChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.MotionActivationEnabled, s_motionActivationChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_motionActivationChanged += value;
+            }
+
+            remove
+            {
+                s_motionActivationChanged -= value;
+                if (s_motionActivationChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.MotionActivationEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_emailAlertRingtoneChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string emailAlertRingtone = SystemSettings.EmailAlertRingtone;
+            EmailAlertRingtoneChangedEventArgs eventArgs = new EmailAlertRingtoneChangedEventArgs(emailAlertRingtone);
+            s_emailAlertRingtoneChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<EmailAlertRingtoneChangedEventArgs> s_emailAlertRingtoneChanged;
+        /// <summary>
+        /// EmailAlertRingtoneChanged event is triggered when the file path of the current email alert ringtone is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A EmailAlertRingtoneChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<EmailAlertRingtoneChangedEventArgs> EmailAlertRingtoneChanged
+        {
+            add
+            {
+                if (s_emailAlertRingtoneChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.EmailAlertRingtone, s_emailAlertRingtoneChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_emailAlertRingtoneChanged += value;
+            }
+
+            remove
+            {
+                s_emailAlertRingtoneChanged -= value;
+                if (s_emailAlertRingtoneChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.EmailAlertRingtone);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_usbDebuggingSettingChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool usbDebuggingEnabled = SystemSettings.UsbDebuggingEnabled;
+            UsbDebuggingSettingChangedEventArgs eventArgs = new UsbDebuggingSettingChangedEventArgs(usbDebuggingEnabled);
+            s_usbDebuggingSettingChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<UsbDebuggingSettingChangedEventArgs> s_usbDebuggingSettingChanged;
+        /// <summary>
+        /// UsbDebuggingSettingChangedEventArgs event is triggered when the USB debugging status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A UsbDebuggingSettingChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<UsbDebuggingSettingChangedEventArgs> UsbDebuggingSettingChanged
+        {
+            add
+            {
+                if (s_usbDebuggingSettingChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.UsbDebuggingEnabled, s_usbDebuggingSettingChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_usbDebuggingSettingChanged += value;
+            }
+
+            remove
+            {
+                s_usbDebuggingSettingChanged -= value;
+                if (s_usbDebuggingSettingChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.UsbDebuggingEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_data3GNetworkSettingChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool data3GEnabled = SystemSettings.Data3GNetworkEnabled;
+            Data3GNetworkSettingChangedEventArgs eventArgs = new Data3GNetworkSettingChangedEventArgs(data3GEnabled);
+            s_data3GNetworkSettingChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<Data3GNetworkSettingChangedEventArgs> s_data3GNetworkSettingChanged;
+        /// <summary>
+        /// Data3GNetworkSettingChanged event is triggered when the 3G data network status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A Data3GNetworkSettingChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<Data3GNetworkSettingChangedEventArgs> Data3GNetworkSettingChanged
+        {
+            add
+            {
+                if (s_data3GNetworkSettingChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.Data3GNetworkEnabled, s_data3GNetworkSettingChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_data3GNetworkSettingChanged += value;
+            }
+
+            remove
+            {
+                s_data3GNetworkSettingChanged -= value;
+                if (s_data3GNetworkSettingChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.Data3GNetworkEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_lockscreenAppChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string lockScreenApp = SystemSettings.LockscreenApp;
+            LockscreenAppChangedEventArgs eventArgs = new LockscreenAppChangedEventArgs(lockScreenApp);
+            s_lockscreenAppChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<LockscreenAppChangedEventArgs> s_lockscreenAppChanged;
+        /// <summary>
+        /// LockscreenAppChanged event is triggered when the lockscreen app pkg name is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A LockscreenAppChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<LockscreenAppChangedEventArgs> LockscreenAppChanged
+        {
+            add
+            {
+                if (s_lockscreenAppChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.LockscreenApp, s_lockscreenAppChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_lockscreenAppChanged += value;
+            }
+
+            remove
+            {
+                s_lockscreenAppChanged -= value;
+                if (s_lockscreenAppChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.LockscreenApp);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_localeCountryChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string localeCountry = SystemSettings.LocaleCountry;
+            LocaleCountryChangedEventArgs eventArgs = new LocaleCountryChangedEventArgs(localeCountry);
+            s_localeCountryChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<LocaleCountryChangedEventArgs> s_localeCountryChanged;
+        /// <summary>
+        /// LocaleCountryChanged event is triggered when the current country setting in the <LANGUAGE>_<REGION> syntax, is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A LocaleCountryChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<LocaleCountryChangedEventArgs> LocaleCountryChanged
+        {
+            add
+            {
+                if (s_localeCountryChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.LocaleCountry, s_localeCountryChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_localeCountryChanged += value;
+            }
+
+            remove
+            {
+                s_localeCountryChanged -= value;
+                if (s_localeCountryChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.LocaleCountry);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_localeLanguageChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string localeLanguage = SystemSettings.LocaleLanguage;
+            LocaleLanguageChangedEventArgs eventArgs = new LocaleLanguageChangedEventArgs(localeLanguage);
+            s_localeLanguageChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<LocaleLanguageChangedEventArgs> s_localeLanguageChanged;
+        /// <summary>
+        /// LocaleLanguageChanged event is triggered when the current language setting in the <LANGUAGE>_<REGION> syntax, is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A LocaleLanguageChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<LocaleLanguageChangedEventArgs> LocaleLanguageChanged
+        {
+            add
+            {
+                if (s_localeLanguageChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.LocaleLanguage, s_localeLanguageChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_localeLanguageChanged += value;
+            }
+
+            remove
+            {
+                s_localeLanguageChanged -= value;
+                if (s_localeLanguageChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.LocaleLanguage);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_localeTimeFormat24HourChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool localeTimeFormat24Hour = SystemSettings.LocaleTimeFormat24HourEnabled;
+            LocaleTimeFormat24HourSettingChangedEventArgs eventArgs = new LocaleTimeFormat24HourSettingChangedEventArgs(localeTimeFormat24Hour);
+            s_localeTimeFormat24HourChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<LocaleTimeFormat24HourSettingChangedEventArgs> s_localeTimeFormat24HourChanged;
+        /// <summary>
+        /// LocaleTimeFormat24HourChanged event is triggered when the time format is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A LocaleTimeFormat24HourChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<LocaleTimeFormat24HourSettingChangedEventArgs> LocaleTimeFormat24HourSettingChanged
+        {
+            add
+            {
+                if (s_localeTimeFormat24HourChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.LocaleTimeFormat24HourEnabled, s_localeTimeFormat24HourChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_localeTimeFormat24HourChanged += value;
+            }
+
+            remove
+            {
+                s_localeTimeFormat24HourChanged -= value;
+                if (s_localeTimeFormat24HourChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.LocaleTimeFormat24HourEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_localeTimeZoneChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string localeTimeZone = SystemSettings.LocaleTimeZone;
+            LocaleTimeZoneChangedEventArgs eventArgs = new LocaleTimeZoneChangedEventArgs(localeTimeZone);
+            s_localeTimeZoneChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<LocaleTimeZoneChangedEventArgs> s_localeTimeZoneChanged;
+        /// <summary>
+        /// LocaleTimeZoneChanged event is triggered when the  current time zone is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A LocaleTimeZoneChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<LocaleTimeZoneChangedEventArgs> LocaleTimeZoneChanged
+        {
+            add
+            {
+                if (s_localeTimeZoneChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.LocaleTimeZone, s_localeTimeZoneChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_localeTimeZoneChanged += value;
+            }
+
+            remove
+            {
+                s_localeTimeZoneChanged -= value;
+                if (s_localeTimeZoneChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.LocaleTimeZone);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_timeChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            //bool motionActivation = SystemSettings.Time;
+            TimeChangedEventArgs eventArgs = new TimeChangedEventArgs();
+            s_timeChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<TimeChangedEventArgs> s_timeChanged;
+        /// <summary>
+        /// TimeChanged event is triggered when the system time is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A TimeChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<TimeChangedEventArgs> TimeChanged
+        {
+            add
+            {
+                if (s_timeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.Time, s_timeChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_timeChanged += value;
+            }
+
+            remove
+            {
+                s_timeChanged -= value;
+                if (s_timeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.Time);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_soundLockChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool soundLock = SystemSettings.SoundLockEnabled;
+            SoundLockSettingChangedEventArgs eventArgs = new SoundLockSettingChangedEventArgs(soundLock);
+            s_soundLockChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<SoundLockSettingChangedEventArgs> s_soundLockChanged;
+        /// <summary>
+        /// SoundLockChanged event is triggered when the screen lock sound enabled status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A SoundLockChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<SoundLockSettingChangedEventArgs> SoundLockSettingChanged
+        {
+            add
+            {
+                if (s_soundLockChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.SoundLockEnabled, s_soundLockChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_soundLockChanged += value;
+            }
+
+            remove
+            {
+                s_soundLockChanged -= value;
+                if (s_soundLockChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.SoundLockEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_soundSilentModeChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool soundSilentMode = SystemSettings.SoundSilentModeEnabled;
+            SoundSilentModeSettingChangedEventArgs eventArgs = new SoundSilentModeSettingChangedEventArgs(soundSilentMode);
+            s_soundSilentModeChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<SoundSilentModeSettingChangedEventArgs> s_soundSilentModeChanged;
+        /// <summary>
+        /// SoundSilentModeChanged event is triggered when the silent mode status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A SoundSilentModeChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<SoundSilentModeSettingChangedEventArgs> SoundSilentModeSettingChanged
+        {
+            add
+            {
+                if (s_soundSilentModeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.SoundSilentModeEnabled, s_soundSilentModeChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_soundSilentModeChanged += value;
+            }
+
+            remove
+            {
+                s_soundSilentModeChanged -= value;
+                if (s_soundSilentModeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.SoundSilentModeEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_soundTouchChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool soundTouch = SystemSettings.SoundTouchEnabled;
+            SoundTouchSettingChangedEventArgs eventArgs = new SoundTouchSettingChangedEventArgs(soundTouch);
+            s_soundTouchChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<SoundTouchSettingChangedEventArgs> s_soundTouchChanged;
+        /// <summary>
+        /// SoundTouchChanged event is triggered when the screen touch sound enabled status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A SoundTouchChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<SoundTouchSettingChangedEventArgs> SoundTouchSettingChanged
+        {
+            add
+            {
+                if (s_soundTouchChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.SoundTouchEnabled, s_soundTouchChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_soundTouchChanged += value;
+            }
+
+            remove
+            {
+                s_soundTouchChanged -= value;
+                if (s_soundTouchChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.SoundTouchEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_displayScreenRotationAutoChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool displayScreenRotationAuto = SystemSettings.DisplayScreenRotationAutoEnabled;
+            DisplayScreenRotationAutoSettingChangedEventArgs eventArgs = new DisplayScreenRotationAutoSettingChangedEventArgs(displayScreenRotationAuto);
+            s_displayScreenRotationAutoChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<DisplayScreenRotationAutoSettingChangedEventArgs> s_displayScreenRotationAutoChanged;
+        /// <summary>
+        /// DisplayScreenRotationAutoChanged event is triggered when the automatic rotation control status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A DisplayScreenRotationAutoChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<DisplayScreenRotationAutoSettingChangedEventArgs> DisplayScreenRotationAutoSettingChanged
+        {
+            add
+            {
+                if (s_displayScreenRotationAutoChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.DisplayScreenRotationAutoEnabled, s_displayScreenRotationAutoChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_displayScreenRotationAutoChanged += value;
+            }
+
+            remove
+            {
+                s_displayScreenRotationAutoChanged -= value;
+                if (s_displayScreenRotationAutoChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.DisplayScreenRotationAutoEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_deviceNameChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string deviceName = SystemSettings.DeviceName;
+            DeviceNameChangedEventArgs eventArgs = new DeviceNameChangedEventArgs(deviceName);
+            s_deviceNameChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<DeviceNameChangedEventArgs> s_deviceNameChanged;
+        /// <summary>
+        /// DeviceNameChanged event is triggered when the device name is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A DeviceNameChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<DeviceNameChangedEventArgs> DeviceNameChanged
+        {
+            add
+            {
+                if (s_deviceNameChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.DeviceName, s_deviceNameChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_deviceNameChanged += value;
+            }
+
+            remove
+            {
+                s_deviceNameChanged -= value;
+                if (s_deviceNameChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.DeviceName);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_motionSettingChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool motionEnabled = SystemSettings.MotionEnabled;
+            MotionSettingChangedEventArgs eventArgs = new MotionSettingChangedEventArgs(motionEnabled);
+            s_motionSettingChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<MotionSettingChangedEventArgs> s_motionSettingChanged;
+        /// <summary>
+        /// MotionSettingChanged event is triggered when the motion feature enabled status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A MotionSettingChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<MotionSettingChangedEventArgs> MotionSettingChanged
+        {
+            add
+            {
+                if (s_motionSettingChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.MotionEnabled, s_motionSettingChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_motionSettingChanged += value;
+            }
+
+            remove
+            {
+                s_motionSettingChanged -= value;
+                if (s_motionSettingChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.MotionEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_networkWifiNotificationChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool networkWifiNotification = SystemSettings.NetworkWifiNotificationEnabled;
+            NetworkWifiNotificationSettingChangedEventArgs eventArgs = new NetworkWifiNotificationSettingChangedEventArgs(networkWifiNotification);
+            s_networkWifiNotificationChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<NetworkWifiNotificationSettingChangedEventArgs> s_networkWifiNotificationChanged;
+        /// <summary>
+        /// NetworkWifiNotificationChanged event is triggered when the Wi-Fi-related notifications enabled status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A NetworkWifiNotificationChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<NetworkWifiNotificationSettingChangedEventArgs> NetworkWifiNotificationSettingChanged
+        {
+            add
+            {
+                if (s_networkWifiNotificationChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.NetworkWifiNotificationEnabled, s_networkWifiNotificationChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_networkWifiNotificationChanged += value;
+            }
+
+            remove
+            {
+                s_networkWifiNotificationChanged -= value;
+                if (s_networkWifiNotificationChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.NetworkWifiNotificationEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_networkFlightModeChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            bool networkFlightMode = SystemSettings.NetworkFlightModeEnabled;
+            NetworkFlightModeSettingChangedEventArgs eventArgs = new NetworkFlightModeSettingChangedEventArgs(networkFlightMode);
+            s_networkFlightModeChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<NetworkFlightModeSettingChangedEventArgs> s_networkFlightModeChanged;
+        /// <summary>
+        /// NetworkFlightModeChanged event is triggered when the flight mode status is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A NetworkFlightModeChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<NetworkFlightModeSettingChangedEventArgs> NetworkFlightModeSettingChanged
+        {
+            add
+            {
+                if (s_networkFlightModeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.NetworkFlightModeEnabled, s_networkFlightModeChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_networkFlightModeChanged += value;
+            }
+
+            remove
+            {
+                s_networkFlightModeChanged -= value;
+                if (s_networkFlightModeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.NetworkFlightModeEnabled);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_screenBacklightTimeChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            int screenBacklightTime = SystemSettings.ScreenBacklightTime;
+            ScreenBacklightTimeChangedEventArgs eventArgs = new ScreenBacklightTimeChangedEventArgs(screenBacklightTime);
+            s_screenBacklightTimeChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<ScreenBacklightTimeChangedEventArgs> s_screenBacklightTimeChanged;
+        /// <summary>
+        /// ScreenBacklightTimeChanged event is triggered when the backlight time is changed.
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A ScreenBacklightTimeChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<ScreenBacklightTimeChangedEventArgs> ScreenBacklightTimeChanged
+        {
+            add
+            {
+                if (s_screenBacklightTimeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.ScreenBacklightTime, s_screenBacklightTimeChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_screenBacklightTimeChanged += value;
+            }
+
+            remove
+            {
+                s_screenBacklightTimeChanged -= value;
+                if (s_screenBacklightTimeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.ScreenBacklightTime);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_soundNotificationChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string soundNotification = SystemSettings.SoundNotification;
+            SoundNotificationChangedEventArgs eventArgs = new SoundNotificationChangedEventArgs(soundNotification);
+            s_soundNotificationChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<SoundNotificationChangedEventArgs> s_soundNotificationChanged;
+        /// <summary>
+        /// SoundNotificationChanged event is triggered when the file path of the current notification tone set by the user is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A SoundNotificationChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<SoundNotificationChangedEventArgs> SoundNotificationChanged
+        {
+            add
+            {
+                if (s_soundNotificationChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.SoundNotification, s_soundNotificationChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_soundNotificationChanged += value;
+            }
+
+            remove
+            {
+                s_soundNotificationChanged -= value;
+                if (s_soundNotificationChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.SoundNotification);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_soundNotificationRepetitionPeriodChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            int soundNotificationRepetitionPeriod = SystemSettings.SoundNotificationRepetitionPeriod;
+            SoundNotificationRepetitionPeriodChangedEventArgs eventArgs = new SoundNotificationRepetitionPeriodChangedEventArgs(soundNotificationRepetitionPeriod);
+            s_soundNotificationRepetitionPeriodChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<SoundNotificationRepetitionPeriodChangedEventArgs> s_soundNotificationRepetitionPeriodChanged;
+        /// <summary>
+        /// SoundNotificationRepetitionPeriodChanged event is triggered when the time period for notification repetitions is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A SoundNotificationRepetitionPeriodChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<SoundNotificationRepetitionPeriodChangedEventArgs> SoundNotificationRepetitionPeriodChanged
+        {
+            add
+            {
+                if (s_soundNotificationRepetitionPeriodChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.SoundNotificationRepetitionPeriod, s_soundNotificationRepetitionPeriodChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_soundNotificationRepetitionPeriodChanged += value;
+            }
+
+            remove
+            {
+                s_soundNotificationRepetitionPeriodChanged -= value;
+                if (s_soundNotificationRepetitionPeriodChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.SoundNotificationRepetitionPeriod);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_lockStateChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            SystemSettingsIdleLockState lockState = SystemSettings.LockState;
+            LockStateChangedEventArgs eventArgs = new LockStateChangedEventArgs(lockState);
+            s_lockStateChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<LockStateChangedEventArgs> s_lockStateChanged;
+        /// <summary>
+        /// LockStateChanged event is triggered when the current lock state is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A LockStateChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<LockStateChangedEventArgs> LockStateChanged
+        {
+            add
+            {
+                if (s_lockStateChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.LockState, s_lockStateChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_lockStateChanged += value;
+            }
+
+            remove
+            {
+                s_lockStateChanged -= value;
+                if (s_lockStateChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.LockState);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+    }
+}
+
diff --git a/src/Tizen.System/SystemSettings/SystemSettingsEnums.cs b/src/Tizen.System/SystemSettings/SystemSettingsEnums.cs
new file mode 100644 (file)
index 0000000..43bd94c
--- /dev/null
@@ -0,0 +1,171 @@
+
+namespace Tizen.System
+{
+    /// <summary>
+    /// Enumeration for all available system settings
+    /// </summary>
+    public enum SystemSettingsKeys
+    {
+        /// <summary>
+        /// (string) The file path of the current ringtone
+        /// </summary>
+        IncomingCallRingtone,
+        /// <summary>
+        /// (string) The file path of the current home screen wallpaper
+        /// </summary>
+        WallpaperHomeScreen,
+        /// <summary>
+        /// (string) The file path of the current lock screen wallpaper
+        /// </summary>
+        WallpaperLockScreen,
+        /// <summary>
+        /// (int) The current system font size
+        /// </summary>
+        FontSize,
+        /// <summary>
+        /// (string) The current system font type
+        /// </summary>
+        FontType,
+        /// <summary>
+        /// (bool) Indicates whether the motion service is activated
+        /// </summary>
+        MotionActivationEnabled,
+        /// <summary>
+        /// (string) The file path of the current email alert ringtone
+        /// </summary>
+        EmailAlertRingtone,
+        /// <summary>
+        /// (bool) Indicates whether the USB debugging is enabled (Since 2.4)
+        /// </summary>
+        UsbDebuggingEnabled,
+        /// <summary>
+        /// (bool) Indicates whether the 3G data network is enabled (Since 2.4)
+        /// </summary>
+        Data3GNetworkEnabled,
+        /// <summary>
+        /// (string) Indicates lockscreen app pkg name
+        /// </summary>
+        LockscreenApp = Data3GNetworkEnabled + 2,
+        /// <summary>
+        /// (string) The current system default font type (only support Get)
+        /// </summary>
+        DefaultFontType,
+        /// <summary>
+        /// (string) Indicates the current country setting in the <LANGUAGE>_<REGION> syntax.
+        /// The country setting is in the ISO 639-2 format,
+        /// and the region setting is in the ISO 3166-1 alpha-2 format
+        /// </summary>
+        LocaleCountry,
+        /// <summary>
+        /// (string) Indicates the current language setting in the <LANGUAGE>_<REGION> syntax.
+        /// The language setting is in the ISO 639-2 format
+        /// and the region setting is in the ISO 3166-1 alpha-2 format.
+        /// </summary>
+        LocaleLanguage,
+        /// <summary>
+        /// (bool) Indicates whether the 24-hour clock is used.
+        /// If the value is false, the 12-hour clock is used.
+        /// </summary>
+        LocaleTimeFormat24HourEnabled,
+        /// <summary>
+        /// (string) Indicates the current time zone.
+        /// </summary>
+        LocaleTimeZone,
+        /// <summary>
+        /// (int) Once System changes time, this event occurs to notify time change.
+        /// </summary>
+        Time,
+        /// <summary>
+        /// GET (bool) Indicates whether the screen lock sound is enabled on the device. ex) LCD on/off sound
+        /// </summary>
+        SoundLockEnabled,
+        /// <summary>
+        /// GET (bool) Indicates whether the device is in the silent mode.
+        /// </summary>
+        SoundSilentModeEnabled,
+        /// <summary>
+        /// GET (bool) Indicates whether the screen touch sound is enabled on the device.
+        /// </summary>
+        SoundTouchEnabled,
+        /// <summary>
+        /// GET (bool) Indicates whether rotation control is automatic.
+        /// </summary>
+        DisplayScreenRotationAutoEnabled,
+        /// <summary>
+        /// GET (string) Indicates device name.
+        /// </summary>
+        DeviceName,
+        /// <summary>
+        /// GET (bool) Indicates whether the device user has enabled motion feature.
+        /// </summary>
+        MotionEnabled,
+        /// <summary>
+        /// GET (bool) Indicates whether Wi-Fi-related notifications are enabled on the device.
+        /// </summary>
+        NetworkWifiNotificationEnabled,
+        /// <summary>
+        /// GET (bool) Indicates whether the device is in the flight mode.
+        /// </summary>
+        NetworkFlightModeEnabled,
+        /// <summary>
+        /// (int) Indicates the backlight time (in seconds). The following values can be used: 15, 30, 60, 120, 300, and 600.
+        /// </summary>
+        ScreenBacklightTime,
+        /// <summary>
+        /// (string) Indicates the file path of the current notification tone set by the user.
+        /// </summary>
+        SoundNotification,
+        /// <summary>
+        /// (int) Indicates the time period for notification repetitions.
+        /// </summary>
+        SoundNotificationRepetitionPeriod,
+        /// <summary>
+        /// (int) Indicates the current lock state
+        /// </summary>
+        LockState
+    }
+    /// <summary>
+    /// Enumeration for Idle Lock State.
+    /// </summary>
+    public enum SystemSettingsIdleLockState
+    {
+        /// <summary>
+        /// Device is unlocked
+        /// </summary>
+        Unlock = 0,
+        /// <summary>
+        /// Device is locked
+        /// </summary>
+        Lock,
+        /// <summary>
+        /// Device is being locked
+        /// </summary>
+        LaunchingLock
+    }
+    /// <summary>
+    /// Enumeration for font size.
+    /// </summary>
+    public enum SystemSettingsFontSize
+    {
+        /// <summary>
+        /// A small size
+        /// </summary>
+        Small = 0,
+        /// <summary>
+        /// A normal size
+        /// </summary>
+        Normal,
+        /// <summary>
+        /// A large size
+        /// </summary>
+        Large,
+        /// <summary>
+        /// A huge size
+        /// </summary>
+        Huge,
+        /// <summary>
+        /// A giant size
+        /// </summary>
+        Giant
+    }
+}
diff --git a/src/Tizen.System/SystemSettings/SystemSettingsEventArgs.cs b/src/Tizen.System/SystemSettings/SystemSettingsEventArgs.cs
new file mode 100644 (file)
index 0000000..301fede
--- /dev/null
@@ -0,0 +1,917 @@
+using System;
+
+namespace Tizen.System
+{
+    /// <summary>
+    /// EventArgs type for the event IncomingCallRingtoneChanged
+    /// </summary>
+    public class IncomingCallRingtoneChangedEventArgs : EventArgs
+    {
+        private readonly string _incomingCallRingtone = null;
+        /// <summary>
+        /// The enum for IncomingCallRingtone system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.IncomingCallRingtone;
+            }
+        }
+
+        internal IncomingCallRingtoneChangedEventArgs(string val)
+        {
+            _incomingCallRingtone = val;
+        }
+
+        /// <summary>
+        /// The file path of the current ringtone
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _incomingCallRingtone;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event WallpaperHomeScreenChanged
+    /// </summary>
+    public class WallpaperHomeScreenChangedEventArgs : EventArgs
+    {
+        private readonly string _wallpaperHomeScreen = null;
+        /// <summary>
+        /// The enum for WallpaperHomeScreen system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.WallpaperHomeScreen;
+            }
+        }
+
+        internal WallpaperHomeScreenChangedEventArgs(string val)
+        {
+            _wallpaperHomeScreen = val;
+        }
+
+        /// <summary>
+        /// The file path of the current home screen wallpaper
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _wallpaperHomeScreen;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event WallpaperLockScreenChanged
+    /// </summary>
+    public class WallpaperLockScreenChangedEventArgs : EventArgs
+    {
+        private readonly string _wallpaperLockScreen = null;
+        /// <summary>
+        /// The enum for WallpaperLockScreen system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.WallpaperLockScreen;
+            }
+        }
+
+        internal WallpaperLockScreenChangedEventArgs(string val)
+        {
+            _wallpaperLockScreen = val;
+        }
+
+        /// <summary>
+        /// The file path of the current lock screen wallpaper
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _wallpaperLockScreen;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event FontSizeChanged
+    /// </summary>
+    public class FontSizeChangedEventArgs : EventArgs
+    {
+        private readonly SystemSettingsFontSize _fontSize;
+        /// <summary>
+        /// The enum for FontSize system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.FontSize;
+            }
+        }
+        internal FontSizeChangedEventArgs(SystemSettingsFontSize val)
+        {
+            _fontSize = val;
+        }
+
+        /// <summary>
+        /// The current system font size
+        /// </summary>
+        public SystemSettingsFontSize Value
+        {
+            get
+            {
+                return _fontSize;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event FontTypeChanged
+    /// </summary>
+    public class FontTypeChangedEventArgs : EventArgs
+    {
+        private readonly string _fontType = null;
+        /// <summary>
+        /// The enum for FontType system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.FontType;
+            }
+        }
+        internal FontTypeChangedEventArgs(string val)
+        {
+            _fontType = val;
+        }
+
+        /// <summary>
+        /// The current system font type
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _fontType;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event MotionActivationChanged
+    /// </summary>
+    public class MotionActivationSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _motionActivation;
+        /// <summary>
+        /// The enum for MotionActivation system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.MotionActivationEnabled;
+            }
+        }
+        internal MotionActivationSettingChangedEventArgs(bool val)
+        {
+            _motionActivation = val;
+        }
+
+        /// <summary>
+        /// Indicates whether the motion service is activated
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _motionActivation;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event EmailAlertRingtoneChanged
+    /// </summary>
+    public class EmailAlertRingtoneChangedEventArgs : EventArgs
+    {
+        private readonly string _emailAlertRingtone = null;
+        /// <summary>
+        /// The enum for EmailAlertRingtone system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.EmailAlertRingtone;
+            }
+        }
+        internal EmailAlertRingtoneChangedEventArgs(string val)
+        {
+            _emailAlertRingtone = val;
+        }
+
+        /// <summary>
+        /// The file path of the current email alert ringtone
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _emailAlertRingtone;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event UsbDebuggingSettingChanged
+    /// </summary>
+    public class UsbDebuggingSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _usbDebuggingEnabled;
+        /// <summary>
+        /// The enum for UsbDebuggingEnabled system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.UsbDebuggingEnabled;
+            }
+        }
+        internal UsbDebuggingSettingChangedEventArgs(bool val)
+        {
+            _usbDebuggingEnabled = val;
+        }
+
+        /// <summary>
+        /// Indicates whether the USB debugging is enabled
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _usbDebuggingEnabled;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event Data3GNetworkSettingChanged
+    /// </summary>
+    public class Data3GNetworkSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _data3GNetworkEnabled;
+        /// <summary>
+        /// The enum for Data3GNetworkEnabled system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.Data3GNetworkEnabled;
+            }
+        }
+        internal Data3GNetworkSettingChangedEventArgs(bool val)
+        {
+            _data3GNetworkEnabled = val;
+        }
+
+        /// <summary>
+        /// Indicates whether the 3G data network is enabled
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _data3GNetworkEnabled;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event LockscreenAppChanged
+    /// </summary>
+    public class LockscreenAppChangedEventArgs : EventArgs
+    {
+        private readonly string _lockscreenApp = null;
+        /// <summary>
+        /// The enum for LockscreenApp system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.LockscreenApp;
+            }
+        }
+        internal LockscreenAppChangedEventArgs(string val)
+        {
+            _lockscreenApp = val;
+        }
+
+        /// <summary>
+        /// Indicates lockscreen app pkg name
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _lockscreenApp;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event DefaultFontTypeChanged
+    /// </summary>
+    public class DefaultFontTypeChangedEventArgs : EventArgs
+    {
+        private readonly string _defaultFontType = null;
+        /// <summary>
+        /// The enum for DefaultFontType system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.DefaultFontType;
+            }
+        }
+        internal DefaultFontTypeChangedEventArgs(string val)
+        {
+            _defaultFontType = val;
+        }
+
+        /// <summary>
+        /// The current system default font type
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _defaultFontType;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event LocaleCountryChanged
+    /// </summary>
+    public class LocaleCountryChangedEventArgs : EventArgs
+    {
+        private readonly string _localeCountry = null;
+        /// <summary>
+        /// The enum for LocaleCountry system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.LocaleCountry;
+            }
+        }
+        internal LocaleCountryChangedEventArgs(string val)
+        {
+            _localeCountry = val;
+        }
+
+        /// <summary>
+        /// Indicates the current country setting in the <LANGUAGE>_<REGION> syntax.
+        /// The country setting is in the ISO 639-2 format, and the region setting is in the ISO 3166-1 alpha-2 format
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _localeCountry;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event LocaleLanguageChanged
+    /// </summary>
+    public class LocaleLanguageChangedEventArgs : EventArgs
+    {
+        private readonly string _localeLanguage = null;
+        /// <summary>
+        /// The enum for LocaleLanguage system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.LocaleLanguage;
+            }
+        }
+        internal LocaleLanguageChangedEventArgs(string val)
+        {
+            _localeLanguage = val;
+        }
+
+        /// <summary>
+        /// Indicates the current language setting in the <LANGUAGE>_<REGION> syntax.
+        /// The language setting is in the ISO 639-2 format and the region setting is in the ISO 3166-1 alpha-2 format
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _localeLanguage;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event LocaleTimeFormat24HourChanged
+    /// </summary>
+    public class LocaleTimeFormat24HourSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _localeTimeFormat24Hour;
+        /// <summary>
+        /// The enum for LocaleTimeFormat24Hour system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.LocaleTimeFormat24HourEnabled;
+            }
+        }
+        internal LocaleTimeFormat24HourSettingChangedEventArgs(bool val)
+        {
+            _localeTimeFormat24Hour = val;
+        }
+
+        /// <summary>
+        /// Indicates whether the 24-hour clock is used. If the value is false, the 12-hour clock is used.
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _localeTimeFormat24Hour;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event LocaleTimeZoneChanged
+    /// </summary>
+    public class LocaleTimeZoneChangedEventArgs : EventArgs
+    {
+        private readonly string _localeTimeZone = null;
+        /// <summary>
+        /// The enum for LocaleTimeZone system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.LocaleTimeZone;
+            }
+        }
+        internal LocaleTimeZoneChangedEventArgs(string val)
+        {
+            _localeTimeZone = val;
+        }
+
+        /// <summary>
+        /// Indicates the current time zone
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _localeTimeZone;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event TimeChanged
+    /// </summary>
+    public class TimeChangedEventArgs : EventArgs
+    {
+        /// <summary>
+        /// The enum for Time system setting event
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.Time;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event SoundLockChanged
+    /// </summary>
+    public class SoundLockSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _soundLock;
+        /// <summary>
+        /// The enum for SoundLock system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.SoundLockEnabled;
+            }
+        }
+        internal SoundLockSettingChangedEventArgs(bool val)
+        {
+            _soundLock = val;
+        }
+
+        /// <summary>
+        ///  Indicates whether the screen lock sound is enabled on the device. ex) LCD on/off sound
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _soundLock;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event SoundSilentModeChanged
+    /// </summary>
+    public class SoundSilentModeSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _soundSilentMode;
+        /// <summary>
+        /// The enum for SoundSilentMode system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.SoundSilentModeEnabled;
+            }
+        }
+        internal SoundSilentModeSettingChangedEventArgs(bool val)
+        {
+            _soundSilentMode = val;
+        }
+
+        /// <summary>
+        /// Indicates whether the device is in the silent mode.
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _soundSilentMode;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event SoundTouchChanged
+    /// </summary>
+    public class SoundTouchSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _soundTouch;
+        /// <summary>
+        /// The enum for SoundTouch system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.SoundTouchEnabled;
+            }
+        }
+        internal SoundTouchSettingChangedEventArgs(bool val)
+        {
+            _soundTouch = val;
+        }
+
+        /// <summary>
+        /// Indicates whether the screen touch sound is enabled on the device.
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _soundTouch;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event DisplayScreenRotationAutoChanged
+    /// </summary>
+    public class DisplayScreenRotationAutoSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _displayScreenRotationAuto;
+        /// <summary>
+        /// The enum for DisplayScreenRotationAuto system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.DisplayScreenRotationAutoEnabled;
+            }
+        }
+        internal DisplayScreenRotationAutoSettingChangedEventArgs(bool val)
+        {
+            _displayScreenRotationAuto = val;
+        }
+
+        /// <summary>
+        /// Indicates whether rotation control is automatic
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _displayScreenRotationAuto;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event DeviceNameChanged
+    /// </summary>
+    public class DeviceNameChangedEventArgs : EventArgs
+    {
+        private readonly string _deviceName = null;
+        /// <summary>
+        /// The enum for DeviceName system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.DeviceName;
+            }
+        }
+        internal DeviceNameChangedEventArgs(string val)
+        {
+            _deviceName = val;
+        }
+
+        /// <summary>
+        /// Indicates device name
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _deviceName;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event MotionSettingChanged
+    /// </summary>
+    public class MotionSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _motionEnabled;
+        /// <summary>
+        /// The enum for MotionEnabled system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.MotionEnabled;
+            }
+        }
+        internal MotionSettingChangedEventArgs(bool val)
+        {
+            _motionEnabled = val;
+        }
+
+        /// <summary>
+        /// Indicates whether the device user has enabled motion feature
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _motionEnabled;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event NetworkWifiNotificationChanged
+    /// </summary>
+    public class NetworkWifiNotificationSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _networkWifiNotification;
+        /// <summary>
+        /// The enum for NetworkWifiNotification system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.NetworkWifiNotificationEnabled;
+            }
+        }
+        internal NetworkWifiNotificationSettingChangedEventArgs(bool val)
+        {
+            _networkWifiNotification = val;
+        }
+
+        /// <summary>
+        /// Indicates whether Wi-Fi-related notifications are enabled on the device
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _networkWifiNotification;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event NetworkFlightModeChanged
+    /// </summary>
+    public class NetworkFlightModeSettingChangedEventArgs : EventArgs
+    {
+        private readonly bool _networkFlightMode;
+        /// <summary>
+        /// The enum for NetworkFlightMode system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.NetworkFlightModeEnabled;
+            }
+        }
+        internal NetworkFlightModeSettingChangedEventArgs(bool val)
+        {
+            _networkFlightMode = val;
+        }
+
+        /// <summary>
+        /// Indicates whether the device is in the flight mode
+        /// </summary>
+        public bool Value
+        {
+            get
+            {
+                return _networkFlightMode;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event ScreenBacklightTimeChanged
+    /// </summary>
+    public class ScreenBacklightTimeChangedEventArgs : EventArgs
+    {
+        private readonly int _screenBacklightTime;
+        /// <summary>
+        /// The enum for ScreenBacklightTime system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.ScreenBacklightTime;
+            }
+        }
+        internal ScreenBacklightTimeChangedEventArgs(int val)
+        {
+            _screenBacklightTime = val;
+        }
+
+        /// <summary>
+        /// Indicates the backlight time (in seconds)
+        /// </summary>
+        public int Value
+        {
+            get
+            {
+                return _screenBacklightTime;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event SoundNotificationChanged
+    /// </summary>
+    public class SoundNotificationChangedEventArgs : EventArgs
+    {
+        private readonly string _soundNotification = null;
+        /// <summary>
+        /// The enum for SoundNotification system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.SoundNotification;
+            }
+        }
+        internal SoundNotificationChangedEventArgs(string val)
+        {
+            _soundNotification = val;
+        }
+
+        /// <summary>
+        /// Indicates the file path of the current notification tone set by the user
+        /// </summary>
+        public string Value
+        {
+            get
+            {
+                return _soundNotification;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event SoundNotificationRepetitionPeriodChanged
+    /// </summary>
+    public class SoundNotificationRepetitionPeriodChangedEventArgs : EventArgs
+    {
+        private readonly int _soundNotificationRepetitionPeriod;
+        /// <summary>
+        /// The enum for SoundNotificationRepetitionPeriod system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.SoundNotificationRepetitionPeriod;
+            }
+        }
+        internal SoundNotificationRepetitionPeriodChangedEventArgs(int val)
+        {
+            _soundNotificationRepetitionPeriod = val;
+        }
+
+        /// <summary>
+        /// Indicates the time period for notification repetitions
+        /// </summary>
+        public int Value
+        {
+            get
+            {
+                return _soundNotificationRepetitionPeriod;
+            }
+        }
+    }
+
+    /// <summary>
+    /// EventArgs type for the event LockStateChanged
+    /// </summary>
+    public class LockStateChangedEventArgs : EventArgs
+    {
+        private readonly SystemSettingsIdleLockState _lockState;
+        /// <summary>
+        /// The enum for LockState system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.LockState;
+            }
+        }
+        internal LockStateChangedEventArgs(SystemSettingsIdleLockState val)
+        {
+            _lockState = val;
+        }
+
+        /// <summary>
+        /// Indicates the current lock state
+        /// </summary>
+        public SystemSettingsIdleLockState Value
+        {
+            get
+            {
+                return _lockState;
+            }
+        }
+    }
+}
diff --git a/src/Tizen.System/SystemSettings/SystemSettingsExceptionFactory.cs b/src/Tizen.System/SystemSettings/SystemSettingsExceptionFactory.cs
new file mode 100644 (file)
index 0000000..c291e8a
--- /dev/null
@@ -0,0 +1,44 @@
+using System;
+
+namespace Tizen.System
+{
+    internal enum SystemSettingsError
+    {
+        None = Tizen.Internals.Errors.ErrorCode.None,
+        InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,
+        OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory,
+        IoError = Tizen.Internals.Errors.ErrorCode.IoError,
+        PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,
+        NotSupported = Tizen.Internals.Errors.ErrorCode.NotSupported,
+        LockScreenAppPasswordMode = -0x01140000 | 0x01
+    };
+    internal class SystemSettingsExceptionFactory
+    {
+        internal const string LogTag = "Tizen.System.SystemSettings";
+
+        internal static Exception CreateException(SystemSettingsError err, string msg)
+        {
+            Exception exp;
+            switch (err)
+            {
+                case SystemSettingsError.InvalidParameter:
+                    exp = new ArgumentException(msg);
+                    break;
+                case SystemSettingsError.OutOfMemory:
+                //fall through
+                case SystemSettingsError.IoError:
+                //fall through
+                case SystemSettingsError.PermissionDenied:
+                //fall through
+                case SystemSettingsError.NotSupported:
+                //fall through
+                case SystemSettingsError.LockScreenAppPasswordMode:
+                //fall through
+                default:
+                    exp = new InvalidOperationException(msg);
+                    break;
+            }
+            return exp;
+        }
+    }
+}
index 6b0f8d3..9a1f6bb 100755 (executable)
@@ -71,6 +71,7 @@
     <Compile Include="Interop\Interop.Libraries.cs" />
     <Compile Include="Interop\Interop.Storage.cs" />
     <Compile Include="Interop\Interop.SystemInfo.cs" />
+    <Compile Include="Interop\Interop.SystemSettings.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="RuntimeInfo\CpuUsage.cs" />
     <Compile Include="RuntimeInfo\Enumerations.cs" />
     <Compile Include="Storage\StorageManager.cs" />
     <Compile Include="Storage\StorageState.cs" />
     <Compile Include="SystemInfo\SystemInfo.cs" />
+    <Compile Include="SystemSettings\SystemSettings.cs" />
+    <Compile Include="SystemSettings\SystemSettingsEnums.cs" />
+    <Compile Include="SystemSettings\SystemSettingsEventArgs.cs" />
+    <Compile Include="SystemSettings\SystemSettingsExceptionFactory.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="packaging\csapi-tizen.system.manifest" />
   <Target Name="AfterBuild">
   </Target>
   -->
-</Project>
+</Project>
\ No newline at end of file