Fix prevent issues
[apps/core/preloaded/settings.git] / setting-powersaving / src / setting-powersaving-brightness.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-brightness.h>
23
24 #define Left_Bright_Icon IMG_BRIGTHNESS_LEFT
25 #define Right_Bright_Icon IMG_BRIGHTNESS_RIGHT
26
27 static int setting_powersaving_brightness_create(void *cb);
28 static int setting_powersaving_brightness_destroy(void *cb);
29 static int setting_powersaving_brightness_update(void *cb);
30 static int setting_powersaving_brightness_cleanup(void *cb);
31
32 setting_view setting_view_powersaving_brightness = {
33         .create = setting_powersaving_brightness_create,
34         .destroy = setting_powersaving_brightness_destroy,
35         .update = setting_powersaving_brightness_update,
36         .cleanup = setting_powersaving_brightness_cleanup,
37 };
38
39 /* ***************************************************
40  *
41  *basic func
42  *
43  ***************************************************/
44
45 static int setting_powersaving_brightness_create(void *cb)
46 {
47         SETTING_TRACE_BEGIN;
48         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
49
50         SettingPowersavingUG *ad = (SettingPowersavingUG *) cb;
51
52         Evas_Object *navi_bar = ad->navi_bar;
53         Evas_Object *sub_layout = elm_layout_add(navi_bar);
54         elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME,
55                             "search_layout");
56
57         Evas_Object *genlist = elm_genlist_add(ad->win_main_layout);
58         elm_object_style_set(genlist, "dialogue");
59         retvm_if(genlist == NULL, SETTING_RETURN_FAIL,
60                  "Cannot set scroller object as contento of layout");
61         elm_genlist_clear(genlist);     /* first to clear list */
62
63         setting_push_layout_navi_bar(_(KeyStr_Brightness),
64                                      _("IDS_COM_BODY_BACK"), NULL, NULL,
65                                      setting_powersaving_brightness_click_softkey_cancel_cb,
66                                      NULL,
67                                      NULL, ad, sub_layout, navi_bar, NULL);;
68         elm_object_part_content_set(sub_layout, "search_list2", genlist);
69
70         int auto_value = 0;
71         int value = 10;
72
73         Elm_Object_Item *item = NULL;;
74
75         item =
76             elm_genlist_item_append(genlist, &itc_seperator, NULL, NULL,
77                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
78         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
79
80         // [control] AUTOMATIC - boolean - vconf
81         vconf_get_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_BRT_AUTO_STATUS, &auto_value);   //if failed, keep intial value
82         SETTING_TRACE("auto_value:%d", auto_value);
83
84         // [UI] AUTOMATIC - boolean
85         ad->data_br_auto =
86             setting_create_Gendial_field_def(genlist, &itc_1text_1icon,
87                                              setting_powersaving_brightness_mouse_up_Gendial_list_cb,
88                                              ad, SWALLOW_Type_1TOGGLE, NULL,
89                                              NULL, auto_value,
90                                              "IDS_COM_BODY_AUTOMATIC", NULL,
91                                              setting_powersaving_brightness_chk_btn_cb);
92         if (ad->data_br_auto) {
93                 __BACK_POINTER_SET(ad->data_br_auto);
94                 ad->data_br_auto->userdata = ad;
95         } else {
96                 SETTING_TRACE_ERROR("ad->data_br_auto is NULL");
97         }
98
99         /* check manual */
100         vconf_get_int(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_BRT_VALUE, &value);       //if failed, keep intial value
101         SETTING_TRACE("auto_value:%d", value);
102         ad->data_br_sli =
103             setting_create_Gendial_field_def(genlist, &itc_1icon, NULL,
104                                              NULL, SWALLOW_Type_LAYOUT_SLIDER,
105                                              Left_Bright_Icon,
106                                              Right_Bright_Icon, value, NULL,
107                                              NULL,
108                                              setting_powersaving_birghtness_bright_slider_value_change_cb);
109
110         if (ad->data_br_sli) {
111                 __BACK_POINTER_SET(ad->data_br_sli);
112
113                 ad->data_br_sli->win_main = ad->win_main_layout;
114                 ad->data_br_sli->evas = ad->evas;
115                 ad->data_br_sli->isIndicatorVisible = true;
116                 ad->data_br_sli->slider_min = 1;
117                 ad->data_br_sli->slider_max = 100;
118                 ad->data_br_sli->userdata = ad;
119
120         } else {
121                 SETTING_TRACE_ERROR("ad->data_br_sli is NULL");
122         }
123
124         if (auto_value && ad->data_br_sli) {
125                 setting_disable_genlist_item(ad->data_br_sli->item);
126         }
127
128         setting_view_powersaving_brightness.is_create = 1;
129         return SETTING_RETURN_SUCCESS;
130 }
131
132 static int setting_powersaving_brightness_destroy(void *cb)
133 {
134         SETTING_TRACE_BEGIN;
135         /* error check */
136         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
137
138         SettingPowersavingUG *ad = (SettingPowersavingUG *) cb;
139         elm_naviframe_item_pop(ad->navi_bar);
140
141         setting_view_powersaving_brightness.is_create = 0;
142         return SETTING_RETURN_SUCCESS;
143 }
144
145 static int setting_powersaving_brightness_update(void *cb)
146 {
147         SETTING_TRACE_BEGIN;
148         return SETTING_RETURN_SUCCESS;
149
150 }
151
152 static int setting_powersaving_brightness_cleanup(void *cb)
153 {
154         SETTING_TRACE_BEGIN;
155         /* error check */
156         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
157         setting_powersaving_brightness_destroy(cb);
158
159         return SETTING_RETURN_SUCCESS;
160 }
161
162 /* ***************************************************
163  *
164  *general func
165  *
166  ***************************************************/
167
168 /* ***************************************************
169  *
170  *call back func
171  *
172  ***************************************************/
173
174 static void
175 setting_powersaving_brightness_click_softkey_cancel_cb(void *data,
176                                                        Evas_Object *obj,
177                                                        void *event_info)
178 {
179         SETTING_TRACE_BEGIN;
180         /* error check */
181         retm_if(data == NULL, "Data parameter is NULL");
182         SettingPowersavingUG *ad = (SettingPowersavingUG *) data;
183
184         setting_view_change(&setting_view_powersaving_brightness,
185                             &setting_view_powersaving_customed, ad);
186 }
187
188 static void
189 setting_powersaving_brightness_chk_btn_cb(void *data, Evas_Object *obj,
190                                           void *event_info)
191 {
192         SETTING_TRACE_BEGIN;
193         /* error check */
194         retm_if(data == NULL, "Data parameter is NULL");
195         Setting_GenGroupItem_Data *list_item =
196             (Setting_GenGroupItem_Data *) data;
197         SettingPowersavingUG *ad = list_item->userdata;
198         list_item->chk_status = elm_check_state_get(obj);/*  for genlist update status */
199
200         int err;
201         // enable /disable toggle button
202         if (list_item->chk_status) {
203                 setting_disable_genlist_item(ad->data_br_sli->item);
204         } else {
205                 setting_enable_genlist_item(ad->data_br_sli->item);
206         }
207
208         err = vconf_set_bool(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_BRT_AUTO_STATUS,
209                                 list_item->chk_status);
210
211         return;
212 }
213
214 /**
215  *[UI] 'Automatic' toggle
216  */
217 static void setting_powersaving_brightness_mouse_up_Gendial_list_cb(void *data,
218                                                                     Evas_Object
219                                                                  *obj,
220                                                                     void
221                                                                     *event_info)
222 {
223         /* error check */
224         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
225         retm_if(data == NULL, "Invalid argument: data is NULL");
226         SettingPowersavingUG *ad = data;
227
228         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
229         elm_genlist_item_selected_set(item, 0);
230         Setting_GenGroupItem_Data *list_item =
231             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
232
233         int old_status = elm_check_state_get(list_item->eo_check);
234         /* new status */
235         list_item->chk_status = !old_status;
236         elm_check_state_set(list_item->eo_check, list_item->chk_status);
237         int err;
238
239         if (0 == safeStrCmp("IDS_COM_BODY_AUTOMATIC", list_item->keyStr)) {
240                 err =
241                     vconf_set_bool
242                     (VCONFKEY_SETAPPL_PWRSV_CUSTMODE_BRT_AUTO_STATUS,
243                      list_item->chk_status);
244                 if (err < 0) {
245                         list_item->chk_status = !list_item->chk_status;
246                         elm_check_state_set(obj, list_item->chk_status);
247                         return;
248                 }
249
250                 if (list_item->chk_status) {
251                         setting_disable_genlist_item(ad->data_br_sli->item);
252                 } else {
253                         setting_enable_genlist_item(ad->data_br_sli->item);
254                 }
255         }
256 }
257
258 static void
259 setting_powersaving_birghtness_bright_slider_value_change_cb(void *data,
260                                                              Evas_Object *obj,
261                                                              void *event_info)
262 {
263         SETTING_TRACE_BEGIN;
264         retm_if(data == NULL, "Data parameter is NULL");
265         int value = 0;
266         SettingPowersavingUG *ad = NULL;
267         Setting_GenGroupItem_Data *list_item =
268             (Setting_GenGroupItem_Data *) data;
269         ad = list_item->userdata;
270
271         value = elm_check_state_get(ad->data_br_auto->eo_check);
272         if (value == 1) { /* it is automatic setting mode, */
273                 /* do nothing */
274                 return;
275         }
276
277         double val = elm_slider_value_get(obj);
278         value = (int)(val + 0.5);
279         SETTING_TRACE("value:%d", value);
280
281         int ret =
282             vconf_set_int(VCONFKEY_SETAPPL_PWRSV_CUSTMODE_BRT_VALUE, value);
283         if (ret < 0) //rollback
284         {
285                 elm_check_state_set(ad->data_br_auto->eo_check,
286                                     ad->data_br_sli->chk_status);
287                 return;
288         }
289         ad->data_br_sli->chk_status = value;
290 }