[system-settings] Interface design
authorAditya <a.aswani@samsung.com>
Thu, 7 Apr 2016 10:44:29 +0000 (16:14 +0530)
committerSungHyun Min <shyun.min@samsung.com>
Mon, 30 May 2016 06:21:28 +0000 (15:21 +0900)
Change-Id: I03e9f50952010156dfdad7685d270549a4bde2af
Signed-off-by: Aditya <a.aswani@samsung.com>
14 files changed:
.gitattributes [new file with mode: 0644]
.gitignore [new file with mode: 0644]
Tizen.System.SystemSettings.sln [new file with mode: 0644]
packaging/csapi-systemsettings.manifest [new file with mode: 0644]
packaging/csapi-systemsettings.pc.in [new file with mode: 0644]
packaging/csapi-systemsettings.spec [new file with mode: 0644]
src/Tizen.System.SystemSettings/Interop/Interop.Settings.cs [new file with mode: 0644]
src/Tizen.System.SystemSettings/Properties/AssemblyInfo.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.SystemSettings/Tizen.System.SystemSettings.csproj [new file with mode: 0644]
src/Tizen.System.SystemSettings/Tizen.System.SystemSettings.snk [new file with mode: 0644]

diff --git a/.gitattributes b/.gitattributes
new file mode 100644 (file)
index 0000000..5896c16
--- /dev/null
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs     diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln       merge=binary
+#*.csproj    merge=binary
+#*.vbproj    merge=binary
+#*.vcxproj   merge=binary
+#*.vcproj    merge=binary
+#*.dbproj    merge=binary
+#*.fsproj    merge=binary
+#*.lsproj    merge=binary
+#*.wixproj   merge=binary
+#*.modelproj merge=binary
+#*.sqlproj   merge=binary
+#*.wwaproj   merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg   binary
+#*.png   binary
+#*.gif   binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc   diff=astextplain
+#*.DOC   diff=astextplain
+#*.docx  diff=astextplain
+#*.DOCX  diff=astextplain
+#*.dot   diff=astextplain
+#*.DOT   diff=astextplain
+#*.pdf   diff=astextplain
+#*.PDF   diff=astextplain
+#*.rtf   diff=astextplain
+#*.RTF   diff=astextplain
diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..b06e864
--- /dev/null
@@ -0,0 +1,212 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+build/
+bld/
+[Bb]in/
+[Oo]bj/
+
+# Visual Studio 2015 cache/options directory
+.vs/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# DNX
+project.lock.json
+artifacts/
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+## TODO: Comment the next line if you want to checkin your
+## web deploy settings but do note that will include unencrypted
+## passwords
+#*.pubxml
+
+*.publishproj
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+
+# Windows Azure Build Output
+csx/
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+node_modules/
+orleans.codegen.cs
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# LightSwitch generated files
+GeneratedArtifacts/
+_Pvt_Extensions/
+ModelManifest.xml
diff --git a/Tizen.System.SystemSettings.sln b/Tizen.System.SystemSettings.sln
new file mode 100644 (file)
index 0000000..6287465
--- /dev/null
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.24720.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tizen.System.SystemSettings", "Tizen.System.SystemSettings\Tizen.System.SystemSettings.csproj", "{09D03C33-2FCE-4C18-BEC8-F585A865A4B4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "tct-system-settings-tizen-tests", "tct-system-settings-tizen-tests\tct-system-settings-tizen-tests.csproj", "{8C1E183D-1AC2-4301-BDD6-A026BE81D095}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Release|Any CPU = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {09D03C33-2FCE-4C18-BEC8-F585A865A4B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {09D03C33-2FCE-4C18-BEC8-F585A865A4B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {09D03C33-2FCE-4C18-BEC8-F585A865A4B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {09D03C33-2FCE-4C18-BEC8-F585A865A4B4}.Release|Any CPU.Build.0 = Release|Any CPU
+               {8C1E183D-1AC2-4301-BDD6-A026BE81D095}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {8C1E183D-1AC2-4301-BDD6-A026BE81D095}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {8C1E183D-1AC2-4301-BDD6-A026BE81D095}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {8C1E183D-1AC2-4301-BDD6-A026BE81D095}.Release|Any CPU.Build.0 = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/packaging/csapi-systemsettings.manifest b/packaging/csapi-systemsettings.manifest
new file mode 100644 (file)
index 0000000..75b0fa5
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+    <request>
+        <domain name="_"/>
+    </request>
+</manifest>
diff --git a/packaging/csapi-systemsettings.pc.in b/packaging/csapi-systemsettings.pc.in
new file mode 100644 (file)
index 0000000..c396812
--- /dev/null
@@ -0,0 +1,5 @@
+Name: csapi-systemsettings
+Description: Tizen System Settings API for C#
+Version: @version@
+Libs: -r:@dllpath@/@dllname@
+Requires:
\ No newline at end of file
diff --git a/packaging/csapi-systemsettings.spec b/packaging/csapi-systemsettings.spec
new file mode 100644 (file)
index 0000000..9f47acb
--- /dev/null
@@ -0,0 +1,84 @@
+%define dllpath %{_libdir}/mono/tizen
+%define dllname Tizen.System.SystemSettings.dll
+
+Name:       csapi-systemsettings
+Summary:    Tizen System API for C#
+Version:    1.0.0
+Release:    1
+Group:      Development/Libraries
+License:    Apache-2.0
+URL:        https://www.tizen.org
+Source0:    %{name}-%{version}.tar.gz
+Source1:    %{name}.manifest
+Source2:    %{name}.pc.in
+
+# TODO: replace mono-compiler, mono-devel to mcs, mono-shlib-cop
+BuildRequires: mono-compiler
+BuildRequires: mono-devel
+# TODO: replace mono-core to gacutil.
+#       mono-core should provide the symbol 'gacutil'
+Requires(post): mono-core
+Requires(postun): mono-core
+
+# P/Invoke Dependencies
+BuildRequires: pkgconfig(capi-system-system-settings)
+
+# P/Invoke Runtime Dependencies
+# TODO: It should be removed after fix tizen-rpm-config
+Requires: pkgconfig(capi-system-system-settings)
+# DLL Dependencies
+BuildRequires : pkgconfig(csapi-tizen)
+
+%description
+Tizen System Device API for C#
+
+%package devel
+Summary:    Development package for %{name}
+Group:      Development/Libraries
+Requires:   %{name} = %{version}-%{release}
+
+%description devel
+Development package for %{name}
+
+%prep
+%setup -q
+
+cp %{SOURCE1} .
+
+%build
+# build dll
+mcs -target:library -out:%{dllname} -keyfile:Tizen.System.SystemSettings/Tizen.System.SystemSettings.snk -pkg:csapi-tizen \
+  Tizen.System.SystemSettings/Properties/AssemblyInfo.cs \
+  Tizen.System.SystemSettings/SystemSettings.cs \
+  Tizen.System.SystemSettings/SystemSettingsEnums.cs \
+  Tizen.System.SystemSettings/SystemSettingsEventArgs.cs \
+  Tizen.System.SystemSettings/SystemSettingsExceptionFactory.cs \
+  Tizen.System.SystemSettings/Interop/Interop.Settings.cs
+
+# check p/invoke
+if [ -x %{dllname} ]; then
+  RET=`mono-shlib-cop %{dllname}`; \
+  CNT=`echo $RET | grep -E "^error:" | wc -l`; \
+  if [ $CNT -gt 0 ]; then exit 1; fi
+fi
+
+%install
+# copy dll
+mkdir -p %{buildroot}%{dllpath}
+install -p -m 644 %{dllname} %{buildroot}%{dllpath}
+
+# generate pkgconfig
+mkdir -p %{buildroot}%{_libdir}/pkgconfig
+sed -e "s#@version@#%{version}#g" \
+    -e "s#@dllpath@#%{dllpath}#g" \
+    -e "s#@dllname@#%{dllname}#g" \
+    %{SOURCE2} > %{buildroot}%{_libdir}/pkgconfig/%{name}.pc
+
+%post
+gacutil -i %{dllpath}/%{dllname}
+
+%files
+%{dllpath}/%{dllname}
+
+%files devel
+%{_libdir}/pkgconfig/%{name}.pc
diff --git a/src/Tizen.System.SystemSettings/Interop/Interop.Settings.cs b/src/Tizen.System.SystemSettings/Interop/Interop.Settings.cs
new file mode 100644 (file)
index 0000000..482bbf4
--- /dev/null
@@ -0,0 +1,47 @@
+/// 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;
+
+namespace Tizen.System.SystemSettings
+{
+    internal static 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);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.System.SystemSettings/Properties/AssemblyInfo.cs b/src/Tizen.System.SystemSettings/Properties/AssemblyInfo.cs
new file mode 100644 (file)
index 0000000..1aa9e6d
--- /dev/null
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tizen.System.SystemSettings")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tizen.System.SystemSettings")]
+[assembly: AssemblyCopyright("Copyright \u00A9  2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("09d03c33-2fce-4c18-bec8-f585a865a4b4")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Tizen.System.SystemSettings/SystemSettings.cs b/src/Tizen.System.SystemSettings/SystemSettings.cs
new file mode 100644 (file)
index 0000000..362a5a0
--- /dev/null
@@ -0,0 +1,1768 @@
+using System;
+
+namespace Tizen.System.SystemSettings
+{
+    /// <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 MotionActivation
+        {
+            get
+            {
+                bool isMotionServiceActivated;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.MotionActivation, 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.MotionActivation, 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 LocaleTimeformat24Hour
+        {
+            get
+            {
+                bool is24HrFormat;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.LocaleTimeformat24Hour, 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.LocaleTimeformat24Hour, 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 SoundLock
+        {
+            get
+            {
+                bool isSoundLockEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.SoundLock, 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 SoundSilentMode
+        {
+            get
+            {
+                bool isSilent;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.SoundSilentMode, 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 SoundTouch
+        {
+            get
+            {
+                bool isTouchSoundEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.SoundTouch, 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 DisplayScreenRotationAuto
+        {
+            get
+            {
+                bool isRotationAutomatic;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.DisplayScreenRotationAuto, 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 NetworkWifiNotification
+        {
+            get
+            {
+                bool isWifiNotificationEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.NetworkWifiNotification, 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 NetworkFlightMode
+        {
+            get
+            {
+                bool isFlightModeEnabled;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.NetworkFlightMode, 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.MotionActivation;
+            MotionActivationChangedEventArgs eventArgs = new MotionActivationChangedEventArgs(motionActivation);
+            s_motionActivationChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<MotionActivationChangedEventArgs> 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<MotionActivationChangedEventArgs> MotionActivationChanged
+        {
+            add
+            {
+                if (s_motionActivationChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.MotionActivation, 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.MotionActivation);
+                    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_defaultFontTypeChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string defaultFontType = SystemSettings.DefaultFontType;
+            DefaultFontTypeChangedEventArgs eventArgs = new DefaultFontTypeChangedEventArgs(defaultFontType);
+            s_defaultFontTypeChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<DefaultFontTypeChangedEventArgs> s_defaultFontTypeChanged;
+        /// <summary>
+        /// DefaultFontTypeChanged event is triggered when the current system default font type is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A DefaultFontTypeChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<DefaultFontTypeChangedEventArgs> DefaultFontTypeChanged
+        {
+            add
+            {
+                if (s_defaultFontTypeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.DefaultFontType, s_defaultFontTypeChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_defaultFontTypeChanged += value;
+            }
+
+            remove
+            {
+                s_defaultFontTypeChanged -= value;
+                if (s_defaultFontTypeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.DefaultFontType);
+                    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.LocaleTimeformat24Hour;
+            LocaleTimeformat24HourChangedEventArgs eventArgs = new LocaleTimeformat24HourChangedEventArgs(localeTimeFormat24Hour);
+            s_localeTimeformat24HourChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<LocaleTimeformat24HourChangedEventArgs> 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<LocaleTimeformat24HourChangedEventArgs> LocaleTimeformat24HourChanged
+        {
+            add
+            {
+                if (s_localeTimeformat24HourChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.LocaleTimeformat24Hour, 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.LocaleTimeformat24Hour);
+                    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.SoundLock;
+            SoundLockChangedEventArgs eventArgs = new SoundLockChangedEventArgs(soundLock);
+            s_soundLockChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<SoundLockChangedEventArgs> 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<SoundLockChangedEventArgs> SoundLockChanged
+        {
+            add
+            {
+                if (s_soundLockChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.SoundLock, 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.SoundLock);
+                    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.SoundSilentMode;
+            SoundSilentModeChangedEventArgs eventArgs = new SoundSilentModeChangedEventArgs(soundSilentMode);
+            s_soundSilentModeChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<SoundSilentModeChangedEventArgs> 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<SoundSilentModeChangedEventArgs> SoundSilentModeChanged
+        {
+            add
+            {
+                if (s_soundSilentModeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.SoundSilentMode, 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.SoundSilentMode);
+                    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.SoundTouch;
+            SoundTouchChangedEventArgs eventArgs = new SoundTouchChangedEventArgs(soundTouch);
+            s_soundTouchChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<SoundTouchChangedEventArgs> 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<SoundTouchChangedEventArgs> SoundTouchChanged
+        {
+            add
+            {
+                if (s_soundTouchChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.SoundTouch, 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.SoundTouch);
+                    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.DisplayScreenRotationAuto;
+            DisplayScreenRotationAutoChangedEventArgs eventArgs = new DisplayScreenRotationAutoChangedEventArgs(displayScreenRotationAuto);
+            s_displayScreenRotationAutoChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<DisplayScreenRotationAutoChangedEventArgs> 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<DisplayScreenRotationAutoChangedEventArgs> DisplayScreenRotationAutoChanged
+        {
+            add
+            {
+                if (s_displayScreenRotationAutoChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.DisplayScreenRotationAuto, 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.DisplayScreenRotationAuto);
+                    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.NetworkWifiNotification;
+            NetworkWifiNotificationChangedEventArgs eventArgs = new NetworkWifiNotificationChangedEventArgs(networkWifiNotification);
+            s_networkWifiNotificationChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<NetworkWifiNotificationChangedEventArgs> 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<NetworkWifiNotificationChangedEventArgs> NetworkWifiNotificationChanged
+        {
+            add
+            {
+                if (s_networkWifiNotificationChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.NetworkWifiNotification, 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.NetworkWifiNotification);
+                    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.NetworkFlightMode;
+            NetworkFlightModeChangedEventArgs eventArgs = new NetworkFlightModeChangedEventArgs(networkFlightMode);
+            s_networkFlightModeChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<NetworkFlightModeChangedEventArgs> 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<NetworkFlightModeChangedEventArgs> NetworkFlightModeChanged
+        {
+            add
+            {
+                if (s_networkFlightModeChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.NetworkFlightMode, 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.NetworkFlightMode);
+                    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..9c15122
--- /dev/null
@@ -0,0 +1,171 @@
+
+namespace Tizen.System.SystemSettings
+{
+    /// <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>
+        MotionActivation,
+        /// <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>
+        LocaleTimeformat24Hour,
+        /// <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>
+        SoundLock,
+        /// <summary>
+        /// GET (bool) Indicates whether the device is in the silent mode.
+        /// </summary>
+        SoundSilentMode,
+        /// <summary>
+        /// GET (bool) Indicates whether the screen touch sound is enabled on the device.
+        /// </summary>
+        SoundTouch,
+        /// <summary>
+        /// GET (bool) Indicates whether rotation control is automatic.
+        /// </summary>
+        DisplayScreenRotationAuto,
+        /// <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>
+        NetworkWifiNotification,
+        /// <summary>
+        /// GET (bool) Indicates whether the device is in the flight mode.
+        /// </summary>
+        NetworkFlightMode,
+        /// <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..6ac413f
--- /dev/null
@@ -0,0 +1,917 @@
+using System;
+
+namespace Tizen.System.SystemSettings
+{
+    /// <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 MotionActivationChangedEventArgs : EventArgs
+    {
+        private readonly bool _motionActivation;
+        /// <summary>
+        /// The enum for MotionActivation system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.MotionActivation;
+            }
+        }
+        internal MotionActivationChangedEventArgs(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 LocaleTimeformat24HourChangedEventArgs : EventArgs
+    {
+        private readonly bool _localeTimeformat24Hour;
+        /// <summary>
+        /// The enum for LocaleTimeformat24Hour system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.LocaleTimeformat24Hour;
+            }
+        }
+        internal LocaleTimeformat24HourChangedEventArgs(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 SoundLockChangedEventArgs : EventArgs
+    {
+        private readonly bool _soundLock;
+        /// <summary>
+        /// The enum for SoundLock system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.SoundLock;
+            }
+        }
+        internal SoundLockChangedEventArgs(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 SoundSilentModeChangedEventArgs : EventArgs
+    {
+        private readonly bool _soundSilentMode;
+        /// <summary>
+        /// The enum for SoundSilentMode system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.SoundSilentMode;
+            }
+        }
+        internal SoundSilentModeChangedEventArgs(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 SoundTouchChangedEventArgs : EventArgs
+    {
+        private readonly bool _soundTouch;
+        /// <summary>
+        /// The enum for SoundTouch system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.SoundTouch;
+            }
+        }
+        internal SoundTouchChangedEventArgs(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 DisplayScreenRotationAutoChangedEventArgs : EventArgs
+    {
+        private readonly bool _displayScreenRotationAuto;
+        /// <summary>
+        /// The enum for DisplayScreenRotationAuto system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.DisplayScreenRotationAuto;
+            }
+        }
+        internal DisplayScreenRotationAutoChangedEventArgs(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 NetworkWifiNotificationChangedEventArgs : EventArgs
+    {
+        private readonly bool _networkWifiNotification;
+        /// <summary>
+        /// The enum for NetworkWifiNotification system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.NetworkWifiNotification;
+            }
+        }
+        internal NetworkWifiNotificationChangedEventArgs(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 NetworkFlightModeChangedEventArgs : EventArgs
+    {
+        private readonly bool _networkFlightMode;
+        /// <summary>
+        /// The enum for NetworkFlightMode system setting key
+        /// </summary>
+        public SystemSettingsKeys Key
+        {
+            get
+            {
+                return SystemSettingsKeys.NetworkFlightMode;
+            }
+        }
+        internal NetworkFlightModeChangedEventArgs(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..ca502dc
--- /dev/null
@@ -0,0 +1,44 @@
+using System;
+
+namespace Tizen.System.SystemSettings
+{
+    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;
+        }
+    }
+}
diff --git a/src/Tizen.System.SystemSettings/Tizen.System.SystemSettings.csproj b/src/Tizen.System.SystemSettings/Tizen.System.SystemSettings.csproj
new file mode 100644 (file)
index 0000000..b66b16f
--- /dev/null
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{09D03C33-2FCE-4C18-BEC8-F585A865A4B4}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Tizen.System.SystemSettings</RootNamespace>
+    <AssemblyName>Tizen.System.SystemSettings</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>Tizen.System.SystemSettings.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Tizen">
+      <HintPath>..\..\..\Desktop\Tizen_dlls\Tizen.dll</HintPath>
+    </Reference>
+    <Reference Include="Tizen.Internals">
+      <HintPath>..\..\..\Desktop\Tizen_dlls\Tizen.Internals.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="SystemSettingsEventArgs.cs" />
+    <Compile Include="Interop\Interop.Settings.cs" />
+    <Compile Include="SystemSettings.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SystemSettingsEnums.cs" />
+    <Compile Include="SystemSettingsExceptionFactory.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="packaging\csapi-tizen.system.manifest" />
+    <None Include="packaging\csapi-tizen.system.pc.in" />
+    <None Include="packaging\csapi-tizen.system.spec" />
+    <None Include="Tizen.System.SystemSettings.snk" />
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/src/Tizen.System.SystemSettings/Tizen.System.SystemSettings.snk b/src/Tizen.System.SystemSettings/Tizen.System.SystemSettings.snk
new file mode 100644 (file)
index 0000000..a6e54d1
Binary files /dev/null and b/src/Tizen.System.SystemSettings/Tizen.System.SystemSettings.snk differ