2 * Copyright (c) 2009-2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <device/battery.h>
18 #include <device/callback.h>
20 #include "lockscreen.h"
24 #include "default_lock.h"
26 static struct _s_info {
30 .is_connected = false,
34 bool lock_battery_is_charging_get(void)
36 return s_info.is_charging;
39 bool lock_battery_is_connected_get(void)
41 return s_info.is_connected;
44 static char *_replaceString(char *strInput, const char *strTarget, const char *strChange)
50 int nTargetLength = strlen(strTarget);
52 if (nTargetLength < 1) {
53 _E("there is no target to chnage");
57 int nChangeLength = strlen(strChange);
59 if (nChangeLength != nTargetLength) {
60 for (i = 0; strInput[i] != '\0';) {
61 if (memcmp(&strInput[i], strTarget, nTargetLength) == 0) {
62 nCount++; //consider same string exist
72 strResult = (char *) malloc(i + 1 + nCount * (nChangeLength - nTargetLength));
82 if (memcmp(strInput, strTarget, nTargetLength) == 0) {
83 memcpy(strTemp, strChange, nChangeLength);
84 strTemp += nChangeLength; //move changed length
85 strInput += nTargetLength; // move target length
87 *strTemp++ = *strInput++; // original str cpy
96 lock_error_e lock_battery_update(void)
98 Evas_Object *swipe_layout = NULL;
102 device_battery_level_e battery_level = 0;
103 bool charger = false;
106 swipe_layout = lock_default_swipe_layout_get();
107 retv_if(!swipe_layout, LOCK_ERROR_FAIL);
109 ret = lock_property_get_bool(PROPERTY_TYPE_RUNTIME_INFO, (void *)RUNTIME_INFO_KEY_BATTERY_IS_CHARGING, &status);
110 if (ret != LOCK_ERROR_OK) {
111 _E("Failed to get runtime info : RUNTIME_INFO_KEY_BATTERY_IS_CHARGING");
112 elm_object_part_text_set(swipe_layout, "txt.battery", "");
113 return LOCK_ERROR_FAIL;
115 elm_object_signal_emit(swipe_layout, "show,txt,battery", "txt.battery");
117 if (status == true) {
118 ret = device_battery_get_percent(&capacity);
119 if (ret != DEVICE_ERROR_NONE) {
120 _E("Failed to get battery percent(%d)", ret);
123 ret = device_battery_get_level_status(&battery_level);
124 if (ret != DEVICE_ERROR_NONE) {
125 _E("Failed to get battery level status(%d)", ret);
128 if (capacity == 100) {
130 elm_object_part_text_set(swipe_layout, "txt.battery", _("IDS_SM_POP_FULLY_CHARGED"));
133 char *newString = NULL;
134 newString = _replaceString(_("IDS_LCKSCN_BODY_CHARGING_C_PDP"), "%d%", "%d%%");
136 if (newString != NULL) {
137 snprintf(buff, sizeof(buff), newString , capacity);
140 snprintf(buff, sizeof(buff), _("IDS_LCKSCN_BODY_CHARGING_C_PDP") , capacity);
143 elm_object_part_text_set(swipe_layout, "txt.battery", buff);
146 elm_object_part_text_set(swipe_layout, "txt.battery", "");
148 ret = lock_property_get_bool(PROPERTY_TYPE_RUNTIME_INFO, (void *)RUNTIME_INFO_KEY_CHARGER_CONNECTED , &charger);
149 if (ret != LOCK_ERROR_OK) {
150 _E("Failed to get runtime info : RUNTIME_INFO_KEY_CHARGER_CONNECTED");
152 ret = device_battery_get_percent(&capacity);
153 if (ret != DEVICE_ERROR_NONE) {
154 _E("Failed to get battery percent(%d)", ret);
157 ret = device_battery_get_level_status(&battery_level);
158 if (ret != DEVICE_ERROR_NONE) {
159 _E("Failed to get battery level status(%d)", ret);
162 if (capacity == 100 && charger == true) {
163 elm_object_part_text_set(swipe_layout, "txt.battery", _("IDS_SM_POP_FULLY_CHARGED"));
165 elm_object_part_text_set(swipe_layout, "txt.battery", "");
171 return LOCK_ERROR_OK;
174 static void _battery_changed_cb(device_callback_e type, void *value, void *user_data)
178 if (LOCK_ERROR_OK != lock_battery_update()) {
179 _E("Failed to update battery information");
183 lock_error_e lock_battery_show(void)
185 Evas_Object *swipe_layout = NULL;
189 swipe_layout = lock_default_swipe_layout_get();
190 retv_if(!swipe_layout, LOCK_ERROR_FAIL);
192 elm_object_signal_emit(swipe_layout, "show,txt,battery", "txt.battery");
194 ret = device_add_callback(DEVICE_CALLBACK_BATTERY_CAPACITY, _battery_changed_cb, NULL);
195 if (ret != DEVICE_ERROR_NONE) {
196 _E("Failed to add device callback : DEVICE_CALLBACK_BATTERY_CAPACITY(%d)", ret);
199 ret = device_add_callback(DEVICE_CALLBACK_BATTERY_LEVEL, _battery_changed_cb, NULL);
200 if (ret != DEVICE_ERROR_NONE) {
201 _E("Failed to add device callback : DEVICE_CALLBACK_BATTERY_LEVEL(%d)", ret);
204 return LOCK_ERROR_OK;
207 lock_error_e lock_battery_hide(void)
209 Evas_Object *swipe_layout = NULL;
213 swipe_layout = lock_default_swipe_layout_get();
214 retv_if(!swipe_layout, LOCK_ERROR_FAIL);
216 elm_object_signal_emit(swipe_layout, "hide,txt,battery", "txt.battery");
218 ret = device_remove_callback(DEVICE_CALLBACK_BATTERY_CAPACITY, _battery_changed_cb);
219 if (ret != DEVICE_ERROR_NONE) {
220 _E("Failed to remove device callback : DEVICE_CALLBCK_BATTERY_CAPACITY(%d)", ret);
223 ret = device_remove_callback(DEVICE_CALLBACK_BATTERY_LEVEL, _battery_changed_cb);
224 if (ret != DEVICE_ERROR_NONE) {
225 _E("Failed to remove device callback : DEVICE_CALLBCK_BATTERY_LEVEL(%d)", ret);
228 return LOCK_ERROR_OK;
231 static void _battery_charger_changed_cb(runtime_info_key_e key, void *data)
236 bool is_connected = 0;
238 ret = lock_property_get_bool(PROPERTY_TYPE_RUNTIME_INFO, (void *)RUNTIME_INFO_KEY_CHARGER_CONNECTED , &is_connected);
239 if (ret != LOCK_ERROR_OK) {
240 _E("Failed to get runtime info : RUNTIME_INFO_KEY_CHARGER_CONNECTED");
243 _D("charger connected : %d", is_connected);
244 s_info.is_connected = is_connected;
247 _D("show battery information");
248 if (LOCK_ERROR_OK != lock_battery_show()) {
249 _E("Failed to show battery infomation");
252 if (LOCK_ERROR_OK != lock_battery_update()) {
253 _E("Failed to update battery information");
256 _D("hide battery inforamtion");
257 if (LOCK_ERROR_OK != lock_battery_hide()) {
258 _E("Failed to hide battery information");
263 lock_error_e lock_battery_init(void)
267 ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_CHARGER_CONNECTED, _battery_charger_changed_cb, NULL);
268 if (ret != RUNTIME_INFO_ERROR_NONE) {
269 _E("Failed to set changed cb : RUNTIME_INFO_KEY_CHANGER_CONNECTED(%d)", ret);
272 ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_BATTERY_IS_CHARGING, _battery_charger_changed_cb, NULL);
273 if (ret != RUNTIME_INFO_ERROR_NONE) {
274 _E("Failed to set changed cb : RUNTIME_INFO_KEY_BATTERY_IS_CHARGING(%d)", ret);
277 _battery_charger_changed_cb(RUNTIME_INFO_KEY_CHARGER_CONNECTED, NULL);
279 return LOCK_ERROR_OK;
282 void lock_battery_fini(void)
286 ret = runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_CHARGER_CONNECTED);
287 if (ret != RUNTIME_INFO_ERROR_NONE) {
288 _E("Failed to set changed cb : RUNTIME_INFO_KEY_CHANGER_CONNECTED(%d)", ret);
291 ret = runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_BATTERY_IS_CHARGING);
292 if (ret != RUNTIME_INFO_ERROR_NONE) {
293 _E("Failed to set changed cb : RUNTIME_INFO_KEY_BATTERY_IS_CHARGING(%d)", ret);