/*
* setting
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd.
*
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
- *
- * Contact: MyoungJune Park <mj2004.park@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed under the Flora License, Version 1.1 (the License);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://floralicense.org/license/
*
* Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
+ * distributed under the License is distributed on an AS IS BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
*/
#include <setting-display-brightness.h>
+#define DISABLE_LOW_BATERY_CHANGE 0 //disable user to set the brightness when the Mobile is low battery.
#define Left_Bright_Icon IMG_BRIGTHNESS_LEFT
#define Right_Bright_Icon IMG_BRIGHTNESS_RIGHT
#define LOW_BATTERY_NOTIFY "Battery is too low, you cannot change brightness"
#define NORMAL_BATTERY_NOTIFY "Battery becomes normal, now you can change brightness.."
+#if DISABLE_LOW_BATERY_CHANGE
static void
__low_battery_on_resp_cb(void *data, Evas_Object *obj, void *event_info)
{
}
}
}
+#endif
+
+static void __display_int_vconf_cb(keynode_t *key, void *data)
+{
+ SettingDisplayUG *ad = data;
+ retm_if(!data, "Invalid argument: data is NULL");
+
+ int status = vconf_keynode_get_int(key);
+ char *vconf_name = vconf_keynode_get_name(key);
+ SETTING_TRACE("Enter %s(%s=%d)", __FUNCTION__, vconf_name, status);
+
+ if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_LCD_BRIGHTNESS)) {
+ if (ad->data_br_sli)
+ {
+ elm_slider_value_set(ad->data_br_sli->eo_check, status);
+ }
+ }
+ else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT)) {
+ if (status)
+ {
+ if (ad->data_br_auto)
+ elm_check_state_set(ad->data_br_auto->eo_check, 1);
+
+ if (ad->data_br_sli)
+ setting_disable_genlist_item(ad->data_br_sli->item);
+ }
+ else
+ {
+ if (ad->data_br_auto)
+ elm_check_state_set(ad->data_br_auto->eo_check, 0);
+
+ if (ad->data_br_sli)
+ setting_enable_genlist_item(ad->data_br_sli->item);
+ }
+ }
+ return;
+}
static int setting_display_brightness_create(void *cb)
{
SettingDisplayUG *ad = (SettingDisplayUG *) cb;
- Evas_Object *sub_layout = elm_layout_add(ad->win_main_layout);
- elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "search_layout");
-#if SUPPORT_DISPLAY_HOMESCREEN_IMAGE
- Evas_Object *bg_image =
- create_bgimage_box_add(NULL, ad->win_main_layout, ad->evas,
- pa_bgset,
- -1, -1, /* load the image as it's own size */
- NULL,
- NULL);
- elm_layout_content_set(sub_layout, "bg_swallow", bg_image);
- FREE(pa_bgset);
-#endif
-
Evas_Object *genlist = elm_genlist_add(ad->win_main_layout);
elm_object_style_set(genlist, "dialogue");
retvm_if(genlist == NULL, SETTING_RETURN_FAIL, "Cannot set scroller object as contento of layout");
elm_genlist_clear(genlist); /* first to clear list */
-
/* add basic layout */
if (&setting_view_display_brightness == ad->view_to_load) {
ad->ly_main =
NULL, NULL,
setting_display_brightness_click_softkey_cancel_cb,
NULL, NULL, ad,
- sub_layout,
+ genlist,
&ad->navi_bar, NULL);
} else {
setting_push_layout_navi_bar(_(KeyStr_Brightness),
_("IDS_COM_BODY_BACK"), NULL, NULL,
setting_display_brightness_click_softkey_cancel_cb,
NULL,
- NULL, ad, sub_layout, ad->navi_bar, NULL);;
+ NULL, ad, genlist, ad->navi_bar, NULL);;
}
- elm_object_part_content_set(sub_layout, "search_list2", genlist);
Elm_Object_Item *item = elm_genlist_item_append(genlist, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
// [UI] Slider control for Bightness
ad->data_br_sli =
- setting_create_Gendial_field_def(genlist, &(ad->itc_layout), NULL,
+ setting_create_Gendial_field_def(genlist, &(itc_1icon), NULL,
NULL, SWALLOW_Type_LAYOUT_SLIDER,
Left_Bright_Icon,
Right_Bright_Icon, value, NULL,
ad->data_br_sli->isIndicatorVisible = false;
ad->data_br_sli->slider_min = 1;
- int max_brt = 10;
- device_get_max_brightness(BRIGHTNESS_DISPLAY, &max_brt);
- SETTING_TRACE("******* max_brt = %d ", max_brt);
- ad->data_br_sli->slider_max = max_brt;
+ ad->data_br_sli->slider_max = 100;
ad->data_br_sli->userdata = ad;
if (auto_value) {
} else {
SETTING_TRACE_ERROR("ad->data_br_sli is NULL");
}
-
+ #if DISABLE_LOW_BATERY_CHANGE
ad->low_bat = VCONFKEY_SYSMAN_BAT_NORMAL;
vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &ad->low_bat);
if (0 != ret) //add error handle,due to different target env..
// low battery handler - registration
vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, setting_display_brightness_lowbat_cb, ad);
+ #endif
+
+ vconf_notify_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, __display_int_vconf_cb, ad);
+ vconf_notify_key_changed(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, __display_int_vconf_cb, ad);
setting_view_display_brightness.is_create = 1;
return SETTING_RETURN_SUCCESS;
}
/* error check */
retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-
+#if DISABLE_LOW_BATERY_CHANGE
/* low battery handler - registration */
vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, setting_display_brightness_lowbat_cb);
+#endif
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, __display_int_vconf_cb);
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, __display_int_vconf_cb);
SettingDisplayUG *ad = (SettingDisplayUG *) cb;
elm_naviframe_item_pop(ad->navi_bar);
&setting_view_display_main, ad);
}
+/**
+ * toggle handler for 'Automatic'
+ */
static void __toggle_automatic_chk(void* data, int chk_status)
{
int err;
} else {
// TOGGLE OFF
+ #if DISABLE_LOW_BATERY_CHANGE
//to get value every time
ad->low_bat = VCONFKEY_SYSMAN_BAT_NORMAL;
+
+ // in case of LOW BATTERY
ret = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &ad->low_bat);
if (0 != ret) //add error handle,due to different target env..
{
return;
}
+ // in case of CRITICAL LOW BATTERY
if (ad->low_bat <= VCONFKEY_SYSMAN_BAT_CRITICAL_LOW)
{
setting_disable_genlist_item(ad->data_br_sli->item);
setting_disable_genlist_item(ad->data_br_auto->item);
}
else
- {
+ { // in case of NORMAL OP
+ // 1. set vconf
+ // 2. call brightness set API
int value = SETTING_BRIGHTNESS_LEVEL5;
//device_get_brightness(BRIGHTNESS_DISPLAY, &value);
- if (ad->data_br_sli) value = elm_slider_value_get(ad->data_br_sli->eo_check);
- SETTING_TRACE(" value of ad->data_br_sli->eo_check: %d ", value);
- setting_enable_genlist_item(ad->data_br_sli->item);
+ if (ad->data_br_sli) {
+ value = elm_slider_value_get(ad->data_br_sli->eo_check);
+ SETTING_TRACE(" value of ad->data_br_sli->eo_check: %d ", value);
+ setting_enable_genlist_item(ad->data_br_sli->item);
+ }
+
ret = setting_set_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, value, &err);
if (0 != ret) //add error handle,due to different target env..
{
NULL, POPUP_INTERVAL, FALSE, FALSE);
return;
}
+
+ /* call brightness API */
+ ret = device_set_brightness_to_settings(BRIGHTNESS_DISPLAY, value);
+ /* TODO error handling here */
+ }
+ #else
+ int value = SETTING_BRIGHTNESS_LEVEL5;
+ //device_get_brightness(BRIGHTNESS_DISPLAY, &value);
+ if (ad->data_br_sli) {
+ value = elm_slider_value_get(ad->data_br_sli->eo_check);
+ SETTING_TRACE(" value of ad->data_br_sli->eo_check: %d ", value);
+ setting_enable_genlist_item(ad->data_br_sli->item);
+ }
+ ret = setting_set_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, value, &err);
+ if (0 != ret) //add error handle,due to different target env..
+ {
+ SETTING_TRACE("Operation failed");
+ setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"),
+ NULL, POPUP_INTERVAL, FALSE, FALSE);
+ return;
}
+ #endif
}
}
SettingDisplayUG *ad = data;
int ret, err;
- ret = device_set_brightness(BRIGHTNESS_DISPLAY, value);
+ ret = device_set_brightness_to_settings(BRIGHTNESS_DISPLAY, value);
if (ret == DEVICE_ERROR_NONE) {
ad->data_br_sli->chk_status = value;
ret = setting_set_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, value, &err);
if (0 != ret) setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"),
NULL, POPUP_INTERVAL, FALSE, FALSE);
} else {
- /* SETTING_TRACE("device_set_brightness : failed"); */
+ SETTING_TRACE("device_set_brightness_to_settings : failed[ret=%d]", ret);
//rollback..
int tmp = SETTING_BRIGHTNESS_LEVEL5;
setting_get_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, &tmp, &err);
}
}
+static Eina_Bool __set_brightness_on_idle(void *data)
+{
+ SETTING_TRACE_BEGIN;
+ SettingDisplayUG *ad = (SettingDisplayUG *) data;
+ if (!ad || !ad->data_br_sli || !ad->data_br_sli->eo_check)
+ {
+ SETTING_TRACE_ERROR("!ad || !ad->data_br_sli || !ad->data_br_sli->eo_check");
+ if (ad)
+ ad->set_idler = NULL;
+ return FALSE;
+ }
+ //Get the current real value of slider
+ Evas_Object *obj = ad->data_br_sli->eo_check;
+ double val = elm_slider_value_get(obj);
+ int value = (int)(val + 0.5);
+ SETTING_TRACE("val:%f", val);
+ SETTING_TRACE("value:%d", value);
+ setting_display_set_slider_value(ad, obj, value);
+ //After return False, the idler will be deleted directly,so here set ad->set_idler as NULL directly.
+ ad->set_idler = NULL;
+ return FALSE;
+}
static void
setting_display_birghtness_bright_slider_value_change_cb(void *data,
}
double val = elm_slider_value_get(obj);
+ SETTING_TRACE("val:%f", val);
value = (int)(val + 0.5);
/* SETTING_TRACE("val:%f", val); */
SETTING_TRACE("value:%d", value);
if (value != old_val)
{
- setting_display_set_slider_value(ad, obj, value);
+ //setting_display_set_slider_value(ad, obj, value);
+ if(isEmulBin())
+ {
+ SETTING_TRACE("It is in Emulator, need special process to improve the performence");
+ if (ad->set_idler) {
+ ecore_idler_del(ad->set_idler);
+ ad->set_idler = NULL;
+ }
+ ad->set_idler = ecore_idler_add((Ecore_Task_Cb) __set_brightness_on_idle, ad);
+ }
+ else
+ {
+ SETTING_TRACE("It is in Real Target, Set the brightness directly.");
+ setting_display_set_slider_value(ad, obj, value);
+ }
old_val = value;
}
}