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://www.tizenopensource.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.
17 #include "msg-ui-thread-main.h"
21 static void __msg_ui_thread_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv);
22 static void __msg_ui_thread_ug_destroy_cb(ui_gadget_h ug, void *priv);
23 static Evas_Object *__msg_ui_thread_create_msg_detail_layout(Evas_Object* parent);
24 static Evas_Object* __msg_ui_thread_create_msg_detail_content(Evas_Object *parent, void *data, int msg_id);
25 static void __msg_ui_thread_popup_response_cb(void *data, Evas_Object *obj, void *event_info);
26 static void __msg_ui_thread_del_popup_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
27 static void __msg_ui_thread_del_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
30 int msg_ui_thread_launch_voice_call(const char *call_num)
32 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
34 int ret = -1; /* negative values are error value */
37 if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
38 D_EMSG("service_create() is failed !!");
40 char telnum[255] = {0,};
41 service_set_operation(svc_handle, APPSVC_OPERATION_CALL);
42 snprintf(telnum, sizeof(telnum), "tel:%s", call_num); /* Number to make a call */
43 service_set_uri(svc_handle, telnum);
44 ret = service_send_launch_request(svc_handle, NULL, NULL);
46 service_destroy(svc_handle);
49 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
54 int msg_ui_thread_launch_video_call(const char *call_num)
56 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
60 bundle *b = bundle_create();
63 bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO);
64 bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE);
65 bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, call_num);
66 bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE);
67 bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE);
69 ret = aul_launch_app(VIDEO_CALL_PKG_NAME, b);
74 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
79 void msg_ui_thread_launch_spam_setting(PMSG_THREAD_LIST_DATA pListData)
81 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
82 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, pListData == NULL);
84 pListData->cbs.layout_cb = __msg_ui_thread_ug_layout_cb;
85 pListData->cbs.result_cb = NULL;
86 pListData->cbs.destroy_cb = __msg_ui_thread_ug_destroy_cb;
87 pListData->cbs.priv = (void *)pListData;
89 service_h svc_handle = NULL;
90 if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
91 D_EMSG("service_create() is failed !!");
93 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_SPAM_SETTING);
94 pListData->loaded_ug = ug_create(NULL, MSG_SETTING_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &pListData->cbs);
95 service_destroy(svc_handle);
99 void msg_ui_thread_launch_viewer_ug(PMSG_THREAD_LIST_DATA pListData, int nMsgId)
101 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
102 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, pListData == NULL);
104 pListData->cbs.layout_cb = __msg_ui_thread_ug_layout_cb;
105 pListData->cbs.result_cb = NULL;
106 pListData->cbs.destroy_cb = __msg_ui_thread_ug_destroy_cb;
107 pListData->cbs.priv = (void *)pListData;
109 service_h svc_handle = NULL;
110 char msgid[10] = {0,};
111 if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
112 D_EMSG("service_create() is failed !!");
114 snprintf(msgid, sizeof(msgid), "%d", nMsgId);
115 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, msgid);
116 pListData->loaded_ug = ug_create(NULL, MSG_VIEWER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &pListData->cbs);
117 service_destroy(svc_handle);
120 if (pListData->loaded_ug) {
121 msg_ui_thread_show_notify(pListData, "Unable to open message");
128 static void __msg_ui_thread_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
135 Evas_Object *base, *win;
137 base = ug_get_layout(ug);
143 win = ug_get_window();
146 case UG_MODE_FULLVIEW:
147 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
148 elm_win_resize_object_add(win, base);
149 evas_object_show(base);
151 case UG_MODE_FRAMEVIEW:
157 static void __msg_ui_thread_ug_destroy_cb(ui_gadget_h ug, void *priv)
160 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ug || !priv);
162 PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)priv;
164 if (ug == pListData->loaded_ug) {
166 pListData->loaded_ug = NULL;
169 if (pListData->search_mode == THREAD_SEARCH_ON)
170 elm_object_focus_set(pListData->searchbar, EINA_TRUE);
172 if (pListData->sel_msg_id) {
173 msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id);
175 pListData->sel_gen_item = NULL;
176 pListData->sel_msg_id = 0;
180 void msg_ui_thread_launch_msg_detail_view(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_MSG_DATA_S item_data)
185 D_EMSG("[ERROR] pListData is NULL");
189 PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
190 Evas_Object *detail_layout = NULL;
191 Evas_Object *content = NULL;
194 detail_layout = __msg_ui_thread_create_msg_detail_layout(pData->navi_frame);
196 // create content layout
197 content = __msg_ui_thread_create_msg_detail_content(detail_layout, pData, item_data->msg_id);
198 elm_object_part_content_set(detail_layout, "elm.swallow.content", content);
201 char title[DEF_BUF_LEN] = {0, };
203 if (item_data->contact_id > 0 && item_data->display_name[0] != '\0') {
204 strncpy(title, item_data->display_name, sizeof(title)-1);
206 if (item_data->address[0] != '\0')
207 strncpy(title, item_data->address, sizeof(title)-1);
209 strncpy(title, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"), sizeof(title)-1);
212 elm_naviframe_item_push(pData->navi_frame, title, NULL, NULL, detail_layout, NULL);
214 if (pListData->sel_msg_id) {
215 msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id);
217 pListData->sel_gen_item = NULL;
218 pListData->sel_msg_id = 0;
224 static Evas_Object *__msg_ui_thread_create_msg_detail_layout(Evas_Object* parent)
228 Evas_Object *layout = NULL;
230 layout = elm_layout_add(parent);
232 elm_layout_theme_set(layout, "layout", "application", "noindicator");
233 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
238 static Evas_Object* __msg_ui_thread_create_msg_detail_content(Evas_Object *parent, void *data, int msg_id)
240 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
241 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, NULL);
243 PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data;
245 Evas_Object *scroller;
248 char buf[MAX_MSG_TEXT_LEN+1] = {0, };
250 msg_error_t err = MSG_SUCCESS;
253 /** create scroller */
254 scroller = elm_scroller_add(parent);
256 elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
257 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
258 evas_object_show(scroller);
261 entry = elm_entry_add(scroller);
262 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0.0);
263 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0);
264 elm_entry_editable_set(entry, EINA_FALSE);
265 elm_object_content_set(scroller, entry);
266 evas_object_show(entry);
268 msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
269 if (msgInfo == NULL) {
270 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_create_struct(MSG_STRUCT_MESSAGE_INFO) is failed!");
274 msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
275 if (sendOpt == NULL) {
276 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_create_struct(MSG_STRUCT_SENDOPT) is failed!");
277 msg_release_struct(&msgInfo);
281 err = msg_get_message(pData->msgHandle, (msg_message_id_t)msg_id, msgInfo, sendOpt);
282 if (err != MSG_SUCCESS) {
283 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message() is failed : err = %d", err);
284 msg_release_struct(&msgInfo);
285 msg_release_struct(&sendOpt);
289 msg_get_int_value(msgInfo, MSG_MESSAGE_DATA_SIZE_INT, &msgSize);
292 msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &msgType);
294 if (msgType == MSG_TYPE_MMS_NOTI) {
295 char subject[DEF_BUF_LEN_S+1] = {0,};
297 msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, subject, DEF_BUF_LEN_S);
298 if (strlen(subject) > 0) {
299 snprintf(buf, sizeof(buf), "%s", subject);
301 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_str_value(MSG_MESSAGE_SUBJECT_STR) is failed !!");
302 snprintf(buf, sizeof(buf), "Message subject is empty !!");
305 char msgText[msgSize + 1];
306 memset(msgText, 0, msgSize + 1);
308 msg_get_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, msgText, msgSize);
309 if (strlen(msgText) > 0) {
310 snprintf(buf, sizeof(buf), "%s", msgText);
312 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_str_value(MSG_MESSAGE_SMS_DATA_STR) is failed !!");
313 snprintf(buf, sizeof(buf), "Message is empty !!");
317 snprintf(buf, sizeof(buf), "Message is empty !!");
319 buf[MAX_MSG_TEXT_LEN] = '\n';
320 str = elm_entry_utf8_to_markup(buf);
321 elm_object_text_set(entry, str);
328 msg_release_struct(&msgInfo);
329 msg_release_struct(&sendOpt);
334 void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData)
336 int timeformat = msg_common_get_timeformat();
338 if (timeformat == MSG_TIME_FORMAT_UNKNOWN)
339 pData->time_fmt = MSG_TIME_FORMAT_12H;
341 pData->time_fmt = timeformat;
343 D_MSG("%s", pData->time_fmt == MSG_TIME_FORMAT_24H ? "TIME FORMAT = 24h" : "TIME FORMAT = 12h");
346 void msg_ui_thread_get_locale(PMSG_THREAD_DATA pData)
350 locale = msg_common_get_default_locale();
353 strncpy(pData->locale, locale, sizeof(pData->locale)-1);
356 D_MSG("Locale = %s", pData->locale);
359 void msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data, service_h svc_handle)
362 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !item_data || !svc_handle);
364 char buf[DEF_BUF_LEN_S] = {'0',};
365 char buf_contact[DEF_BUF_LEN_S] = {'0',};
367 snprintf(buf, DEF_BUF_LEN_S, "%d", item_data->thread_id);
368 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf);
369 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_NAME, item_data->thread_name);
370 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact);
375 void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_LIST_DATA pListData)
380 elm_check_state_set(pListData->sel_all_box, EINA_FALSE);
382 it = elm_genlist_first_item_get(pListData->genlist);
384 if (elm_genlist_item_parent_get(it) == NULL) {
385 it = elm_genlist_item_next_get(it);
389 if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) {
390 PMSG_APP_THREAD_DATA_S item_data = NULL;
392 item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(it);
394 item_data->is_check = EINA_FALSE;
396 PMSG_APP_THREAD_MSG_DATA_S item_data = NULL;
398 item_data = (PMSG_APP_THREAD_MSG_DATA_S)elm_object_item_data_get(it);
400 item_data->is_check = EINA_FALSE;
403 it = elm_genlist_item_next_get(it);
406 pListData->chk_list = eina_list_free(pListData->chk_list);
408 elm_object_part_content_unset(pListData->content_ly, "sel_all");
409 evas_object_hide(pListData->sel_all_ly);
410 elm_object_part_content_set(pListData->content_ly, "sel_all", pListData->searchbar);
412 elm_genlist_decorate_mode_set(pListData->genlist, EINA_FALSE);
413 elm_genlist_select_mode_set(pListData->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
415 pListData->view_mode = THREAD_NORMAL_VIEW;
418 void msg_ui_thread_show_normal_mode(PMSG_THREAD_LIST_DATA pListData)
422 if (pListData->view_mode == THREAD_EDIT_VIEW)
423 msg_ui_thread_cancel_edit_mode(pListData);
425 if (pListData->select_info) {
426 evas_object_del(pListData->select_info);
427 pListData->select_info = NULL;
430 if (!pListData->back_btn) {
431 PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
433 pListData->back_btn = elm_button_add(pData->navi_frame);
434 evas_object_smart_callback_add(pListData->back_btn, "clicked", msg_ui_thread_back_btn_clicked_cb, (void *)pListData);
435 elm_object_style_set(pListData->back_btn, "naviframe/back_btn/default");
438 msg_ui_thread_set_navi_controlbar_item(pListData);
440 if (pListData->list_type == THREAD_NORMAL_LIST_TYPE)
441 elm_object_item_text_set(pListData->nf_it, dgettext("sys_string", "IDS_COM_BODY_MESSAGES"));
442 else if (pListData->list_type == THREAD_SPAM_LIST_TYPE)
443 elm_object_item_text_set(pListData->nf_it, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES"));
444 else if (pListData->list_type == THREAD_SIM_LIST_TYPE)
445 elm_object_item_text_set(pListData->nf_it, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SIM_CARD_MESSAGES"));
446 else if (pListData->list_type == THREAD_CBMSG_LIST_TYPE)
447 elm_object_item_text_set(pListData->nf_it, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES"));
449 elm_object_item_part_content_set(pListData->nf_it, "prev_btn", pListData->back_btn);
450 elm_naviframe_item_title_visible_set(pListData->nf_it, EINA_TRUE);
455 void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_LIST_DATA pListData, int thread_id)
460 Elm_Object_Item *gen_item = NULL;
462 gen_item = elm_genlist_first_item_get(pListData->genlist);
465 if (elm_genlist_item_parent_get(gen_item) == NULL) {
466 gen_item = elm_genlist_item_next_get(gen_item);
470 PMSG_APP_THREAD_DATA_S item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(gen_item);
471 if (thread_id == item_data->thread_id) {
472 pListData->sel_gen_item = gen_item;
476 gen_item = elm_genlist_item_next_get(gen_item);
479 elm_genlist_item_show(gen_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
482 void msg_ui_thread_select_item_by_msg_id(PMSG_THREAD_LIST_DATA pListData, int msg_id)
487 Elm_Object_Item *gen_item = NULL;
488 gen_item = elm_genlist_first_item_get(pListData->genlist);
491 if (elm_genlist_item_parent_get(gen_item) == NULL) {
492 gen_item = elm_genlist_item_next_get(gen_item);
496 PMSG_APP_THREAD_MSG_DATA_S item_data = (PMSG_APP_THREAD_MSG_DATA_S)elm_object_item_data_get(gen_item);
497 if (msg_id == item_data->msg_id) {
498 pListData->sel_gen_item = gen_item;
502 gen_item = elm_genlist_item_next_get(gen_item);
505 elm_genlist_item_show(gen_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
508 void msg_ui_thread_show_notify(PMSG_THREAD_LIST_DATA pListData, const char *msg)
510 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
511 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData);
514 PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
516 popup = elm_popup_add(pData->navi_frame);
518 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
519 elm_object_text_set(popup, msg);
521 evas_object_smart_callback_add(popup, "timeout", __msg_ui_thread_popup_response_cb, pListData);
522 elm_popup_timeout_set(popup, 0.8);
523 evas_object_show(popup);
525 pListData->popup = popup;
528 static void __msg_ui_thread_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
530 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
531 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !data);
533 PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
535 if ((int)event_info != 5 && obj) {
536 evas_object_del(obj);
537 pListData->popup = NULL;
540 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
543 void msg_ui_thread_show_del_popup(PMSG_THREAD_LIST_DATA pListData, const char *msg)
545 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
547 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData);
551 Evas_Object *btn_cancel;
552 PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
554 popup = elm_popup_add(pData->navi_frame);
556 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
557 elm_object_text_set(popup, msg);
559 btn_ok = elm_button_add(popup);
560 elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
561 elm_object_part_content_set(popup, "button1", btn_ok);
562 evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_thread_del_popup_ok_clicked_cb, pListData);
564 btn_cancel = elm_button_add(popup);
565 elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
566 elm_object_part_content_set(popup, "button2", btn_cancel);
567 evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_thread_del_popup_cancel_clicked_cb, pListData);
569 evas_object_data_set(popup, MSG_THREAD_POPUP_DATA, MSG_THREAD_DEL_CONFIRM);
570 evas_object_show(popup);
572 pListData->popup = popup;
576 static void __msg_ui_thread_del_popup_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
578 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
580 PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
581 Elm_Object_Item *it_dateline = NULL;
582 PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL;
585 const Elm_Object_Item *it = NULL;
587 if (pListData->popup) {
588 evas_object_del(pListData->popup);
589 pListData->popup = NULL;
592 it = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
595 goto __UNABLE_TO_DELETE;
597 if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) {
598 PMSG_APP_THREAD_DATA_S item_data = elm_object_item_data_get(it);
600 goto __UNABLE_TO_DELETE;
602 err = msg_delete_thread_message_list(msg_ui_thread_get_data_handle(), item_data->thread_id);
603 if (err != MSG_SUCCESS)
604 goto __UNABLE_TO_DELETE;
606 PMSG_APP_THREAD_MSG_DATA_S item_data = elm_object_item_data_get(it);
608 goto __UNABLE_TO_DELETE;
610 err = msg_delete_message(msg_ui_thread_get_data_handle(), item_data->msg_id);
611 if (err != MSG_SUCCESS)
612 goto __UNABLE_TO_DELETE;
615 it_dateline = elm_genlist_item_parent_get((Elm_Object_Item *)it);
617 dateline_data = elm_object_item_data_get(it_dateline);
620 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "subitem_cnt : %d", dateline_data->subitem_cnt);
621 dateline_data->subitem_cnt--;
622 if (dateline_data->subitem_cnt == 0)
623 elm_object_item_del((Elm_Object_Item *)it_dateline);
626 elm_object_item_del((Elm_Object_Item *)it);
628 msg_ui_thread_show_deleted_info(pListData);
629 pListData->item_cnt--;
631 if (pListData->item_cnt == 0) {
632 if (pListData->list_type == THREAD_NORMAL_LIST_TYPE)
633 msg_ui_thread_list_load(pListData, FALSE);
635 msg_ui_thread_msg_list_load(pListData, pListData->list_type);
641 msg_ui_thread_show_notify(pListData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
646 static void __msg_ui_thread_del_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
648 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
649 PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data;
651 if (pListData->popup) {
652 evas_object_del(pListData->popup);
653 pListData->popup = NULL;
657 Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_LIST_DATA pListData, int count)
659 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
661 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !pListData, NULL);
663 Evas_Object *popup, *progressbar, *box, *label;
664 char buf[DEF_BUF_LEN_S] = {0,};
665 PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
667 popup = elm_popup_add(pData->navi_frame);
669 label = elm_label_add(popup);
670 snprintf(buf, sizeof(buf), "0/%d %s", count, dgettext("sys_string", "IDS_COM_POP_DELETED"));
671 elm_object_text_set(label, buf);
673 // elm_label_text_align_set(label, "center");
674 evas_object_show(label);
676 progressbar = elm_progressbar_add(popup);
677 elm_object_style_set(progressbar, "list_progress");
678 evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
679 evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
680 elm_progressbar_value_set(progressbar, 0.0);
681 evas_object_show(progressbar);
683 box = elm_box_add(popup);
684 elm_box_pack_end(box, label);
685 elm_box_pack_end(box, progressbar);
686 evas_object_show(box);
688 elm_object_content_set(popup, box);
690 evas_object_show(popup);
692 pListData->progressbar = progressbar;
693 pListData->progresslabel = label;
698 void msg_ui_thread_show_select_info(PMSG_THREAD_LIST_DATA pListData)
700 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
701 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData);
703 PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
705 if (!pListData->select_info) {
706 pListData->select_info = elm_notify_add(pData->navi_frame);
707 elm_notify_orient_set(pListData->select_info, ELM_NOTIFY_ORIENT_BOTTOM);
709 pListData->selectioninfo_layout = elm_layout_add(pData->navi_frame);
710 elm_object_content_set(pListData->select_info, pListData->selectioninfo_layout);
714 elm_layout_theme_set(pListData->selectioninfo_layout, "standard", "selectioninfo", "horizontal/bottom_64");
716 elm_layout_theme_set(pListData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64");
718 if (pListData->check_cnt == 0) {
719 evas_object_hide(pListData->select_info);
720 elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE);
722 char text[DEF_BUF_LEN_S] = {'0',};
724 snprintf(text, sizeof(text), "%s (%d)", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_POP_SPACE_SELECTED"), pListData->check_cnt);
725 edje_object_part_text_set(_EDJ(pListData->selectioninfo_layout), "elm.text", text);
726 evas_object_show(pListData->select_info);
728 elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE);
732 void msg_ui_thread_show_deleted_info(PMSG_THREAD_LIST_DATA pListData)
734 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
735 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData);
737 status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED"));
740 void msg_ui_thread_set_app_state(int app_state)
742 if (app_state <= MSG_UI_STATE_NONE || app_state >= MSG_UI_STATE_MAX)
745 PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
750 if (app_state == MSG_UI_STATE_PAUSE) {
751 Elm_Object_Item* it_sweep = NULL;
752 PMSG_THREAD_LIST_DATA pListData = msg_ui_thread_get_current_list();
754 it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist);
756 elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE);
757 elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
761 pData->app_state = app_state;
764 int msg_ui_thread_get_app_state(PMSG_THREAD_DATA pData)
767 return MSG_UI_STATE_NONE;
769 return pData->app_state;
772 const char *msg_ui_thread_make_search_result_string(const char *string, char *searchword, bool *result)
774 char pstr[DEF_BUF_LEN + 1] = {0,};
775 static char return_string[DEF_BUF_LEN + 1] = { 0, };
780 gchar* markup_text_start;
781 gchar* markup_text_end;
784 if (!searchword) return string;
786 if (g_utf8_validate(string,-1,NULL)) {
788 strncpy(pstr, string, DEF_BUF_LEN);
790 word_len = strlen(pstr);
791 search_len = strlen(searchword);
793 for (i = 0; i < word_len; i++) {
794 if (!strncasecmp(searchword, &pstr[i], search_len)) {
801 memset(return_string, 0x00, DEF_BUF_LEN);
805 markup_text = g_markup_escape_text(&pstr[i], search_len);
806 markup_text_end = g_markup_escape_text(&pstr[search_len], word_len-search_len);
807 snprintf(return_string,
809 "<match>%s</match>%s",
811 (char*)markup_text_end);
813 g_free(markup_text_end);
815 markup_text_start = g_markup_escape_text(&pstr[0], i);
816 markup_text = g_markup_escape_text(&pstr[i], search_len);
817 markup_text_end = g_markup_escape_text(&pstr[i+search_len], word_len-(i+search_len));
818 snprintf(return_string,
820 "%s<match>%s</match>%s",
821 (char*)markup_text_start,
823 (char*)markup_text_end);
824 g_free(markup_text_start);
826 g_free(markup_text_end);
829 snprintf(return_string, DEF_BUF_LEN, "%s", pstr);
833 return return_string;
837 void msg_ui_thread_make_time_string(time_t *msg_t, char *buf, int buf_len)
839 PMSG_THREAD_DATA pData = msg_ui_thread_get_data();
842 unsigned long int msg_day, cur_day;
847 char *date_str = NULL;
850 localtime_r(msg_t, &msg_time);
851 localtime_r(&cur_t, &cur_time);
853 msg_day = (msg_time.tm_year - 1900) * 365 + msg_time.tm_yday + (msg_time.tm_year - 1900 - 1) / 4;
854 cur_day = (cur_time.tm_year - 1900) * 365 + cur_time.tm_yday + (cur_time.tm_year - 1900 - 1) / 4;
856 diffday = cur_day - msg_day;
859 snprintf(buf, buf_len, dgettext("sys_string", "IDS_COM_BODY_YESTERDAY"));
860 else if (diffday > 1) {
861 date_str = msg_common_get_formatted_date(pData->locale, pData->date_ptn, msg_t);
862 snprintf(buf, buf_len, " %s ", date_str);
864 if (pData->time_fmt == MSG_TIME_FORMAT_24H) {
865 date_str = msg_common_get_formatted_date(pData->locale, pData->time_24h_ptn, msg_t);
866 snprintf(buf, buf_len, " %s ", date_str);
867 } else { /* MSG_TIME_FORMAT_12H */
868 date_str = msg_common_get_formatted_date(pData->locale, pData->time_12h_ptn, msg_t);
869 snprintf(buf, buf_len, " %s ", date_str);