for (; dnd_found_list != NULL; dnd_found_list = dnd_found_list->next) {
dnd_id_data = dnd_found_list->data;
- if (alarm_id == dnd_id_data->dnd_start_id) {
+ uid = dnd_id_data->uid;
+
+ ret = noti_system_setting_get_do_not_disturb(&do_not_disturb, uid);
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ ErrPrint("get do not disturb failed");
+ return ret;
+ }
+
+ if (alarm_id == dnd_id_data->dnd_start_id && !do_not_disturb) {
do_not_disturb = 1;
dnd_id_found = true;
- uid = dnd_id_data->uid;
break;
- } else if (alarm_id == dnd_id_data->dnd_end_id) {
+ } else if (alarm_id == dnd_id_data->dnd_end_id && do_not_disturb) {
do_not_disturb = 0;
dnd_id_found = true;
- uid = dnd_id_data->uid;
break;
}
}
monitoring_list = (GList *)g_hash_table_lookup(_monitoring_hash, GUINT_TO_POINTER(uid));
ret = send_notify(body, "change_dnd_notify", monitoring_list, PROVIDER_NOTI_INTERFACE_NAME);
g_variant_unref(body);
-
if (ret != NOTIFICATION_ERROR_NONE) {
ErrPrint("failed to send notify:%d\n", ret);
return ret;
_dnd_alarm_id_list = g_list_append(_dnd_alarm_id_list, dnd_id_data);
} else {
found_list = g_list_find_custom(_dnd_alarm_id_list, GUINT_TO_POINTER(uid),
- _dnd_data_compare);
+ (GCompareFunc)_dnd_data_compare);
if (found_list) {
dnd_id_data = g_list_nth_data(found_list, 0);
if (dnd_id_data->dnd_start_id) {
return ret;
}
+static void _delete_alarm(uid_t uid)
+{
+ GList *found_list = NULL;
+ dnd_alarm_id_s *dnd_id_data = NULL;
+
+ if (_dnd_alarm_id_list == NULL)
+ return;
+
+ _dnd_alarm_id_list = g_list_first(_dnd_alarm_id_list);
+ found_list = g_list_find_custom(_dnd_alarm_id_list, GUINT_TO_POINTER(uid),
+ (GCompareFunc)_dnd_data_compare);
+
+ if (found_list == NULL)
+ return;
+
+ dnd_id_data = g_list_nth_data(found_list, 0);
+
+ if (dnd_id_data->dnd_start_id)
+ alarmmgr_remove_alarm(dnd_id_data->dnd_start_id);
+ if (dnd_id_data->dnd_end_id)
+ alarmmgr_remove_alarm(dnd_id_data->dnd_end_id);
+
+ _dnd_alarm_id_list = g_list_remove(g_list_first(_dnd_alarm_id_list), dnd_id_data);
+ free(dnd_id_data);
+}
+
/* update_noti_sys_setting */
int notification_update_noti_sys_setting(GVariant *parameters, GVariant **reply_body, uid_t uid)
{
int ret;
+ int pre_do_not_disturb = 0;
int do_not_disturb = 0;
int visivility_class = 0;
int dnd_schedule_enabled = 0;
int dnd_end_min = 0;
int lock_screen_level = 0;
uid_t param_uid;
+ GVariant *body = NULL;
+ GList *monitoring_list = NULL;
g_variant_get(parameters, "(iiiiiiiiii)",
&do_not_disturb,
ret = _validate_and_set_param_uid_with_uid(uid, ¶m_uid);
if (ret != NOTIFICATION_ERROR_NONE)
return ret;
+
DbgPrint("do_not_disturb [%d] visivility_class [%d] set_schedule [%d] lock_screen_level [%d]\n",
do_not_disturb, visivility_class, dnd_schedule_enabled, lock_screen_level);
+ ret = noti_system_setting_get_do_not_disturb(&pre_do_not_disturb, param_uid);
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ ErrPrint("failed to get do not disturb");
+ return ret;
+ }
+
ret = notification_setting_db_update_system_setting(do_not_disturb,
visivility_class,
dnd_schedule_enabled,
return ret;
}
+ if (pre_do_not_disturb != do_not_disturb) {
+ body = g_variant_new("(ii)", do_not_disturb, param_uid);
+ monitoring_list = (GList *)g_hash_table_lookup(_monitoring_hash, GUINT_TO_POINTER(uid));
+ ret = send_notify(body, "change_dnd_notify", monitoring_list, PROVIDER_NOTI_INTERFACE_NAME);
+ g_variant_unref(body);
+ }
+
*reply_body = g_variant_new("()");
if (*reply_body == NULL) {
ErrPrint("cannot make reply_body");
dnd_end_hour, dnd_end_min, param_uid);
if (ret != NOTIFICATION_ERROR_NONE)
ErrPrint("failed to add alarm for dnd_schedule");
+ } else {
+ _delete_alarm(param_uid);
}
DbgPrint("_update_noti_sys_setting_service done !! %d", ret);