Fix N_SE-12249£¬N_SE-12201£¬N_SE-12192
[apps/core/preloaded/settings.git] / setting-display / src / setting-display-brightness.c
index 83401f3..c0469a1 100755 (executable)
@@ -46,19 +46,35 @@ static void __toggle_automatic_chk(void* data, int chk_status);
  *basic func
  *
  ***************************************************/
-#if DISABLED_CODE
-static Eina_Bool setting_display_brightness_on_idle(void *data)
+#define LOW_BATTERY_NOTIFY "Battery is too low, you cannot change brightness"
+#define NORMAL_BATTERY_NOTIFY "Battery becomes normal, now you can change brightness.."
+
+static void
+__low_battery_on_resp_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(NULL == data, "NULL == data");
+       SettingDisplayUG *ad = (SettingDisplayUG *) data;
+       evas_object_del(ad->popup);
+       ad->popup = NULL;
+}
+
+static Eina_Bool __disable_on_idle(void *data)
 {
        SETTING_TRACE_BEGIN;
        SettingDisplayUG *ad = (SettingDisplayUG *) data;
-       int auto_value, err;
-       setting_get_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS,
-                                &auto_value, &err);
 
-       __toggle_automatic_chk(ad, auto_value);
+       if (ad->popup)
+       {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
+       ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(LOW_BATTERY_NOTIFY),
+                                       __low_battery_on_resp_cb, POPUP_INTERVAL, FALSE, FALSE);
+       if (ad->data_br_sli) setting_disable_genlist_item(ad->data_br_sli->item);
+       if (ad->data_br_auto) setting_disable_genlist_item(ad->data_br_auto->item);
        return FALSE;
 }
-#endif
 
 // low battery
 static void setting_display_brightness_lowbat_cb(keynode_t *key, void* data)
@@ -70,35 +86,26 @@ static void setting_display_brightness_lowbat_cb(keynode_t *key, void* data)
 
        char* vconf_key = vconf_keynode_get_name(key);
        SETTING_TRACE("the value of [ %s ] just changed", vconf_key);
-       // VCONFKEY_SYSMAN_BATTERY_STATUS_LOW
-
-       int battery_value;
-       vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &battery_value);
-       ad->low_bat = battery_value;
-
-       int automatic_val, err;
-       setting_get_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, &automatic_val, &err);
-
-       if (battery_value < VCONFKEY_SYSMAN_BAT_WARNING_LOW)
+       ad->low_bat = vconf_keynode_get_int(key);
+       if (ad->low_bat <= VCONFKEY_SYSMAN_BAT_CRITICAL_LOW)
        {
+               SETTING_TRACE("Battery becomes ctitical low !");
+               //popup was showed by system FW
                // disabled
-               if (ad->data_br_sli) {
-                       setting_disable_genlist_item(ad->data_br_sli->item);
-                       setting_disable_genlist_item(ad->data_br_auto->item);
-               }
+               if (ad->data_br_sli) setting_disable_genlist_item(ad->data_br_sli->item);
+               if (ad->data_br_auto) setting_disable_genlist_item(ad->data_br_auto->item);
        } else {
+               SETTING_TRACE("Battery becomes normal!");
                if (ad->data_br_sli) {
+                       int automatic_val, err;
+                       setting_get_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, &automatic_val, &err);
+                       if (ad->data_br_auto) setting_enable_genlist_item(ad->data_br_auto->item);
                        if (automatic_val == SETTING_BRIGHTNESS_AUTOMATIC_OFF) // not automatic
                        {
-                               setting_enable_genlist_item(ad->data_br_auto->item);
-                               setting_enable_genlist_item(ad->data_br_sli->item);
-                       } else { // automatic
-                               setting_enable_genlist_item(ad->data_br_auto->item);
-                               //setting_enable_genlist_item(ad->data_br_sli->item);
+                               if (ad->data_br_sli) setting_enable_genlist_item(ad->data_br_sli->item);
                        }
                }
        }
-       return;
 }
 
 static int setting_display_brightness_create(void *cb)
@@ -149,20 +156,16 @@ static int setting_display_brightness_create(void *cb)
 
        elm_object_part_content_set(sub_layout, "search_list2", genlist);
 
-       int auto_value;
-       int err;
-       Elm_Object_Item *item = NULL;;
-
-       item = elm_genlist_item_append(genlist, &(ad->itc_seperator), NULL, NULL,
-                                   ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       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);
 
        // [control] AUTOMATIC - boolean - vconf
-       setting_get_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, &auto_value, &err);
+       int auto_value = SETTING_BRIGHTNESS_AUTOMATIC_ON;
+       int err;
+       int ret = setting_get_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, &auto_value, &err);//if get failed,to hold value SETTING_BRIGHTNESS_AUTOMATIC_ON
        SETTING_TRACE("auto_value:%d", auto_value);
-
-       if(auto_value == SETTING_BRIGHTNESS_AUTOMATIC_PAUSE)
-               auto_value = SETTING_BRIGHTNESS_AUTOMATIC_ON;
+       if (0 != ret) //add error handle,due to different target env..
+               SETTING_TRACE_ERROR("Failed to get value of [%s]", VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT);
 
        // [UI] AUTOMATIC - boolean
        ad->data_br_auto =
@@ -179,29 +182,12 @@ static int setting_display_brightness_create(void *cb)
        }
 
 
-       int battery_value;
-       vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &battery_value);
-       ad->low_bat = battery_value;
-
-       if (ad->low_bat < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
-       }
-
        /* check manual */
-       int max_brt;
-       if (DEVICE_ERROR_NONE != device_get_max_brightness(BRIGHTNESS_DISPLAY, &max_brt)) {
-               SETTING_TRACE("Fail to get the max brightness of the display.\n");
-               max_brt = 10;
-       } else {
-               SETTING_TRACE("Max brightness of the display is %d\n", max_brt);
-       }
-
-       // get initial value from vconf
-       int value = SETTING_BRIGHTNESS_LEVEL7;
-       int ret = setting_get_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, &value, &err);
-       if (ret == SETTING_RETURN_FAIL) {
-               value = SETTING_BRIGHTNESS_LEVEL5;
-               SETTING_TRACE("******* value = %d ", value);
-       }
+       int value = SETTING_BRIGHTNESS_LEVEL5;
+       ret = setting_get_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, &value, &err);
+       SETTING_TRACE("******* value = %d ", value);
+       if (0 != ret) //add error handle,due to different target env..
+               SETTING_TRACE_ERROR("Failed to get value of [%s]", VCONFKEY_SETAPPL_LCD_BRIGHTNESS);
 
        // [UI] Slider control for Bightness
        ad->data_br_sli =
@@ -217,7 +203,8 @@ static int setting_display_brightness_create(void *cb)
                ad->data_br_sli->evas = ad->evas;
                ad->data_br_sli->isIndicatorVisible = false;
                ad->data_br_sli->slider_min = 1;
-               ad->data_br_sli->slider_max = max_brt;
+               ad->data_br_sli->slider_max = 100;
+
                ad->data_br_sli->userdata = ad;
 
                if (auto_value) {
@@ -228,21 +215,22 @@ static int setting_display_brightness_create(void *cb)
                SETTING_TRACE_ERROR("ad->data_br_sli is NULL");
        }
 
-       vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &battery_value);
-       ad->low_bat = battery_value;
-
-       if (ad->low_bat < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
-               if (ad->data_br_sli) {
-                       setting_disable_genlist_item(ad->data_br_sli->item);
-                       setting_disable_genlist_item(ad->data_br_auto->item);
-               }
+       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..
+               SETTING_TRACE_ERROR("Failed to get value of [%s]", VCONFKEY_SYSMAN_BATTERY_STATUS_LOW);
+
+       if (ad->low_bat <= VCONFKEY_SYSMAN_BAT_CRITICAL_LOW) {
+               SETTING_TRACE("battery is ctitical low");
+               //have time delay to show all the item out,so user idler to disable
+               //if (ad->data_br_sli) setting_disable_genlist_item(ad->data_br_sli->item);
+               //if (ad->data_br_auto) setting_disable_genlist_item(ad->data_br_auto->item);
+               ecore_idler_add(__disable_on_idle, ad);
        }
 
        // low battery handler - registration
        vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, setting_display_brightness_lowbat_cb, ad);
-
        setting_view_display_brightness.is_create = 1;
-       //ecore_idler_add(setting_display_brightness_on_idle, ad);
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -258,6 +246,11 @@ static int setting_display_brightness_destroy(void *cb)
 
        SettingDisplayUG *ad = (SettingDisplayUG *) cb;
        elm_naviframe_item_pop(ad->navi_bar);
+       if (ad->popup)
+       {
+               evas_object_del(ad->popup);
+               ad->popup = NULL;
+       }
 
        setting_view_display_brightness.is_create = 0;
        return SETTING_RETURN_SUCCESS;
@@ -315,35 +308,64 @@ static void __toggle_automatic_chk(void* data, int chk_status)
 {
        int err;
        SettingDisplayUG *ad = (SettingDisplayUG *) data;
+       int ret = setting_set_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, chk_status, &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;
+       }
        if (chk_status) {
                // TOGGLE ON
                setting_disable_genlist_item(ad->data_br_sli->item);
 
        } else {
                // TOGGLE OFF
-               int value = SETTING_BRIGHTNESS_LEVEL7;
-               //device_get_brightness(BRIGHTNESS_DISPLAY, &value);
-               value = elm_slider_value_get(ad->data_br_sli->eo_check);
-
-               SETTING_TRACE(" SENOSR :: %d ", value);
-
-               setting_set_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, value, &err);
+               //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..
+               {
+                       SETTING_TRACE("Operation failed");
+                       setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"),
+                                               NULL, POPUP_INTERVAL, FALSE, FALSE);
+                       return;
+               }
 
-               if (ad->low_bat < VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
+               // in case of CIRITICAL 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);
-                       setting_set_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, chk_status, &err);
-                       return;
                }
+               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);
+                       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;
+                       }
 
-               ad->data_br_sli->chk_status = value;
-               setting_set_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, value, &err);
-               elm_slider_value_set(ad->data_br_sli->eo_check, value);
-
-               setting_enable_genlist_item(ad->data_br_sli->item);
+                       /* call brightness API */
+                       ret = device_set_brightness(BRIGHTNESS_DISPLAY, value);
+                       /* TODO error handling here */
+               }
        }
-
-       setting_set_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, chk_status, &err);
 }
 
 static void
@@ -397,16 +419,22 @@ static void setting_display_set_slider_value(void* data, Evas_Object *obj, doubl
 
        SettingDisplayUG *ad = data;
        int ret, err;
-
-#ifdef USE_DEVICE_SET_DISPLAY_BRT
        ret = device_set_brightness(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);
+               //add error handle..
+               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"); */
+               //rollback..
+               int tmp = SETTING_BRIGHTNESS_LEVEL5;
+               setting_get_int_slp_key(INT_SLP_SETTING_LCD_BRIGHTNESS, &tmp, &err);
+               elm_slider_value_set(obj, tmp);
+               setting_create_popup_without_btn(ad, ad->win_get, NULL, _("IDS_COM_POP_FAILED"),
+                                                               NULL, POPUP_INTERVAL, FALSE, FALSE);
        }
-#endif
 }
 
 
@@ -431,6 +459,7 @@ 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);