Smartmanager battery module 92/105092/6
authorRadek Kintop <r.kintop@samsung.com>
Thu, 15 Dec 2016 10:37:50 +0000 (11:37 +0100)
committerRadek Kintop <r.kintop@samsung.com>
Fri, 16 Dec 2016 16:44:56 +0000 (17:44 +0100)
- per app batt usage since last time fully charged
- TODO: add trigger callback to refresh the list

Change-Id: I841811a91ab9b51a10539ad84e65508667d9a25f
Signed-off-by: Radek Kintop <r.kintop@samsung.com>
org.tizen.setting.xml.in
setting-smartmanager/smartmanager-battery/CMakeLists.txt
setting-smartmanager/smartmanager-battery/include/smartmanager-battery-main.h
setting-smartmanager/smartmanager-battery/include/smartmanager-battery.h
setting-smartmanager/smartmanager-battery/src/smartmanager-battery-main.c
setting-smartmanager/smartmanager-battery/src/smartmanager-battery.c

index 4418216628ddc5474dff82d737aa4bcccf47da2a..0dff9ca7c4ff614ee3da60280cb5168c5285c867 100755 (executable)
                <metadata key="http://developer.samsung.com/tizen/metadata/legacylifecycle"/>
                <label>Battery</label>
                <label xml:lang="en-us">Battery</label>
+               <icon>@TZ_SYS_RO_ICONS@/default/small/org.tizen.setting.png</icon>
        </ui-application>
        <ui-application appid="org.tizen.setting-data" exec="@TZ_SYS_RO_APP@/org.tizen.setting/bin/smartmanager-data" nodisplay="true" multiple="false" type="capp" taskmanage="false" hw-acceleration="on" launch_mode="caller">
                <metadata key="http://developer.samsung.com/tizen/metadata/legacylifecycle"/>
index f9b66b34d7daa0dd30926735fc4d81f4b5d4c114..b79bd5a09d780037e7dcdf36dc2809e1f98b6445 100644 (file)
@@ -9,17 +9,15 @@ INCLUDE(FindPkgConfig)
 pkg_check_modules(pkgs_smartmanager_battery REQUIRED
        appcore-efl
        capi-appfw-application
+       capi-appfw-app-manager
        capi-appfw-package-manager
        capi-system-device
        deviced
        dpm
+       ui-gadget-1
        elementary
        efl-extension
-       json-glib-1.0
        pkgmgr
-       storage
-       ui-gadget-1
-       vconf
        context)
 
 FOREACH(flag ${pkgs_smartmanager_battery_CFLAGS})
@@ -41,13 +39,12 @@ ADD_DEFINITIONS("-shared")
 SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib")
 
 message("############ SMARTMANAGER BATTERY ############")
-#./src/smartmanager-battery.c
+
 ADD_EXECUTABLE(${PROJECT_SMARTMANAGER_BATTERY}
        ./src/smartmanager-battery.c
        ./src/smartmanager-battery-main.c
        )
 
-#TARGET_LINK_LIBRARIES(${PROJECT_SMARTMANAGER_BATTERY})
 TARGET_LINK_LIBRARIES(${PROJECT_SMARTMANAGER_BATTERY} ${pkgs_smartmanager_battery_LDFLAGS} -pie)
 TARGET_LINK_LIBRARIES(${PROJECT_SMARTMANAGER_BATTERY} -L${CMAKE_BINARY_DIR}/${SETTING_COMMON} -lsetting-common)
 
index 9802103111078aef739194b18764aa8599bd7c79..b36a90f23634dcd1db1e4b52bc427908f521877e 100755 (executable)
@@ -1,7 +1,7 @@
 /*
  * setting
  *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * limitations under the License.
  *
  */
+
 #ifndef __SMARTMANAGER_BATTERY_MAIN_H__
 #define __SMARTMANAGER_BATTERY_MAIN_H__
 
 #include "smartmanager-battery.h"
 
 void battery_main_init(SmartMgrBattery *ad);
-int smartmanagerbattery_main_get_battery_percent();
-const char *smartmanagerbattery_main_get_battery_percent_text();
-const char *smartmanagerbattery_main_get_charge_status_text();
-
-#define BATTERY_STR_TITLE "IDS_ST_OPT_BATTERY_USAGE_ABB"
-#define BATTERY_STR_REMAINED_TITLE "IDS_ST_BODY_REMAINING_BATTERY"
-#define BATTERY_STR_USAGE_TITLE "IDS_ST_OPT_BATTERY_USAGE_ABB"
-#define BATTERY_STR_CHARGING "IDS_ST_BODY_CHARGING_ING_ABB"
-#define BATTERY_STR_FULLY_CHARGED "IDS_ST_SBODY_FULLY_CHARGED_ABB_M_STATUS"
 
 #endif /* __SMARTMANAGER_BATTERY_MAIN_H__ */
index 3ea12863b30edd40e9ac6e601b4836d11f03d296..ec4ebb04c58a53f0a73a8bd63ce06810c11d1c76 100644 (file)
@@ -1,44 +1,68 @@
-
+/*
+ * setting
+ *
+ * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * 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.
+ *
+ */
 
 #ifndef __SMARTMANAGER_BATTERY_H__
 #define __SMARTMANAGER_BATTERY_H__
 
-#include <pthread.h>
-#include <glib.h>
-
 #include <Elementary.h>
-#include <pkgmgr-info.h>
-#include <package-manager.h>
-
-#include <setting-common-draw-widget.h>
-#include <setting-common-view.h>
 
+#include "setting-common-view.h"
 #include "setting-common-init.h"
-
-
-//#include "setting-common-draw-widget.h"
-//#include "setting-common-init.h"
-//#include "setting-appmgr-string.h"
-//#include "setting-common-view.h"
-
+#include "setting-common-general-func.h"
+#include "setting-debug.h"
+
+typedef struct {
+       char *appid;
+       char *pkgid;
+       char *icon;
+       char *label;
+       int event_start_time; /* This is time[s] since the last 'battery fully
+                               charged' event. Technically it should be the
+                               same for all apps from in the list. */
+       double percent;
+} app_item_t;
+
+typedef enum {
+       UI_UPDATE_NONE = 0,
+       UI_UPDATE_BATT_INFO = 1,
+       UI_UPDATE_USAGE_LIST = 2
+}ui_update_mask_t;
 
 typedef struct _SmartMgrBattery {
        MainData md;
 
        setting_view *main_view;
 
+       Eina_List *apps; /* List of app_item_t objects */
+       int current_battery_percent;
+       bool battery_is_charging;
+       ui_update_mask_t ui_update_type;
 
        Elm_Genlist_Item_Class itc_grp_title;
-       Elm_Genlist_Item_Class itc_2text_1button;
-       Elm_Genlist_Item_Class itc_layout;
-       Elm_Genlist_Item_Class itc_layout2;
-       Elm_Genlist_Item_Class itc_layout3;
-       Elm_Genlist_Item_Class itc_1icon_1button;
-
-       Setting_GenGroupItem_Data *item_battery_percent;
 
+       Elm_Object_Item *item_battery_percent;
+       Elm_Object_Item *item_battery_usage; /* Battery usage for the past... */
+       Elm_Object_Item *item_first_app_info;
 } SmartMgrBattery;
 
 extern setting_view smartmanager_view_battery_main;
 
+void smart_manger_battery_launch_appinfo(const app_item_t *app_item);
+
 #endif /*__SMARTMANAGER_BATTERY_H__ */
index 3803c208e1cb23fb03727e3565d58024ff23c678..49d6f90ae392cc4d95a874fe31f6a65ff9bfe9ae 100755 (executable)
@@ -1,7 +1,7 @@
 /*
  * setting
  *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * limitations under the License.
  *
  */
-//#include <appsvc.h>
+
 #include <efl_extension.h>
-#include <device/battery.h>
-#include <context_history.h>
 
 #include "smartmanager-battery.h"
 #include "smartmanager-battery-main.h"
+#include "setting-common-draw-widget.h"
 
 setting_view smartmanager_view_battery_main;
-
-static Eina_Bool _battery_main_click_softkey_back_cb(
-               void *data, Evas_Object *obj,
-               void *event_info);
+Elm_Genlist_Item_Class itc_battery_info = {NULL};
+Elm_Genlist_Item_Class itc_battery_usage = {NULL};
+Elm_Genlist_Item_Class itc_app_batt_usage = {NULL};
 
 static void _get_battery_usage_time_str(char *buff, size_t buff_len,
-                                       int hours, int minutes);
-
+                                       int seconds);
+static void _back_button_cb(void *data, Evas_Object *obj, void *event_info);
+static void _get_battery_percent_text(char *desc, size_t len,
+                                       SmartMgrBattery *ad);
+static void _get_charge_status_text(char *desc, size_t len,
+                                       SmartMgrBattery *ad);
+
+static void _append_battery_info(SmartMgrBattery *ad);
+static void _append_apps_info(SmartMgrBattery *ad);
+static void _app_item_click_cb(void *data, Evas_Object *obj, void *event_info);
+static Eina_Bool _navi_item_pop_cb(void *data, Elm_Object_Item *it);
 /*********************************/
-const char *smartmanagerbattery_main_get_charge_status_text()
-{
-       device_battery_status_e status;
-       bool charging;
-       int ret;
-
-       ret = device_battery_is_charging(&charging);
-       if (ret != DEVICE_ERROR_NONE) {
-               SETTING_TRACE_ERROR("device_battery_is_charging failed");
-               return _(BATTERY_STR_REMAINED_TITLE);
-       }
-       if (charging)
-               return _(BATTERY_STR_CHARGING);
 
-       ret = device_battery_get_status(&status);
-       if (ret != DEVICE_ERROR_NONE) {
-               SETTING_TRACE_ERROR("device_battery_get_status failed");
-               return _(BATTERY_STR_REMAINED_TITLE);
-       }
-
-       if (DEVICE_BATTERY_STATUS_FULL == status)
-               return _(BATTERY_STR_FULLY_CHARGED);
-
-       return _(BATTERY_STR_REMAINED_TITLE);
-}
+static char *_itc_batter_usage_text_get(void *data, Evas_Object *obj,
+                                               const char *part);
+static Evas_Object *_itc_battery_info_content_get(
+                               void *data, Evas_Object *obj, const char *part);
+static Evas_Object *_itc_app_batt_usage_content_get(void *data,
+                                       Evas_Object *obj, const char *part);
 
-
-int smartmanagerbattery_main_get_battery_percent()
-{
-       int battery_value = 0;
-       int ret = device_battery_get_percent(&battery_value);
-       retv_if(ret != DEVICE_ERROR_NONE, 0);
-       return battery_value;
-}
-
-const char *smartmanagerbattery_main_get_battery_percent_text()
+static void _get_battery_percent_text(char *desc, size_t len,
+                                       SmartMgrBattery *ad)
 {
-       char desc[64];
-       int battery_value = smartmanagerbattery_main_get_battery_percent();
-
-       snprintf(desc,64, "%d%s", battery_value, "%");
-
-       return strdup(desc);
+       ret_if(!desc || len == 0);
+       snprintf(desc, len, "%d%s", ad->current_battery_percent, "%");
 }
 
-static Eina_Bool _battery_main_click_softkey_back_cb(
-               void *data, Evas_Object *obj,
-               void *event_info)
+static void _get_charge_status_text(char *desc, size_t len,
+                                       SmartMgrBattery *ad)
 {
-       SETTING_TRACE_BEGIN;
-       /* Send destroy request */
-       ui_app_exit();
+       ret_if(!desc || len == 0);
 
-       SETTING_TRACE_END;
+       if (ad->battery_is_charging) {
+               snprintf(desc, len, "%s", _(IDS_ST_BODY_CHARGING_ING_ABB));
+               return;
+       }
 
-       return EINA_FALSE;
+       if (100 <= ad->current_battery_percent) {
+               snprintf(desc, len, "%s",
+                               _(IDS_ST_SBODY_FULLY_CHARGED_ABB_M_STATUS));
+               return;
+       }
 
+       snprintf(desc, len, "%s", _(IDS_ST_BODY_REMAINING_BATTERY));
 }
 
-static void __charger_status_vconf_change_cb(keynode_t *key, void *data)
+/* Battery percentage display item: */
+static Evas_Object *_itc_battery_info_content_get(
+                               void *data, Evas_Object *obj, const char *part)
 {
        SETTING_TRACE_BEGIN;
-       setting_retm_if(NULL == key, "key is NULL");
-       setting_retm_if(NULL == data, "data is NULL");
-       SmartMgrBattery *ad = (SmartMgrBattery *)data;
-
-       int status = 0;
-       char *vconf_name = NULL;
-
-       status = vconf_keynode_get_int(key);
-       vconf_name = vconf_keynode_get_name(key);
-       SETTING_TRACE("Enter %s(%s=%d)", __FUNCTION__, vconf_name, status);
+       const char *progressbar_style = NULL;
+       Evas_Object *layout = NULL;
+       Evas_Object *progress = NULL;
+       char text[64] = {'\0'};
+       SmartMgrBattery *ad = data;
 
-       elm_genlist_item_update(ad->item_battery_percent->item);
+       if (safeStrCmp(part, "elm.swallow.content") || !ad)
+               return NULL;
+
+       if (ad->current_battery_percent <= 20)
+               progressbar_style = "custom_orange";
+       if (ad->current_battery_percent <= 5)
+               progressbar_style = "custom_red";
+
+       layout = elm_layout_add(obj);
+       elm_layout_file_set(layout, EDJDIR"/setting-theme.edj",
+                               "gl_custom_item_battery");
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       progress = elm_progressbar_add(layout);
+       if (progressbar_style)
+               elm_object_style_set(progress, progressbar_style);
+       evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, 0.5);
+       elm_progressbar_value_set(progress,
+                               (ad->current_battery_percent / 100.0));
+       evas_object_pass_events_set(progress, EINA_TRUE);
+       evas_object_propagate_events_set(progress, EINA_FALSE);
+
+       _get_battery_percent_text(text, sizeof(text), ad);
+       elm_object_part_text_set(layout, "elm.text", text);
+       elm_object_part_content_set(layout, "elm.swallow.content", progress);
+       _get_charge_status_text(text, sizeof(text), ad);
+       elm_object_part_text_set(layout, "elm.text.sub", text);
+
+       return layout;
 }
 
-static void _battery_info(void * data)
+static Evas_Object *_itc_app_batt_usage_content_get(void *data,
+                                       Evas_Object *obj, const char *part)
 {
-       SETTING_TRACE_BEGIN;
-       SmartMgrBattery *ad = data;
-       ret_if(NULL == data);
-       Setting_GenGroupItem_Data *item = NULL;
-       char *charge_str = strdup(smartmanagerbattery_main_get_battery_percent_text());
-       char *battery_str = strdup(smartmanagerbattery_main_get_charge_status_text());
-
-       /* Battery info */
-       item = setting_create_Gendial_field_def(
-                       ad->md.genlist,
-                       &(ad->itc_layout3),
-                       NULL,
-                       ad,
-                       SWALLOW_Type_LAYOUT_SPECIALIZTION,
-                       NULL,
-                       NULL,
-                       0,
-                       charge_str,
-                       battery_str,
-                       NULL);
-       if (item)
-               elm_object_item_disabled_set(item->item, EINA_TRUE);
-       ad->item_battery_percent = item;
+       Evas_Object *layout = NULL;
+       Evas_Object *progress = NULL;
+       Evas_Object *icon = NULL;
+       app_item_t *app_info = data;
+
+       retv_if(!data, NULL);
+
+       if (safeStrCmp(part, "elm.swallow.content"))
+               return NULL;
+
+       layout = elm_layout_add(obj);
+       elm_layout_file_set(layout, EDJDIR"/setting-theme.edj",
+                                               "gl_custom_item_icon");
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       progress = elm_progressbar_add(layout);
+       evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, 0.5);
+       elm_progressbar_value_set(progress, (app_info->percent / 100.0));
+       evas_object_pass_events_set(progress, EINA_TRUE);
+       evas_object_propagate_events_set(progress, EINA_FALSE);
+
+       elm_object_part_text_set(layout, "elm.text", app_info->label);
+       elm_object_part_content_set(layout, "elm.swallow.content", progress);
+
+       icon = elm_icon_add(layout);
+       elm_image_file_set(icon, app_info->icon, NULL);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       evas_object_size_hint_min_set(icon, 98, 98);
+       elm_object_part_content_set(layout, "elm.swallow.icon", icon);
+
+       return layout;
 }
 
-static void _battery_usage_details_list(void * data)
+static char *_itc_batter_usage_text_get(void *data, Evas_Object *obj,
+                                               const char *part)
 {
-       SETTING_TRACE_BEGIN;
        SmartMgrBattery *ad = data;
-       ret_if(NULL == data);
-
-//     setting_create_Gendial_field_def(
-//                     ad->md.genlist,
-//                     &(ad->itc_layout2),
-//                     NULL,
-//                     ad,
-//                     SWALLOW_Type_LAYOUT_SLIDER,
-//                     "/usr/share/icons/default/small/org.tizen.setting.png",
-//                     "/usr/apps/org.tizen.setting/res/icons/org.tizen.setting.png",
-//                     15,
-//                     "Application 2",
-//                     "25%",
-//                     NULL);
-//
-//     setting_create_Gendial_field_def(
-//                     ad->md.genlist,
-//                             &(ad->itc_layout2),
-//                             NULL,
-//                             NULL,
-//                             SWALLOW_Type_LAYOUT_SLIDER,
-//                             "/usr/apps/org.tizen.setting/res/icons/org.tizen.setting.png",
-//                             NULL,
-//                             0,
-//                             "Applic 3",
-//                             "38%",
-//                             NULL);
-
-       context_history_h handle;
-       context_history_filter_h filter;
-       context_history_list_h list;
-
-       int ret =  context_history_create(&handle);
-       if (ret != CONTEXT_HISTORY_ERROR_NONE) {
-               dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] context_history_create error: %s", __FILE__, __LINE__, get_error_message(ret));
-               return;
+       app_item_t *app_info = NULL;
+       char buff[512] = {0};
+       retv_if(!data, NULL);
+
+       if (!strcmp(part, "elm.text") && eina_list_count(ad->apps) > 0) {
+               app_info = eina_list_data_get(ad->apps);
+               retv_if(!app_info, NULL);
+               _get_battery_usage_time_str(buff, sizeof(buff),
+                                               app_info->event_start_time);
+               return strndup(buff, sizeof(buff));
        }
 
-       ret = context_history_filter_create(&filter);
-       if (ret != CONTEXT_HISTORY_ERROR_NONE) {
-               dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] context_history_filter_create() error: %s", __FILE__, __LINE__, get_error_message(ret));
-               return;
-       }
+       return NULL;
+}
 
-       ret = context_history_filter_set_int(filter, CONTEXT_HISTORY_FILTER_TIME_SPAN, 30);
-       if (ret != CONTEXT_HISTORY_ERROR_NONE) {
-               dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] () error: %s", __FILE__, __LINE__, get_error_message(ret));
-               return;
-       }
+static void _append_battery_info(SmartMgrBattery *ad)
+{
+       ret_if(!ad);
 
-       ret = context_history_get_list(handle, CONTEXT_HISTORY_BATTERY_USAGE, filter, &list);
-       if (ret != CONTEXT_HISTORY_ERROR_NONE) {
-               dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] context_history_get_list() error: %s", __FILE__, __LINE__, get_error_message(ret));
-               return;
-       }
+       ad->item_battery_percent = elm_genlist_item_append(ad->md.genlist,
+                       &itc_battery_info, ad, NULL, ELM_GENLIST_ITEM_NONE,
+                       NULL, NULL);
+       elm_genlist_item_select_mode_set(ad->item_battery_percent,
+                                       ELM_OBJECT_SELECT_MODE_NONE);
+}
 
-       int i;
-       int count = 0;
-       context_history_record_h record;
-       char *value = NULL;
-       double amount;
+static void _clear_apps_info(SmartMgrBattery *ad)
+{
+       Elm_Object_Item *curent_item = NULL;
+       Elm_Object_Item *next_item = NULL;
+       ret_if(!ad);
+       curent_item = ad->item_first_app_info;
+
+       do {
+               next_item = elm_genlist_item_next_get(curent_item);
+               elm_object_item_del(curent_item);
+       } while ((curent_item = next_item));
+       ad->item_first_app_info = NULL;
+}
 
-       ret = context_history_list_get_count(list, &count);
-       if (ret != CONTEXT_HISTORY_ERROR_NONE) {
-               dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] context_history_get_list() error: %s", __FILE__, __LINE__, get_error_message(ret));
-               return;
+static void _append_apps_info(SmartMgrBattery *ad)
+{
+       Elm_Object_Item *it = NULL;
+       app_item_t *app_info = NULL;
+       Eina_List *iterator = NULL;
+       ret_if(!ad);
+
+       elm_genlist_item_update(ad->item_battery_usage);
+
+       ad->item_first_app_info = NULL;
+       EINA_LIST_FOREACH(ad->apps, iterator, app_info) {
+               it = elm_genlist_item_append(ad->md.genlist,
+                                       &itc_app_batt_usage, app_info,
+                                       NULL, ELM_GENLIST_ITEM_NONE,
+                                       _app_item_click_cb, app_info);
+               elm_genlist_item_select_mode_set(it,
+                                               ELM_OBJECT_SELECT_MODE_NONE);
+               if (!ad->item_first_app_info)
+                       ad->item_first_app_info = it;
        }
+}
 
-       for (i = 0; i < count; ++i) {
-               ret = context_history_list_get_current(list, &record);
-               if (ret != CONTEXT_HISTORY_ERROR_NONE) {
-                       dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] context_history_list_get_current() error: %s", __FILE__, __LINE__, get_error_message(ret));
-                       continue;
-               }
-
-               ret = context_history_record_get_string(record, CONTEXT_HISTORY_APP_ID, &value);
-               if (ret != CONTEXT_HISTORY_ERROR_NONE) {
-                       dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] context_history_list_get_current() error: %s", __FILE__, __LINE__, get_error_message(ret));
-                       continue;
-               }
-
-               ret = context_history_record_get_double(record, CONTEXT_HISTORY_TOTAL_AMOUNT, &amount);
-               if (ret != CONTEXT_HISTORY_ERROR_NONE) {
-                       dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] context_history_list_get_current() error: %s", __FILE__, __LINE__, get_error_message(ret));
-                       continue;
-               }
-
-               ret = context_history_list_move_next(list);
-               if (ret != CONTEXT_HISTORY_ERROR_NONE) {
-                       dlog_print(DLOG_ERROR, LOG_TAG, "[%s:%d] context_history_list_move_next() error: %s", __FILE__, __LINE__, get_error_message(ret));
-                       continue;
-               }
-
-               SETTING_TRACE("<MS> APP: %s %g", value, amount);
-               free(value);
-
-               context_history_record_destroy(record);
-       }
+static void _app_item_click_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       smart_manger_battery_launch_appinfo(data);
+}
 
-       context_history_filter_destroy(filter);
-       context_history_list_destroy(list);
-       context_history_destroy(handle);
+static Eina_Bool _navi_item_pop_cb(void *data, Elm_Object_Item *it)
+{
+       ui_app_exit();
+       return EINA_TRUE;
 }
 
 static int battery_main_create(void *data)
 {
-       char buff[512] = {0};
-       Elm_Object_Item *navi_it;
-//     Evas_Object *back_btn, *toolbar, *more_btn;
+       Evas_Object *back_btn = NULL;
        SmartMgrBattery *ad = data;
 
        retv_if(NULL == data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-//     retv_if(NULL == ad->md.naviframe, SETTING_GENERAL_ERR_WRONG_PARAMETER);
-
-       // Conformant
-       Evas_Object *conform = elm_conformant_add(ad->md.window);
-       evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND,
-                       EVAS_HINT_EXPAND);
-       elm_win_resize_object_add(ad->md.window, conform);
-       evas_object_show(conform);
-
-       /* navi frame */
-       Evas_Object *navi = NULL;
-       navi = elm_naviframe_add(conform);
-
-       elm_naviframe_prev_btn_auto_pushed_set(navi, EINA_TRUE);
-       elm_object_part_content_set(conform, "elm.swallow.content", navi);
-       eext_object_event_callback_add(navi, EEXT_CALLBACK_BACK,
-                       eext_naviframe_back_cb, NULL);
-       eext_object_event_callback_add(navi, EEXT_CALLBACK_MORE,
-                       eext_naviframe_more_cb, NULL);
-
-       if (navi == NULL) {
-               SETTING_TRACE(" *** elm_naviframe_add returns NULL *** ");
-               return SETTING_GENERAL_ERR_NULL_DATA_PARAMETER;
-       }
-       evas_object_show(navi);
-       ad->md.naviframe = navi;
-
-       /* back button */
-//     back_btn = setting_create_button(ad->md.naviframe, MGRAPP_STR_APP_MANAGER,
-//     NAVI_BACK_ARROW_BUTTON_STYLE,
-//                     (setting_call_back_func)setting_appmgr_main_click_softkey_back_cb,
-//                     ad);
-
-       Evas_Object *genlist = NULL;
-
-       /* genlist */
-       genlist = elm_genlist_add(navi);
-       retvm_if(genlist == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
-                        "Cannot set genlist object as content of layout");
-       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-       elm_genlist_clear(genlist);     /* first to clear list */
-
-       ad->md.genlist = genlist;
-
-       evas_object_size_hint_weight_set(ad->md.genlist, EVAS_HINT_EXPAND,
-                       EVAS_HINT_EXPAND);
-       elm_win_resize_object_add(ad->md.naviframe, ad->md.genlist);
-       evas_object_show(genlist);
-
-       Evas_Object *button = elm_button_add(ad->md.naviframe);
-       elm_object_style_set(button, NAVI_BACK_ARROW_BUTTON_STYLE);
-       evas_object_smart_callback_add(button, "clicked",
-                       (setting_call_back_func)_battery_main_click_softkey_back_cb,
-                       ad);
-       evas_object_show(button);
-
-
-       navi_it = elm_naviframe_item_push(ad->md.naviframe, _(BATTERY_STR_TITLE),
-                       button, NULL, genlist, NULL);
-//     elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE,
-//                     EINA_TRUE);
-       elm_naviframe_item_pop_cb_set(navi_it,
-                       (Elm_Naviframe_Item_Pop_Cb)_battery_main_click_softkey_back_cb, ad);
-       ad->md.naviframe_it = navi_it;
-       Setting_GenGroupItem_Data *item = NULL;
+
+       setting_create_Gendial_itc(SETTING_GENLIST_GROUP_INDEX_STYLE,
+                       &(ad->itc_grp_title));
+
+       elm_naviframe_item_pop_cb_set(ad->md.naviframe_it, _navi_item_pop_cb,
+                                       ad);
+       itc_app_batt_usage.item_style = "full";
+       itc_app_batt_usage.func.content_get = _itc_app_batt_usage_content_get;
+       itc_battery_usage.item_style = "type1";
+       itc_battery_usage.func.text_get = _itc_batter_usage_text_get;
+       itc_battery_info.item_style = "full";
+       itc_battery_info.func.content_get = _itc_battery_info_content_get;
+
+       back_btn = setting_create_button(ad->md.naviframe, NULL,
+                                       NAVI_BACK_ARROW_BUTTON_STYLE,
+                                       _back_button_cb, ad);
+       elm_layout_content_set(ad->md.naviframe, "prev_btn", back_btn);
 
        /* Battery info */
-       _battery_info(ad);
-       _get_battery_usage_time_str(buff, sizeof(buff), 11, 12);
-       setting_create_Gendial_field_titleItem(genlist, &(ad->itc_grp_title),
-                       _(BATTERY_STR_USAGE_TITLE), NULL);
-       item = setting_create_Gendial_field_def(
-                       genlist,
-                       &(ad->itc_layout),
-                       NULL,
-                       NULL,
-                       SWALLOW_Type_INVALID,
-                       NULL,
-                       NULL,
-                       0,
-                       buff,
-                       NULL,
-                       NULL);
-       if (item)
-               elm_object_item_disabled_set(item->item, EINA_TRUE);
-
-       /* Create application battery usage */
-       _battery_usage_details_list(ad);
-
-       /* Check charger status */
-       vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW,
-                       __charger_status_vconf_change_cb, ad);
-       vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_CAPACITY,
-                       __charger_status_vconf_change_cb, ad);
-
-//     vconf_notify_key_changed
+       _append_battery_info(ad);
+       setting_create_Gendial_field_titleItem(ad->md.genlist,
+                                               &(ad->itc_grp_title),
+                                       _(IDS_ST_OPT_BATTERY_USAGE_ABB), NULL);
+       ad->item_battery_usage = elm_genlist_item_append(ad->md.genlist,
+                                               &itc_battery_usage, ad,
+                                               NULL, ELM_GENLIST_ITEM_NONE,
+                                               NULL, NULL);
+       elm_genlist_item_select_mode_set(ad->item_battery_usage,
+                                       ELM_OBJECT_SELECT_MODE_NONE);
+       _append_apps_info(ad);
 
        smartmanager_view_battery_main.is_create = 1;
        evas_object_show(ad->md.window);
@@ -358,11 +277,11 @@ static int battery_main_create(void *data)
 
 static int battery_main_destroy(void *data)
 {
-//     SmartMgrBattery *ad = data;
-//
-//     retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+       SmartMgrBattery *ad = data;
 
+       retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
+       evas_object_del(ad->md.window);
        smartmanager_view_battery_main.is_create = 0;
 
        return SETTING_RETURN_SUCCESS;
@@ -370,17 +289,20 @@ static int battery_main_destroy(void *data)
 
 static int battery_main_update(void *data)
 {
-//     SmartMgrBattery *ad = data;
-//
-//     retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+       SmartMgrBattery *ad = data;
 
-//     appmgr_main_genlist_append_items(ad);
+       retv_if(!ad, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
-       return SETTING_RETURN_SUCCESS;
-}
+       if (ad->ui_update_type & UI_UPDATE_BATT_INFO)
+               elm_genlist_item_update(ad->item_battery_percent);
+
+       if (ad->ui_update_type & UI_UPDATE_USAGE_LIST) {
+               _clear_apps_info(ad);
+               _append_apps_info(ad);
+       }
+
+       ad->ui_update_type = UI_UPDATE_NONE;
 
-static int battery_main_cleanup(void *data)
-{
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -392,16 +314,25 @@ void battery_main_init(SmartMgrBattery *ad)
        smartmanager_view_battery_main.create = battery_main_create;
        smartmanager_view_battery_main.destroy = battery_main_destroy;
        smartmanager_view_battery_main.update = battery_main_update;
-       smartmanager_view_battery_main.cleanup = battery_main_cleanup;
+       smartmanager_view_battery_main.cleanup = NULL;
 
        ad->main_view = &smartmanager_view_battery_main;
 }
 
 static void _get_battery_usage_time_str(char *buff, size_t buff_len,
-                                       int hours, int minutes)
+                                       int seconds)
 {
        const char *txt =
        _(IDS_SM_BODY_THE_BATTERY_USAGE_FOR_THE_PAST_P1SD_HOURS_P2SD_MINUTES_C);
 
-       snprintf(buff, buff_len, txt, hours, minutes);
+       snprintf(buff, buff_len, txt, seconds / (60 * 60),
+                       seconds % (60 * 60) / 60);
+}
+
+static void _back_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SmartMgrBattery *ad = data;
+       ret_if(!ad);
+
+       elm_naviframe_item_pop(ad->md.naviframe);
 }
index b3d0029750100459ac5c5c60e9884cfc18c5ff50..a0c2cced4292cede0d40736ec51490c3d6deca84 100644 (file)
+/*
+ * setting
+ *
+ * Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * 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 "smartmanager-battery.h"
-#include "smartmanager-battery-main.h"
-
-#include <efl_extension.h>
 #include <app.h>
+#include <app_manager.h>
+#include <package_manager.h>
 #include <appcore-common.h>
+#include <context_history.h>
+#include <device/battery.h>
+#include <device/callback.h>
+
+#include "smartmanager-battery.h"
+#include "smartmanager-battery-main.h"
 
 #define SMARTMANAGER_BATTERY_PACKAGE_NAME "org.tizen.smartmanager-battery"
 
 /******************************APP CONTROL***********************************/
 static bool _smartmgr_battery_app_create(void *data);
 static void _smartmgr_battery_app_terminate(void *data);
-static void _smartmgr_battery_app_control_cb(app_control_h app_control,
-               void *data);
 static void _smartmgr_battery_app_pause(void *data);
 static void _smartmgr_battery_app_resume(void *data);
 /********************************OTHER***************************************/
+static void _free_battery_usage_details_list(SmartMgrBattery *ad);
+static void _get_battery_usage_details_list(SmartMgrBattery *ad);
+static void _get_battery_info(SmartMgrBattery *ad);
+static void _battery_changed_cb(device_callback_e type, void *value,
+                               void *user_data);
 
-static Evas_Object *__battery_value_per_get(
-               void *data, Evas_Object *obj, const char *part)
+void smart_manger_battery_launch_appinfo(const app_item_t *app_item)
 {
-       SETTING_TRACE_BEGIN;
-       SETTING_TRACE("part name: [%s]", part);
-       Setting_GenGroupItem_Data *item_data =
-                       (Setting_GenGroupItem_Data *)data;
-
-       if (safeStrCmp(part, "elm.swallow.content"))
-               return NULL;
-
-       Evas_Object *layout;
-       char *progressbar_style = "";
-       /* Set custom layout style */
-       layout = elm_layout_add(obj);
-
-       int vale = smartmanagerbattery_main_get_battery_percent();
-       double val = (double)vale/100;
-       SETTING_TRACE("VAL___ = %f", val);
-
-       if (vale <= 20 && vale > 5)
-               progressbar_style = "custom_orange";
-       else if (vale <= 5)
-               progressbar_style = "custom_red";
-
-       Evas_Object *slider = setting_create_progressbar(obj, item_data, progressbar_style);
-       elm_progressbar_value_set(slider, val);
-
-       char *gl_style = "gl_custom_item_battery";
-       elm_layout_file_set(layout, EDJDIR"/setting-theme.edj", gl_style);
-       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
-                       EVAS_HINT_EXPAND);
-       evas_object_pass_events_set(slider, EINA_TRUE);
-       evas_object_propagate_events_set(slider, EINA_FALSE);
-
-//     elm_object_part_text_set(layout, "elm.text", _(item_data->keyStr));
-       elm_object_part_text_set(layout, "elm.text", smartmanagerbattery_main_get_battery_percent_text());
-
-       elm_object_part_content_set(layout, "elm.swallow.content", slider);
-
-       if (item_data->sub_desc)
-               elm_object_part_text_set(layout, "elm.text.sub", smartmanagerbattery_main_get_charge_status_text());
-
-       return layout;
-}
-
-static Evas_Object *__battery_value_get(
-               void *data, Evas_Object *obj, const char *part)
-{
-       SETTING_TRACE_BEGIN;
-       SETTING_TRACE("part name: [%s]", part);
-       Setting_GenGroupItem_Data *item_data =
-                       (Setting_GenGroupItem_Data *)data;
-
-       if (safeStrCmp(part, "elm.swallow.content"))
-               return NULL;
-
-       char *progressbar_style = "";
-       Evas_Object *layout;
-       /* Set custom layout style */
-       layout = elm_layout_add(obj);
-
-       Evas_Object *slider = setting_create_progressbar(obj, item_data, progressbar_style);
-
-       char *gl_style = "gl_custom_item_icon";
-       elm_layout_file_set(layout, EDJDIR"/setting-theme.edj", gl_style);
-       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
-                       EVAS_HINT_EXPAND);
-       evas_object_pass_events_set(slider, EINA_TRUE);
-       evas_object_propagate_events_set(slider, EINA_FALSE);
-
-       elm_object_part_text_set(layout, "elm.text", _(item_data->keyStr));
-       elm_object_part_content_set(layout, "elm.swallow.content", slider);
-
-       if (item_data->l_swallow_path) {
-               Evas_Object *icon = elm_icon_add(obj);
-                               elm_image_file_set(icon, item_data->l_swallow_path, NULL);
-                               elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
-                               evas_object_size_hint_min_set(icon, 98, 98);
-                               elm_object_part_content_set(layout, "elm.swallow.icon", icon);
+       int ret = 0;
+       app_control_h app_control = NULL;
+
+       ret_if(!app_item);
+
+       ret = app_control_create(&app_control);
+       app_control_set_app_id(app_control, "org.tizen.setting-appmgr");
+       app_control_add_extra_data(app_control, "pkgid", app_item->pkgid);
+       app_control_add_extra_data(app_control, "viewtype", "application-info");
+
+       app_control_set_launch_mode(app_control, APP_CONTROL_LAUNCH_MODE_GROUP);
+       ret = app_control_send_launch_request(app_control, NULL, NULL);
+       if (ret != APP_CONTROL_ERROR_NONE) {
+               SETTING_TRACE_ERROR(
+                       "app_control_send_launch_request failed(%d): %s", ret,
+                       app_item->pkgid);
        }
-       if (item_data->sub_desc)
-               elm_object_part_text_set(layout, "elm.text.sub", item_data->sub_desc);
-
-       return layout;
-}
-
-static void _smartmgr_battery_app_control_cb(app_control_h app_control,
-               void *data)
-{
-       SETTING_TRACE_BEGIN;
+       app_control_destroy(app_control);
 }
 
 static bool _smartmgr_battery_app_create(void *data)
 {
+       int err = 0;
        SETTING_TRACE_BEGIN;
        setting_retvm_if(NULL == data, false, "!data");
 
@@ -121,63 +74,26 @@ static bool _smartmgr_battery_app_create(void *data)
 
        setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
        if (app_init(&ad->md, SMARTMANAGER_BATTERY_PACKAGE_NAME)
-                                                       != SETTING_RETURN_SUCCESS) {
+               != SETTING_RETURN_SUCCESS) {
                SETTING_TRACE_ERROR("Cannot initialize application");
                return false;
        }
-//     evas_object_smart_callback_add(appmgr_ad->md.window, "delete,request",
-//                     _main_win_del_cb, appmgr_ad);
-//
-//     evas_object_event_callback_add(appmgr_ad->md.window,
-//                     EVAS_CALLBACK_RESIZE, appmgr_resize, appmgr_ad);
 
+       /* base UI initialization: */
+       err = view_init(&ad->md, _(IDS_ST_OPT_BATTERY_USAGE_ABB));
+       if (err != SETTING_RETURN_SUCCESS)
+           return false;
 
-       elm_theme_extension_add(NULL, _TZ_SYS_RO_APP"/org.tizen.setting/res/edje/settings.edj");
        elm_theme_extension_add(NULL,
-                       _TZ_SYS_RO_APP"/org.tizen.setting/res/edje/setting-genlist.edj");
+               _TZ_SYS_RO_APP"/org.tizen.setting/res/edje/settings.edj");
        elm_theme_extension_add(NULL,
-                       _TZ_SYS_RO_APP"/org.tizen.setting/res/edje/setting-theme.edj");
-
-       setting_create_Gendial_itc(SETTING_GENLIST_GROUP_INDEX_STYLE,
-                       &(ad->itc_grp_title));
-       setting_create_Gendial_itc(SETTING_GENLIST_ICON_1LINE_STYLE,
-                       &(ad->itc_layout));
-       setting_create_Gendial_itc(SETTING_GENLIST_LEFT_ICON_CONTENT_ICON_STYLE,
-                       &(ad->itc_layout2));
-       ad->itc_layout2.func.content_get = __battery_value_get;
-
-       setting_create_Gendial_itc(SETTING_GENLIST_LEFT_ICON_CONTENT_ICON_STYLE,
-                       &(ad->itc_layout3));
-       ad->itc_layout3.func.content_get = __battery_value_per_get;
-
-
-       ad->itc_1icon_1button.item_style = SETTING_GENLIST_2LINE_STYLE;
-       ad->itc_1icon_1button.func.text_get = NULL;
-       ad->itc_1icon_1button.func.content_get =
-                       NULL;
-       ad->itc_1icon_1button.func.state_get = NULL;
-       ad->itc_1icon_1button.func.del = NULL;
-
+       _TZ_SYS_RO_APP"/org.tizen.setting/res/edje/setting-genlist.edj");
+       elm_theme_extension_add(NULL,
+       _TZ_SYS_RO_APP"/org.tizen.setting/res/edje/setting-theme.edj");
 
        battery_main_init(ad);
-       setting_view_node_table_register(&smartmanager_view_battery_main, NULL);
-//     setting_view_node_table_register(&setting_view_appmgr_pkginfo,
-//                     &setting_view_appmgr_main);
-//
-
-       setting_view_create(ad->main_view, (void*)ad);
-//
-//     appmgr_ad->current_rotation = elm_win_rotation_get(
-//                     appmgr_ad->md.window);
-//     SETTING_TRACE_DEBUG("ad->current_rotation:%d",
-//                     appmgr_ad->current_rotation);
-//     if (elm_win_wm_rotation_supported_get(appmgr_ad->md.window)) {
-//             int rots[4] = { 0, 90, 180, 270 };
-//             /* rotation value that app may want */
-//             elm_win_wm_rotation_available_rotations_set(
-//                             appmgr_ad->md.window, rots, 4);
-//     }
-//
+       setting_view_create(ad->main_view, ad);
+
        return true;
 }
 
@@ -186,21 +102,17 @@ static void _smartmgr_battery_app_terminate(void *data)
        SETTING_TRACE_BEGIN;
        SmartMgrBattery *ad = (SmartMgrBattery *)data;
        retm_if(NULL == ad, "data=%p is Invalid", data);
-
-       if (ad->main_view->is_create)
-               setting_view_destroy(ad->main_view, ad);
-
-       evas_object_del(ad->md.window);
+       setting_view_destroy(ad->main_view, ad);
+       _free_battery_usage_details_list(ad);
 }
 
 static void _smartmgr_battery_app_pause(void *data)
 {
-       SETTING_TRACE_BEGIN;
-       SmartMgrBattery *ad = data;
-       retm_if(NULL == data, "data=%p is Invalid", data);
-
-       if (ad->main_view->is_create)
-               setting_view_update(ad->main_view, ad);
+       retm_if(!data, "data=%p is Invalid", data);
+       (void)device_remove_callback(DEVICE_CALLBACK_BATTERY_CAPACITY,
+                                       _battery_changed_cb);
+       (void)device_remove_callback(DEVICE_CALLBACK_BATTERY_CHARGING,
+                                       _battery_changed_cb);
 }
 
 static void _smartmgr_battery_app_resume(void *data)
@@ -209,8 +121,15 @@ static void _smartmgr_battery_app_resume(void *data)
        SmartMgrBattery *ad = data;
        retm_if(NULL == data, "data=%p is Invalid", data);
 
-       if (ad->main_view->is_create)
-               setting_view_update(ad->main_view, ad);
+       (void)device_add_callback(DEVICE_CALLBACK_BATTERY_CAPACITY,
+                               _battery_changed_cb, ad);
+       (void)device_add_callback(DEVICE_CALLBACK_BATTERY_CHARGING,
+                               _battery_changed_cb, ad);
+       _get_battery_info(ad);
+       _free_battery_usage_details_list(ad);
+       _get_battery_usage_details_list(ad);
+       ad->ui_update_type = UI_UPDATE_BATT_INFO | UI_UPDATE_USAGE_LIST;
+       setting_view_update(ad->main_view, ad);
 }
 
 EXPORT_PUBLIC
@@ -223,13 +142,122 @@ int main(int argc, char *argv[])
                .pause = _smartmgr_battery_app_pause,
                .resume = _smartmgr_battery_app_resume,
                .terminate = _smartmgr_battery_app_terminate,
-               .app_control = _smartmgr_battery_app_control_cb,
+               .app_control = NULL
        };
 
        memset(&smartmgr_battery_ad, 0x00, sizeof(SmartMgrBattery));
-       int r = 0;
-       r = ui_app_main(argc, argv, &ops, &smartmgr_battery_ad);
-       retv_if(r == -1, -1);
 
-       return 0;
+       return ui_app_main(argc, argv, &ops, &smartmgr_battery_ad);
+}
+
+static void _free_battery_usage_details_list(SmartMgrBattery *ad)
+{
+       /*After this, clean genlist items immediately, pointers are invalid. */
+       app_item_t *app = NULL;
+       ret_if(!ad);
+
+       EINA_LIST_FREE(ad->apps, app) {
+               free(app->appid);
+               free(app->pkgid);
+               free(app->icon);
+               free(app->label);
+               free(app);
+       }
+       ad->apps = NULL;
+}
+
+static void _get_battery_usage_details_list(SmartMgrBattery *ad)
+{
+       SETTING_TRACE_BEGIN;
+       int i = 0;
+       int ret = 0;
+       int count = 0;
+       app_info_h app_info = NULL;
+       app_item_t *app = NULL;
+       context_history_h handle = NULL;
+       context_history_filter_h filter = NULL;
+       context_history_list_h list = NULL;
+       context_history_record_h record = NULL;
+
+       ret_if(!ad);
+
+       if (ad->apps) {
+               SETTING_TRACE("ad->apps has not been freed !");
+               return;
+       }
+
+       ret =  context_history_create(&handle);
+       SETTING_TRACE("context_history_create(): %s", get_error_message(ret));
+       if (ret != CONTEXT_HISTORY_ERROR_NONE)
+               goto cleanup;
+
+       ret = context_history_filter_create(&filter);
+       SETTING_TRACE("context_history_filter_create(): %s",
+                       get_error_message(ret));
+       if (ret != CONTEXT_HISTORY_ERROR_NONE)
+               goto cleanup;
+
+       ret = context_history_get_list(handle,
+                       CONTEXT_HISTORY_RECENT_BATTERY_USAGE, filter, &list);
+       SETTING_TRACE("context_history_get_list(): %s", get_error_message(ret));
+       if (ret != CONTEXT_HISTORY_ERROR_NONE)
+               goto cleanup;
+
+       ret = context_history_list_get_count(list, &count);
+       SETTING_TRACE("context_history_list_get_count(): %d", count);
+       for (i = 0; i < count; ++i) {
+               app = calloc(1, sizeof(app_item_t));
+               if (!app) {
+                       SETTING_TRACE_ERROR("calloc() error");
+                       abort();
+               }
+
+               (void)context_history_list_get_current(list, &record);
+               (void)context_history_record_get_string(record,
+                                       CONTEXT_HISTORY_APP_ID, &app->appid);
+               (void)context_history_record_get_double(record,
+                               CONTEXT_HISTORY_TOTAL_AMOUNT, &app->percent);
+
+               /* Attribute not available officially: */
+               (void)context_history_record_get_int(record, "UsedTime",
+                                               &app->event_start_time);
+               app_info_create(app->appid, &app_info);
+               if (app_info) {
+                       app_info_get_icon(app_info, &app->icon);
+                       app_info_get_label(app_info, &app->label);
+                       app_info_destroy(app_info);
+               }
+               package_manager_get_package_id_by_app_id(app->appid,
+                                                       &app->pkgid);
+               ad->apps = eina_list_append(ad->apps, app);
+               (void)context_history_record_destroy(record);
+               record = NULL;
+               app_info = NULL;
+               (void)context_history_list_move_next(list);
+       }
+
+cleanup:
+       context_history_list_destroy(list);
+       context_history_filter_destroy(filter);
+       context_history_destroy(handle);
+}
+
+static void _get_battery_info(SmartMgrBattery *ad)
+{
+       ret_if(!ad);
+       device_battery_get_percent(&ad->current_battery_percent);
+       device_battery_is_charging(&ad->battery_is_charging);
+       SETTING_TRACE_DEBUG("_get_battery_info() %d %d",
+                       ad->current_battery_percent, ad->battery_is_charging);
+}
+
+static void _battery_changed_cb(device_callback_e type, void *value,
+                               void *user_data)
+{
+       SmartMgrBattery *ad = user_data;
+       ret_if(!ad);
+
+       _get_battery_info(user_data);
+       ad->ui_update_type = UI_UPDATE_BATT_INFO;
+       setting_view_update(ad->main_view, ad);
 }