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