Added TimeChanged get value API and modified exception.
[platform/core/csapi/system-settings.git] / Tizen.System.SystemSettings / Tizen.System.SystemSettings / SystemSettings.cs
old mode 100644 (file)
new mode 100755 (executable)
index 232e063..b0ec8e8
@@ -38,7 +38,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get IncomingCallRingtone system setting.");
                 }
                 return filePath;
             }
@@ -63,7 +63,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get WallpaperHomeScreen system setting.");
                 }
                 return filePath;
             }
@@ -88,7 +88,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get WallpaperLockScreen system setting.");
                 }
                 return filePath;
             }
@@ -113,7 +113,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get FontSize system setting.");
                 }
                 return (SystemSettingsFontSize)fontSize;
             }
@@ -138,7 +138,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get FontType system setting.");
                 }
                 return fontType;
             }
@@ -163,7 +163,7 @@ namespace Tizen.System
                 SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.MotionActivationEnabled, out isMotionServiceActivated);
                 if (res != SystemSettingsError.None)
                 {
-                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get MotionActivation system setting value.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get MotionActivation system setting.");
                 }
                 return isMotionServiceActivated;
             }
@@ -188,7 +188,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get EmailAlertRingtone system setting.");
                 }
                 return filePath;
             }
@@ -202,7 +202,7 @@ namespace Tizen.System
             }
         }
         /// <summary>
-        /// Indicates whether the USB debugging is enabled (Since 2.4)
+        /// Indicates whether the USB debugging is enabled
         /// </summary>
         public static bool UsbDebuggingEnabled
         {
@@ -212,7 +212,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get UsbDebuggingEnabled system setting.");
                 }
                 return isusbDebuggingEnabled;
             }
@@ -227,7 +227,7 @@ namespace Tizen.System
         }
 
         /// <summary>
-        /// Indicates whether the 3G data network is enabled (Since 2.4)
+        /// Indicates whether the 3G data network is enabled
         /// </summary>
         public static bool Data3GNetworkEnabled
         {
@@ -237,7 +237,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get Data3GNetworkEnabled system setting.");
                 }
                 return is3GDataEnabled;
             }
@@ -262,7 +262,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get LockscreenApp system setting.");
                 }
                 return pkgName;
             }
@@ -287,7 +287,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get DefaultFontType system setting value.");
                 }
                 return defaultFontType;
             }
@@ -306,7 +306,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get LocaleCountry system setting.");
                 }
                 return countrySetting;
             }
@@ -333,7 +333,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get LocaleLanguage system setting.");
                 }
                 return languageSetting;
             }
@@ -359,7 +359,7 @@ namespace Tizen.System
                 SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.LocaleTimeFormat24HourEnabled, out is24HrFormat);
                 if (res != SystemSettingsError.None)
                 {
-                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get LocaleTimeFormat24Hour system setting value.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get LocaleTimeFormat24Hour system setting.");
                 }
                 return is24HrFormat;
             }
@@ -384,7 +384,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get LocaleTimeZone system setting.");
                 }
                 return timeZone;
             }
@@ -397,6 +397,23 @@ namespace Tizen.System
                 }
             }
         }
+
+        /// <summary>
+        /// Once System changes time, this event occurs to notify time change.
+        /// </summary>
+        public static int Time
+        {
+            get
+            {
+                int time;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueInt(SystemSettingsKeys.Time, out time);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get Time system setting.");
+                }
+                return time;
+            }
+        }
         /// <summary>
         /// Indicates whether the screen lock sound is enabled on the device. ex) LCD on/off sound
         /// </summary>
@@ -408,7 +425,7 @@ namespace Tizen.System
                 SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.SoundLockEnabled, out isSoundLockEnabled);
                 if (res != SystemSettingsError.None)
                 {
-                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get SoundLock system setting value.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get SoundLock system setting.");
                 }
                 return isSoundLockEnabled;
             }
@@ -425,7 +442,7 @@ namespace Tizen.System
                 SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.SoundSilentModeEnabled, out isSilent);
                 if (res != SystemSettingsError.None)
                 {
-                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get SoundSilentMode system setting value.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get SoundSilentMode system setting.");
                 }
                 return isSilent;
             }
@@ -442,7 +459,7 @@ namespace Tizen.System
                 SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.SoundTouchEnabled, out isTouchSoundEnabled);
                 if (res != SystemSettingsError.None)
                 {
-                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get SoundTouch system setting value.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get SoundTouch system setting value.");
                 }
                 return isTouchSoundEnabled;
             }
@@ -459,7 +476,7 @@ namespace Tizen.System
                 SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.DisplayScreenRotationAutoEnabled, out isRotationAutomatic);
                 if (res != SystemSettingsError.None)
                 {
-                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get DisplayScreenRotationAuto system setting value.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get DisplayScreenRotationAuto system setting.");
                 }
                 return isRotationAutomatic;
             }
@@ -476,7 +493,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get DeviceName system setting value.");
                 }
                 return deviceName;
             }
@@ -492,7 +509,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get MotionEnabled system setting value.");
                 }
                 return isMotionEnabled;
             }
@@ -509,7 +526,7 @@ namespace Tizen.System
                 SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.NetworkWifiNotificationEnabled, out isWifiNotificationEnabled);
                 if (res != SystemSettingsError.None)
                 {
-                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get NetworkWifiNotification system setting value.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get NetworkWifiNotification system setting.");
                 }
                 return isWifiNotificationEnabled;
             }
@@ -526,7 +543,7 @@ namespace Tizen.System
                 SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueBool(SystemSettingsKeys.NetworkFlightModeEnabled, out isFlightModeEnabled);
                 if (res != SystemSettingsError.None)
                 {
-                    Log.Warn(SystemSettingsExceptionFactory.LogTag, "unable to get NetworkFlightMode system setting value.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get NetworkFlightMode system setting.");
                 }
                 return isFlightModeEnabled;
             }
@@ -543,7 +560,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get ScreenBacklightTime system setting.");
                 }
                 return backlightTime;
             }
@@ -568,7 +585,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get SoundNotification system setting.");
                 }
                 return filePath;
             }
@@ -593,7 +610,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get SoundNotificationRepetitionPeriod system setting.");
                 }
                 return notificationRepetitionPeriod;
             }
@@ -618,7 +635,7 @@ namespace Tizen.System
                 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.");
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get LockState system setting.");
                 }
                 return (SystemSettingsIdleLockState)LockState;
             }
@@ -632,6 +649,51 @@ namespace Tizen.System
             }
         }
 
+        /// <summary>
+        /// The current system ADS ID
+        /// </summary>
+        public static string AdsId
+        {
+            get
+            {
+                string adsId;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueString(SystemSettingsKeys.AdsId, out adsId);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get AdsId system setting.");
+                }
+                return adsId;
+            }
+            set
+            {
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsSetValueString(SystemSettingsKeys.AdsId, value);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to set AdsId system setting.");
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// Indicates the time period for notification repetitions.
+        /// </summary>
+        public static SystemSettingsUdsState UltraDataSave
+        {
+            get
+            {
+                int UltraDataSave;
+                SystemSettingsError res = (SystemSettingsError)Interop.Settings.SystemSettingsGetValueInt(SystemSettingsKeys.UltraDataSave, out UltraDataSave);
+                if (res != SystemSettingsError.None)
+                {
+                    throw SystemSettingsExceptionFactory.CreateException(res, "unable to get UltraDataSave system setting.");
+                }
+                return (SystemSettingsUdsState)UltraDataSave;
+            }
+        }
+
+
+
         private static readonly Interop.Settings.SystemSettingsChangedCallback s_incomingCallRingtoneChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
         {
             string path = SystemSettings.IncomingCallRingtone;
@@ -1208,8 +1270,9 @@ namespace Tizen.System
 
         private static readonly Interop.Settings.SystemSettingsChangedCallback s_timeChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
         {
-            //bool motionActivation = SystemSettings.Time;
-            TimeChangedEventArgs eventArgs = new TimeChangedEventArgs();
+            
+            int time = SystemSettings.Time;
+            TimeChangedEventArgs eventArgs = new TimeChangedEventArgs(time);
             s_timeChanged?.Invoke(null, eventArgs);
         };
         private static event EventHandler<TimeChangedEventArgs> s_timeChanged;
@@ -1738,6 +1801,129 @@ namespace Tizen.System
                 }
             }
         }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_adsIdChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string adsId = SystemSettings.AdsId;
+            AdsIdChangedEventArgs eventArgs = new AdsIdChangedEventArgs(adsId);
+            s_adsIdChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<AdsIdChangedEventArgs> s_adsIdChanged;
+        /// <summary>
+        /// AdsIdChanged event is triggered when the current ADS ID state is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A AdsIdChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<AdsIdChangedEventArgs> AdsIdChanged
+        {
+            add
+            {
+                if (s_adsIdChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.AdsId, s_adsIdChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_adsIdChanged += value;
+            }
+
+            remove
+            {
+                s_adsIdChanged -= value;
+                if (s_adsIdChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.AdsId);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_ultraDataSaveChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            SystemSettingsUdsState ultraDataSave = SystemSettings.UltraDataSave;
+            UltraDataSaveChangedEventArgs eventArgs = new UltraDataSaveChangedEventArgs(ultraDataSave);
+            s_ultraDataSaveChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<UltraDataSaveChangedEventArgs> s_ultraDataSaveChanged;
+        /// <summary>
+        /// UltraDataSaveChanged event is triggered when the current Ultra Data Save state is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A UltraDataSaveChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<UltraDataSaveChangedEventArgs> UltraDataSaveChanged
+        {
+            add
+            {
+                if (s_ultraDataSaveChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.UltraDataSave, s_ultraDataSaveChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_ultraDataSaveChanged += value;
+            }
+
+            remove
+            {
+                s_ultraDataSaveChanged -= value;
+                if (s_ultraDataSaveChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.UltraDataSave);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
+
+        private static readonly Interop.Settings.SystemSettingsChangedCallback s_ultraDataSavePackageListChangedCallback = (SystemSettingsKeys key, IntPtr userData) =>
+        {
+            string ultraDataSavePackageList = "None";
+            UltraDataSavePackageListChangedEventArgs eventArgs = new UltraDataSavePackageListChangedEventArgs(ultraDataSavePackageList);
+            s_ultraDataSavePackageListChanged?.Invoke(null, eventArgs);
+        };
+        private static event EventHandler<UltraDataSavePackageListChangedEventArgs> s_ultraDataSavePackageListChanged;
+        /// <summary>
+        /// UltraDataSavePackageListChanged event is triggered when the current ADS ID state is changed
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e">A UltraDataSavePackageListChangedEventArgs object that contains the key & changed value</param>
+        public static event EventHandler<UltraDataSavePackageListChangedEventArgs> UltraDataSavePackageListChanged
+        {
+            add
+            {
+                if (s_ultraDataSavePackageListChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsSetCallback(SystemSettingsKeys.UltraDataSavePackageList, s_ultraDataSavePackageListChangedCallback, IntPtr.Zero);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+                s_ultraDataSavePackageListChanged += value;
+            }
+
+            remove
+            {
+                s_ultraDataSavePackageListChanged -= value;
+                if (s_ultraDataSavePackageListChanged == null)
+                {
+                    SystemSettingsError ret = (SystemSettingsError)Interop.Settings.SystemSettingsRemoveCallback(SystemSettingsKeys.UltraDataSavePackageList);
+                    if (ret != SystemSettingsError.None)
+                    {
+                        throw SystemSettingsExceptionFactory.CreateException(ret, "Error in callback handling");
+                    }
+                }
+            }
+        }
     }
 }