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.
17 /*==================================================================================================
19 *==================================================================================================*/
20 #include "msg-ui-viewer-play-view.h"
21 #include "msg-ui-viewer-main.h"
22 #include "msg-ui-image-resource.h"
23 #include "msg-ui-viewer-utility.h"
24 #include "msg-ui-common-utility.h"
27 #include <msg_storage.h>
28 #include <msg_transport.h>
34 #include <sound_manager.h>
37 /*==================================================================================================
38 * FUNCTION DECLARATIONS
39 *==================================================================================================*/
41 static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data);
42 static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data);
43 static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data);
44 static void __msg_ui_viewer_init_font_size(MSG_PLAY_DATA_S *data);
45 static void __msg_ui_viewer_vconf_changed_cb(keynode_t *key, void *data);
48 static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data);
49 static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data);
50 static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data);
51 static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data);
52 static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom);
54 /* help page genlist */
55 static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part);
56 static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part);
57 static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info);
58 static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj);
61 static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
63 /*==================================================================================================
64 * FUNCTION IMPLEMENTATIONS
65 *================================================================================================*/
66 MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data)
68 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
69 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL, MSG_ERR_SMIL_UI_DISPLAY_FAIURE);
70 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, MSG_ERR_SMIL_UI_DISPLAY_FAIURE);
71 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
72 char title_string[VIEWER_TITLE_FONT_LEN + 1] = {0, };
75 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "clientCbEvent : %d", eventStatus->clientCbEvent);
76 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isLastSlide : %d", eventStatus->isLastSlide);
77 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isHelpSlide : %d", eventStatus->isHelpSlide);
78 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageIdx : %d", eventStatus->pageIdx);
79 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageCnt : %d", eventStatus->pageCnt);
81 viewer_play_data->smil_eventStatus = eventStatus;
82 /*update prev/next button*/
83 msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_UNKOWN);
85 /*for Multipart.Mixed "Slide" count info.*/
86 if (eventStatus->pageCnt == 0 && eventStatus->clientCbEvent != SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START)
87 total_page = eventStatus->pageCnt + 1;
89 total_page = eventStatus->pageCnt;
92 snprintf(title_string, sizeof(title_string), "%d/%d ", eventStatus->pageIdx + 1, total_page);
93 edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "page/text", title_string);
95 if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE && eventStatus->isLastSlide == TRUE) {
96 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
97 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
98 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launchmode : %d", launchmode);
100 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
101 viewer_play_data->status = MSG_VIEWER_STOP;
102 if (viewer_play_data->play_controller)
103 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
104 //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
105 } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
106 viewer_play_data->status = MSG_VIEWER_STOP;
107 if (viewer_play_data->play_controller)
108 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
109 //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
110 if (viewer_play_data->popup) {
111 evas_object_del(viewer_play_data->popup);
112 viewer_play_data->popup = NULL;
113 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
116 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid launchmode");
118 } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START ||
119 eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_PLAY_START) { /*slide is playing*/
120 double current_slide_time = 0.0;
121 double remain_slide_time = 0.0;
122 double remain_next_slide_time = 0.0;
123 if (msg_smil_get_slide_time(viewer_play_data->SmilHandle, eventStatus->pageIdx, FALSE, &remain_slide_time)) {
124 if (msg_smil_get_slide_time(viewer_play_data->SmilHandle, eventStatus->pageIdx+1, FALSE, &remain_next_slide_time))
125 current_slide_time = remain_slide_time - remain_next_slide_time;
127 current_slide_time = remain_slide_time;
130 if (current_slide_time <= 0) { //for infinite duration slide, duration <= 0
131 if (viewer_play_data->play_controller_progressbar_timer)
132 ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
134 if (viewer_play_data->play_controller_progressbar_timer)
135 ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
138 //set pause icon in play controller
139 if (viewer_play_data->play_controller)
140 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
142 viewer_play_data->status = MSG_VIEWER_PLAY;
143 } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE || eventStatus->clientCbEvent == SMIL_RENDER_EVENT_MOVE_PAGE_AFTER_PAUSED) {
144 if (viewer_play_data->play_controller)
145 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
147 viewer_play_data->status = MSG_VIEWER_PAUSE;
149 if (viewer_play_data->play_controller_progressbar_timer)
150 ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
151 } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_ERROR) {
153 if (msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP) == MSG_SMIL_SUCCESS) {
154 if (viewer_play_data->play_controller)
155 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
156 //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
157 viewer_play_data->status = MSG_VIEWER_STOP;
158 msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
160 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler is failed");
164 if (msg_common_is_connected_call()) {
165 viewer_play_data->popup_type = MSG_VIEWER_NORMAL_POPUP;
166 msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"));
170 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
171 return MSG_SMIL_SUCCESS;
174 void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status)
176 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
177 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
178 MSG_BOOL bfisrt_page = FALSE;
179 MSG_BOOL blast_page = FALSE;
180 SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = viewer_play_data->smil_eventStatus;
181 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
183 if (status == MSG_VIEWER_STOP) {
184 if (viewer_play_data->play_controller) {
185 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
186 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
187 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
188 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
191 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL);
192 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide == NULL);
193 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide->commonData == NULL);
194 if (slide->commonData->pageCnt > 0) {
195 if (slide->pageIdx == 0)
198 if (slide->pageIdx + 1 == slide->commonData->pageCnt)
201 if (bfisrt_page) { /*first page*/
202 if (viewer_play_data->play_controller) {
203 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
204 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
207 if (viewer_play_data->play_controller) {
208 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_enable", "*");
209 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable prev_button");
213 if (blast_page) { /*lastpage*/
214 if (viewer_play_data->play_controller) {
215 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
216 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
219 if (viewer_play_data->play_controller) {
220 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_enable", "*");
221 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable next_button");
225 /*smil player is finished*/
226 if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE &&
227 eventStatus->isLastSlide == TRUE) {
228 if (viewer_play_data->play_controller) {
229 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
230 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
231 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
232 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
236 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart.mixed message");
237 if (viewer_play_data->play_controller) {
238 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
239 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
240 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
241 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
246 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
249 MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E action)
251 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
252 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
253 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
254 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
256 /*prevent invalid double pressing button event after launching ug or app( call, vtcall)*/
257 if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) {
258 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd);
263 case MSG_VIEWER_ACTION_TOOLBAR_PAUSE :
265 case MSG_VIEWER_ACTION_AUTO_PAUSE :
266 /* Do pause action only if current status is PLAY */
267 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
268 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
269 if (err != MSG_SMIL_SUCCESS) {
270 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
273 if (viewer_play_data->play_controller)
274 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
275 viewer_play_data->status = MSG_VIEWER_PAUSE;
277 if (viewer_play_data->play_controller_progressbar_timer)
278 ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
282 case MSG_VIEWER_ACTION_TOOLBAR_PLAY :
284 case MSG_VIEWER_ACTION_AUTO_PLAY :
285 /* Do play action when play status is STOP & PAUSE */
286 if (viewer_play_data->status == MSG_VIEWER_STOP) {
287 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
288 if (err != MSG_SMIL_SUCCESS) {
289 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
292 if (viewer_play_data->play_controller) {
293 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
294 msg_ui_viewer_create_progressbar(viewer_play_data, 0);
296 viewer_play_data->status = MSG_VIEWER_PLAY;
298 } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) {
299 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_RESUME);
300 if (err != MSG_SMIL_SUCCESS) {
301 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
304 if (viewer_play_data->play_controller)
305 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
306 viewer_play_data->status = MSG_VIEWER_PLAY;
308 if (viewer_play_data->play_controller_progressbar_timer)
309 ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
314 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid play status case");
318 /* refreshing play controller timer by button action */
319 if (action == MSG_VIEWER_ACTION_TOOLBAR_PLAY) {
320 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
321 if (viewer_play_data->title_menu_opened)
322 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
324 viewer_play_data->auto_resume_state = true;
325 } else if (action == MSG_VIEWER_ACTION_TOOLBAR_PAUSE) {
326 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
327 viewer_play_data->auto_resume_state = false;
329 /* case for not button action */
330 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
331 if (viewer_play_data->title_menu_opened)
332 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
334 /* show play controller again to notify SMIL is resumed */
335 if (viewer_play_data->play_controller && !viewer_play_data->playcontroller_opened) {
336 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
337 evas_object_show(viewer_play_data->play_controller);
338 viewer_play_data->playcontroller_opened = true;
339 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
340 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
342 } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) {
343 if (viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
344 /* show play controller again to notify SMIL is paused */
345 if (viewer_play_data->play_controller && !viewer_play_data->playcontroller_opened) {
346 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
347 evas_object_show(viewer_play_data->play_controller);
348 viewer_play_data->playcontroller_opened = true;
349 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
350 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
356 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
361 void msg_ui_viewer_play_view_init(void *data)
363 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
364 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
365 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
367 viewer_play_data->main_window = NULL;
368 viewer_play_data->navi_frame = NULL;
369 viewer_play_data->navi_item = NULL;
370 viewer_play_data->navi_title_layout= NULL;
371 viewer_play_data->title_button = NULL;
372 viewer_play_data->attach_button = NULL;
373 viewer_play_data->title_box_layout = NULL;
374 viewer_play_data->subject_index_layout = NULL;
375 viewer_play_data->play_controller = NULL;
376 viewer_play_data->play_layout = NULL;
377 viewer_play_data->help_page_gl = NULL;
378 viewer_play_data->save_attachment_gl = NULL;
379 viewer_play_data->render_entry = NULL;
380 viewer_play_data->save_button = NULL;
381 viewer_play_data->sa_check = NULL;
382 viewer_play_data->m_x = 0;
383 viewer_play_data->m_y = 0;
384 viewer_play_data->mouse_down_event_handler = NULL;
385 viewer_play_data->mouse_up_event_handler = NULL;
386 viewer_play_data->msgHandle = NULL;
387 viewer_play_data->msgID = -1;
388 viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
389 viewer_play_data->status = MSG_VIEWER_UNKOWN;
390 viewer_play_data->msg_t = NULL;
391 viewer_play_data->mms_t = NULL;
392 viewer_play_data->smil_eventStatus = NULL;
393 viewer_play_data->popup = NULL;
394 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
395 viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
396 viewer_play_data->del_idler = NULL;
397 viewer_play_data->play_controller_timer = NULL;
398 viewer_play_data->ctrl_start_x = 0;
399 viewer_play_data->ctrl_start_y = 0;
400 viewer_play_data->insert_count = 0;
401 viewer_play_data->attach_count = 0;
402 viewer_play_data->insert_list = NULL;
403 viewer_play_data->attach_list = NULL;
404 viewer_play_data->title_menu_opened = 0;
405 viewer_play_data->playcontroller_opened = 0;
406 viewer_play_data->auto_resume_state = true;
408 viewer_play_data->title_th = elm_theme_new();
409 elm_theme_ref_set(viewer_play_data->title_th, NULL);
410 elm_theme_extension_add(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ);
412 viewer_play_data->progress_th = elm_theme_new();
413 elm_theme_ref_set(viewer_play_data->progress_th, NULL);
414 elm_theme_extension_add(viewer_play_data->progress_th, MSG_VIEWER_EDJ);
416 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
419 void msg_ui_viewer_destroy_play_view(void *data)
421 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
422 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
423 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
424 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
426 if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
427 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
428 if (err != MSG_SMIL_SUCCESS) {
429 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
431 viewer_play_data->status = MSG_VIEWER_STOP;
435 if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb) < 0) {
436 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "unregister failed in vconf_notify_key_changed with key[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
438 if (vconf_ignore_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb) < 0) {
439 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "unregister failed in vconf_notify_key_changed with key[%s]", VCONFKEY_MSG_APP_FONT_SIZE);
442 if (viewer_play_data->insert_list) {
445 ntotal = eina_list_count(viewer_play_data->insert_list);
446 for (index = 0; index < ntotal; index++) {
447 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(viewer_play_data->insert_list, index);
453 eina_list_free(viewer_play_data->insert_list);
454 viewer_play_data->insert_list = NULL;
457 if (viewer_play_data->attach_list) {
460 ntotal = eina_list_count(viewer_play_data->attach_list);
461 for (index = 0; index < ntotal; index++) {
462 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, index);
468 eina_list_free(viewer_play_data->attach_list);
469 viewer_play_data->attach_list = NULL;
472 if (viewer_play_data->popup) {
473 evas_object_del(viewer_play_data->popup);
474 viewer_play_data->popup = NULL;
475 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
478 if (viewer_play_data->del_idler) {
479 ecore_idler_del(viewer_play_data->del_idler);
480 viewer_play_data->del_idler = NULL;
483 if (viewer_play_data->help_page_gl) {
484 evas_object_del(viewer_play_data->help_page_gl);
485 viewer_play_data->help_page_gl = NULL;
488 if (viewer_play_data->play_controller_timer) {
489 ecore_timer_del(viewer_play_data->play_controller_timer);
490 viewer_play_data->play_controller_timer = NULL;
493 if (viewer_play_data->play_controller_progressbar_timer) {
494 ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
495 viewer_play_data->play_controller_progressbar_timer = NULL;
498 if (viewer_play_data->title_th) {
499 elm_theme_extension_del(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ);
500 elm_theme_free(viewer_play_data->title_th);
501 viewer_play_data->title_th = NULL;
504 if (viewer_play_data->progress_th) {
505 elm_theme_extension_del(viewer_play_data->progress_th, EDJDIR"/msg_viewer.edj");
506 elm_theme_free(viewer_play_data->progress_th);
507 viewer_play_data->progress_th = NULL;
510 sound_manager_set_volume_key_type(VOLUME_KEY_TYPE_NONE);
512 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
515 void msg_ui_viewer_connect_handler(void *data)
517 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
518 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
519 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
521 /* connect mouse handler for flick event */
522 if (!viewer_play_data->mouse_down_event_handler)
523 viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data);
525 int use_volume_key = 0;
526 vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
528 if (use_volume_key && viewer_play_data->viewer_main) {
529 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
531 msg_ui_viewer_grab_key_setting(viewer_main_data);
532 /* connect key handler for volume up/down */
533 if (!viewer_main_data->volkey_release_handler)
534 viewer_main_data->volkey_release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, msg_ui_viewer_key_release_cb, (void *)viewer_main_data);
536 if (!viewer_main_data->volkey_press_handler)
537 viewer_main_data->volkey_press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, msg_ui_viewer_key_press_cb, (void *)viewer_main_data);
540 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
543 void msg_ui_viewer_disconnect_handler(void *data)
545 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
546 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
547 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
549 if (viewer_play_data->mouse_up_event_handler) {
550 ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
551 viewer_play_data->mouse_up_event_handler = NULL;
554 if (viewer_play_data->mouse_down_event_handler) {
555 ecore_event_handler_del(viewer_play_data->mouse_down_event_handler);
556 viewer_play_data->mouse_down_event_handler = NULL;
559 if (viewer_play_data->viewer_main) {
560 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
561 if (viewer_main_data->volkey_release_handler) {
562 ecore_event_handler_del(viewer_main_data->volkey_release_handler);
563 viewer_main_data->volkey_release_handler = NULL;
566 if (viewer_main_data->vol_up_key_longpress) {
567 ecore_timer_del(viewer_main_data->vol_up_key_longpress);
568 viewer_main_data->vol_up_key_longpress = NULL;
571 if (viewer_main_data->volkey_press_handler) {
572 ecore_event_handler_del(viewer_main_data->volkey_press_handler);
573 viewer_main_data->volkey_press_handler = NULL;
576 if (viewer_main_data->vol_down_key_longpress) {
577 ecore_timer_del(viewer_main_data->vol_down_key_longpress);
578 viewer_main_data->vol_down_key_longpress = NULL;
581 msg_ui_viewer_ungrab_key_setting(viewer_main_data);
584 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
587 MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
589 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
590 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
591 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
592 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL, FALSE);
593 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL, FALSE);
594 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
595 Evas_Object *layout = NULL;
596 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
598 /*get message information like bgcolor, insert and attach count
599 *it should be called before __msg_ui_viewer_create_control_toolbar*/
600 if (__msg_ui_viewer_play_view_get_message_info(viewer_play_data) == FALSE)
601 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_viewer_play_view_get_content_count is failed");
603 layout = msg_ui_viewer_get_main_layout(viewer_play_data->viewer_main);
604 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE);
606 /* create naviframe */
607 if (!viewer_play_data->navi_frame) {
608 viewer_play_data->navi_frame = msg_ui_viewer_create_navigation_layout(layout);
609 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->navi_frame == NULL, FALSE);
610 msg_ui_viewer_set_navi_frame(viewer_play_data->viewer_main, viewer_play_data->navi_frame);
612 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "navi_frame is already created");
615 /*create play layout*/
616 if (__msg_ui_viewer_create_content_layout(viewer_play_data) == FALSE)
619 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
621 /* create back button */
622 Evas_Object *back_btn = elm_button_add(viewer_play_data->navi_frame);
623 elm_object_style_set(back_btn, "naviframe/back_btn/default");
624 evas_object_smart_callback_add(back_btn, "clicked", msg_ui_viewer_back_button_cb, (void*)viewer_play_data);
626 /* set title text & title button */
627 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
628 /* create naviframe item and push */
629 viewer_play_data->navi_item = elm_naviframe_item_push(viewer_play_data->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_HEADER_PREVIEW"), back_btn, NULL, viewer_play_data->play_layout, NULL);
631 /* create naviframe item and push */
632 viewer_play_data->navi_item = elm_naviframe_item_push(viewer_play_data->navi_frame, NULL, back_btn, NULL, viewer_play_data->play_layout, "empty");
634 /* create naviframe title layout and set */
635 viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data);
636 elm_object_item_part_content_set(viewer_play_data->navi_item, "title", viewer_play_data->navi_title_layout);
637 msg_ui_viewer_set_navi_title_layout(viewer_play_data);
640 /* register vconf notify */
641 if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb, viewer_play_data) < 0) {
642 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "register failed in vconf_notify_key_changed with key[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
644 if (vconf_notify_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb, viewer_play_data) < 0) {
645 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "register failed in vconf_notify_key_changed with key[%s]", VCONFKEY_MSG_APP_FONT_SIZE);
649 __msg_ui_viewer_init_font_size(viewer_play_data);
650 /* create subject & index layout */
651 __msg_ui_viewer_create_subject_index_layout(viewer_play_data);
652 /* create page navigator */
653 __msg_ui_viewer_create_play_controller(viewer_play_data);
654 /* create control toolbar */
655 __msg_ui_viewer_create_control_toolbar(viewer_play_data);
656 /* connect handlers */
657 msg_ui_viewer_connect_handler(viewer_play_data);
659 /* create smil rendering layout */
660 if (msg_smil_create_smil_player_layout(viewer_play_data->SmilHandle, viewer_play_data->play_layout) == FALSE)
663 SMIL_POSITION_S left_top = {0,};
664 SMIL_POSITION_S right_bottom = {0,};
665 __msg_ui_viewer_get_layout_size(viewer_play_data, &left_top, &right_bottom);
667 if (msg_smil_set_smil_player_layout_size(viewer_play_data->SmilHandle, &left_top, &right_bottom) == FALSE)
670 /*register help page show callback to renderer */
671 if (msg_smil_set_smil_player_help_page_cb(viewer_play_data->SmilHandle, msg_ui_viewer_help_page_smilrenderer_cb, (void *)viewer_play_data) == FALSE)
672 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_help_page_cb is failed");
674 /*register change font size callback to render */
675 if (msg_smil_set_smil_player_entry_handle_cb(viewer_play_data->SmilHandle, msg_ui_viewer_set_entry_handle_cb) == FALSE)
676 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_cutlink_cb is failed");
678 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
679 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREVIEW_PLAY);
680 if (err != MSG_SMIL_SUCCESS) {
681 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
682 if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
686 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
687 if (err != MSG_SMIL_SUCCESS) {
688 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
689 if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
694 if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
696 bool readStatus = FALSE;
697 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_READ_BOOL, &readStatus);
700 msg_update_read_status(viewer_play_data->msgHandle, viewer_play_data->msgID, TRUE);
702 /* send read report*/
703 int folder_id = MSG_MAX_FOLDER_ID;
704 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
705 if (folder_id == MSG_INBOX_ID) {
706 msg_error_t err = MSG_SUCCESS;
708 msg_struct_t rcvSetting_info = msg_create_struct(MSG_STRUCT_SETTING_MMS_RECV_OPT);
709 err = msg_get_mms_recv_opt(viewer_play_data->msgHandle, rcvSetting_info);
711 if (err == MSG_SUCCESS) {
713 msg_get_bool_value(rcvSetting_info, MSG_MMS_RECVOPT_READ_REPORT_BOOL, &bReadReport);
715 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "bsend_read_report = %d", bReadReport);
716 /*read report request status and sent read report result of current message will be checked by MF after calling msg_mms_send_read_report.
717 *So, currently ui always call msg_mms_send_read_report when setting value of send read report is on*/
719 msg_mms_send_read_report(viewer_play_data->msgHandle, viewer_play_data->msgID, MSG_READ_REPORT_IS_READ);
722 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_config is failed!");
724 msg_release_struct(&rcvSetting_info);
728 /* set volume key type as MEDIA, not SYSTEM */
729 sound_manager_set_volume_key_type(VOLUME_KEY_TYPE_MEDIA);
731 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
736 MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data)
738 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
739 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
740 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
741 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
743 /* connect handler again*/
744 msg_ui_viewer_connect_handler(viewer_play_data);
746 /*change command bar*/
747 if (viewer_play_data->play_controller) {
748 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
749 msg_ui_viewer_create_progressbar(viewer_play_data, 0);
753 if (!viewer_play_data->navi_title_layout)
754 viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data);
756 msg_ui_viewer_set_navi_title_layout(viewer_play_data);
759 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
760 if (err != MSG_SMIL_SUCCESS) {
761 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
765 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
769 Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent)
771 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
772 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
773 Evas_Object *navi_frame = NULL;
775 navi_frame = elm_naviframe_add(parent);
776 elm_object_part_content_set(parent, "elm.swallow.content", navi_frame);
777 evas_object_show(navi_frame);
779 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
783 static void __msg_ui_viewer_init_font_size(MSG_PLAY_DATA_S *data)
785 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
786 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
787 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
791 int access_font_index = 0;
792 int msg_access_font_index = 0;
795 /* get msg accessibility font index */
796 if (msg_common_get_access_font_size(&msg_access_font_index) == FALSE) {
797 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_access_font_size is failed !!");
798 msg_access_font_index = MSG_APP_FONT_SIZE_INDEX_NORMAL; /* 1 */
801 /* get accessibility font index */
802 if (vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &access_font_index) < 0) {
803 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE) is failed !!");
804 access_font_index = MSG_SYS_FONT_SIZE_INDEX_NORMAL; /* 1 */
807 if (msg_common_get_font_size(&index) == FALSE) {
808 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_font_size() is failed");
811 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected font_size index = %d", index);
814 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "VCONFKEY_MSG_APP_ACCESS_FONT_SIZE = %d", msg_access_font_index);
815 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE = %d", access_font_index);
817 if (msg_access_font_index != access_font_index) {
818 font_size = msg_common_get_font_size_from_index(access_font_index);
820 /* sync current font size as accessibility font index */
821 if (msg_common_set_font_size(access_font_index) == FALSE)
822 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_set_font_size(index = %d) is failed !!", access_font_index);
824 /* sync msg accessibility font size with accessibility font index */
825 if (msg_common_set_access_font_size(access_font_index) == FALSE)
826 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_set_int(VCONFKEY_MSG_APP_ACCESS_FONT_SIZE) is failed !!, [%d]", access_font_index);
828 font_size = msg_common_get_font_size_from_index(index);
831 viewer_play_data->font_size = font_size;
834 void msg_ui_viewer_set_font_size(MSG_PLAY_DATA_S *data, MSG_VIEWER_ENTRY_TYPE_E entry_type, MSG_VIEWER_FONT_CHANGE_TYPE_E change_type)
836 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
837 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
838 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
841 if (change_type == MSG_VIEWER_FONT_CHANGE_LOAD_SETTING) {
842 if (msg_common_get_font_size(&index) == FALSE) {
843 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_font_size() is failed");
846 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected font_size index = %d", index);
848 viewer_play_data->font_size = msg_common_get_font_size_from_index(index);
850 index = msg_common_get_index_from_font_size(viewer_play_data->font_size);
851 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "use latest updated font, index = %d, size = %d", index, viewer_play_data->font_size);
854 if (viewer_play_data->render_entry) {
855 char font_size_str[DEF_BUF_LEN_S + 1] = {0,};
857 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "entry type = %d", entry_type);
859 if (entry_type == MSG_VIEWER_ENTRY_NORMAL_TEXT)
860 snprintf(font_size_str, sizeof(font_size_str), "DEFAULT='font_size=%d'", viewer_play_data->font_size);
862 snprintf(font_size_str, sizeof(font_size_str), "DEFAULT='font_size=%d'", (viewer_play_data->font_size*4)/5);
864 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font_size_str = (%s)", font_size_str);
865 elm_entry_text_style_user_push(viewer_play_data->render_entry, font_size_str);
869 static void __msg_ui_viewer_vconf_changed_cb(keynode_t *key, void *data)
871 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
872 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
873 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
877 char *key_name = NULL;
879 if ((key_name = vconf_keynode_get_name(key)) == NULL) {
880 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "key_name is NULL");
884 if (!strcmp(key_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) {
885 index = vconf_keynode_get_int(key);
886 font_size = msg_common_get_font_size_from_index(index);
887 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font size updated with ACCESSIBILITY TYPE, index = %d, font size = %d", index, font_size);
889 viewer_play_data->font_size = font_size;
891 /* sync current font size as accessibility font index */
892 if (msg_common_set_font_size(index) == FALSE)
893 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_set_font_size(index = %d) is failed !!", index);
895 /* sync msg accessibility font size with accessibility font index */
896 if (msg_common_set_access_font_size(index) == FALSE)
897 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_set_int(VCONFKEY_MSG_APP_ACCESS_FONT_SIZE) is failed !!, [%d]", index);
899 } else if (!strcmp(key_name, VCONFKEY_MSG_APP_FONT_SIZE)) {
900 index = vconf_keynode_get_int(key);
901 font_size = msg_common_get_font_size_from_index(index);
902 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font size updated with MSG TYPE, index = %d, font size = %d", index, font_size);
904 viewer_play_data->font_size = font_size;
906 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid key name");
910 static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data)
912 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
913 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
914 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
916 if (!viewer_play_data->play_layout) {
917 viewer_play_data->play_layout = elm_layout_add(viewer_play_data->navi_frame);
918 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->play_layout == NULL, FALSE);
919 elm_layout_file_set(viewer_play_data->play_layout, MSG_VIEWER_THEME, "viewer_main");
920 evas_object_size_hint_weight_set(viewer_play_data->play_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
921 evas_object_show(viewer_play_data->play_layout);
923 evas_object_event_callback_add(viewer_play_data->play_layout, EVAS_CALLBACK_MOUSE_DOWN, msg_ui_viewer_play_layout_mouse_down_cb, (void *)viewer_play_data);
924 evas_object_event_callback_add(viewer_play_data->play_layout, EVAS_CALLBACK_MOUSE_UP, msg_ui_viewer_play_layout_mouse_up_cb, (void *)viewer_play_data);
925 elm_object_signal_callback_add(viewer_play_data->play_layout, "action,clicked", "", msg_ui_viewer_play_layout_clicked_cb, (void *)viewer_play_data);
928 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
932 static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data)
934 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
935 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
936 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
937 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
938 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
939 char strSubject[MAX_SUBJECT_LEN] = {0};
941 Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
942 elm_layout_file_set(layout, MSG_VIEWER_THEME, "subject/pageindex");
943 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
944 evas_object_show(layout);
945 viewer_play_data->subject_index_layout = layout;
948 Evas_Object *bg = evas_object_rectangle_add(evas_object_evas_get(layout));
949 evas_object_color_set(bg, 248, 246, 239, 255);
950 elm_object_part_content_set(layout, "rect/bg", bg);
951 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
952 evas_object_show(bg);
954 /* get subject str */
955 msg_get_str_value(viewer_play_data->msg_t, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN);
956 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "subject text is %s", strSubject);
958 if (strSubject[0] != '\0')
959 edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "subject/text", strSubject);
961 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.subject", viewer_play_data->subject_index_layout);
963 /* set LOCK icon if available */
964 bool bProtected = false;
965 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &bProtected);
966 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Lock status of current message %d", bProtected);
967 edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), ((bProtected) ? "lock/icon/show" : "lock/icon/hide"), "*");
969 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
972 static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data)
974 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
975 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
976 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
978 Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
979 elm_layout_file_set(layout, MSG_VIEWER_THEME, "play_controller");
980 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
981 evas_object_show(layout);
983 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", layout);
984 viewer_play_data->play_controller = layout;
985 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
987 //add signal callbacks
988 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "volume_clicked", "", msg_ui_viewer_volume_button_cb, (void *)viewer_play_data);
989 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "prev_clicked", "", msg_ui_viewer_prev_button_cb, (void *)viewer_play_data);
990 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "play_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
991 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "pause_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
992 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "next_clicked", "", msg_ui_viewer_next_button_cb, (void *)viewer_play_data);
994 viewer_play_data->playcontroller_opened = true;
997 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
1000 msg_ui_viewer_create_progressbar(viewer_play_data, 0);
1002 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1005 static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data)
1007 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1008 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1009 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1010 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1011 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
1013 Evas_Object *btn = NULL;
1014 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
1016 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
1018 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
1019 // TODO : EMPTY, needs to add item?
1020 } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
1021 // unset and delete btn objects(init)
1022 if (viewer_play_data->more_btn)
1023 evas_object_del(viewer_play_data->more_btn);
1024 elm_object_item_part_content_unset(viewer_play_data->navi_item, "toolbar_more_btn");
1027 btn = elm_button_add(viewer_play_data->navi_frame);
1028 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, btn == NULL);
1029 elm_object_style_set(btn, "naviframe/more/default");
1030 elm_object_item_part_content_set(viewer_play_data->navi_item, "toolbar_more_btn", btn);
1031 viewer_play_data->more_btn = btn;
1033 evas_object_smart_callback_add(btn, "clicked", msg_ui_viewer_more_button_cb, data);
1035 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid launch mode");
1038 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1041 Evas_Object *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data)
1043 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1044 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1045 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1047 Evas_Object *title_layout = elm_layout_add(viewer_play_data->navi_frame);
1048 elm_layout_file_set(title_layout, MSG_VIEWER_THEME, "title");
1050 evas_object_size_hint_weight_set(title_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1051 evas_object_size_hint_align_set(title_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1052 evas_object_show(title_layout);
1054 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1055 return title_layout;
1058 void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data)
1060 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1061 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1062 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1063 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1064 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
1066 int folder_id = MSG_MAX_FOLDER_ID;
1067 char *display_name = NULL;
1068 char title_address[MAX_ADDRESS_VAL_LEN + 1] = {0,};
1069 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
1071 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type
1072 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
1074 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
1075 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launchmode is not applicable, current mode is %d", launchmode);
1078 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "folder_id = [%d]", folder_id);
1080 if (folder_id == MSG_INBOX_ID) {
1081 viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
1082 evas_object_size_hint_weight_set(viewer_play_data->title_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1083 evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
1085 elm_object_focus_allow_set(viewer_play_data->title_button, EINA_FALSE);
1086 elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
1087 elm_object_style_set(viewer_play_data->title_button, "title_button");
1089 char *address = NULL;
1092 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1094 if (contact_id > 0) {
1095 display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1098 snprintf(title_address, sizeof(title_address), "%s", display_name);
1101 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name");
1102 snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
1109 snprintf(title_address, sizeof(title_address), "%s", address);
1114 elm_object_text_set(viewer_play_data->title_button, title_address);
1116 evas_object_show(viewer_play_data->title_button);
1117 elm_object_part_content_set(viewer_play_data->navi_title_layout, "title_btn", viewer_play_data->title_button);
1118 evas_object_smart_callback_add(viewer_play_data->title_button, "clicked", msg_ui_viewer_title_button_clicked_cb, (void *)viewer_play_data);
1119 } else if (folder_id == MSG_OUTBOX_ID || folder_id == MSG_SENTBOX_ID) {
1120 viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
1121 evas_object_size_hint_weight_set(viewer_play_data->title_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1122 evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
1124 elm_object_focus_allow_set(viewer_play_data->title_button, EINA_FALSE);
1125 elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
1126 elm_object_style_set(viewer_play_data->title_button, "title_button");
1128 char *address = NULL;
1131 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1133 if (contact_id > 0) {
1134 display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1137 snprintf(title_address, sizeof(title_address), "%s", display_name);
1140 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name");
1141 snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
1148 snprintf(title_address, sizeof(title_address), "%s", address);
1153 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1155 if (addr_count == 1) {
1156 elm_object_text_set(viewer_play_data->title_button, title_address);
1157 } else if (addr_count > 1) {
1158 char title_text[DEF_BUF_LEN+1] = {0,};
1159 snprintf(title_text, sizeof(title_text), "%s +%d", title_address, addr_count-1);
1160 elm_object_text_set(viewer_play_data->title_button, title_text);
1162 elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1165 evas_object_show(viewer_play_data->title_button);
1166 elm_object_part_content_set(viewer_play_data->navi_title_layout, "title_btn", viewer_play_data->title_button);
1167 evas_object_smart_callback_add(viewer_play_data->title_button, "clicked", msg_ui_viewer_title_button_clicked_cb, (void *)viewer_play_data);
1169 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid type of message folder id = [%d]", folder_id);
1172 /* create attach button */
1173 Evas_Object *button = elm_button_add(viewer_play_data->navi_frame);
1174 elm_object_style_set(button, "naviframe/title_icon");
1176 Evas_Object *icon = elm_icon_add(viewer_play_data->navi_frame);
1178 if (viewer_play_data->insert_count + viewer_play_data->attach_count != 0) {
1179 elm_object_disabled_set(button, EINA_FALSE);
1180 elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_LIST_ICON);
1182 elm_object_disabled_set(button, EINA_TRUE);
1183 elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_LIST_DIM_ICON);
1186 elm_object_content_set(button, icon);
1187 evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_save_button_cb, viewer_play_data);
1189 evas_object_show(button);
1190 elm_object_part_content_set(viewer_play_data->navi_title_layout, "attach_btn", button);
1192 viewer_play_data->attach_button = button;
1195 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1198 static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom)
1200 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1201 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1202 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, left_top == NULL);
1203 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, right_bottom == NULL);
1204 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1205 int navi_frame_height = 0;
1206 int window_width = 0;
1207 int window_height = 0;
1210 ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, &window_height);
1211 viewer_play_data->window_width = window_width;
1212 viewer_play_data->window_height = window_height;
1214 /*get navi_frame height*/
1215 double scale = elm_config_scale_get();
1216 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "scale = %lf", scale);
1218 navi_frame_height = (int)(scale * VIEWER_NAVI_FRAME_HEIGHT);
1219 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "navi_frame_height = %d", navi_frame_height);
1222 left_top->y = navi_frame_height;
1223 right_bottom->x = window_width;
1224 right_bottom->y = window_height;
1226 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1229 static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data)
1231 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1232 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
1233 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1235 int media_count = 0;
1236 int nmedia_count = 0;
1239 /*get the SMIL content*/
1240 if (!viewer_play_data->mms_t) {
1241 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mms data struct is null");
1246 msg_get_int_value(viewer_play_data->mms_t, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor);
1247 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->bgcolor = 0x%x", bgColor);
1249 /*get attach count*/
1250 msg_list_handle_t attachlist_info = NULL;
1251 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
1252 viewer_play_data->attach_count= msg_list_length(attachlist_info);
1254 /*get attach list */
1255 viewer_play_data->attach_list = __msg_ui_viewer_get_attach_list(viewer_play_data);
1257 /*get insert count*/
1258 msg_list_handle_t pagelist_info = NULL;
1259 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
1260 page_count = msg_list_length(pagelist_info);
1264 for (page_idx = 0; page_idx < page_count; ++page_idx) {
1265 msg_struct_t page_info = NULL;
1266 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
1269 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
1273 msg_list_handle_t medialist_info = NULL;
1274 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
1275 media_count = msg_list_length(medialist_info);
1276 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count);
1279 for (media_idx = 0; media_idx < media_count; ++media_idx) {
1281 msg_struct_t media_info = NULL;
1282 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
1285 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is NULL", media_idx);
1289 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
1291 if (mediaType == MMS_SMIL_MEDIA_TEXT)
1298 viewer_play_data->insert_count = nmedia_count;
1300 /* get insert item list */
1301 viewer_play_data->insert_list = __msg_ui_viewer_get_inserted_item_list(viewer_play_data);
1302 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert count : %d, attach count : %d", viewer_play_data->insert_count, viewer_play_data->attach_count);
1304 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1309 int msg_ui_viewer_get_thread_address_count(MSG_PLAY_DATA_S *data)
1311 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, -1);
1312 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1313 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL, -1);
1314 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL, -1);
1315 msg_struct_list_s addrList;
1317 msg_error_t err = MSG_SUCCESS;
1320 /* get address list(thread) */
1321 memset(&addrList, 0x00, sizeof(msg_struct_list_s));
1322 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
1324 err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
1325 if (err != MSG_SUCCESS) {
1326 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_address_list has failed");
1330 count = addrList.nCount;
1332 msg_release_list_struct(&addrList);
1337 void msg_ui_viewer_get_thread_address_nth_address(MSG_PLAY_DATA_S *data, int number, char **address, int *contact_id)
1339 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1340 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1341 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1342 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1343 msg_struct_list_s addrList;
1345 msg_error_t err = MSG_SUCCESS;
1346 char buf_address[MAX_ADDRESS_VAL_LEN+1] = {0,};
1348 /* get address list(thread) */
1349 memset(&addrList, 0x00, sizeof(msg_struct_list_s));
1350 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
1352 err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
1353 if (err != MSG_SUCCESS) {
1354 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_address_list has failed");
1358 /* get Nth address */
1359 if (addrList.msg_struct_info[number]) {
1360 err = msg_get_str_value(addrList.msg_struct_info[number], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, buf_address, MAX_ADDRESS_VAL_LEN);
1361 if (err != MSG_SUCCESS) {
1362 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_str_value() is failed");
1363 msg_release_list_struct(&addrList);
1367 err = msg_get_int_value(addrList.msg_struct_info[number], MSG_ADDRESS_INFO_CONTACT_ID_INT, contact_id);
1368 if (err != MSG_SUCCESS) {
1369 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_int_value() is failed");
1370 msg_release_list_struct(&addrList);
1374 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "addrList.msg_struct_info[%d] is NULL", number);
1375 msg_release_list_struct(&addrList);
1379 msg_release_list_struct(&addrList);
1381 *address = (char *)calloc(1, strlen(buf_address) + 1);
1382 if (*address == NULL) {
1383 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "*address is NULL");
1387 strncpy(*address, buf_address, strlen(buf_address));
1389 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is %s", *address);
1390 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "contact_id is %d", *contact_id);
1393 static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data)
1395 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1396 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1397 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1401 int media_count = 0;
1404 Eina_List *insert_list = NULL;
1406 char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
1407 char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
1409 /*get insert count*/
1410 msg_list_handle_t pagelist_info = NULL;
1411 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
1412 page_count = msg_list_length(pagelist_info);
1414 for (page_idx = 0; page_idx < page_count; ++page_idx) {
1415 msg_struct_t page_info = NULL;
1416 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
1418 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
1422 msg_list_handle_t medialist_info = NULL;
1423 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
1424 media_count = msg_list_length(medialist_info);
1425 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count);
1428 for (media_idx = 0; media_idx < media_count; ++media_idx) {
1430 msg_struct_t media_info = NULL;
1431 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
1434 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx);
1438 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
1440 if (mediaType == MMS_SMIL_MEDIA_TEXT) {
1441 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is TEXT type, skip adding", media_idx);
1445 bzero(strFileName, sizeof(strFileName));
1446 bzero(strFilePath, sizeof(strFilePath));
1448 msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName));
1449 msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
1451 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert media file name: %s", strFileName);
1452 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
1454 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pInsert_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1455 if (pInsert_info == NULL) {
1456 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
1462 if (strlen(strFileName)) {
1463 strncpy(pInsert_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
1465 const char *file_name = NULL;
1466 file_name = ecore_file_file_get(strFilePath);
1468 strncpy(pInsert_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
1470 strncpy(pInsert_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
1473 strncpy(pInsert_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
1475 pInsert_info->pfile_size = ecore_file_size(strFilePath);
1477 msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType);
1479 if (drmType != MSG_DRM_TYPE_NONE) {
1480 pInsert_info->media_type = MSG_VIEWER_MEDIA_DRM;
1482 switch (mediaType) {
1483 case MMS_SMIL_MEDIA_IMG:
1484 pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG;
1486 case MMS_SMIL_MEDIA_AUDIO:
1487 pInsert_info->media_type = MSG_VIEWER_MEDIA_AUDIO;
1489 case MMS_SMIL_MEDIA_VIDEO:
1490 pInsert_info->media_type = MSG_VIEWER_MEDIA_VIDEO;
1492 case MMS_SMIL_MEDIA_ANIMATE:
1493 pInsert_info->media_type = MSG_VIEWER_MEDIA_ANIMATE;
1495 case MMS_SMIL_MEDIA_IMG_OR_VIDEO:
1496 pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG_OR_VIDEO;
1499 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d type is not handled in switch!");
1500 pInsert_info->media_type = MSG_VIEWER_MEDIA_ATTACH; // set attach type, it's better to set attach type, not to set invalid type
1504 pInsert_info->viewer_play_data = viewer_play_data;
1506 /*append insert item list*/
1507 insert_list = eina_list_append(insert_list, pInsert_info);
1513 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d insert item(s) added", insertCnt);
1514 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1518 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free insert item list");
1522 ntotal = eina_list_count(insert_list);
1523 for (index = 0; index < ntotal; index++) {
1524 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(insert_list, index);
1530 eina_list_free(insert_list);
1536 static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data)
1538 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1539 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1540 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1542 /*get attached content list*/
1544 int attach_count = 0;
1545 Eina_List *attach_list = NULL;
1546 char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
1547 char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
1549 /*get attach count*/
1550 msg_list_handle_t attachlist_info = NULL;
1551 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
1552 attach_count = msg_list_length(attachlist_info);
1554 for (attach_idx = 0; attach_idx < attach_count; ++attach_idx) {
1555 msg_struct_t attach_info = NULL;
1557 attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, attach_idx);
1559 if (attach_info == NULL) {
1560 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach is NULL");
1563 bzero(strFileName, sizeof(strFileName));
1564 bzero(strFilePath, sizeof(strFilePath));
1566 msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, strFileName, sizeof(strFileName));
1567 msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath));
1569 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file name: %s", strFileName);
1570 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
1572 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1573 if (pAttach_info == NULL) {
1574 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
1580 if (strlen(strFileName)) {
1581 strncpy(pAttach_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
1583 const char *file_name = NULL;
1584 file_name = ecore_file_file_get(strFilePath);
1586 strncpy(pAttach_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
1588 strncpy(pAttach_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
1591 strncpy(pAttach_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
1593 pAttach_info->pfile_size = ecore_file_size(strFilePath);
1594 pAttach_info->media_type = MSG_VIEWER_MEDIA_ATTACH;
1595 pAttach_info->viewer_play_data = viewer_play_data;
1597 /*append attach list*/
1598 attach_list = eina_list_append(attach_list, pAttach_info);
1604 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d attach(s) added", attach_count);
1605 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1609 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free attachment list");
1613 ntotal = eina_list_count(attach_list);
1614 for (index = 0; index < ntotal; index++) {
1615 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(attach_list, index);
1618 pAttach_info = NULL;
1621 eina_list_free(attach_list);
1627 void msg_ui_viewer_title_update(MSG_PLAY_DATA_S *data, MSG_VIEWER_OPTION_CHANGE_TYPE_E option_type)
1629 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1630 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1631 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1633 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1635 char *address = NULL;
1638 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1641 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1645 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "addr_count = %d, address = %s, contact_id = %d", addr_count, address, contact_id);
1647 if (option_type == MSG_VIEWER_OPTION_CONTACT) {
1648 display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1649 /* change title button */
1650 if (addr_count == 1) {
1652 elm_object_text_set(viewer_play_data->title_button, display_name);
1655 elm_object_text_set(viewer_play_data->title_button, address);
1657 } else if (addr_count > 1) {
1658 char title_text[DEF_BUF_LEN+1] = {0,};
1660 snprintf(title_text, sizeof(title_text), "%s +%d", display_name, addr_count-1);
1663 snprintf(title_text, sizeof(title_text), "%s +%d", address, addr_count-1);
1666 elm_object_text_set(viewer_play_data->title_button, title_text);
1668 elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1674 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1679 void msg_ui_viewer_show_popup(void *data, Evas_Object *parent, char *pcontent)
1681 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1682 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1683 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, parent == NULL);
1684 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1685 Evas_Object *popup = NULL;
1687 if (viewer_play_data->popup) {
1688 evas_object_del(viewer_play_data->popup);
1689 viewer_play_data->popup = NULL;
1690 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1693 popup = elm_popup_add(parent);
1694 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, popup == NULL, "popup is NULL");
1695 viewer_play_data->popup = popup;
1696 viewer_play_data->popup_type = MSG_VIEWER_NORMAL_POPUP;
1697 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1700 elm_object_text_set(popup, pcontent);
1701 elm_popup_timeout_set(popup, 2);
1702 evas_object_smart_callback_add(popup, "block,clicked", msg_ui_viewer_popup_block_clicked_cb, viewer_play_data);
1703 evas_object_smart_callback_add(popup, "timeout", msg_ui_viewer_popup_timeout_cb, viewer_play_data);
1705 evas_object_del(viewer_play_data->popup);
1706 viewer_play_data->popup = NULL;
1707 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1711 evas_object_show(popup);
1713 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1716 void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1718 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1719 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1720 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1722 if (viewer_play_data->popup) {
1723 evas_object_del(viewer_play_data->popup);
1724 viewer_play_data->popup = NULL;
1725 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1728 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1731 void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
1733 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1734 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1735 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1737 if (viewer_play_data->popup) {
1738 evas_object_del(viewer_play_data->popup);
1739 viewer_play_data->popup = NULL;
1740 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1743 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1746 MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box)
1748 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1749 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1750 Evas_Object *renderBox = (Evas_Object *)box;
1751 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
1752 int attach_count = viewer_play_data->attach_count;
1754 /* create box (for setting min size of genlist)*/
1755 Evas_Object *box2 = elm_box_add(renderBox);
1756 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1757 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1758 evas_object_show(box2);
1760 /* create genlist */
1761 Evas_Object *genlist = elm_genlist_add(box2);
1762 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1763 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1764 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1765 elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
1766 evas_object_show(genlist);
1768 elm_box_pack_end(box2, genlist);
1769 evas_object_size_hint_min_set(box2, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * (attach_count + 1) * elm_config_scale_get());
1771 viewer_play_data->hp_sa_class.item_style = "dialogue/1text.1icon";
1772 viewer_play_data->hp_sa_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
1773 viewer_play_data->hp_sa_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get;
1774 viewer_play_data->hp_sa_class.func.state_get = NULL;
1775 viewer_play_data->hp_sa_class.func.del = __msg_ui_viewer_help_page_gl_del;
1777 viewer_play_data->hp_class.item_style = "dialogue/1text.2icon";
1778 viewer_play_data->hp_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
1779 viewer_play_data->hp_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get;
1780 viewer_play_data->hp_class.func.state_get = NULL;
1781 viewer_play_data->hp_class.func.del = __msg_ui_viewer_help_page_gl_del;
1783 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "attachment_count = %d", attach_count);
1785 if (attach_count > 0) {
1786 int attach_index = 0;
1788 if (attach_count > 1) {
1789 //make 'Save all' item
1790 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1791 memset(pItem, 0x00, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1792 strncpy(pItem->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"), strlen(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL")));
1793 pItem->isSaveAll = TRUE;
1794 pItem->viewer_play_data = viewer_play_data;
1796 for (attach_index = 0; attach_index < attach_count; attach_index++) {
1797 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
1798 if (pAttach_info == NULL) {
1799 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "(%d)th pAttach_info is NULL", attach_index);
1801 pItem->pfile_size += pAttach_info->pfile_size;
1805 Elm_Object_Item *item = NULL;
1806 item = elm_genlist_item_append(genlist, &(viewer_play_data->hp_sa_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, NULL);
1807 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1810 for (attach_index = 0; attach_index < attach_count; attach_index++) {
1811 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
1812 if (pAttach_info == NULL) {
1813 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info is NULL");
1815 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1816 memcpy(pItem, pAttach_info, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1818 elm_genlist_item_append(genlist, &(viewer_play_data->hp_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, pItem);
1823 viewer_play_data->help_page_gl = genlist;
1825 elm_box_pack_end(renderBox, box2);
1826 *attach_list = genlist;
1831 static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part)
1833 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1834 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
1835 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
1837 if (strcmp(part, "elm.text") == 0) {
1839 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_name = %s", pAttach_info->pfile_name);
1841 Eina_Strbuf *text_buf = eina_strbuf_new();
1842 eina_strbuf_append(text_buf, pAttach_info->pfile_name);
1843 eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_SPACE);
1844 eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_LEFT_BRACE);
1846 //get and convert size
1847 char size[DEF_BUF_LEN] = {0,};
1848 long long sizeKB = 0;
1849 long long sizeB = 0;
1851 if (pAttach_info->pfile_size < VIEWER_DETAILS_TEXT_MSG_SIZE_KB) {
1852 snprintf(size, sizeof(size), "1 %s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
1854 sizeKB = (long long)(pAttach_info->pfile_size)/VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
1855 sizeB = (long long)(pAttach_info->pfile_size)%VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
1857 if (sizeB >= (VIEWER_DETAILS_TEXT_MSG_SIZE_KB/2))
1860 snprintf(size, sizeof(size), "%lld %s", sizeKB, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
1863 eina_strbuf_append(text_buf, size);
1864 eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
1866 char *return_text = strdup(eina_strbuf_string_get(text_buf));
1867 eina_strbuf_free(text_buf);
1876 static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part)
1878 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1879 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, NULL);
1880 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
1882 if (strcmp(part, "elm.icon.2") == 0 || strcmp(part, "elm.icon") == 0) {
1883 Evas_Object *box = elm_box_add(obj);
1884 Evas_Object *button = elm_button_add(obj);
1885 Evas_Object *icon = elm_icon_add(obj);
1887 evas_object_propagate_events_set(button, EINA_FALSE);
1888 elm_box_pack_start(box, button);
1889 elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_SAVE_ICON);
1890 elm_object_part_content_set(button, "icon", icon);
1891 evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_help_page_save_button_clicked_cb, data);
1892 evas_object_show(button);
1893 evas_object_show(box);
1895 } else if (strcmp(part, "elm.icon.1") == 0) {
1896 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
1897 Evas_Object *image = NULL;
1899 image = elm_icon_add(obj);
1901 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_path = %s", pAttach_info->pfile_path);
1903 /*set attach file icon*/
1904 if (pAttach_info->media_type == MSG_VIEWER_MEDIA_IMG ||
1905 pAttach_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
1906 elm_image_file_set(image, pAttach_info->pfile_path, NULL);
1907 } else if (pAttach_info->media_type == MSG_VIEWER_MEDIA_DRM) {
1908 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
1910 if (strlen(pAttach_info->pfile_path)) {
1911 const char *icon_path = NULL;
1913 icon_path = msg_common_get_file_icon(pAttach_info->pfile_path);
1915 elm_image_file_set(image, MSG_IMAGES_EDJ, icon_path);
1917 D_EMSG("icon_path is NULL");
1918 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
1921 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
1927 evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1931 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
1937 static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info)
1939 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1940 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL);
1941 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
1942 Elm_Object_Item *pselected_item = (Elm_Object_Item *)event_info;
1943 service_h svc_handle = NULL;
1944 service_error_e err = MSG_SUCCESS;
1946 elm_genlist_item_selected_set(pselected_item, FALSE);
1948 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pAttach_info->pfile_name);
1949 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pAttach_info->pfile_path);
1950 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pAttach_info->media_type);
1953 if (!strcmp(pAttach_info->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"))) {
1954 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Save all item");
1958 if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
1959 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
1963 service_set_operation(svc_handle, SERVICE_OPERATION_VIEW);
1964 service_set_uri(svc_handle, pAttach_info->pfile_path);
1966 err = service_send_launch_request(svc_handle, NULL, NULL);
1967 if ( err == SERVICE_ERROR_NONE) {
1968 if (pAttach_info->viewer_play_data) {
1969 /* set player state to pause and update icon */
1970 if (!msg_ui_viewer_command_play_pause(pAttach_info->viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
1971 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
1976 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed");
1979 service_destroy(svc_handle);
1984 static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj)
1986 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1988 MSG_VIEWER_ATTACH_MEDIA_INFO_S *del_data = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
1994 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1997 void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data)
1999 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2000 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2001 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2003 //register timer for disappear play_controller automatically when time elapsed after shown
2004 if (viewer_play_data->play_controller_timer) {
2005 ecore_timer_del(viewer_play_data->play_controller_timer);
2006 viewer_play_data->play_controller_timer = NULL;
2009 viewer_play_data->play_controller_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_LIFETIME, msg_ui_viewer_play_controller_timer_cb, (void *)viewer_play_data);
2011 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2014 void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx)
2016 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2017 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2018 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2019 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
2021 Evas_Object *progressbar = NULL;
2022 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
2023 MSG_BOOL bExcludeHp = FALSE;
2024 double total_time = 0.0;
2025 double remain_time = 0.0;
2026 double elapse_time = 0.0;
2027 int remain_second = 0.0;
2028 int elapse_second = 0.0;
2029 char strTimeBuf[10] = {0,};
2031 if (slideIdx < 0 ) {
2032 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d, slideIdx must be same or over 0", slideIdx);
2036 if (!viewer_play_data->progressbar) {
2037 progressbar = elm_progressbar_add(viewer_play_data->play_controller);
2038 elm_object_theme_set(progressbar, viewer_play_data->progress_th);
2039 elm_object_style_set(progressbar, "list_progress");
2040 elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
2041 evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
2042 evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2043 viewer_play_data->progressbar = progressbar;
2044 evas_object_show(progressbar);
2045 elm_object_part_content_set(viewer_play_data->play_controller,"progressbar", progressbar);
2048 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
2050 //In preview mode, slide time for help page should not be considered to total slide time
2051 bExcludeHp = (launchmode == MSG_VIEWER_PREVIEW_MODE) ? TRUE : FALSE;
2053 if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, 0, bExcludeHp, &total_time)) {
2054 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", 0, bExcludeHp);
2057 if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, slideIdx, bExcludeHp, &remain_time)) {
2058 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", slideIdx, bExcludeHp);
2062 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total slide time is %f", total_time);
2063 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Remain slide time from current slide(%d) is %f", slideIdx, remain_time);
2064 elapse_time = total_time-remain_time;
2065 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Elapsed slide time from first slide(0) to current slide(%d) is %f", slideIdx, elapse_time);
2067 viewer_play_data->totalProgressTime = remain_second = (int)total_time/1000;
2068 elapse_second = (int)elapse_time/1000;
2069 viewer_play_data->elapsedProgressTime = elapse_second;
2071 // START timer text set
2072 snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", elapse_second/60, elapse_second%60);
2073 edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
2075 bzero(strTimeBuf, sizeof(strTimeBuf));
2077 // END timer text set
2078 snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", remain_second/60, remain_second%60);
2079 edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/end/time", strTimeBuf);
2081 elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
2083 if (viewer_play_data->play_controller_progressbar_timer) {
2084 ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
2085 viewer_play_data->play_controller_progressbar_timer = NULL;
2088 viewer_play_data->play_controller_progressbar_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME, msg_ui_viewer_play_controller_progressbar_timer_cb, viewer_play_data);
2090 if (msg_smil_get_current_slide_status(viewer_play_data->SmilHandle) == PLAYER_STATUS_PAUSED) {
2091 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Pause progress timer because current slide status is PAUSED");
2092 ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
2095 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2098 Eina_Bool msg_ui_viewer_play_controller_progressbar_timer_cb(void *data)
2100 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2101 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
2102 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2104 char strTimeBuf[10] = {0,};
2106 viewer_play_data->elapsedProgressTime += VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME;
2108 // update START timer text
2109 snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", viewer_play_data->elapsedProgressTime/60, viewer_play_data->elapsedProgressTime%60);
2110 edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
2112 if (viewer_play_data->elapsedProgressTime == viewer_play_data->totalProgressTime) {
2113 if (viewer_play_data->play_controller && evas_object_visible_get(viewer_play_data->play_controller) == EINA_FALSE) {
2114 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
2115 evas_object_show(viewer_play_data->play_controller);
2116 viewer_play_data->playcontroller_opened = true;
2117 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
2118 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
2120 // create play controller timer again
2121 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
2124 elm_progressbar_value_set(viewer_play_data->progressbar, 1.0);
2125 viewer_play_data->play_controller_progressbar_timer = NULL;
2127 return ECORE_CALLBACK_CANCEL;
2130 elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
2132 return ECORE_CALLBACK_RENEW;
2135 void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data)
2137 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2138 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2139 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2141 if (viewer_play_data->play_controller_progressbar_timer) {
2142 ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
2143 viewer_play_data->play_controller_progressbar_timer = NULL;
2144 viewer_play_data->elapsedProgressTime = 0;
2147 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2150 Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data)
2152 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2153 MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
2154 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2156 viewer_play_data->play_controller_timer = NULL;
2158 if (viewer_play_data->playcontroller_opened) {
2159 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play controller is hided after 3 seconds elapsed");
2160 elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
2161 evas_object_hide(viewer_play_data->play_controller);
2162 viewer_play_data->playcontroller_opened = false;
2163 if (!viewer_play_data->title_menu_opened)
2164 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
2167 return ECORE_CALLBACK_CANCEL;
2170 void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data)
2172 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2173 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2174 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2176 if (viewer_play_data->play_controller_timer) {
2177 ecore_timer_del(viewer_play_data->play_controller_timer);
2178 viewer_play_data->play_controller_timer = NULL;
2181 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2184 void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data)
2186 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2187 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2188 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2189 SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = NULL;
2192 int media_count = 0;
2193 bool is_text_copied = FALSE;
2195 char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
2198 eventStatus = (SMIL_SLIDE_CLIENT_CB_PARAM_S * )viewer_play_data->smil_eventStatus;
2199 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current page index is %d", eventStatus->pageIdx);
2201 /*get page list info*/
2202 msg_list_handle_t pagelist_info = NULL;
2203 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
2204 page_count = msg_list_length(pagelist_info);
2206 msg_struct_t page_info = NULL;
2207 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, eventStatus->pageIdx);
2209 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
2213 msg_list_handle_t medialist_info = NULL;
2214 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
2215 media_count = msg_list_length(medialist_info);
2216 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", eventStatus->pageIdx, media_count);
2218 for (media_idx = 0; media_idx < media_count; media_idx++) {
2220 msg_struct_t media_info = NULL;
2221 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
2224 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx);
2228 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
2230 if (mediaType != MMS_SMIL_MEDIA_TEXT) {
2231 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media type is not TEXT", media_idx);
2235 bzero(strFilePath, sizeof(strFilePath));
2236 msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
2238 //if text media is exist, get text and store it
2239 fp = fopen(strFilePath, "r");
2241 char *pszPageText = NULL;
2242 struct stat stat_buf;
2243 if (stat(strFilePath, &stat_buf) != 0) {
2244 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Getting file information Error");
2249 if (stat_buf.st_size > 0) {
2250 pszPageText = (void *)calloc(1, (size_t)stat_buf.st_size + 1);
2252 if (pszPageText == NULL) {
2253 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
2257 int result = fread(pszPageText, sizeof(char), stat_buf.st_size, fp);
2258 if (result != stat_buf.st_size) {
2259 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "fread is failed result : %d", result);
2262 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pszPageText : (%s)", (char *)pszPageText);
2264 if (pszPageText[0] != '\0') {
2265 Evas_Object *entry = elm_entry_add(viewer_play_data->main_window);
2266 elm_cnp_selection_set(entry, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, pszPageText, strlen(pszPageText));
2267 evas_object_del(entry);
2268 is_text_copied = TRUE;
2271 /*free message text after displaying*/
2286 status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"));
2288 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2291 void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data)
2293 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2294 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2295 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2296 Evas_Object *popup = NULL;
2297 Evas_Object *layout = NULL;
2298 Evas_Object *bg = NULL;
2299 Evas_Object *scroller = NULL;
2300 Evas_Object *box = NULL;
2301 Evas_Object *entry = NULL;
2302 Evas_Object *btn_close = NULL;
2304 /* delete previous popup */
2305 if (viewer_play_data->popup) {
2306 evas_object_del(viewer_play_data->popup);
2307 viewer_play_data->popup = NULL;
2308 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2312 popup = elm_popup_add(viewer_play_data->main_window);
2313 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2314 evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
2315 elm_object_style_set(popup, "menustyle");
2316 elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_MESSAGE_DETAILS"));
2319 layout = elm_layout_add(viewer_play_data->main_window);
2320 elm_layout_file_set(layout, MSG_VIEWER_THEME, "msg/detail");
2321 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2322 evas_object_show(layout);
2325 bg = evas_object_rectangle_add(evas_object_evas_get(layout));
2326 elm_object_part_content_set(layout, "msg/detail/bg", bg);
2327 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, 0.0);
2328 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, 0.0);
2329 evas_object_show(bg);
2331 /* create scroller */
2332 scroller = elm_scroller_add(layout);
2333 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2334 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
2335 elm_scroller_bounce_set(scroller, FALSE, TRUE);
2336 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
2337 elm_object_part_content_set(layout, "msg/detail/content", scroller);
2338 evas_object_show(scroller);
2341 box = elm_box_add(layout);
2342 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2343 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
2344 elm_box_homogeneous_set(box, EINA_FALSE);
2345 evas_object_show(box);
2346 evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT*4);
2347 elm_object_content_set(scroller, box);
2350 entry = elm_entry_add(layout);
2351 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2352 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
2353 elm_entry_single_line_set(entry, EINA_FALSE);
2354 elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
2355 elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
2356 elm_entry_magnifier_disabled_set(entry, EINA_TRUE);
2357 elm_entry_editable_set(entry, EINA_FALSE);
2359 char *str = msg_common_make_message_detail_text(viewer_play_data->msgHandle, viewer_play_data->msgID);
2362 elm_entry_entry_set(entry, str);
2365 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_make_message_detail_text is failed");
2369 elm_box_pack_end(box, entry);
2370 evas_object_show(entry);
2372 /* add close button */
2373 btn_close = elm_button_add(popup);
2374 elm_object_style_set(btn_close, "popup_button/default");
2375 elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
2376 elm_object_part_content_set(popup, "button1", btn_close);
2377 evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_message_details_popup_close_clicked_cb, viewer_play_data);
2379 viewer_play_data->popup = popup;
2380 viewer_play_data->popup_type = MSG_VIEWER_DETAILS_POPUP;
2381 elm_object_content_set(popup, layout);
2383 msg_ui_viewer_disconnect_handler(viewer_play_data);
2385 evas_object_show(popup);
2387 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2390 static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2392 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2393 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2395 if (viewer_play_data->popup) {
2396 evas_object_del(viewer_play_data->popup);
2397 viewer_play_data->popup = NULL;
2398 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2401 /* connect handler again*/
2402 msg_ui_viewer_connect_handler(viewer_play_data);
2404 /* play viewer again if previous status was PLAY */
2405 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2406 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2407 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2413 MSG_BOOL msg_ui_viewer_check_address_is_blocked(void *data, char *address, int *filter_id)
2415 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2416 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2417 msg_error_t err = MSG_SUCCESS;
2418 msg_struct_list_s filter_list;
2421 char filter_val[MAX_FILTER_VALUE_LEN] = {0,};
2423 err = msg_get_filter_list(viewer_play_data->msgHandle, &filter_list);
2424 if (err != MSG_SUCCESS) {
2425 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_filter_list() fail - err [%d]", err);
2429 total_cnt = filter_list.nCount;
2431 for (i = 0; i < total_cnt; i++) {
2433 bzero(filter_val, sizeof(filter_val));
2434 err = msg_get_str_value(filter_list.msg_struct_info[i], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val));
2436 if (err != MSG_SUCCESS) {
2437 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_str_value() fail - err [%d]", err);
2438 msg_release_list_struct(&filter_list);
2442 if (!strcmp(address, filter_val)) {
2444 msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_TYPE_INT, &filter_type);
2445 if (filter_type == MSG_FILTER_BY_ADDRESS_SAME) {
2446 /* get filter id if address is exist in block list */
2447 msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_ID_INT, filter_id);
2448 msg_release_list_struct(&filter_list);
2454 msg_release_list_struct(&filter_list);