new release for RSA
[apps/core/preloaded/settings.git] / setting-powersaving / src / setting-powersaving-main.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <setting-powersaving-main.h>
23 //#include <Ecore_X.h>
24 #include <devman.h>
25
26 static int setting_powersaving_main_create(void *cb);
27 static int setting_powersaving_main_destroy(void *cb);
28 static int setting_powersaving_main_update(void *cb);
29 static int setting_powersaving_main_cleanup(void *cb);
30 static void setting_powersaving_view_disable(void *data, bool disable);
31
32 setting_view setting_view_powersaving_main = {
33         .create = setting_powersaving_main_create,
34         .destroy = setting_powersaving_main_destroy,
35         .update = setting_powersaving_main_update,
36         .cleanup = setting_powersaving_main_cleanup,
37 };
38
39 static void __setting_powersaving_main_vconf_change_cb(keynode_t *key, void *data)
40 {
41         SETTING_TRACE_BEGIN;
42         setting_retm_if(NULL == key, "key is NULL");
43         setting_retm_if(NULL == data, "data is NULL");
44         SettingPowersavingUG *ad = (SettingPowersavingUG *)data;
45
46         int status = vconf_keynode_get_bool(key);
47         char *vconf_name = vconf_keynode_get_name(key);
48
49         if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS)) {
50                 SETTING_TRACE("status:%d", status);
51                 setting_powersaving_view_disable(ad, !status);
52                 ad->data_powersaving_active->chk_status = status;
53                 elm_check_state_set(ad->data_powersaving_active->eo_check, ad->data_powersaving_active->chk_status);
54                 int ret = 0;
55                 if (status) {//powersaving is on
56                         int pwrsv_vib = 0;
57                         ret = vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_SCREEN_VIB, &pwrsv_vib);
58                         setting_retm_if(ret != 0, "get vconf failed");
59                         if (pwrsv_vib){
60                                 //touch feedback virbration
61                                 int value = 0;
62                                 ret = vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &value);
63                                 setting_retm_if(ret != 0, "get vconf failed");
64                                 ret = vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, value);//backup
65                                 setting_retm_if(ret != 0, "set vconf failed");
66                                 ret = vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, 0);
67                                 setting_retm_if(ret != 0, "set vconf failed");
68                         }
69                 } else {//powersaving is off
70                         //touch feedback virbration
71                         int value = 0;
72                         ret = vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, &value);
73                         setting_retm_if(ret != 0, "get vconf failed");
74                         ret = vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
75                         setting_retm_if(ret != 0, "set vconf failed");
76                 }
77
78         } else {
79                 SETTING_TRACE_ERROR("vconf_name is wrong");
80         }
81 }
82
83
84 /* ***************************************************
85  *
86  *basic func
87  *
88  ***************************************************/
89 static int setting_powersaving_main_create(void *cb)
90 {
91         SETTING_TRACE_BEGIN;
92         /* error check */
93         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
94
95         SettingPowersavingUG *ad = (SettingPowersavingUG *) cb;
96         Evas_Object *scroller = NULL;
97
98         /* add basic layout */
99         ad->ly_main =
100             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
101                                                    ad->win_get,
102                                                    _(KeyStr_Powersaving),
103                                                    _("IDS_COM_BODY_BACK"), NULL,
104                                                    setting_powersaving_main_click_softkey_back_cb,
105                                                    NULL, ad, &scroller,
106                                                    &(ad->navi_bar));
107         Elm_Object_Item *item = NULL;;
108         /*  add separator */
109         item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
110                                        ELM_GENLIST_ITEM_NONE, NULL, NULL);
111         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
112
113         /* Powersaving Mode Activation */
114         int ret;
115         int value = 1;
116         ret = vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS, &value);
117         if (0 != ret) {
118                 SETTING_TRACE_ERROR("Failed to get vconf value");
119         }
120         int active_value = value;
121
122         ad->data_powersaving_active = setting_create_Gendial_field_def(scroller,
123                                                                        &itc_1text_1icon,
124                                                                        setting_powersaving_main_mouse_up_Gendial_list_cb,
125                                                                        ad,
126                                                                        SWALLOW_Type_1TOGGLE,
127                                                                        NULL,
128                                                                        NULL,
129                                                                        value,
130                                                                        KeyStr_Powersaving_Mode,
131                                                                        NULL,
132                                                                        setting_powersaving_main_motion_active_chk_btn_cb);
133         if (ad->data_powersaving_active) {
134                 __BACK_POINTER_SET(ad->data_powersaving_active);
135                 ad->data_powersaving_active->userdata = ad;
136         } else {
137                 SETTING_TRACE_ERROR("ad->data_powersaving_active is NULL");
138         }
139 #if SUPPORT_UI0_4
140         (void)setting_create_Gendial_field_titleItem(scroller,
141                                                      &itc_group_item,
142                                                      KeyStr_PS_SETTINGS,
143                                                      NULL);
144         //A.
145         value = 0;
146         ret = vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_CPU, &value);
147         if (0 != ret) {
148                 SETTING_TRACE_ERROR("Failed to get vconf value");
149         }
150         ad->data_cpu_ps = setting_create_Gendial_field_def(scroller,
151                                                        &itc_1text_1icon,
152                                                        setting_powersaving_main_mouse_up_Gendial_list_cb,
153                                                        ad,
154                                                        SWALLOW_Type_1TOGGLE,
155                                                        NULL,
156                                                        NULL,
157                                                        value,
158                                                        KeyStr_CPU_PS,
159                                                        NULL,
160                                                        setting_powersaving_main_motion_active_chk_btn_cb);
161         if (ad->data_cpu_ps) {
162                 __BACK_POINTER_SET(ad->data_cpu_ps);
163                 ad->data_cpu_ps->userdata = ad;
164         }
165
166         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
167                                          ad,
168                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
169                                          NULL, NULL, 0,
170                                          KeyStr_CPU_PS_DSC, NULL,
171                                          NULL);
172         //B.
173         value = 0;
174         ret = vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_DISPLAY, &value);
175         if (0 != ret) {
176                 SETTING_TRACE_ERROR("Failed to get vconf value");
177         }
178         ad->data_display_ps = setting_create_Gendial_field_def(scroller,
179                                                        &itc_1text_1icon,
180                                                        setting_powersaving_main_mouse_up_Gendial_list_cb,
181                                                        ad,
182                                                        SWALLOW_Type_1TOGGLE,
183                                                        NULL,
184                                                        NULL,
185                                                        value,
186                                                        KeyStr_DISPLAY_PS,
187                                                        NULL,
188                                                        setting_powersaving_main_motion_active_chk_btn_cb);
189         if (ad->data_display_ps) {
190                 __BACK_POINTER_SET(ad->data_display_ps);
191                 ad->data_display_ps->userdata = ad;
192         }
193
194         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
195                                          ad,
196                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
197                                          NULL, NULL, 0,
198                                          KeyStr_DISPLAY_PS_DSC, NULL,
199                                          NULL);
200         //C.
201         value = 0;
202         ret = vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_BG_COLOR, &value);
203         if (0 != ret) {
204                 SETTING_TRACE_ERROR("Failed to get vconf value");
205         }
206         ad->data_bg_color = setting_create_Gendial_field_def(scroller,
207                                                        &itc_1text_1icon,
208                                                        setting_powersaving_main_mouse_up_Gendial_list_cb,
209                                                        ad,
210                                                        SWALLOW_Type_1TOGGLE,
211                                                        NULL,
212                                                        NULL,
213                                                        value,
214                                                        KeyStr_BG_COLOR,
215                                                        NULL,
216                                                        setting_powersaving_main_motion_active_chk_btn_cb);
217         if (ad->data_bg_color) {
218                 __BACK_POINTER_SET(ad->data_bg_color);
219                 ad->data_bg_color->userdata = ad;
220         }
221
222         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
223                                          ad,
224                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
225                                          NULL, NULL, 0,
226                                          KeyStr_BG_COLOR_DSC, NULL,
227                                          NULL);
228         //D.
229         value = 0;
230         ret = vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_SCREEN_VIB, &value);
231         if (0 != ret) {
232                 SETTING_TRACE_ERROR("Failed to get vconf value");
233         }
234         ad->data_screen_vib = setting_create_Gendial_field_def(scroller,
235                                                        &itc_1text_1icon,
236                                                        setting_powersaving_main_mouse_up_Gendial_list_cb,
237                                                        ad,
238                                                        SWALLOW_Type_1TOGGLE,
239                                                        NULL,
240                                                        NULL,
241                                                        value,
242                                                        KeyStr_SCREEN_VIB,
243                                                        NULL,
244                                                        setting_powersaving_main_motion_active_chk_btn_cb);
245         if (ad->data_screen_vib) {
246                 __BACK_POINTER_SET(ad->data_screen_vib);
247                 ad->data_screen_vib->userdata = ad;
248         }
249
250         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
251                                          ad,
252                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
253                                          NULL, NULL, 0,
254                                          KeyStr_SCREEN_VIB_DSC, NULL,
255                                          NULL);
256         /****Powersaving Tips*/
257         (void)setting_create_Gendial_field_titleItem(scroller,
258                                                      &itc_group_item,
259                                                      KeyStr_Powersaving_Tips,
260                                                      NULL);
261
262         /****Customed Setting*/
263         ad->data_powersaving_about =
264             setting_create_Gendial_field_def(scroller, &itc_1text,
265                                              setting_powersaving_main_mouse_up_Gendial_list_cb,
266                                              ad, SWALLOW_Type_INVALID, NULL,
267                                              NULL, 0, KeyStr_Powersaving_About,
268                                              NULL, NULL);
269         __BACK_POINTER_SET(ad->data_powersaving_about);
270
271         item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
272                                        ELM_GENLIST_ITEM_NONE, NULL, NULL);
273         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
274
275         setting_powersaving_view_disable(ad, !active_value);
276 #else
277 #if SUPPORT_UI0_3
278         /****Powersaving Mode description*/
279         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
280                                          ad, SWALLOW_Type_LAYOUT_SPECIALIZTION,
281                                          NULL, NULL, 0,
282                                          KeyStr_Powersaving_Mode_DSC, NULL,
283                                          NULL);
284         /****customed Setting Mode active*/
285         ret = vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_STATUS, &value);
286         if (0 != ret) {
287                 SETTING_TRACE_ERROR("Failed to get vconf value");
288         }
289         bool customed_flag = (bool) value;
290         ad->data_customed_active = setting_create_Gendial_field_def(scroller,
291                                                 &itc_1text_1icon,
292                                                 setting_powersaving_main_mouse_up_Gendial_list_cb,
293                                                 ad,
294                                                 SWALLOW_Type_1TOGGLE,
295                                                 NULL, NULL,
296                                                 value,
297                                                 KeyStr_Powersaving_Customed_Mode,
298                                                 NULL,
299                                                 setting_powersaving_main_motion_active_chk_btn_cb);
300         if (ad->data_customed_active) {
301                 __BACK_POINTER_SET(ad->data_customed_active);
302                 ad->data_customed_active->userdata = ad;
303         } else {
304                 SETTING_TRACE_ERROR("ad->data_powersaving_active is NULL");
305         }
306 #else
307         setting_enable_expandable_genlist(scroller, ad, setting_powersaving_ug_exp_cb,NULL);
308         char *str_value = get_pa_powersaving_at_str();
309         ad->data_saving_at =
310             setting_create_Gendial_exp_parent_field(scroller,
311                                                     &itc_2text_3_parent,
312                                                     NULL, NULL,
313                                                     SWALLOW_Type_INVALID,
314                                                     KeyStr_Powersaving_AT,
315                                                     str_value);
316
317         if (ad->data_saving_at) {
318                 ad->data_saving_at->int_slp_setting_binded =
319                     INT_SLP_SETTING_POWERSAVING_AT;
320         } else {
321                 SETTING_TRACE_ERROR("ad->data_back is NULL");
322         }
323         __BACK_POINTER_SET(ad->data_saving_at);
324         G_FREE(str_value);
325 #endif
326         /****Customed Setting*/
327         ad->data_customed_setting =
328             setting_create_Gendial_field_def(scroller, &itc_1text,
329                                              setting_powersaving_main_mouse_up_Gendial_list_cb,
330                                              ad, SWALLOW_Type_INVALID, NULL,
331                                              NULL, 0,
332                                              KeyStr_Powersaving_Customed, NULL,
333                                              NULL);
334         __BACK_POINTER_SET(ad->data_customed_setting);
335
336         /* Powersaving and battery level Description */
337         setting_create_Gendial_field_def(scroller, &itc_multiline_text, NULL,
338                                          ad,
339                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
340                                          NULL, NULL, 0,
341                                          KeyStr_Powersaving_Level_DSC, NULL,
342                                          NULL);
343
344         /****Powersaving Tips*/
345         (void)setting_create_Gendial_field_titleItem(scroller,
346                                                      &itc_group_item,
347                                                      KeyStr_Powersaving_Tips,
348                                                      NULL);
349
350         /****Customed Setting*/
351         ad->data_powersaving_about =
352             setting_create_Gendial_field_def(scroller, &itc_1text,
353                                              setting_powersaving_main_mouse_up_Gendial_list_cb,
354                                              ad, SWALLOW_Type_INVALID, NULL,
355                                              NULL, 0, KeyStr_Powersaving_About,
356                                              NULL, NULL);
357         __BACK_POINTER_SET(ad->data_powersaving_about);
358 #if SUPPORT_UI0_3
359         if (!customed_flag && ad->data_customed_setting) {
360                 setting_disable_genlist_item(ad->data_customed_setting->item);
361         }
362 #else
363         if (!active_value)
364         {
365                 if (ad->data_saving_at) {
366                         setting_disable_genlist_item(ad->data_saving_at->item);
367                 }
368
369                 if (ad->data_customed_setting) {
370                         setting_disable_genlist_item(ad->data_customed_setting->item);
371                 }
372         }
373 #endif
374 #endif
375
376         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS,
377                         __setting_powersaving_main_vconf_change_cb, ad);
378         if (ret != 0) {
379                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
380         }
381
382         setting_view_powersaving_main.is_create = 1;
383         return SETTING_RETURN_SUCCESS;
384 }
385
386
387 static int setting_powersaving_main_destroy(void *cb)
388 {
389         SETTING_TRACE_BEGIN;
390         /* error check */
391         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
392
393         SettingPowersavingUG *ad = (SettingPowersavingUG *) cb;
394
395         int ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS,
396                         __setting_powersaving_main_vconf_change_cb);
397         if (ret != 0) {
398                 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
399         }
400
401         if (ad->ly_main != NULL) {
402                 evas_object_del(ad->ly_main);
403                 setting_view_powersaving_main.is_create = 0;
404         }
405
406         return SETTING_RETURN_SUCCESS;
407 }
408
409 static int setting_powersaving_main_update(void *cb)
410 {
411         SETTING_TRACE_BEGIN;
412         /* error check */
413         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
414         return SETTING_RETURN_SUCCESS;
415 }
416
417 static int setting_powersaving_main_cleanup(void *cb)
418 {
419         SETTING_TRACE_BEGIN;
420         /* error check */
421         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
422         return SETTING_RETURN_SUCCESS;
423 }
424
425 /* ***************************************************
426  *
427  *general func
428  *
429  ***************************************************/
430
431 #define NEVER_SHOW_AGAIN "Never show again"
432 #define POWERSAVING_REMINDER "Battery life extended but performance restricted, brightness low. Tap Power saving tips for more details"
433
434 static void
435 __powersaving_on_resp_cb(void *data, Evas_Object *obj, void *event_info)
436 {
437         SETTING_TRACE_BEGIN;
438         setting_retm_if(NULL == data, "NULL == data");
439         int response_type = btn_type(obj);
440         SettingPowersavingUG *ad = (SettingPowersavingUG *) data;
441         if (POPUP_RESPONSE_OK == response_type) {       //need set vconf
442                 int err =
443                     vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS,
444                                    ad->data_powersaving_active->chk_status);
445                 if (0 != err) { //if set failed, need rollback
446                         SETTING_TRACE_ERROR("Set vconf Failed");
447                         if (ad->data_powersaving_active) {
448                                 ad->data_powersaving_active->chk_status =
449                                     !ad->data_powersaving_active->chk_status;
450                                 elm_check_state_set(ad->
451                                                     data_powersaving_active->
452                                                     eo_check,
453                                                     ad->
454                                                     data_powersaving_active->
455                                                     chk_status);
456                         }
457                         return;
458                 }
459                 if (ad->data_powersaving_active->chk_status) {//powersaving is on
460                         int pwrsv_vib = 0;
461                         vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_SCREEN_VIB, &pwrsv_vib);
462                         if (pwrsv_vib){
463                                 //touch feedback virbration
464                                 int value = 0;
465                                 vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &value);
466                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, value);//backup
467                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, 0);
468                         }
469                 } else {//powersaving is off
470                         //touch feedback virbration
471                         int value = 0;
472                         vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, &value);
473                         vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
474                 }
475
476                 if (ad->popup_chk && elm_check_state_get(ad->popup_chk)) {
477                         (void)
478                             vconf_set_bool
479                             (VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS_REMINDER,
480                              FALSE);
481                 }
482
483         } else if (POPUP_RESPONSE_CANCEL == response_type) {    //need rollback
484                 if (ad->data_powersaving_active) {
485                         ad->data_powersaving_active->chk_status =
486                             !ad->data_powersaving_active->chk_status;
487                         elm_check_state_set(ad->data_powersaving_active->
488                                             eo_check,
489                                             ad->data_powersaving_active->
490                                             chk_status);
491                         if (ad->data_saving_at) {
492                                 setting_disable_genlist_item(ad->data_saving_at->item);
493                         }
494                         if (ad->data_customed_setting) {
495                                 setting_disable_genlist_item(ad->data_customed_setting->item);
496                         }
497                         if (ad->data_cpu_ps) {
498                                 setting_disable_genlist_item(ad->data_cpu_ps->item);
499                         }
500                         if (ad->data_display_ps) {
501                                 setting_disable_genlist_item(ad->data_display_ps->item);
502                         }
503                         if (ad->data_bg_color) {
504                                 setting_disable_genlist_item(ad->data_bg_color->item);
505                         }
506                         if (ad->data_screen_vib) {
507                                 setting_disable_genlist_item(ad->data_screen_vib->item);
508                         }
509                 }
510         }
511
512         evas_object_del(ad->popup);
513         ad->popup = NULL;
514         ad->popup_chk = NULL;
515 }
516
517 static void
518 setting_powersaving_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
519                                                   void *event_info)
520 {
521         SETTING_TRACE_BEGIN;
522         /* error check */
523         setting_retm_if(data == NULL, "Data parameter is NULL");
524
525         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
526         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
527         elm_genlist_item_selected_set(item, 0);
528         Setting_GenGroupItem_Data *list_item =
529             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
530
531         SettingPowersavingUG *ad = (SettingPowersavingUG *) data;
532
533         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
534
535         if (!safeStrCmp(KeyStr_Powersaving_Mode, list_item->keyStr)) {
536                 list_item->chk_status =
537                     !elm_check_state_get(list_item->eo_check);
538                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
539
540                 setting_powersaving_view_disable(ad, !list_item->chk_status);
541
542                 int reminder_flag = TRUE;
543                 int ret =
544                     vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS_REMINDER,
545                                    &reminder_flag);
546                 if (0 != ret) {
547                         SETTING_TRACE_ERROR("Failed to get vconf value");
548                 }
549                 SETTING_TRACE("reminder_flag:%d", reminder_flag);
550                 if (list_item->chk_status && reminder_flag) {
551                         ad->popup =
552                             setting_create_popup_with_check(ad, ad->win_get,
553                                                             NULL,
554                                                             _(POWERSAVING_REMINDER),
555                                                             _(NEVER_SHOW_AGAIN),
556                                                             &(ad->popup_chk),
557                                                             __powersaving_on_resp_cb,
558                                                             0,
559                                                             2, _("IDS_COM_SK_OK"),
560                                                             _("IDS_COM_SK_CANCEL"));
561                         return;
562                 }
563                 ret =
564                     vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS, list_item->chk_status);
565                 if (0 != ret) { /* rollback */
566                         SETTING_TRACE_ERROR("Set vconf Failed");
567                         list_item->chk_status = !list_item->chk_status;
568                         elm_check_state_set(list_item->eo_check,
569                                             list_item->chk_status);
570                         return;
571                 }
572                 if (list_item->chk_status) {//powersaving is on
573                         int pwrsv_vib = 0;
574                         vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_SCREEN_VIB, &pwrsv_vib);
575                         if (pwrsv_vib){
576                                 //touch feedback virbration
577                                 int value = 0;
578                                 vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &value);
579                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, value);//backup
580                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, 0);
581                         }
582                 } else {//powersaving is off
583                         //touch feedback virbration
584                         int value = 0;
585                         vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, &value);
586                         vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
587                 }
588
589         }
590         else if (!safeStrCmp(KeyStr_Powersaving_Customed_Mode, list_item->keyStr)) {
591                 int old_status = elm_check_state_get(list_item->eo_check);
592                 int ret = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_STATUS, !old_status);
593                 setting_retm_if(0 != ret, "Failed to set vconf [%s]",
594                         VCONFKEY_SETAPPL_PWRSV_CUSTMODE_STATUS);
595                 /* new status */
596                 list_item->chk_status = !old_status;
597                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
598                 if (0 == list_item->chk_status) {
599                         //not active
600                         if (ad->data_customed_setting) {
601                                 setting_disable_genlist_item(ad->data_customed_setting->item);
602                                 }
603                 } else {
604                         //Powersavings actived
605                         if (ad->data_customed_setting) {
606                                 setting_enable_genlist_item(ad->data_customed_setting->item);
607                         }
608                 }
609         }
610         else if (!safeStrCmp(KeyStr_Powersaving_Customed, list_item->keyStr)) {
611                 setting_view_change(&setting_view_powersaving_main,
612                                     &setting_view_powersaving_customed, ad);
613         } else if (!safeStrCmp(KeyStr_Powersaving_About, list_item->keyStr)) {
614                 setting_view_change(&setting_view_powersaving_main,
615                                     &setting_view_powersaving_about, ad);
616         }
617         else if(!safeStrCmp(KeyStr_CPU_PS, list_item->keyStr))
618         {
619                 list_item->chk_status =
620                     !elm_check_state_get(list_item->eo_check);
621                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
622                 int err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_CPU, list_item->chk_status);
623                 if (0 != err) {
624                         /* rollback */
625                         SETTING_TRACE_ERROR("Set vconf Failed");
626                         list_item->chk_status = !list_item->chk_status;
627                         elm_check_state_set(obj, list_item->chk_status);
628                         return;
629                 }
630         }
631         else if(!safeStrCmp(KeyStr_DISPLAY_PS, list_item->keyStr))
632         {
633                 list_item->chk_status =
634                     !elm_check_state_get(list_item->eo_check);
635                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
636                 int err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_DISPLAY, list_item->chk_status);
637                 if (0 != err) {
638                         /* rollback */
639                         SETTING_TRACE_ERROR("Set vconf Failed");
640                         list_item->chk_status = !list_item->chk_status;
641                         elm_check_state_set(obj, list_item->chk_status);
642                         return;
643                 }
644         }
645         else if(!safeStrCmp(KeyStr_BG_COLOR, list_item->keyStr))
646         {
647                 list_item->chk_status =
648                     !elm_check_state_get(list_item->eo_check);
649                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
650                 int err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_BG_COLOR, list_item->chk_status);
651                 if (0 != err) {
652                         /* rollback */
653                         SETTING_TRACE_ERROR("Set vconf Failed");
654                         list_item->chk_status = !list_item->chk_status;
655                         elm_check_state_set(obj, list_item->chk_status);
656                         return;
657                 }
658         }
659         else if(!safeStrCmp(KeyStr_SCREEN_VIB, list_item->keyStr))
660         {
661                 list_item->chk_status =
662                     !elm_check_state_get(list_item->eo_check);
663                 elm_check_state_set(list_item->eo_check, list_item->chk_status);
664                 int err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_SCREEN_VIB, list_item->chk_status);
665                 if (0 != err) {
666                         /* rollback */
667                         SETTING_TRACE_ERROR("Set vconf Failed");
668                         list_item->chk_status = !list_item->chk_status;
669                         elm_check_state_set(obj, list_item->chk_status);
670                         return;
671                 }
672
673                 //take it into effect
674                 int value = 0;
675                 if (list_item->chk_status){
676                         //touch feedback virbration
677                         vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &value);
678                         vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, value);//backup
679                         vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, 0);
680                 } else {
681                         //touch feedback virbration
682                         vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, &value);
683                         vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
684                 }
685         }
686 }
687
688 static void
689 setting_powersaving_main_click_softkey_back_cb(void *data, Evas_Object *obj,
690                                                void *event_info)
691 {
692         SETTING_TRACE_BEGIN;
693         /* error check */
694         setting_retm_if(data == NULL,
695                         "[Setting > Powersaving] Data parameter is NULL");
696
697         SettingPowersavingUG *ad = (SettingPowersavingUG *) data;
698
699         /* Send destroy request */
700         ug_destroy_me(ad->ug);
701         SETTING_TRACE_END;
702
703 }
704
705 static void
706 setting_powersaving_main_motion_active_chk_btn_cb(void *data, Evas_Object *obj,
707                                                   void *event_info)
708 {
709         SETTING_TRACE_BEGIN;
710         /* error check */
711         retm_if(data == NULL, "Data parameter is NULL");
712         Setting_GenGroupItem_Data *list_item =
713             (Setting_GenGroupItem_Data *) data;
714         SettingPowersavingUG *ad = list_item->userdata;
715         list_item->chk_status = elm_check_state_get(obj);       /*  for genlist update status */
716         if (!safeStrCmp(KeyStr_Powersaving_Mode, list_item->keyStr)) {
717                 setting_powersaving_view_disable(ad, !list_item->chk_status);
718                 int reminder_flag = TRUE;
719                 int ret =
720                     vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS_REMINDER,
721                                    &reminder_flag);
722                 if (0 != ret) {
723                         SETTING_TRACE_ERROR("Failed to get vconf value");
724                 }
725                 SETTING_TRACE("reminder_flag:%d", reminder_flag);
726                 if (list_item->chk_status && reminder_flag) {
727                         ad->popup =
728                             setting_create_popup_with_check(ad, ad->win_get,
729                                                             NULL,
730                                                             _(POWERSAVING_REMINDER),
731                                                             _(NEVER_SHOW_AGAIN),
732                                                             &(ad->popup_chk),
733                                                             __powersaving_on_resp_cb,
734                                                             0,
735                                                             2, _("IDS_COM_SK_OK"),
736                                                             _("IDS_COM_SK_CANCEL"));
737                         return;
738                 }
739
740                 ret =
741                     vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_SYSMODE_STATUS,
742                                    list_item->chk_status);
743                 if (0 != ret) { /* rollback */
744                         SETTING_TRACE_ERROR("Set vconf Failed");
745                         list_item->chk_status = !list_item->chk_status;
746                         elm_check_state_set(obj, list_item->chk_status);
747                         return;
748                 }
749                 if (list_item->chk_status) {//powersaving is on
750                         int pwrsv_vib = 0;
751                         vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_SCREEN_VIB, &pwrsv_vib);
752                         if (pwrsv_vib){
753                                 //touch feedback virbration
754                                 int value = 0;
755                                 vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &value);
756                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, value);//backup
757                                 vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, 0);
758                         }
759                 } else {//powersaving is off
760                         //touch feedback virbration
761                         int value = 0;
762                         vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, &value);
763                         vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
764                 }
765         }
766         else if(!safeStrCmp(KeyStr_Powersaving_Customed_Mode, list_item->keyStr))
767         {
768                 int err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_STATUS,
769                         list_item->chk_status);
770                 if (0 != err) {
771                         /* rollback */
772                         SETTING_TRACE_ERROR("Set vconf Failed");
773                         list_item->chk_status = !list_item->chk_status;
774                         elm_check_state_set(obj, list_item->chk_status);
775                         return;
776                 }
777                 if (0 == list_item->chk_status) {
778                         //not active
779                         if (ad->data_customed_setting)
780                         {
781                                 setting_disable_genlist_item(ad->data_customed_setting->item);
782                         }
783                 } else {
784                         //Powersavings actived
785                         if (ad->data_customed_setting) {
786                                 setting_enable_genlist_item(ad->data_customed_setting->item);
787                         }
788                 }
789         }
790         else if(!safeStrCmp(KeyStr_CPU_PS, list_item->keyStr))
791         {
792                 int err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_CPU, list_item->chk_status);
793                 if (0 != err) {
794                         /* rollback */
795                         SETTING_TRACE_ERROR("Set vconf Failed");
796                         list_item->chk_status = !list_item->chk_status;
797                         elm_check_state_set(obj, list_item->chk_status);
798                         return;
799                 }
800         }
801         else if(!safeStrCmp(KeyStr_DISPLAY_PS, list_item->keyStr))
802         {
803                 int err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_DISPLAY, list_item->chk_status);
804                 if (0 != err) {
805                         /* rollback */
806                         SETTING_TRACE_ERROR("Set vconf Failed");
807                         list_item->chk_status = !list_item->chk_status;
808                         elm_check_state_set(obj, list_item->chk_status);
809                         return;
810                 }
811         }
812         else if(!safeStrCmp(KeyStr_BG_COLOR, list_item->keyStr))
813         {
814                 int err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_BG_COLOR, list_item->chk_status);
815                 if (0 != err) {
816                         /* rollback */
817                         SETTING_TRACE_ERROR("Set vconf Failed");
818                         list_item->chk_status = !list_item->chk_status;
819                         elm_check_state_set(obj, list_item->chk_status);
820                         return;
821                 }
822                 if (list_item->chk_status)
823                 {
824                         //device_set_acl_control_status(DEV_MAIN_DISPLAY, 1);//it doen't work
825                         #if 0 //it doen't work
826                         int cmd = (DISPLAY_PROP_ACL_CONTROL | (DEV_DISPLAY_0 << 4));
827                         device_set_property(DEVTYPE_DISPLAY0, cmd, 2);
828                         cmd = (DISPLAY_PROP_ACL_CONTROL | (DEV_DISPLAY_1 << 4));
829                         device_set_property(DEVTYPE_DISPLAY0, cmd, 2);
830                         #endif
831                 }
832         }
833         else if(!safeStrCmp(KeyStr_SCREEN_VIB, list_item->keyStr))
834         {
835                 int err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_SCREEN_VIB, list_item->chk_status);
836                 if (0 != err) {
837                         /* rollback */
838                         SETTING_TRACE_ERROR("Set vconf Failed");
839                         list_item->chk_status = !list_item->chk_status;
840                         elm_check_state_set(obj, list_item->chk_status);
841                         return;
842                 }
843
844                 //take it into effect
845                 int value = 0;
846                 if (list_item->chk_status){
847                         //touch feedback virbration
848                         vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, &value);
849                         vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, value);//backup
850                         vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, 0);
851                 } else {
852                         //touch feedback virbration
853                         vconf_get_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_BAK_INT, &value);
854                         vconf_set_int(VCONFKEY_SETAPPL_TOUCH_FEEDBACK_VIBRATION_LEVEL_INT, value);
855                 }
856         }
857
858
859         return;
860 }
861 static void setting_powersaving_view_disable(void *data, bool disable)
862 {
863         SETTING_TRACE_BEGIN;
864         /* error check */
865         ret_if(data == NULL);
866         SettingPowersavingUG *ad = (SettingPowersavingUG *) data;
867         if (disable)
868         {
869                 if (ad->data_cpu_ps) setting_disable_genlist_item(ad->data_cpu_ps->item);
870                 if (ad->data_display_ps) setting_disable_genlist_item(ad->data_display_ps->item);
871                 if (ad->data_bg_color) setting_disable_genlist_item(ad->data_bg_color->item);
872                 if (ad->data_screen_vib) setting_disable_genlist_item(ad->data_screen_vib->item);
873         }
874         else
875         {
876                 if (ad->data_cpu_ps) setting_enable_genlist_item(ad->data_cpu_ps->item);
877                 if (ad->data_display_ps) setting_enable_genlist_item(ad->data_display_ps->item);
878                 if (ad->data_bg_color) setting_enable_genlist_item(ad->data_bg_color->item);
879                 if (ad->data_screen_vib) setting_enable_genlist_item(ad->data_screen_vib->item);
880         }
881 }
882