4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <setting-display-brightness.h>
24 #define Left_Bright_Icon IMG_BRIGTHNESS_LEFT
25 #define Right_Bright_Icon IMG_BRIGHTNESS_RIGHT
26 #define SUPPORT_DISPLAY_HOMESCREEN_IMAGE 0
28 static int setting_display_brightness_create(void *cb);
29 static int setting_display_brightness_destroy(void *cb);
30 static int setting_display_brightness_update(void *cb);
31 static int setting_display_brightness_cleanup(void *cb);
33 static void setting_display_set_slider_value(void* data, Evas_Object *obj, double value);
35 setting_view setting_view_display_brightness = {
36 .create = setting_display_brightness_create,
37 .destroy = setting_display_brightness_destroy,
38 .update = setting_display_brightness_update,
39 .cleanup = setting_display_brightness_cleanup,
42 static void __toggle_automatic_chk(void* data, int chk_status);
44 /* ***************************************************
48 ***************************************************/
50 static Eina_Bool setting_display_brightness_on_idle(void *data)
53 SettingDisplayUG *ad = (SettingDisplayUG *) data;
55 setting_get_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS,
58 __toggle_automatic_chk(ad, auto_value);
64 static void setting_display_brightness_lowbat_cb(keynode_t *key, void* data)
66 // SETTING_TRACE_BEGIN;
68 SettingDisplayUG *ad = (SettingDisplayUG *) data;
71 char* vconf_key = vconf_keynode_get_name(key);
72 SETTING_TRACE("the value of [ %s ] just changed", vconf_key);
73 // VCONFKEY_SYSMAN_BATTERY_STATUS_LOW
76 vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &battery_value);
77 ad->low_bat = battery_value;
79 int automatic_val, err;
80 setting_get_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, &automatic_val, &err);
82 if (battery_value < VCONFKEY_SYSMAN_BAT_WARNING_LOW)
85 if (ad->data_br_sli) {
86 setting_disable_genlist_item(ad->data_br_sli->item);
87 setting_disable_genlist_item(ad->data_br_auto->item);
90 if (ad->data_br_sli) {
91 if (automatic_val == SETTING_BRIGHTNESS_AUTOMATIC_OFF) // not automatic
93 setting_enable_genlist_item(ad->data_br_auto->item);
94 setting_enable_genlist_item(ad->data_br_sli->item);
96 setting_enable_genlist_item(ad->data_br_auto->item);
97 //setting_enable_genlist_item(ad->data_br_sli->item);
104 static int setting_display_brightness_create(void *cb)
107 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
109 SettingDisplayUG *ad = (SettingDisplayUG *) cb;
111 Evas_Object *sub_layout = elm_layout_add(ad->win_main_layout);
112 elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "search_layout");
113 #if SUPPORT_DISPLAY_HOMESCREEN_IMAGE
114 Evas_Object *bg_image =
115 create_bgimage_box_add(NULL, ad->win_main_layout, ad->evas,
117 -1, -1, /* load the image as it's own size */
120 elm_layout_content_set(sub_layout, "bg_swallow", bg_image);
124 Evas_Object *genlist = elm_genlist_add(ad->win_main_layout);
125 elm_object_style_set(genlist, "dialogue");
126 retvm_if(genlist == NULL, SETTING_RETURN_FAIL, "Cannot set scroller object as contento of layout");
127 elm_genlist_clear(genlist); /* first to clear list */
130 /* add basic layout */
131 if (&setting_view_display_brightness == ad->view_to_load) {
133 setting_create_layout_navi_bar(ad->win_main_layout,
135 _(KeyStr_Brightness),
136 _("IDS_COM_BODY_BACK"),
138 setting_display_brightness_click_softkey_cancel_cb,
141 &ad->navi_bar, NULL);
143 setting_push_layout_navi_bar(_(KeyStr_Brightness),
144 _("IDS_COM_BODY_BACK"), NULL, NULL,
145 setting_display_brightness_click_softkey_cancel_cb,
147 NULL, ad, sub_layout, ad->navi_bar, NULL);;
150 elm_object_part_content_set(sub_layout, "search_list2", genlist);
154 Elm_Object_Item *item = NULL;;
156 item = elm_genlist_item_append(genlist, &(ad->itc_seperator), NULL, NULL,
157 ELM_GENLIST_ITEM_NONE, NULL, NULL);
158 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
160 // [control] AUTOMATIC - boolean - vconf
161 setting_get_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, &auto_value, &err);
162 SETTING_TRACE("auto_value:%d", auto_value);
164 if(auto_value == SETTING_BRIGHTNESS_AUTOMATIC_PAUSE)
165 auto_value = SETTING_BRIGHTNESS_AUTOMATIC_ON;
167 // [UI] AUTOMATIC - boolean
169 setting_create_Gendial_field_def(genlist, &(ad->itc_1text_1icon),
170 setting_display_brightness_mouse_up_Gendial_list_cb,
171 ad, SWALLOW_Type_1TOGGLE, NULL,
173 "IDS_COM_BODY_AUTOMATIC", NULL,
174 setting_display_brightness_chk_btn_cb);
175 if (ad->data_br_auto) {
176 ad->data_br_auto->userdata = ad;
178 SETTING_TRACE_ERROR("ad->data_br_auto is NULL");
183 vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &battery_value);
184 ad->low_bat = battery_value;
186 if (ad->low_bat < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
191 if (DEVICE_ERROR_NONE != device_get_max_brightness(BRIGHTNESS_DISPLAY, &max_brt)) {
192 SETTING_TRACE("Fail to get the max brightness of the display.\n");
195 SETTING_TRACE("Max brightness of the display is %d\n", max_brt);
198 // get initial value from vconf
200 int ret = setting_get_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, &value, &err);
201 if (ret == SETTING_RETURN_FAIL) {
202 value = SETTING_BRIGHTNESS_LEVEL5;
203 SETTING_TRACE("******* value = %d ", value);
206 int value = SETTING_BRIGHTNESS_LEVEL7;
207 device_get_brightness(BRIGHTNESS_DISPLAY, &value);
208 SETTING_TRACE("******* value = %d ", value);
211 // [UI] Slider control for Bightness
213 setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
214 NULL, SWALLOW_Type_LAYOUT_SLIDER,
216 Right_Bright_Icon, value, NULL,
218 setting_display_birghtness_bright_slider_value_change_cb);
220 if (ad->data_br_sli) {
221 ad->data_br_sli->win_main = ad->win_main_layout;
222 ad->data_br_sli->evas = ad->evas;
223 ad->data_br_sli->isIndicatorVisible = false;
224 ad->data_br_sli->slider_min = 1;
225 ad->data_br_sli->slider_max = max_brt;
226 ad->data_br_sli->userdata = ad;
229 setting_disable_genlist_item(ad->data_br_sli->item);
233 SETTING_TRACE_ERROR("ad->data_br_sli is NULL");
236 vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &battery_value);
237 ad->low_bat = battery_value;
239 if (ad->low_bat < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
240 if (ad->data_br_sli) {
241 setting_disable_genlist_item(ad->data_br_sli->item);
242 setting_disable_genlist_item(ad->data_br_auto->item);
246 // low battery handler - registration
247 vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, setting_display_brightness_lowbat_cb, ad);
249 setting_view_display_brightness.is_create = 1;
250 ecore_idler_add(setting_display_brightness_on_idle, ad);
251 return SETTING_RETURN_SUCCESS;
254 static int setting_display_brightness_destroy(void *cb)
259 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
261 /* low battery handler - registration */
262 vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, setting_display_brightness_lowbat_cb);
264 SettingDisplayUG *ad = (SettingDisplayUG *) cb;
265 elm_naviframe_item_pop(ad->navi_bar);
267 setting_view_display_brightness.is_create = 0;
268 return SETTING_RETURN_SUCCESS;
271 static int setting_display_brightness_update(void *cb)
274 return SETTING_RETURN_SUCCESS;
278 static int setting_display_brightness_cleanup(void *cb)
282 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
283 setting_display_brightness_destroy(cb);
285 return SETTING_RETURN_SUCCESS;
288 /* ***************************************************
292 ***************************************************/
294 /* ***************************************************
298 ***************************************************/
301 setting_display_brightness_click_softkey_cancel_cb(void *data,
307 retm_if(data == NULL, "Data parameter is NULL");
308 SettingDisplayUG *ad = (SettingDisplayUG *) data;
309 if (&setting_view_display_brightness == ad->view_to_load) {
310 /* Send destroy request */
311 ug_destroy_me(ad->ug);
315 setting_view_change(&setting_view_display_brightness,
316 &setting_view_display_main, ad);
319 static void __toggle_automatic_chk(void* data, int chk_status)
322 SettingDisplayUG *ad = (SettingDisplayUG *) data;
325 setting_disable_genlist_item(ad->data_br_sli->item);
329 int value = SETTING_BRIGHTNESS_LEVEL7;
330 device_get_brightness(BRIGHTNESS_DISPLAY, &value);
332 SETTING_TRACE(" SENOSR :: %d ", value);
334 setting_set_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, value, &err);
336 if (ad->low_bat < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
337 setting_disable_genlist_item(ad->data_br_sli->item);
338 setting_disable_genlist_item(ad->data_br_auto->item);
339 setting_set_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, chk_status, &err);
343 #ifdef USE_DEVICE_SET_DISPLAY_BRT
344 setting_display_set_slider_value(ad,ad->data_br_sli->eo_check , value);
345 elm_slider_value_set(ad->data_br_sli->eo_check, value);
347 setting_enable_genlist_item(ad->data_br_sli->item);
350 setting_set_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, chk_status, &err);
354 setting_display_brightness_chk_btn_cb(void *data, Evas_Object *obj,
359 retm_if(data == NULL, "Data parameter is NULL");
360 Setting_GenGroupItem_Data *list_item =
361 (Setting_GenGroupItem_Data *) data;
362 SettingDisplayUG *ad = list_item->userdata;
363 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
365 // enable /disable toggle button
366 __toggle_automatic_chk(ad, list_item->chk_status);
371 * [UI] 'Automatic' toggle
373 static void setting_display_brightness_mouse_up_Gendial_list_cb(void *data,
378 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
379 retm_if(data == NULL, "Invalid argument: data is NULL");
380 SettingDisplayUG *ad = data;
382 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
383 elm_genlist_item_selected_set(item, 0);
384 Setting_GenGroupItem_Data *list_item =
385 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
387 int old_status = elm_check_state_get(list_item->eo_check);
389 list_item->chk_status = !old_status;
390 elm_check_state_set(list_item->eo_check, list_item->chk_status);
392 // enable /disable toggle button
393 __toggle_automatic_chk(ad,list_item->chk_status);
396 static void setting_display_set_slider_value(void* data, Evas_Object *obj, double value)
400 retm_if(data == NULL, "Invalid argument: data is NULL");
402 SettingDisplayUG *ad = data;
405 #ifdef USE_DEVICE_SET_DISPLAY_BRT
406 ret = device_set_brightness(BRIGHTNESS_DISPLAY, value);
407 if (ret == DEVICE_ERROR_NONE) {
408 ad->data_br_sli->chk_status = value;
409 ret = setting_set_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, value, &err);
411 /* SETTING_TRACE("device_set_brightness : failed"); */
418 setting_display_birghtness_bright_slider_value_change_cb(void *data,
423 retm_if(data == NULL, "Data parameter is NULL");
425 static int old_val = -1;
426 SettingDisplayUG *ad = NULL;
427 Setting_GenGroupItem_Data *list_item =
428 (Setting_GenGroupItem_Data *) data;
429 ad = list_item->userdata;
431 value = elm_check_state_get(ad->data_br_auto->eo_check);
432 if (value == 1) { /* it is automatic setting mode, */
437 double val = elm_slider_value_get(obj);
438 value = (int)(val + 0.5);
439 /* SETTING_TRACE("val:%f", val); */
440 SETTING_TRACE("value:%d", value);
441 if (value != old_val)
443 setting_display_set_slider_value(ad, obj, value);