/*
* 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);
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;
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;
}
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);
}
+/*
+ * 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");
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;
}
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)
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
.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);
}