Fix brightness issues and add error handling for brightness
authorKairong Yin <kairong78.yin@samsung.com>
Fri, 14 Sep 2012 05:29:34 +0000 (22:29 -0700)
committerKairong Yin <kairong78.yin@samsung.com>
Fri, 14 Sep 2012 05:29:34 +0000 (22:29 -0700)
Change-Id: I27b09f897cb9689c3dbbe19f55aab78e9bd28a36

debian/changelog
setting-display/src/setting-display-brightness.c
src/setting.c

index f6ef733..c003e01 100755 (executable)
@@ -1,3 +1,11 @@
+setting (0.1.89-78) unstable; urgency=low
+
+  * Fix brightness issues and add error handling for brightness.
+  * Git: apps/home/settings
+  * Tag: setting_0.1.89-78
+
+ -- Yin Kairong <kairong78.yin@samsung.com>  Thu, 13 Sep 2012 22:28:58 -0700
+
 setting (0.1.89-77) unstable; urgency=low
 
   * Release for changing.
index 83401f3..92dd0d1 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,6 +203,10 @@ 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;
+
+               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->userdata = ad;
 
@@ -228,21 +218,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 +249,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 +311,53 @@ 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;
+               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) {
+               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;
                }
-
-               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);
+               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;
+                       }
+               }
        }
-
-       setting_set_int_slp_key(INT_SLP_SETTING_AUTOMATIC_BRIGHTNESS, chk_status, &err);
 }
 
 static void
@@ -397,16 +411,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
 }
 
 
index cf70ecd..9199da6 100755 (executable)
@@ -889,7 +889,8 @@ static int setting_main_app_reset(service_h service, void *data)
        cb = setting_int_vconf_change_cb;
        REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_BT_STATUS, cb, data);
        REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_WIFI_STATE, cb, ad);
-       REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, cb, ad);
+       //do need to disable 'Brightness' menu,just disable sub-items in 'Brightness' menu
+       //REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, cb, ad);
        REGISTER_VCONF_NODE(ad->listened_list, VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, cb, data);
 
        cb = setting_string_vconf_change_cb;