2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.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://floralicense.org/license/
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.
20 #include "quickpanel-ui.h"
22 #define QP_IDLETXT_PART "qp.noti.swallow.spn"
24 #define QP_SPN_BASE_PART "qp.base.spn.swallow"
25 #define QP_SPN_BOX_PART "qp.spn.swallow"
26 #define QP_BUTTON_PART "qp.button.swallow"
28 #define QP_IDLETXT_MAX_KEY 4
29 #define QP_IDLETXT_MAX_LEN 1024
30 #define QP_IDLETXT_SLIDE_LEN 130
32 #define QP_IDLETXT_LABEL_STRING \
33 "<font_size=36 font=Tizen:style=Medium><color=#959494FF><align=left>%s</align>" \
34 "</color></font_size>"
36 static int quickpanel_idletxt_init(void *data);
37 static int quickpanel_idletxt_fini(void *data);
38 static int quickpanel_idletxt_suspend(void *data);
39 static int quickpanel_idletxt_resume(void *data);
40 static void quickpanel_idletxt_lang_changed(void *data);
44 .init = quickpanel_idletxt_init,
45 .fini = quickpanel_idletxt_fini,
46 .suspend = quickpanel_idletxt_suspend,
47 .resume = quickpanel_idletxt_resume,
48 .lang_changed = quickpanel_idletxt_lang_changed
51 static int _quickpanel_idletxt_map_exceptional_nwname(char *txt, char *map_txt, int map_txt_len)
55 if (txt == NULL || map_txt == NULL) {
59 if (strncasecmp(txt, "No Service", strlen("No Service")) == 0) {
60 strncpy(map_txt, _S("IDS_COM_BODY_NO_SERVICE"), map_txt_len);
62 } else if (strncasecmp(txt, "EMERGENCY", strlen("EMERGENCY")) == 0) {
63 strncpy(map_txt, _("IDS_CALL_POP_CALLING_EMERG_ONLY"), map_txt_len);
65 } else if (strncasecmp(txt, "Searching", strlen("Searching")) == 0) {
66 strncpy(map_txt, _S("IDS_COM_BODY_SEARCHING"), map_txt_len);
68 } else if (strncasecmp(txt, "SIM Error", strlen("SIM Error")) == 0) {
69 strncpy(map_txt, _S("IDS_COM_BODY_INVALID_SIM_CARD"), map_txt_len);
71 } else if (strncasecmp(txt, "NO SIM", strlen("NO SIM")) == 0) {
72 strncpy(map_txt, _S("IDS_COM_BODY_NO_SIM"), map_txt_len);
79 static Evas_Object *_quickpanel_idletxt_create_label(Evas_Object * parent,
82 Evas_Object *obj = NULL;
83 char buf[QP_IDLETXT_MAX_LEN] = { 0, };
84 char localized_txt[QP_IDLETXT_MAX_LEN] = { 0, };
87 retif(parent == NULL || txt == NULL, NULL, "Invalid parameter!");
89 memset(buf, 0x00, sizeof(buf));
91 if (_quickpanel_idletxt_map_exceptional_nwname(txt, localized_txt, QP_IDLETXT_MAX_LEN) == 1) {
92 len = snprintf(buf, sizeof(buf), QP_IDLETXT_LABEL_STRING, localized_txt);
94 len = snprintf(buf, sizeof(buf), QP_IDLETXT_LABEL_STRING, txt);
97 retif(len < 0, NULL, "len < 0");
99 obj = elm_label_add(parent);
101 elm_object_text_set(obj, buf);
103 evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND,
105 evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, 0.5);
107 evas_object_show(obj);
113 static Evas_Object *_quickpanel_idletxt_create_box(Evas_Object * parent)
115 Evas_Object *box = NULL;
117 retif(parent == NULL, NULL, "Invalid parameter!");
119 box = elm_box_add(parent);
121 elm_box_horizontal_set(box, EINA_FALSE);
123 evas_object_show(box);
129 static int _quickpanel_idletxt_get_txt(const char *key, char *txt, int size)
135 str = vconf_get_str(key);
136 if (str == NULL || str[0] == '\0')
139 /* check ASCII code */
140 for (i = strlen(str) - 1; i >= 0; i--) {
141 if (str[i] <= 31 || str[i] >= 127)
145 len = snprintf(txt, size, "%s", str);
154 static Evas_Object *_quickpanel_idletxt_add_label(Evas_Object * box,
157 char txt[QP_IDLETXT_MAX_LEN] = { 0, };
158 char buf[QP_IDLETXT_MAX_LEN] = { 0, };
161 Evas_Object *obj = NULL;
163 retif(key == NULL || key[0] == '\0', NULL, "Invalid parameter!");
165 memset(txt, 0x00, sizeof(txt));
167 for (i = 0; key[i]; i++) {
168 memset(buf, 0x00, sizeof(buf));
170 /* get next key string */
171 if (_quickpanel_idletxt_get_txt(key[i], buf, sizeof(buf))) {
172 INFO("VCONFKEY(%s) = %s", key[i], buf);
176 snprintf(&txt[len], sizeof(txt) - len, "%s%s",
177 len ? " - " : "", buf);
184 obj = _quickpanel_idletxt_create_label(box, txt);
187 if (len > QP_IDLETXT_SLIDE_LEN)
188 elm_label_slide_set(obj, EINA_TRUE);
197 static Evas_Object *_quickpanel_idletxt_exception_add_label(Evas_Object * box)
199 int service_type = VCONFKEY_TELEPHONY_SVCTYPE_SEARCH;
201 Evas_Object *obj = NULL;
203 if (vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &service_type) != 0) {
204 DBG("fail to get VCONFKEY_TELEPHONY_SVCTYPE");
207 switch(service_type) {
208 case VCONFKEY_TELEPHONY_SVCTYPE_NOSVC:
209 text = _S("IDS_COM_BODY_NO_SERVICE");
211 case VCONFKEY_TELEPHONY_SVCTYPE_EMERGENCY:
212 text = _("IDS_CALL_POP_CALLING_EMERG_ONLY");
215 if (service_type > VCONFKEY_TELEPHONY_SVCTYPE_SEARCH) {
216 text = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
218 text = _S("IDS_COM_BODY_SEARCHING");
224 obj = _quickpanel_idletxt_create_label(box, text);
227 if (strlen(text) > QP_IDLETXT_SLIDE_LEN)
228 elm_label_slide_set(obj, EINA_TRUE);
237 static Evas_Object *_quickpanel_idletxt_get_spn(Evas_Object * box)
239 Evas_Object *label = NULL;
240 char *keylist[QP_IDLETXT_MAX_KEY] = { 0, };
244 int service_type = VCONFKEY_TELEPHONY_SVCTYPE_NONE;
247 if (vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &service_type) != 0) {
248 DBG("fail to get VCONFKEY_TELEPHONY_SVCTYPE");
251 ret = vconf_get_int(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, &state);
253 INFO("VCONFKEY(%s) = %d",
254 VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, state);
256 if (state != VCONFKEY_TELEPHONY_DISP_INVALID
257 && service_type > VCONFKEY_TELEPHONY_SVCTYPE_SEARCH) {
258 if (i < QP_IDLETXT_MAX_KEY) {
259 if (state & VCONFKEY_TELEPHONY_DISP_SPN) {
261 strdup(VCONFKEY_TELEPHONY_SPN_NAME);
264 if (state & VCONFKEY_TELEPHONY_DISP_PLMN) {
266 strdup(VCONFKEY_TELEPHONY_NWNAME);
271 /* get string with keylist */
272 label = _quickpanel_idletxt_add_label(box, keylist);
283 label = _quickpanel_idletxt_exception_add_label(box);
290 static Evas_Object *_quickpanel_idletxt_get_sat_text(Evas_Object * box)
292 Evas_Object *label = NULL;
293 char *keylist[] = { VCONFKEY_SAT_IDLE_TEXT, 0 };
295 /* get string with keylist */
296 label = _quickpanel_idletxt_add_label(box, keylist);
301 static void _quickpanel_idletxt_button_clicked(void *data, Evas_Object * obj, void *event_info)
303 struct appdata *ad = data;
304 retif(obj == NULL, , "Invalid parameter!");
305 retif(ad == NULL, , "Invalid parameter!");
306 retif(ad->win == NULL, , "ad->win is NULL");
310 if (ad->is_emul == 1)
311 quickpanel_launch_app(QP_SETTING_PKG_SETTING_EMUL, NULL);
313 quickpanel_launch_app(QP_SETTING_PKG_SETTING, NULL);
315 zone = ecore_x_e_illume_zone_get(elm_win_xwindow_get(ad->win));
316 ecore_x_e_illume_quickpanel_state_send(zone,
317 ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
319 elm_object_signal_emit(obj, "elm,action,button,reset", "elm");
322 static void quickpanel_idletxt_update(void *data)
324 struct appdata *ad = NULL;
325 Evas_Object *label = NULL;
326 Evas_Object *idletxtbox = NULL;
327 Evas_Object *button_settings = NULL;
328 Evas_Object *spn = NULL;
330 retif(!data, , "Invalid parameter!");
333 retif(!ad->ly, , "layout is NULL!");
335 spn = elm_object_part_content_get(ad->ly, QP_SPN_BASE_PART);
336 retif(!spn, , "spn layout is NULL!");
338 idletxtbox = elm_object_part_content_get(spn, QP_SPN_BOX_PART);
339 button_settings = elm_object_part_content_get(spn, QP_BUTTON_PART);
341 if (idletxtbox == NULL) {
342 idletxtbox = _quickpanel_idletxt_create_box(spn);
343 retif(idletxtbox == NULL, , "Failed to create box!");
344 elm_object_part_content_set(spn,
345 QP_SPN_BOX_PART, idletxtbox);
348 elm_box_clear(idletxtbox);
351 label = _quickpanel_idletxt_get_spn(idletxtbox);
353 elm_box_pack_end(idletxtbox, label);
355 /* get sat idle text */
356 label = _quickpanel_idletxt_get_sat_text(idletxtbox);
358 elm_box_pack_end(idletxtbox, label);
360 if (button_settings == NULL) {
361 button_settings = elm_button_add(spn);
362 retif(button_settings == NULL, , "Failed to create clear button!");
363 elm_object_style_set(button_settings, "quickpanel_standard");
364 elm_object_part_content_set(spn,
365 QP_BUTTON_PART, button_settings);
366 evas_object_smart_callback_add(button_settings, "clicked",
367 _quickpanel_idletxt_button_clicked, ad);
370 elm_object_text_set(button_settings, _S("IDS_COM_BODY_SETTINGS"));
373 static void quickpanel_idletxt_changed_cb(keynode_t *node, void *data)
375 quickpanel_idletxt_update(data);
378 static int _quickpanel_idletxt_register_event_handler(void *data)
382 ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVCTYPE,
383 quickpanel_idletxt_changed_cb, data);
385 ERR("Failed to register [%s]",
386 VCONFKEY_TELEPHONY_SVCTYPE);
388 ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION,
389 quickpanel_idletxt_changed_cb, data);
391 ERR("Failed to register [%s]",
392 VCONFKEY_TELEPHONY_SPN_DISP_CONDITION);
394 ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_NAME,
395 quickpanel_idletxt_changed_cb, data);
397 ERR("Failed to register [%s]",
398 VCONFKEY_TELEPHONY_SPN_NAME);
401 ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_NWNAME,
402 quickpanel_idletxt_changed_cb, data);
404 ERR("Failed to register [%s]",
405 VCONFKEY_TELEPHONY_NWNAME);
407 ret = vconf_notify_key_changed(VCONFKEY_SAT_IDLE_TEXT,
408 quickpanel_idletxt_changed_cb, data);
410 ERR("Failed to register [%s]",
411 VCONFKEY_SAT_IDLE_TEXT);
417 static int _quickpanel_idletxt_unregister_event_handler(void)
421 ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVCTYPE,
422 quickpanel_idletxt_changed_cb);
424 ERR("Failed to unregister [%s]",
425 VCONFKEY_TELEPHONY_SVCTYPE);
427 ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION,
428 quickpanel_idletxt_changed_cb);
430 ERR("Failed to unregister [%s]",
431 VCONFKEY_TELEPHONY_SPN_DISP_CONDITION);
433 ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_NAME,
434 quickpanel_idletxt_changed_cb);
436 ERR("Failed to unregister [%s]",
437 VCONFKEY_TELEPHONY_SPN_NAME);
440 ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NWNAME,
441 quickpanel_idletxt_changed_cb);
443 ERR("Failed to unregister [%s]",
444 VCONFKEY_TELEPHONY_NWNAME);
446 ret = vconf_ignore_key_changed(VCONFKEY_SAT_IDLE_TEXT,
447 quickpanel_idletxt_changed_cb);
449 ERR("Failed to unregister [%s]",
450 VCONFKEY_SAT_IDLE_TEXT);
455 static Evas_Object *_idletxt_load_edj(Evas_Object * parent, const char *file,
459 Evas_Object *eo = NULL;
461 retif(parent == NULL, NULL, "Invalid parameter!");
463 eo = elm_layout_add(parent);
464 retif(eo == NULL, NULL, "Failed to add layout object!");
466 r = elm_layout_file_set(eo, file, group);
467 retif(r != EINA_TRUE, NULL, "Failed to set edje object file!");
469 evas_object_size_hint_weight_set(eo,
470 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
471 evas_object_show(eo);
476 static int quickpanel_idletxt_init(void *data)
478 struct appdata *ad = NULL;
479 Evas_Object *spn = NULL;
481 retif(!data, QP_FAIL, "Invalid parameter!");
484 spn = _idletxt_load_edj(ad->ly, DEFAULT_EDJ, "quickpanel/spn");
485 retif(!spn, QP_FAIL, "fail to load spn layout");
487 elm_object_part_content_set(ad->ly, QP_SPN_BASE_PART, spn);
489 quickpanel_idletxt_update(data);
491 _quickpanel_idletxt_register_event_handler(data);
496 static int quickpanel_idletxt_fini(void *data)
498 struct appdata *ad = (struct appdata *)data;
499 Evas_Object *spn = NULL;
500 Evas_Object *idletxtbox = NULL;
502 retif(ad == NULL, QP_FAIL, "Invalid parameter!");
504 _quickpanel_idletxt_unregister_event_handler();
506 retif(!ad->ly, QP_FAIL, "Invalid parameter!");
508 spn = elm_object_part_content_unset(ad->ly, QP_SPN_BASE_PART);
509 retif(!spn, QP_OK, "spn is NULL");
511 idletxtbox = elm_object_part_content_get(spn, QP_SPN_BOX_PART);
513 elm_object_part_content_unset(spn, QP_SPN_BOX_PART);
514 evas_object_del(idletxtbox);
517 evas_object_del(spn);
522 static int quickpanel_idletxt_suspend(void *data)
527 static int quickpanel_idletxt_resume(void *data)
532 static void quickpanel_idletxt_lang_changed(void *data)
534 retif(data == NULL, , "Invalid parameter!");
536 quickpanel_idletxt_update(data);