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>
35 #include <sound_manager.h>
38 /*==================================================================================================
39 * FUNCTION DECLARATIONS
40 *==================================================================================================*/
42 static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data);
43 static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data);
44 static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data);
45 static void __msg_ui_viewer_init_font_size(MSG_PLAY_DATA_S *data);
46 static void __msg_ui_viewer_vconf_changed_cb(keynode_t *key, void *data);
49 static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data);
50 static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data);
51 static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data);
52 static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data);
53 static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom);
55 /* help page genlist */
56 static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part);
57 static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part);
58 static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info);
59 static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj);
62 static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
64 /* volume key action related with volume bar */
65 static void __msg_ui_viewer_grab_volume_key(void *data);
66 static void __msg_ui_viewer_ungrab_volume_key(void *data);
67 static void __msg_ui_viewer_volumebar_volume_up(Evas_Object *obj);
68 static void __msg_ui_viewer_volumebar_volume_down(Evas_Object *obj);
70 /* volume action with volume key and slide callback */
71 static Eina_Bool __msg_ui_viewer_volume_key_release_cb(void *data, int type, void *event);
72 static Eina_Bool __msg_ui_viewer_volume_key_press_cb(void *data, int type, void *event);
73 static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data);
74 static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data);
75 static Eina_Bool __msg_ui_viewer_volumebar_timer_cb(void *data);
77 /* volume action related with volumebar slider */
78 static void __msg_ui_viewer_volumebar_drag_start_cb(void *data, Evas_Object *obj, void *event_info);
79 static void __msg_ui_viewer_volumebar_drag_stop_cb(void *data, Evas_Object *obj, void *event_info);
80 static void __msg_ui_viewer_volumebar_changed_cb(void *data, Evas_Object *obj, void *event_info);
81 static void __msg_ui_viewer_volumebar_event_cb(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event);
82 static void __msg_ui_viewer_volumebar_event_callback_add(Evas_Object *obj, MSG_VIEWER_VOLUMEBAR_CB event_cb);
84 /* volume action related with SOUNDMANAGER */
85 static int __msg_ui_viewer_get_max_volume(void);
86 static int __msg_ui_viewer_get_current_volume(void);
87 static bool __msg_ui_viewer_set_volume(int volume);
89 /*==================================================================================================
90 * FUNCTION IMPLEMENTATIONS
91 *================================================================================================*/
92 MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data)
94 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
95 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL, MSG_ERR_SMIL_UI_DISPLAY_FAIURE);
96 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, MSG_ERR_SMIL_UI_DISPLAY_FAIURE);
97 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
98 char title_string[VIEWER_TITLE_FONT_LEN + 1] = {0, };
101 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "clientCbEvent : %d", eventStatus->clientCbEvent);
102 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isLastSlide : %d", eventStatus->isLastSlide);
103 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isHelpSlide : %d", eventStatus->isHelpSlide);
104 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageIdx : %d", eventStatus->pageIdx);
105 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageCnt : %d", eventStatus->pageCnt);
107 viewer_play_data->smil_eventStatus = eventStatus;
108 /*update prev/next button*/
109 msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_UNKOWN);
111 /*for Multipart.Mixed "Slide" count info.*/
112 if (eventStatus->pageCnt == 0 && eventStatus->clientCbEvent != SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START)
113 total_page = eventStatus->pageCnt + 1;
115 total_page = eventStatus->pageCnt;
117 /*update page index*/
118 snprintf(title_string, sizeof(title_string), "%d/%d ", eventStatus->pageIdx + 1, total_page);
119 edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "page/text", title_string);
121 if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE && eventStatus->isLastSlide == TRUE) {
122 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
123 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
124 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launchmode : %d", launchmode);
126 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
127 viewer_play_data->status = MSG_VIEWER_STOP;
128 if (viewer_play_data->play_controller)
129 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
130 //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
131 } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
132 viewer_play_data->status = MSG_VIEWER_STOP;
133 if (viewer_play_data->play_controller)
134 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
135 //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
136 if (viewer_play_data->popup) {
137 evas_object_del(viewer_play_data->popup);
138 viewer_play_data->popup = NULL;
139 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
142 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid launchmode");
144 } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START ||
145 eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_PLAY_START) { /*slide is playing*/
146 double current_slide_time = 0.0;
147 double remain_slide_time = 0.0;
148 double remain_next_slide_time = 0.0;
149 if (msg_smil_get_slide_time(viewer_play_data->SmilHandle, eventStatus->pageIdx, FALSE, &remain_slide_time)) {
150 if (msg_smil_get_slide_time(viewer_play_data->SmilHandle, eventStatus->pageIdx+1, FALSE, &remain_next_slide_time))
151 current_slide_time = remain_slide_time - remain_next_slide_time;
153 current_slide_time = remain_slide_time;
156 if (current_slide_time <= 0) { //for infinite duration slide, duration <= 0
157 if (viewer_play_data->play_controller_progressbar_timer)
158 ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
160 if (viewer_play_data->play_controller_progressbar_timer)
161 ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
164 //set pause icon in play controller
165 if (viewer_play_data->play_controller)
166 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
168 viewer_play_data->status = MSG_VIEWER_PLAY;
169 } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE || eventStatus->clientCbEvent == SMIL_RENDER_EVENT_MOVE_PAGE_AFTER_PAUSED) {
170 if (viewer_play_data->play_controller)
171 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
173 viewer_play_data->status = MSG_VIEWER_PAUSE;
175 if (viewer_play_data->play_controller_progressbar_timer)
176 ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
177 } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_ERROR) {
179 if (msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP) == MSG_SMIL_SUCCESS) {
180 if (viewer_play_data->play_controller)
181 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
182 //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
183 viewer_play_data->status = MSG_VIEWER_STOP;
184 msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
186 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler is failed");
190 if (msg_common_is_connected_call()) {
191 viewer_play_data->popup_type = MSG_VIEWER_NORMAL_POPUP;
192 msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL"));
196 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
197 return MSG_SMIL_SUCCESS;
200 void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status)
202 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
203 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
204 MSG_BOOL bfisrt_page = FALSE;
205 MSG_BOOL blast_page = FALSE;
206 SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = viewer_play_data->smil_eventStatus;
207 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
209 if (status == MSG_VIEWER_STOP) {
210 if (viewer_play_data->play_controller) {
211 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
212 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
213 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
214 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
217 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL);
218 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide == NULL);
219 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide->commonData == NULL);
220 if (slide->commonData->pageCnt > 0) {
221 if (slide->pageIdx == 0)
224 if (slide->pageIdx + 1 == slide->commonData->pageCnt)
227 if (bfisrt_page) { /*first page*/
228 if (viewer_play_data->play_controller) {
229 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
230 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
233 if (viewer_play_data->play_controller) {
234 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_enable", "*");
235 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable prev_button");
239 if (blast_page) { /*lastpage*/
240 if (viewer_play_data->play_controller) {
241 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
242 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
245 if (viewer_play_data->play_controller) {
246 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_enable", "*");
247 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable next_button");
251 /*smil player is finished*/
252 if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE &&
253 eventStatus->isLastSlide == TRUE) {
254 if (viewer_play_data->play_controller) {
255 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
256 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
257 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
258 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
262 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart.mixed message");
263 if (viewer_play_data->play_controller) {
264 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
265 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
266 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
267 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
272 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
275 MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E action)
277 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
278 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
279 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
280 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
282 /*prevent invalid double pressing button event after launching ug or app( call, vtcall)*/
283 if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) {
284 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd);
289 case MSG_VIEWER_ACTION_TOOLBAR_PAUSE :
291 case MSG_VIEWER_ACTION_AUTO_PAUSE :
292 /* Do pause action only if current status is PLAY */
293 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
294 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
295 if (err != MSG_SMIL_SUCCESS) {
296 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
299 if (viewer_play_data->play_controller)
300 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
301 viewer_play_data->status = MSG_VIEWER_PAUSE;
303 if (viewer_play_data->play_controller_progressbar_timer)
304 ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
308 case MSG_VIEWER_ACTION_TOOLBAR_PLAY :
310 case MSG_VIEWER_ACTION_AUTO_PLAY :
311 /* Do play action when play status is STOP & PAUSE */
312 if (viewer_play_data->status == MSG_VIEWER_STOP) {
313 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
314 if (err != MSG_SMIL_SUCCESS) {
315 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
318 if (viewer_play_data->play_controller) {
319 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
320 msg_ui_viewer_create_progressbar(viewer_play_data, 0);
322 viewer_play_data->status = MSG_VIEWER_PLAY;
324 } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) {
325 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_RESUME);
326 if (err != MSG_SMIL_SUCCESS) {
327 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
330 if (viewer_play_data->play_controller)
331 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
332 viewer_play_data->status = MSG_VIEWER_PLAY;
334 if (viewer_play_data->play_controller_progressbar_timer)
335 ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
340 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid play status case");
344 /* refreshing play controller timer by button action */
345 if (action == MSG_VIEWER_ACTION_TOOLBAR_PLAY) {
346 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
347 if (viewer_play_data->title_menu_opened)
348 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
350 viewer_play_data->auto_resume_state = true;
351 } else if (action == MSG_VIEWER_ACTION_TOOLBAR_PAUSE) {
352 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
353 viewer_play_data->auto_resume_state = false;
355 /* case for not button action */
356 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
357 if (viewer_play_data->title_menu_opened)
358 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
360 /* show play controller again to notify SMIL is resumed */
361 if (viewer_play_data->play_controller && !viewer_play_data->playcontroller_opened) {
362 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
363 evas_object_show(viewer_play_data->play_controller);
364 viewer_play_data->playcontroller_opened = true;
365 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
366 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
368 } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) {
369 if (viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
370 /* show play controller again to notify SMIL is paused */
371 if (viewer_play_data->play_controller && !viewer_play_data->playcontroller_opened) {
372 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
373 evas_object_show(viewer_play_data->play_controller);
374 viewer_play_data->playcontroller_opened = true;
375 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
376 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
382 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
387 void msg_ui_viewer_play_view_init(void *data)
389 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
390 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
391 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
393 viewer_play_data->main_window = NULL;
394 viewer_play_data->navi_frame = NULL;
395 viewer_play_data->navi_item = NULL;
396 viewer_play_data->navi_title_layout= NULL;
397 viewer_play_data->title_button = NULL;
398 viewer_play_data->attach_button = NULL;
399 viewer_play_data->title_box_layout = NULL;
400 viewer_play_data->subject_index_layout = NULL;
401 viewer_play_data->play_controller = NULL;
402 viewer_play_data->play_layout = NULL;
403 viewer_play_data->help_page_gl = NULL;
404 viewer_play_data->save_attachment_gl = NULL;
405 viewer_play_data->render_entry = NULL;
406 viewer_play_data->save_button = NULL;
407 viewer_play_data->sa_check = NULL;
408 viewer_play_data->m_x = 0;
409 viewer_play_data->m_y = 0;
410 viewer_play_data->mouse_down_event_handler = NULL;
411 viewer_play_data->mouse_up_event_handler = NULL;
412 viewer_play_data->msgHandle = NULL;
413 viewer_play_data->msgID = -1;
414 viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
415 viewer_play_data->status = MSG_VIEWER_UNKOWN;
416 viewer_play_data->msg_t = NULL;
417 viewer_play_data->mms_t = NULL;
418 viewer_play_data->smil_eventStatus = NULL;
419 viewer_play_data->popup = NULL;
420 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
421 viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
422 viewer_play_data->del_idler = NULL;
423 viewer_play_data->play_controller_timer = NULL;
424 viewer_play_data->ctrl_start_x = 0;
425 viewer_play_data->ctrl_start_y = 0;
426 viewer_play_data->insert_count = 0;
427 viewer_play_data->attach_count = 0;
428 viewer_play_data->insert_list = NULL;
429 viewer_play_data->attach_list = NULL;
430 viewer_play_data->title_menu_opened = 0;
431 viewer_play_data->playcontroller_opened = 0;
432 viewer_play_data->auto_resume_state = true;
433 viewer_play_data->drag_volume_slider = false;
434 viewer_play_data->volkey_release_handler = NULL;
435 viewer_play_data->volkey_press_handler = NULL;
436 viewer_play_data->vol_up_key_longpress = NULL;
437 viewer_play_data->vol_down_key_longpress = NULL;
438 viewer_play_data->xdisplay = NULL;
440 viewer_play_data->title_th = elm_theme_new();
441 elm_theme_ref_set(viewer_play_data->title_th, NULL);
442 elm_theme_extension_add(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ);
444 viewer_play_data->progress_th = elm_theme_new();
445 elm_theme_ref_set(viewer_play_data->progress_th, NULL);
446 elm_theme_extension_add(viewer_play_data->progress_th, MSG_VIEWER_EDJ);
448 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
451 void msg_ui_viewer_destroy_play_view(void *data)
453 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
454 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
455 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
456 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
458 if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
459 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
460 if (err != MSG_SMIL_SUCCESS) {
461 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
463 viewer_play_data->status = MSG_VIEWER_STOP;
467 if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb) < 0) {
468 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "unregister failed in vconf_notify_key_changed with key[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
470 if (vconf_ignore_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb) < 0) {
471 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "unregister failed in vconf_notify_key_changed with key[%s]", VCONFKEY_MSG_APP_FONT_SIZE);
474 if (viewer_play_data->insert_list) {
477 ntotal = eina_list_count(viewer_play_data->insert_list);
478 for (index = 0; index < ntotal; index++) {
479 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(viewer_play_data->insert_list, index);
485 eina_list_free(viewer_play_data->insert_list);
486 viewer_play_data->insert_list = NULL;
489 if (viewer_play_data->attach_list) {
492 ntotal = eina_list_count(viewer_play_data->attach_list);
493 for (index = 0; index < ntotal; index++) {
494 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, index);
500 eina_list_free(viewer_play_data->attach_list);
501 viewer_play_data->attach_list = NULL;
504 if (viewer_play_data->popup) {
505 evas_object_del(viewer_play_data->popup);
506 viewer_play_data->popup = NULL;
507 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
510 if (viewer_play_data->del_idler) {
511 ecore_idler_del(viewer_play_data->del_idler);
512 viewer_play_data->del_idler = NULL;
515 if (viewer_play_data->help_page_gl) {
516 evas_object_del(viewer_play_data->help_page_gl);
517 viewer_play_data->help_page_gl = NULL;
520 if (viewer_play_data->play_controller_timer) {
521 ecore_timer_del(viewer_play_data->play_controller_timer);
522 viewer_play_data->play_controller_timer = NULL;
525 if (viewer_play_data->play_controller_progressbar_timer) {
526 ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
527 viewer_play_data->play_controller_progressbar_timer = NULL;
530 if (viewer_play_data->title_th) {
531 elm_theme_extension_del(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ);
532 elm_theme_free(viewer_play_data->title_th);
533 viewer_play_data->title_th = NULL;
536 if (viewer_play_data->progress_th) {
537 elm_theme_extension_del(viewer_play_data->progress_th, EDJDIR"/msg_viewer.edj");
538 elm_theme_free(viewer_play_data->progress_th);
539 viewer_play_data->progress_th = NULL;
542 if (viewer_play_data->volumebar_timer) {
543 ecore_timer_del(viewer_play_data->volumebar_timer);
544 viewer_play_data->volumebar_timer = NULL;
547 if (viewer_play_data->volkey_release_handler) {
548 ecore_event_handler_del(viewer_play_data->volkey_release_handler);
549 viewer_play_data->volkey_release_handler = NULL;
552 if (viewer_play_data->vol_up_key_longpress) {
553 ecore_timer_del(viewer_play_data->vol_up_key_longpress);
554 viewer_play_data->vol_up_key_longpress = NULL;
557 if (viewer_play_data->volkey_press_handler) {
558 ecore_event_handler_del(viewer_play_data->volkey_press_handler);
559 viewer_play_data->volkey_press_handler = NULL;
562 if (viewer_play_data->vol_down_key_longpress) {
563 ecore_timer_del(viewer_play_data->vol_down_key_longpress);
564 viewer_play_data->vol_down_key_longpress = NULL;
567 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
570 void msg_ui_viewer_connect_handler(void *data)
572 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
573 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
574 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
576 /* connect mouse handler for flick event */
577 if (!viewer_play_data->mouse_down_event_handler)
578 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);
580 __msg_ui_viewer_grab_volume_key(viewer_play_data);
582 /* connect key handler for volume up/down */
583 if (!viewer_play_data->volkey_release_handler)
584 viewer_play_data->volkey_release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, __msg_ui_viewer_volume_key_release_cb, (void *)viewer_play_data);
586 if (!viewer_play_data->volkey_press_handler)
587 viewer_play_data->volkey_press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __msg_ui_viewer_volume_key_press_cb, (void *)viewer_play_data);
589 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
592 void msg_ui_viewer_disconnect_handler(void *data)
594 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
595 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
596 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
598 if (viewer_play_data->mouse_up_event_handler) {
599 ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
600 viewer_play_data->mouse_up_event_handler = NULL;
603 if (viewer_play_data->mouse_down_event_handler) {
604 ecore_event_handler_del(viewer_play_data->mouse_down_event_handler);
605 viewer_play_data->mouse_down_event_handler = NULL;
608 if (viewer_play_data->volkey_release_handler) {
609 ecore_event_handler_del(viewer_play_data->volkey_release_handler);
610 viewer_play_data->volkey_release_handler = NULL;
613 if (viewer_play_data->vol_up_key_longpress) {
614 ecore_timer_del(viewer_play_data->vol_up_key_longpress);
615 viewer_play_data->vol_up_key_longpress = NULL;
618 if (viewer_play_data->volkey_press_handler) {
619 ecore_event_handler_del(viewer_play_data->volkey_press_handler);
620 viewer_play_data->volkey_press_handler = NULL;
623 if (viewer_play_data->vol_down_key_longpress) {
624 ecore_timer_del(viewer_play_data->vol_down_key_longpress);
625 viewer_play_data->vol_down_key_longpress = NULL;
628 __msg_ui_viewer_ungrab_volume_key(viewer_play_data);
630 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
633 MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
635 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
636 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
637 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
638 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL, FALSE);
639 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL, FALSE);
640 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
641 Evas_Object *layout = NULL;
642 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
644 viewer_play_data->xdisplay = ecore_x_display_get();
645 if (viewer_play_data->xdisplay == NULL) {
646 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_x_display_get() is failed");
650 /*get message information like bgcolor, insert and attach count
651 *it should be called before __msg_ui_viewer_create_control_toolbar*/
652 if (__msg_ui_viewer_play_view_get_message_info(viewer_play_data) == FALSE)
653 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_viewer_play_view_get_content_count is failed");
655 layout = msg_ui_viewer_get_main_layout(viewer_play_data->viewer_main);
656 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE);
658 /* create naviframe */
659 if (!viewer_play_data->navi_frame) {
660 viewer_play_data->navi_frame = msg_ui_viewer_create_navigation_layout(layout);
661 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->navi_frame == NULL, FALSE);
662 msg_ui_viewer_set_navi_frame(viewer_play_data->viewer_main, viewer_play_data->navi_frame);
664 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "navi_frame is already created");
667 /*create play layout*/
668 if (__msg_ui_viewer_create_content_layout(viewer_play_data) == FALSE)
671 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
673 /* create back button */
674 Evas_Object *back_btn = elm_button_add(viewer_play_data->navi_frame);
675 elm_object_style_set(back_btn, "naviframe/back_btn/default");
676 evas_object_smart_callback_add(back_btn, "clicked", msg_ui_viewer_back_button_cb, (void*)viewer_play_data);
678 /* set title text & title button */
679 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
680 /* create naviframe item and push */
681 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);
683 /* create naviframe item and push */
684 viewer_play_data->navi_item = elm_naviframe_item_push(viewer_play_data->navi_frame, NULL, back_btn, NULL, viewer_play_data->play_layout, "empty");
686 /* create naviframe title layout and set */
687 viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data);
688 elm_object_item_part_content_set(viewer_play_data->navi_item, "title", viewer_play_data->navi_title_layout);
689 msg_ui_viewer_set_navi_title_layout(viewer_play_data);
692 /* register vconf notify */
693 if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb, viewer_play_data) < 0) {
694 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "register failed in vconf_notify_key_changed with key[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
696 if (vconf_notify_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb, viewer_play_data) < 0) {
697 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "register failed in vconf_notify_key_changed with key[%s]", VCONFKEY_MSG_APP_FONT_SIZE);
701 __msg_ui_viewer_init_font_size(viewer_play_data);
702 /* create subject & index layout */
703 __msg_ui_viewer_create_subject_index_layout(viewer_play_data);
704 /* create page navigator */
705 __msg_ui_viewer_create_play_controller(viewer_play_data);
706 /* create control toolbar */
707 __msg_ui_viewer_create_control_toolbar(viewer_play_data);
708 /* connect handlers */
709 msg_ui_viewer_connect_handler(viewer_play_data);
711 /* create smil rendering layout */
712 if (msg_smil_create_smil_player_layout(viewer_play_data->SmilHandle, viewer_play_data->play_layout) == FALSE)
715 SMIL_POSITION_S left_top = {0,};
716 SMIL_POSITION_S right_bottom = {0,};
717 __msg_ui_viewer_get_layout_size(viewer_play_data, &left_top, &right_bottom);
719 if (msg_smil_set_smil_player_layout_size(viewer_play_data->SmilHandle, &left_top, &right_bottom) == FALSE)
722 /*register help page show callback to renderer */
723 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)
724 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_help_page_cb is failed");
726 /*register change font size callback to render */
727 if (msg_smil_set_smil_player_entry_handle_cb(viewer_play_data->SmilHandle, msg_ui_viewer_set_entry_handle_cb) == FALSE)
728 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_cutlink_cb is failed");
730 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
731 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREVIEW_PLAY);
732 if (err != MSG_SMIL_SUCCESS) {
733 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
734 if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
738 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
739 if (err != MSG_SMIL_SUCCESS) {
740 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
741 if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
746 if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
748 bool readStatus = FALSE;
749 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_READ_BOOL, &readStatus);
752 msg_update_read_status(viewer_play_data->msgHandle, viewer_play_data->msgID, TRUE);
754 /* send read report*/
755 int folder_id = MSG_MAX_FOLDER_ID;
756 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
757 if (folder_id == MSG_INBOX_ID) {
758 msg_error_t err = MSG_SUCCESS;
760 msg_struct_t rcvSetting_info = msg_create_struct(MSG_STRUCT_SETTING_MMS_RECV_OPT);
761 err = msg_get_mms_recv_opt(viewer_play_data->msgHandle, rcvSetting_info);
763 if (err == MSG_SUCCESS) {
765 msg_get_bool_value(rcvSetting_info, MSG_MMS_RECVOPT_READ_REPORT_BOOL, &bReadReport);
767 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "bsend_read_report = %d", bReadReport);
768 /*read report request status and sent read report result of current message will be checked by MF after calling msg_mms_send_read_report.
769 *So, currently ui always call msg_mms_send_read_report when setting value of send read report is on*/
771 msg_mms_send_read_report(viewer_play_data->msgHandle, viewer_play_data->msgID, MSG_READ_REPORT_IS_READ);
774 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_config is failed!");
776 msg_release_struct(&rcvSetting_info);
780 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
785 MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data)
787 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
788 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
789 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
790 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
792 /* connect handler again*/
793 msg_ui_viewer_connect_handler(viewer_play_data);
795 /*change command bar*/
796 if (viewer_play_data->play_controller) {
797 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
798 msg_ui_viewer_create_progressbar(viewer_play_data, 0);
802 if (!viewer_play_data->navi_title_layout)
803 viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data);
805 msg_ui_viewer_set_navi_title_layout(viewer_play_data);
808 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
809 if (err != MSG_SMIL_SUCCESS) {
810 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
814 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
818 Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent)
820 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
821 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
822 Evas_Object *navi_frame = NULL;
824 navi_frame = elm_naviframe_add(parent);
825 elm_object_part_content_set(parent, "elm.swallow.content", navi_frame);
826 evas_object_show(navi_frame);
828 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
832 static void __msg_ui_viewer_init_font_size(MSG_PLAY_DATA_S *data)
834 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
835 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
836 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
840 int access_font_index = 0;
841 int msg_access_font_index = 0;
844 /* get msg accessibility font index */
845 if (msg_common_get_access_font_size(&msg_access_font_index) == FALSE) {
846 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_access_font_size is failed !!");
847 msg_access_font_index = MSG_APP_FONT_SIZE_INDEX_NORMAL; /* 1 */
850 /* get accessibility font index */
851 if (vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &access_font_index) < 0) {
852 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE) is failed !!");
853 access_font_index = MSG_SYS_FONT_SIZE_INDEX_NORMAL; /* 1 */
856 if (msg_common_get_font_size(&index) == FALSE) {
857 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_font_size() is failed");
860 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected font_size index = %d", index);
863 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "VCONFKEY_MSG_APP_ACCESS_FONT_SIZE = %d", msg_access_font_index);
864 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE = %d", access_font_index);
866 if (msg_access_font_index != access_font_index) {
867 font_size = msg_common_get_font_size_from_index(access_font_index);
869 /* sync current font size as accessibility font index */
870 if (msg_common_set_font_size(access_font_index) == FALSE)
871 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_set_font_size(index = %d) is failed !!", access_font_index);
873 /* sync msg accessibility font size with accessibility font index */
874 if (msg_common_set_access_font_size(access_font_index) == FALSE)
875 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_set_int(VCONFKEY_MSG_APP_ACCESS_FONT_SIZE) is failed !!, [%d]", access_font_index);
877 font_size = msg_common_get_font_size_from_index(index);
880 viewer_play_data->font_size = font_size;
883 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)
885 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
886 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
887 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
890 if (change_type == MSG_VIEWER_FONT_CHANGE_LOAD_SETTING) {
891 if (msg_common_get_font_size(&index) == FALSE) {
892 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_font_size() is failed");
895 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected font_size index = %d", index);
897 viewer_play_data->font_size = msg_common_get_font_size_from_index(index);
899 index = msg_common_get_index_from_font_size(viewer_play_data->font_size);
900 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "use latest updated font, index = %d, size = %d", index, viewer_play_data->font_size);
903 if (viewer_play_data->render_entry) {
904 char font_size_str[DEF_BUF_LEN_S + 1] = {0,};
906 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "entry type = %d", entry_type);
908 if (entry_type == MSG_VIEWER_ENTRY_NORMAL_TEXT)
909 snprintf(font_size_str, sizeof(font_size_str), "DEFAULT='font_size=%d'", viewer_play_data->font_size);
911 snprintf(font_size_str, sizeof(font_size_str), "DEFAULT='font_size=%d'", (viewer_play_data->font_size*4)/5);
913 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font_size_str = (%s)", font_size_str);
914 elm_entry_text_style_user_push(viewer_play_data->render_entry, font_size_str);
918 static void __msg_ui_viewer_vconf_changed_cb(keynode_t *key, void *data)
920 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
921 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
922 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
926 char *key_name = NULL;
928 if ((key_name = vconf_keynode_get_name(key)) == NULL) {
929 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "key_name is NULL");
933 if (!strcmp(key_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) {
934 index = vconf_keynode_get_int(key);
935 font_size = msg_common_get_font_size_from_index(index);
936 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font size updated with ACCESSIBILITY TYPE, index = %d, font size = %d", index, font_size);
938 viewer_play_data->font_size = font_size;
940 /* sync current font size as accessibility font index */
941 if (msg_common_set_font_size(index) == FALSE)
942 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_set_font_size(index = %d) is failed !!", index);
944 /* sync msg accessibility font size with accessibility font index */
945 if (msg_common_set_access_font_size(index) == FALSE)
946 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_set_int(VCONFKEY_MSG_APP_ACCESS_FONT_SIZE) is failed !!, [%d]", index);
948 } else if (!strcmp(key_name, VCONFKEY_MSG_APP_FONT_SIZE)) {
949 index = vconf_keynode_get_int(key);
950 font_size = msg_common_get_font_size_from_index(index);
951 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font size updated with MSG TYPE, index = %d, font size = %d", index, font_size);
953 viewer_play_data->font_size = font_size;
955 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid key name");
959 static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data)
961 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
962 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
963 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
965 if (!viewer_play_data->play_layout) {
966 viewer_play_data->play_layout = elm_layout_add(viewer_play_data->navi_frame);
967 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->play_layout == NULL, FALSE);
968 elm_layout_file_set(viewer_play_data->play_layout, MSG_VIEWER_THEME, "viewer_main");
969 evas_object_size_hint_weight_set(viewer_play_data->play_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
970 evas_object_show(viewer_play_data->play_layout);
972 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);
973 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);
974 elm_object_signal_callback_add(viewer_play_data->play_layout, "action,clicked", "", msg_ui_viewer_play_layout_clicked_cb, (void *)viewer_play_data);
977 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
981 static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data)
983 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
984 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
985 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
986 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
987 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
988 char strSubject[MAX_SUBJECT_LEN] = {0};
990 Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
991 elm_layout_file_set(layout, MSG_VIEWER_THEME, "subject/pageindex");
992 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
993 evas_object_show(layout);
994 viewer_play_data->subject_index_layout = layout;
997 Evas_Object *bg = evas_object_rectangle_add(evas_object_evas_get(layout));
998 evas_object_color_set(bg, 248, 246, 239, 255);
999 elm_object_part_content_set(layout, "rect/bg", bg);
1000 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1001 evas_object_show(bg);
1003 /* get subject str */
1004 msg_get_str_value(viewer_play_data->msg_t, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN);
1005 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "subject text is %s", strSubject);
1007 if (strSubject[0] != '\0')
1008 edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "subject/text", strSubject);
1010 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.subject", viewer_play_data->subject_index_layout);
1012 /* set LOCK icon if available */
1013 bool bProtected = false;
1014 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &bProtected);
1015 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Lock status of current message %d", bProtected);
1016 edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), ((bProtected) ? "lock/icon/show" : "lock/icon/hide"), "*");
1018 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1021 static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data)
1023 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1024 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1025 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1027 Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
1028 elm_layout_file_set(layout, MSG_VIEWER_THEME, "play_controller");
1029 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1030 evas_object_show(layout);
1032 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", layout);
1033 viewer_play_data->play_controller = layout;
1034 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
1036 //add signal callbacks
1037 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "volume_clicked", "", msg_ui_viewer_volume_button_cb, (void *)viewer_play_data);
1038 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "prev_clicked", "", msg_ui_viewer_prev_button_cb, (void *)viewer_play_data);
1039 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "play_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
1040 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "pause_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
1041 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "next_clicked", "", msg_ui_viewer_next_button_cb, (void *)viewer_play_data);
1043 viewer_play_data->playcontroller_opened = true;
1046 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
1048 //create progressbar
1049 msg_ui_viewer_create_progressbar(viewer_play_data, 0);
1051 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1054 static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data)
1056 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1057 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1058 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1059 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1060 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
1062 Evas_Object *btn = NULL;
1063 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
1065 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
1067 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
1068 // TODO : EMPTY, needs to add item?
1069 } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
1070 // unset and delete btn objects(init)
1071 if (viewer_play_data->more_btn)
1072 evas_object_del(viewer_play_data->more_btn);
1073 elm_object_item_part_content_unset(viewer_play_data->navi_item, "toolbar_more_btn");
1076 btn = elm_button_add(viewer_play_data->navi_frame);
1077 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, btn == NULL);
1078 elm_object_style_set(btn, "naviframe/more/default");
1079 elm_object_item_part_content_set(viewer_play_data->navi_item, "toolbar_more_btn", btn);
1080 viewer_play_data->more_btn = btn;
1082 evas_object_smart_callback_add(btn, "clicked", msg_ui_viewer_more_button_cb, data);
1084 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid launch mode");
1087 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1090 Evas_Object *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data)
1092 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1093 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1094 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1096 Evas_Object *title_layout = elm_layout_add(viewer_play_data->navi_frame);
1097 elm_layout_file_set(title_layout, MSG_VIEWER_THEME, "title");
1099 evas_object_size_hint_weight_set(title_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1100 evas_object_size_hint_align_set(title_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1101 evas_object_show(title_layout);
1103 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1104 return title_layout;
1107 void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data)
1109 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1110 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1111 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1112 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1113 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
1115 int folder_id = MSG_MAX_FOLDER_ID;
1116 char *display_name = NULL;
1117 char title_address[MAX_ADDRESS_VAL_LEN + 1] = {0,};
1118 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
1120 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type
1121 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
1123 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
1124 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launchmode is not applicable, current mode is %d", launchmode);
1127 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "folder_id = [%d]", folder_id);
1129 if (folder_id == MSG_INBOX_ID) {
1130 viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
1131 evas_object_size_hint_weight_set(viewer_play_data->title_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1132 evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
1134 elm_object_focus_allow_set(viewer_play_data->title_button, EINA_FALSE);
1135 elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
1136 elm_object_style_set(viewer_play_data->title_button, "title_button");
1138 char *address = NULL;
1141 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1143 if (contact_id > 0) {
1144 display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1147 snprintf(title_address, sizeof(title_address), "%s", display_name);
1150 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name");
1151 snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
1158 snprintf(title_address, sizeof(title_address), "%s", address);
1163 elm_object_text_set(viewer_play_data->title_button, title_address);
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);
1168 } else if (folder_id == MSG_OUTBOX_ID || folder_id == MSG_SENTBOX_ID) {
1169 viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
1170 evas_object_size_hint_weight_set(viewer_play_data->title_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1171 evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
1173 elm_object_focus_allow_set(viewer_play_data->title_button, EINA_FALSE);
1174 elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
1175 elm_object_style_set(viewer_play_data->title_button, "title_button");
1177 char *address = NULL;
1180 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1182 if (contact_id > 0) {
1183 display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1186 snprintf(title_address, sizeof(title_address), "%s", display_name);
1189 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name");
1190 snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
1197 snprintf(title_address, sizeof(title_address), "%s", address);
1202 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1204 if (addr_count == 1) {
1205 elm_object_text_set(viewer_play_data->title_button, title_address);
1206 } else if (addr_count > 1) {
1207 char title_text[DEF_BUF_LEN+1] = {0,};
1208 snprintf(title_text, sizeof(title_text), "%s +%d", title_address, addr_count-1);
1209 elm_object_text_set(viewer_play_data->title_button, title_text);
1211 elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1214 evas_object_show(viewer_play_data->title_button);
1215 elm_object_part_content_set(viewer_play_data->navi_title_layout, "title_btn", viewer_play_data->title_button);
1216 evas_object_smart_callback_add(viewer_play_data->title_button, "clicked", msg_ui_viewer_title_button_clicked_cb, (void *)viewer_play_data);
1218 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid type of message folder id = [%d]", folder_id);
1221 /* create attach button */
1222 Evas_Object *button = elm_button_add(viewer_play_data->navi_frame);
1223 elm_object_style_set(button, "naviframe/title_icon");
1225 Evas_Object *icon = elm_icon_add(viewer_play_data->navi_frame);
1227 if (viewer_play_data->insert_count + viewer_play_data->attach_count != 0) {
1228 elm_object_disabled_set(button, EINA_FALSE);
1229 elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_LIST_ICON);
1231 elm_object_disabled_set(button, EINA_TRUE);
1232 elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_LIST_DIM_ICON);
1235 elm_object_content_set(button, icon);
1236 evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_save_button_cb, viewer_play_data);
1238 evas_object_show(button);
1239 elm_object_part_content_set(viewer_play_data->navi_title_layout, "attach_btn", button);
1241 viewer_play_data->attach_button = button;
1244 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1247 static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom)
1249 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1250 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1251 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, left_top == NULL);
1252 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, right_bottom == NULL);
1253 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1254 int navi_frame_height = 0;
1255 int window_width = 0;
1256 int window_height = 0;
1259 ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, &window_height);
1260 viewer_play_data->window_width = window_width;
1261 viewer_play_data->window_height = window_height;
1263 /*get navi_frame height*/
1264 double scale = elm_config_scale_get();
1265 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "scale = %lf", scale);
1267 navi_frame_height = (int)(scale * VIEWER_NAVI_FRAME_HEIGHT);
1268 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "navi_frame_height = %d", navi_frame_height);
1271 left_top->y = navi_frame_height;
1272 right_bottom->x = window_width;
1273 right_bottom->y = window_height;
1275 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1278 static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data)
1280 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1281 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
1282 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1284 int media_count = 0;
1285 int nmedia_count = 0;
1288 /*get the SMIL content*/
1289 if (!viewer_play_data->mms_t) {
1290 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mms data struct is null");
1295 msg_get_int_value(viewer_play_data->mms_t, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor);
1296 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->bgcolor = 0x%x", bgColor);
1298 /*get attach count*/
1299 msg_list_handle_t attachlist_info = NULL;
1300 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
1301 viewer_play_data->attach_count= msg_list_length(attachlist_info);
1303 /*get attach list */
1304 viewer_play_data->attach_list = __msg_ui_viewer_get_attach_list(viewer_play_data);
1306 /*get insert count*/
1307 msg_list_handle_t pagelist_info = NULL;
1308 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
1309 page_count = msg_list_length(pagelist_info);
1313 for (page_idx = 0; page_idx < page_count; ++page_idx) {
1314 msg_struct_t page_info = NULL;
1315 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
1318 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
1322 msg_list_handle_t medialist_info = NULL;
1323 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
1324 media_count = msg_list_length(medialist_info);
1325 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count);
1328 for (media_idx = 0; media_idx < media_count; ++media_idx) {
1330 msg_struct_t media_info = NULL;
1331 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
1334 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is NULL", media_idx);
1338 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
1340 if (mediaType == MMS_SMIL_MEDIA_TEXT)
1347 viewer_play_data->insert_count = nmedia_count;
1349 /* get insert item list */
1350 viewer_play_data->insert_list = __msg_ui_viewer_get_inserted_item_list(viewer_play_data);
1351 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert count : %d, attach count : %d", viewer_play_data->insert_count, viewer_play_data->attach_count);
1353 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1358 int msg_ui_viewer_get_thread_address_count(MSG_PLAY_DATA_S *data)
1360 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, -1);
1361 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1362 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL, -1);
1363 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL, -1);
1364 msg_struct_list_s addrList;
1366 msg_error_t err = MSG_SUCCESS;
1369 /* get address list(thread) */
1370 memset(&addrList, 0x00, sizeof(msg_struct_list_s));
1371 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
1373 err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
1374 if (err != MSG_SUCCESS) {
1375 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_address_list has failed");
1379 count = addrList.nCount;
1381 msg_release_list_struct(&addrList);
1386 void msg_ui_viewer_get_thread_address_nth_address(MSG_PLAY_DATA_S *data, int number, char **address, int *contact_id)
1388 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1389 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1390 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1391 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1392 msg_struct_list_s addrList;
1394 msg_error_t err = MSG_SUCCESS;
1395 char buf_address[MAX_ADDRESS_VAL_LEN+1] = {0,};
1397 /* get address list(thread) */
1398 memset(&addrList, 0x00, sizeof(msg_struct_list_s));
1399 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
1401 err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
1402 if (err != MSG_SUCCESS) {
1403 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_address_list has failed");
1407 /* get Nth address */
1408 if (addrList.msg_struct_info[number]) {
1409 err = msg_get_str_value(addrList.msg_struct_info[number], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, buf_address, MAX_ADDRESS_VAL_LEN);
1410 if (err != MSG_SUCCESS) {
1411 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_str_value() is failed");
1412 msg_release_list_struct(&addrList);
1416 err = msg_get_int_value(addrList.msg_struct_info[number], MSG_ADDRESS_INFO_CONTACT_ID_INT, contact_id);
1417 if (err != MSG_SUCCESS) {
1418 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_int_value() is failed");
1419 msg_release_list_struct(&addrList);
1423 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "addrList.msg_struct_info[%d] is NULL", number);
1424 msg_release_list_struct(&addrList);
1428 msg_release_list_struct(&addrList);
1430 *address = (char *)calloc(1, strlen(buf_address) + 1);
1431 if (*address == NULL) {
1432 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "*address is NULL");
1436 strncpy(*address, buf_address, strlen(buf_address));
1438 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is %s", *address);
1439 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "contact_id is %d", *contact_id);
1442 static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data)
1444 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1445 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1446 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1450 int media_count = 0;
1453 Eina_List *insert_list = NULL;
1455 char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
1456 char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
1458 /*get insert count*/
1459 msg_list_handle_t pagelist_info = NULL;
1460 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
1461 page_count = msg_list_length(pagelist_info);
1463 for (page_idx = 0; page_idx < page_count; ++page_idx) {
1464 msg_struct_t page_info = NULL;
1465 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
1467 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
1471 msg_list_handle_t medialist_info = NULL;
1472 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
1473 media_count = msg_list_length(medialist_info);
1474 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count);
1477 for (media_idx = 0; media_idx < media_count; ++media_idx) {
1479 msg_struct_t media_info = NULL;
1480 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
1483 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx);
1487 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
1489 if (mediaType == MMS_SMIL_MEDIA_TEXT) {
1490 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is TEXT type, skip adding", media_idx);
1494 bzero(strFileName, sizeof(strFileName));
1495 bzero(strFilePath, sizeof(strFilePath));
1497 msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName));
1498 msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
1500 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert media file name: %s", strFileName);
1501 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
1503 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pInsert_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1504 if (pInsert_info == NULL) {
1505 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
1511 if (strlen(strFileName)) {
1512 strncpy(pInsert_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
1514 const char *file_name = NULL;
1515 file_name = ecore_file_file_get(strFilePath);
1517 strncpy(pInsert_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
1519 strncpy(pInsert_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
1522 strncpy(pInsert_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
1524 pInsert_info->pfile_size = ecore_file_size(strFilePath);
1526 msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType);
1528 if (drmType != MSG_DRM_TYPE_NONE) {
1529 pInsert_info->media_type = MSG_VIEWER_MEDIA_DRM;
1531 switch (mediaType) {
1532 case MMS_SMIL_MEDIA_IMG:
1533 pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG;
1535 case MMS_SMIL_MEDIA_AUDIO:
1536 pInsert_info->media_type = MSG_VIEWER_MEDIA_AUDIO;
1538 case MMS_SMIL_MEDIA_VIDEO:
1539 pInsert_info->media_type = MSG_VIEWER_MEDIA_VIDEO;
1541 case MMS_SMIL_MEDIA_ANIMATE:
1542 pInsert_info->media_type = MSG_VIEWER_MEDIA_ANIMATE;
1544 case MMS_SMIL_MEDIA_IMG_OR_VIDEO:
1545 pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG_OR_VIDEO;
1548 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d type is not handled in switch!");
1549 pInsert_info->media_type = MSG_VIEWER_MEDIA_ATTACH; // set attach type, it's better to set attach type, not to set invalid type
1553 pInsert_info->viewer_play_data = viewer_play_data;
1555 /*append insert item list*/
1556 insert_list = eina_list_append(insert_list, pInsert_info);
1562 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d insert item(s) added", insertCnt);
1563 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1567 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free insert item list");
1571 ntotal = eina_list_count(insert_list);
1572 for (index = 0; index < ntotal; index++) {
1573 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(insert_list, index);
1579 eina_list_free(insert_list);
1585 static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data)
1587 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1588 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1589 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1591 /*get attached content list*/
1593 int attach_count = 0;
1594 Eina_List *attach_list = NULL;
1595 char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
1596 char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
1598 /*get attach count*/
1599 msg_list_handle_t attachlist_info = NULL;
1600 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
1601 attach_count = msg_list_length(attachlist_info);
1603 for (attach_idx = 0; attach_idx < attach_count; ++attach_idx) {
1604 msg_struct_t attach_info = NULL;
1606 attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, attach_idx);
1608 if (attach_info == NULL) {
1609 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach is NULL");
1612 bzero(strFileName, sizeof(strFileName));
1613 bzero(strFilePath, sizeof(strFilePath));
1615 msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, strFileName, sizeof(strFileName));
1616 msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath));
1618 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file name: %s", strFileName);
1619 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
1621 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1622 if (pAttach_info == NULL) {
1623 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
1629 if (strlen(strFileName)) {
1630 strncpy(pAttach_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
1632 const char *file_name = NULL;
1633 file_name = ecore_file_file_get(strFilePath);
1635 strncpy(pAttach_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
1637 strncpy(pAttach_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
1640 strncpy(pAttach_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
1642 pAttach_info->pfile_size = ecore_file_size(strFilePath);
1643 pAttach_info->media_type = MSG_VIEWER_MEDIA_ATTACH;
1644 pAttach_info->viewer_play_data = viewer_play_data;
1646 /*append attach list*/
1647 attach_list = eina_list_append(attach_list, pAttach_info);
1653 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d attach(s) added", attach_count);
1654 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1658 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free attachment list");
1662 ntotal = eina_list_count(attach_list);
1663 for (index = 0; index < ntotal; index++) {
1664 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(attach_list, index);
1667 pAttach_info = NULL;
1670 eina_list_free(attach_list);
1676 void msg_ui_viewer_title_update(MSG_PLAY_DATA_S *data, MSG_VIEWER_OPTION_CHANGE_TYPE_E option_type)
1678 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1679 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1680 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1682 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1684 char *address = NULL;
1687 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1690 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1694 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "addr_count = %d, address = %s, contact_id = %d", addr_count, address, contact_id);
1696 if (option_type == MSG_VIEWER_OPTION_CONTACT) {
1697 display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1698 /* change title button */
1699 if (addr_count == 1) {
1701 elm_object_text_set(viewer_play_data->title_button, display_name);
1704 elm_object_text_set(viewer_play_data->title_button, address);
1706 } else if (addr_count > 1) {
1707 char title_text[DEF_BUF_LEN+1] = {0,};
1709 snprintf(title_text, sizeof(title_text), "%s +%d", display_name, addr_count-1);
1712 snprintf(title_text, sizeof(title_text), "%s +%d", address, addr_count-1);
1715 elm_object_text_set(viewer_play_data->title_button, title_text);
1717 elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1723 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1728 void msg_ui_viewer_show_popup(void *data, Evas_Object *parent, char *pcontent)
1730 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1731 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1732 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, parent == NULL);
1733 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1734 Evas_Object *popup = NULL;
1736 if (viewer_play_data->popup) {
1737 evas_object_del(viewer_play_data->popup);
1738 viewer_play_data->popup = NULL;
1739 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1742 popup = elm_popup_add(parent);
1743 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, popup == NULL, "popup is NULL");
1744 viewer_play_data->popup = popup;
1745 viewer_play_data->popup_type = MSG_VIEWER_NORMAL_POPUP;
1746 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1749 elm_object_text_set(popup, pcontent);
1750 elm_popup_timeout_set(popup, 2);
1751 evas_object_smart_callback_add(popup, "block,clicked", msg_ui_viewer_popup_block_clicked_cb, viewer_play_data);
1752 evas_object_smart_callback_add(popup, "timeout", msg_ui_viewer_popup_timeout_cb, viewer_play_data);
1754 evas_object_del(viewer_play_data->popup);
1755 viewer_play_data->popup = NULL;
1756 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1760 evas_object_show(popup);
1762 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1765 void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1767 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1768 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1769 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1771 if (viewer_play_data->popup) {
1772 evas_object_del(viewer_play_data->popup);
1773 viewer_play_data->popup = NULL;
1774 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1777 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1780 void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
1782 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1783 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1784 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1786 if (viewer_play_data->popup) {
1787 evas_object_del(viewer_play_data->popup);
1788 viewer_play_data->popup = NULL;
1789 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1792 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1795 MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box)
1797 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1798 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1799 Evas_Object *renderBox = (Evas_Object *)box;
1800 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
1801 int attach_count = viewer_play_data->attach_count;
1803 /* create box (for setting min size of genlist)*/
1804 Evas_Object *box2 = elm_box_add(renderBox);
1805 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1806 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1807 evas_object_show(box2);
1809 /* create genlist */
1810 Evas_Object *genlist = elm_genlist_add(box2);
1811 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1812 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1813 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1814 elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
1815 evas_object_show(genlist);
1817 elm_box_pack_end(box2, genlist);
1818 evas_object_size_hint_min_set(box2, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * (attach_count + 1) * elm_config_scale_get());
1820 viewer_play_data->hp_sa_class.item_style = "dialogue/1text.1icon";
1821 viewer_play_data->hp_sa_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
1822 viewer_play_data->hp_sa_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get;
1823 viewer_play_data->hp_sa_class.func.state_get = NULL;
1824 viewer_play_data->hp_sa_class.func.del = __msg_ui_viewer_help_page_gl_del;
1826 viewer_play_data->hp_class.item_style = "dialogue/1text.2icon";
1827 viewer_play_data->hp_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
1828 viewer_play_data->hp_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get;
1829 viewer_play_data->hp_class.func.state_get = NULL;
1830 viewer_play_data->hp_class.func.del = __msg_ui_viewer_help_page_gl_del;
1832 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "attachment_count = %d", attach_count);
1834 if (attach_count > 0) {
1835 int attach_index = 0;
1837 if (attach_count > 1) {
1838 //make 'Save all' item
1839 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1840 memset(pItem, 0x00, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1841 strncpy(pItem->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"), strlen(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL")));
1842 pItem->isSaveAll = TRUE;
1843 pItem->viewer_play_data = viewer_play_data;
1845 for (attach_index = 0; attach_index < attach_count; attach_index++) {
1846 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
1847 if (pAttach_info == NULL) {
1848 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "(%d)th pAttach_info is NULL", attach_index);
1850 pItem->pfile_size += pAttach_info->pfile_size;
1854 Elm_Object_Item *item = NULL;
1855 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);
1856 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1859 for (attach_index = 0; attach_index < attach_count; attach_index++) {
1860 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
1861 if (pAttach_info == NULL) {
1862 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info is NULL");
1864 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1865 memcpy(pItem, pAttach_info, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1867 elm_genlist_item_append(genlist, &(viewer_play_data->hp_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, pItem);
1872 viewer_play_data->help_page_gl = genlist;
1874 elm_box_pack_end(renderBox, box2);
1875 *attach_list = genlist;
1880 static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part)
1882 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1883 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
1884 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
1886 if (strcmp(part, "elm.text") == 0) {
1888 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_name = %s", pAttach_info->pfile_name);
1890 Eina_Strbuf *text_buf = eina_strbuf_new();
1891 eina_strbuf_append(text_buf, pAttach_info->pfile_name);
1892 eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_SPACE);
1893 eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_LEFT_BRACE);
1895 //get and convert size
1896 char size[DEF_BUF_LEN] = {0,};
1897 long long sizeKB = 0;
1898 long long sizeB = 0;
1900 if (pAttach_info->pfile_size < VIEWER_DETAILS_TEXT_MSG_SIZE_KB) {
1901 snprintf(size, sizeof(size), "1 %s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
1903 sizeKB = (long long)(pAttach_info->pfile_size)/VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
1904 sizeB = (long long)(pAttach_info->pfile_size)%VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
1906 if (sizeB >= (VIEWER_DETAILS_TEXT_MSG_SIZE_KB/2))
1909 snprintf(size, sizeof(size), "%lld %s", sizeKB, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
1912 eina_strbuf_append(text_buf, size);
1913 eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
1915 char *return_text = strdup(eina_strbuf_string_get(text_buf));
1916 eina_strbuf_free(text_buf);
1925 static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part)
1927 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1928 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, NULL);
1929 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
1931 if (strcmp(part, "elm.icon.2") == 0 || strcmp(part, "elm.icon") == 0) {
1932 Evas_Object *box = elm_box_add(obj);
1933 Evas_Object *button = elm_button_add(obj);
1934 Evas_Object *icon = elm_icon_add(obj);
1936 evas_object_propagate_events_set(button, EINA_FALSE);
1937 elm_box_pack_start(box, button);
1938 elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_SAVE_ICON);
1939 elm_object_part_content_set(button, "icon", icon);
1940 evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_help_page_save_button_clicked_cb, data);
1941 evas_object_show(button);
1942 evas_object_show(box);
1944 } else if (strcmp(part, "elm.icon.1") == 0) {
1945 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
1946 Evas_Object *image = NULL;
1948 image = elm_icon_add(obj);
1950 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_path = %s", pAttach_info->pfile_path);
1952 /*set attach file icon*/
1953 if (pAttach_info->media_type == MSG_VIEWER_MEDIA_IMG ||
1954 pAttach_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
1955 elm_image_file_set(image, pAttach_info->pfile_path, NULL);
1956 } else if (pAttach_info->media_type == MSG_VIEWER_MEDIA_DRM) {
1957 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
1959 if (strlen(pAttach_info->pfile_path)) {
1960 const char *icon_path = NULL;
1962 icon_path = msg_common_get_file_icon(pAttach_info->pfile_path);
1964 elm_image_file_set(image, MSG_IMAGES_EDJ, icon_path);
1966 D_EMSG("icon_path is NULL");
1967 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
1970 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
1976 evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1980 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
1986 static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info)
1988 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1989 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL);
1990 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
1991 Elm_Object_Item *pselected_item = (Elm_Object_Item *)event_info;
1992 service_h svc_handle = NULL;
1993 service_error_e err = MSG_SUCCESS;
1995 elm_genlist_item_selected_set(pselected_item, FALSE);
1997 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pAttach_info->pfile_name);
1998 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pAttach_info->pfile_path);
1999 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pAttach_info->media_type);
2002 if (!strcmp(pAttach_info->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"))) {
2003 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Save all item");
2007 if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
2008 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
2012 service_set_operation(svc_handle, SERVICE_OPERATION_VIEW);
2013 service_set_uri(svc_handle, pAttach_info->pfile_path);
2015 err = service_send_launch_request(svc_handle, NULL, NULL);
2016 if ( err == SERVICE_ERROR_NONE) {
2017 if (pAttach_info->viewer_play_data) {
2018 /* set player state to pause and update icon */
2019 if (!msg_ui_viewer_command_play_pause(pAttach_info->viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
2020 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2025 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed");
2028 service_destroy(svc_handle);
2033 static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj)
2035 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2037 MSG_VIEWER_ATTACH_MEDIA_INFO_S *del_data = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
2043 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2046 void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data)
2048 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2049 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2050 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2052 //register timer for disappear play_controller automatically when time elapsed after shown
2053 if (viewer_play_data->play_controller_timer) {
2054 ecore_timer_del(viewer_play_data->play_controller_timer);
2055 viewer_play_data->play_controller_timer = NULL;
2058 viewer_play_data->play_controller_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_LIFETIME, msg_ui_viewer_play_controller_timer_cb, (void *)viewer_play_data);
2060 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2063 void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx)
2065 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2066 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2067 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2068 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
2070 Evas_Object *progressbar = NULL;
2071 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
2072 MSG_BOOL bExcludeHp = FALSE;
2073 double total_time = 0.0;
2074 double remain_time = 0.0;
2075 double elapse_time = 0.0;
2076 int remain_second = 0.0;
2077 int elapse_second = 0.0;
2078 char strTimeBuf[10] = {0,};
2080 if (slideIdx < 0 ) {
2081 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d, slideIdx must be same or over 0", slideIdx);
2085 if (!viewer_play_data->progressbar) {
2086 progressbar = elm_progressbar_add(viewer_play_data->play_controller);
2087 elm_object_theme_set(progressbar, viewer_play_data->progress_th);
2088 elm_object_style_set(progressbar, "list_progress");
2089 elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
2090 evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
2091 evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2092 viewer_play_data->progressbar = progressbar;
2093 evas_object_show(progressbar);
2094 elm_object_part_content_set(viewer_play_data->play_controller,"progressbar", progressbar);
2097 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
2099 //In preview mode, slide time for help page should not be considered to total slide time
2100 bExcludeHp = (launchmode == MSG_VIEWER_PREVIEW_MODE) ? TRUE : FALSE;
2102 if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, 0, bExcludeHp, &total_time)) {
2103 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", 0, bExcludeHp);
2106 if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, slideIdx, bExcludeHp, &remain_time)) {
2107 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", slideIdx, bExcludeHp);
2111 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total slide time is %f", total_time);
2112 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Remain slide time from current slide(%d) is %f", slideIdx, remain_time);
2113 elapse_time = total_time-remain_time;
2114 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Elapsed slide time from first slide(0) to current slide(%d) is %f", slideIdx, elapse_time);
2116 viewer_play_data->totalProgressTime = remain_second = (int)total_time/1000;
2117 elapse_second = (int)elapse_time/1000;
2118 viewer_play_data->elapsedProgressTime = elapse_second;
2120 // START timer text set
2121 snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", elapse_second/60, elapse_second%60);
2122 edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
2124 bzero(strTimeBuf, sizeof(strTimeBuf));
2126 // END timer text set
2127 snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", remain_second/60, remain_second%60);
2128 edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/end/time", strTimeBuf);
2130 elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
2132 if (viewer_play_data->play_controller_progressbar_timer) {
2133 ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
2134 viewer_play_data->play_controller_progressbar_timer = NULL;
2137 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);
2139 if (msg_smil_get_current_slide_status(viewer_play_data->SmilHandle) == PLAYER_STATUS_PAUSED) {
2140 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Pause progress timer because current slide status is PAUSED");
2141 ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
2144 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2147 Eina_Bool msg_ui_viewer_play_controller_progressbar_timer_cb(void *data)
2149 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2150 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
2151 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2153 char strTimeBuf[10] = {0,};
2155 viewer_play_data->elapsedProgressTime += VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME;
2157 // update START timer text
2158 snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", viewer_play_data->elapsedProgressTime/60, viewer_play_data->elapsedProgressTime%60);
2159 edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
2161 if (viewer_play_data->elapsedProgressTime == viewer_play_data->totalProgressTime) {
2162 if (viewer_play_data->play_controller && evas_object_visible_get(viewer_play_data->play_controller) == EINA_FALSE) {
2163 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
2164 evas_object_show(viewer_play_data->play_controller);
2165 viewer_play_data->playcontroller_opened = true;
2166 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
2167 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
2169 // create play controller timer again
2170 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
2173 elm_progressbar_value_set(viewer_play_data->progressbar, 1.0);
2174 viewer_play_data->play_controller_progressbar_timer = NULL;
2176 return ECORE_CALLBACK_CANCEL;
2179 elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
2181 return ECORE_CALLBACK_RENEW;
2184 void msg_ui_viewer_destroy_play_controller_progressbar_timer(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;
2190 if (viewer_play_data->play_controller_progressbar_timer) {
2191 ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
2192 viewer_play_data->play_controller_progressbar_timer = NULL;
2193 viewer_play_data->elapsedProgressTime = 0;
2196 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2199 Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data)
2201 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2202 MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
2203 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2205 viewer_play_data->play_controller_timer = NULL;
2207 if (viewer_play_data->playcontroller_opened) {
2208 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play controller is hided after 3 seconds elapsed");
2209 elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
2210 evas_object_hide(viewer_play_data->play_controller);
2211 viewer_play_data->playcontroller_opened = false;
2212 if (!viewer_play_data->title_menu_opened)
2213 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
2216 return ECORE_CALLBACK_CANCEL;
2219 void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data)
2221 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2222 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2223 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2225 if (viewer_play_data->play_controller_timer) {
2226 ecore_timer_del(viewer_play_data->play_controller_timer);
2227 viewer_play_data->play_controller_timer = NULL;
2230 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2233 void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data)
2235 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2236 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2237 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2238 SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = NULL;
2241 int media_count = 0;
2242 bool is_text_copied = FALSE;
2244 char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
2247 eventStatus = (SMIL_SLIDE_CLIENT_CB_PARAM_S * )viewer_play_data->smil_eventStatus;
2248 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current page index is %d", eventStatus->pageIdx);
2250 /*get page list info*/
2251 msg_list_handle_t pagelist_info = NULL;
2252 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
2253 page_count = msg_list_length(pagelist_info);
2255 msg_struct_t page_info = NULL;
2256 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, eventStatus->pageIdx);
2258 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
2262 msg_list_handle_t medialist_info = NULL;
2263 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
2264 media_count = msg_list_length(medialist_info);
2265 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", eventStatus->pageIdx, media_count);
2267 for (media_idx = 0; media_idx < media_count; media_idx++) {
2269 msg_struct_t media_info = NULL;
2270 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
2273 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx);
2277 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
2279 if (mediaType != MMS_SMIL_MEDIA_TEXT) {
2280 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media type is not TEXT", media_idx);
2284 bzero(strFilePath, sizeof(strFilePath));
2285 msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
2287 //if text media is exist, get text and store it
2288 fp = fopen(strFilePath, "r");
2290 char *pszPageText = NULL;
2291 struct stat stat_buf;
2292 if (stat(strFilePath, &stat_buf) != 0) {
2293 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Getting file information Error");
2298 if (stat_buf.st_size > 0) {
2299 pszPageText = (void *)calloc(1, (size_t)stat_buf.st_size + 1);
2301 if (pszPageText == NULL) {
2302 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
2306 int result = fread(pszPageText, sizeof(char), stat_buf.st_size, fp);
2307 if (result != stat_buf.st_size) {
2308 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "fread is failed result : %d", result);
2311 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pszPageText : (%s)", (char *)pszPageText);
2313 if (pszPageText[0] != '\0') {
2314 Evas_Object *entry = elm_entry_add(viewer_play_data->main_window);
2315 elm_cnp_selection_set(entry, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, pszPageText, strlen(pszPageText));
2316 evas_object_del(entry);
2317 is_text_copied = TRUE;
2320 /*free message text after displaying*/
2335 status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"));
2337 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2340 void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data)
2342 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2343 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2344 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2345 Evas_Object *popup = NULL;
2346 Evas_Object *layout = NULL;
2347 Evas_Object *bg = NULL;
2348 Evas_Object *scroller = NULL;
2349 Evas_Object *box = NULL;
2350 Evas_Object *entry = NULL;
2351 Evas_Object *btn_close = NULL;
2353 /* delete previous popup */
2354 if (viewer_play_data->popup) {
2355 evas_object_del(viewer_play_data->popup);
2356 viewer_play_data->popup = NULL;
2357 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2361 popup = elm_popup_add(viewer_play_data->main_window);
2362 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2363 evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
2364 elm_object_style_set(popup, "menustyle");
2365 elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_MESSAGE_DETAILS"));
2368 layout = elm_layout_add(viewer_play_data->main_window);
2369 elm_layout_file_set(layout, MSG_VIEWER_THEME, "msg/detail");
2370 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2371 evas_object_show(layout);
2374 bg = evas_object_rectangle_add(evas_object_evas_get(layout));
2375 elm_object_part_content_set(layout, "msg/detail/bg", bg);
2376 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, 0.0);
2377 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, 0.0);
2378 evas_object_show(bg);
2380 /* create scroller */
2381 scroller = elm_scroller_add(layout);
2382 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2383 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
2384 elm_scroller_bounce_set(scroller, FALSE, TRUE);
2385 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
2386 elm_object_part_content_set(layout, "msg/detail/content", scroller);
2387 evas_object_show(scroller);
2390 box = elm_box_add(layout);
2391 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2392 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
2393 elm_box_homogeneous_set(box, EINA_FALSE);
2394 evas_object_show(box);
2395 evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT*4);
2396 elm_object_content_set(scroller, box);
2399 entry = elm_entry_add(layout);
2400 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2401 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
2402 elm_entry_single_line_set(entry, EINA_FALSE);
2403 elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
2404 elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
2405 elm_entry_magnifier_disabled_set(entry, EINA_TRUE);
2406 elm_entry_editable_set(entry, EINA_FALSE);
2408 char *str = msg_common_make_message_detail_text(viewer_play_data->msgHandle, viewer_play_data->msgID);
2411 elm_entry_entry_set(entry, str);
2414 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_make_message_detail_text is failed");
2418 elm_box_pack_end(box, entry);
2419 evas_object_show(entry);
2421 /* add close button */
2422 btn_close = elm_button_add(popup);
2423 elm_object_style_set(btn_close, "popup_button/default");
2424 elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
2425 elm_object_part_content_set(popup, "button1", btn_close);
2426 evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_message_details_popup_close_clicked_cb, viewer_play_data);
2428 viewer_play_data->popup = popup;
2429 viewer_play_data->popup_type = MSG_VIEWER_DETAILS_POPUP;
2430 elm_object_content_set(popup, layout);
2432 msg_ui_viewer_disconnect_handler(viewer_play_data);
2434 evas_object_show(popup);
2436 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2439 static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2441 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2442 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2444 if (viewer_play_data->popup) {
2445 evas_object_del(viewer_play_data->popup);
2446 viewer_play_data->popup = NULL;
2447 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2450 /* connect handler again*/
2451 msg_ui_viewer_connect_handler(viewer_play_data);
2453 /* play viewer again if previous status was PLAY */
2454 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2455 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2456 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2462 MSG_BOOL msg_ui_viewer_check_address_is_blocked(void *data, char *address, int *filter_id)
2464 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2465 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2466 msg_error_t err = MSG_SUCCESS;
2467 msg_struct_list_s filter_list;
2470 char filter_val[MAX_FILTER_VALUE_LEN] = {0,};
2472 err = msg_get_filter_list(viewer_play_data->msgHandle, &filter_list);
2473 if (err != MSG_SUCCESS) {
2474 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_filter_list() fail - err [%d]", err);
2478 total_cnt = filter_list.nCount;
2480 for (i = 0; i < total_cnt; i++) {
2482 bzero(filter_val, sizeof(filter_val));
2483 err = msg_get_str_value(filter_list.msg_struct_info[i], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val));
2485 if (err != MSG_SUCCESS) {
2486 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_str_value() fail - err [%d]", err);
2487 msg_release_list_struct(&filter_list);
2491 if (!strcmp(address, filter_val)) {
2493 msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_TYPE_INT, &filter_type);
2494 if (filter_type == MSG_FILTER_BY_ADDRESS_SAME) {
2495 /* get filter id if address is exist in block list */
2496 msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_ID_INT, filter_id);
2497 msg_release_list_struct(&filter_list);
2503 msg_release_list_struct(&filter_list);
2507 static void __msg_ui_viewer_grab_volume_key(void *data)
2509 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2510 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2511 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2514 ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP, TOP_POSITION_GRAB);
2515 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_grab_key() ret = %d", ret);
2517 ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN, TOP_POSITION_GRAB);
2518 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_grab_key() ret = %d", ret);
2521 static void __msg_ui_viewer_ungrab_volume_key(void *data)
2523 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2524 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2525 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2528 ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP);
2529 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_ungrab_key() ret = %d", ret);
2531 ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN);
2532 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_ungrab_key() ret = %d", ret);
2535 static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data)
2537 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2538 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
2539 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2540 int use_volume_key = false;
2542 vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
2544 if (use_volume_key) {
2545 msg_common_increase_font_size();
2547 if (viewer_play_data->render_entry) {
2548 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
2549 MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
2550 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
2553 __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volume_slider);
2559 static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data)
2561 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2562 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
2563 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2564 int use_volume_key = false;
2566 vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
2568 if (use_volume_key) {
2569 msg_common_decrease_font_size();
2571 if (viewer_play_data->render_entry) {
2572 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
2573 MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
2574 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
2577 __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volume_slider);
2583 static Eina_Bool __msg_ui_viewer_volume_key_release_cb(void *data, int type, void *event)
2585 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2586 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
2587 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
2588 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2589 Ecore_Event_Key *ev = event;
2590 int use_volume_key = false;
2592 vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
2594 if (!use_volume_key) {
2595 if (viewer_play_data->volumebar_timer) {
2596 ecore_timer_del(viewer_play_data->volumebar_timer);
2597 viewer_play_data->volumebar_timer = NULL;
2599 viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
2602 if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) { /* KEY_VOLUMEUP */
2603 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is released");
2605 if (viewer_play_data->vol_up_key_longpress) {
2606 ecore_timer_del(viewer_play_data->vol_up_key_longpress);
2607 viewer_play_data->vol_up_key_longpress = NULL;
2609 } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) { /* KEY_VOLUMEDOWN */
2610 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is released");
2612 if (viewer_play_data->vol_down_key_longpress) {
2613 ecore_timer_del(viewer_play_data->vol_down_key_longpress);
2614 viewer_play_data->vol_down_key_longpress = NULL;
2617 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
2623 static Eina_Bool __msg_ui_viewer_volume_key_press_cb(void *data, int type, void *event)
2625 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2626 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
2627 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
2628 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2629 Ecore_Event_Key *ev = event;
2630 int use_volume_key = false;
2632 vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
2634 if (use_volume_key) {
2635 if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) { /* KEY_VOLUMEUP */
2636 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is pressed");
2638 msg_common_increase_font_size();
2640 if (viewer_play_data->render_entry) {
2641 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
2642 MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
2643 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
2646 viewer_play_data->vol_up_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_up_key_long_press_cb, (void *)viewer_play_data);
2647 } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) { /* KEY_VOLUMEDOWN */
2648 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is pressed");
2650 msg_common_decrease_font_size();
2652 if (viewer_play_data->render_entry) {
2653 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
2654 MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
2655 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
2658 viewer_play_data->vol_down_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_down_key_long_press_cb, (void *)viewer_play_data);
2660 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
2663 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Use volume key setting is not activated. Do volume key action");
2665 if (!viewer_play_data->volumebar || !viewer_play_data->volume_slider)
2666 msg_ui_viewer_create_volume_bar(viewer_play_data);
2668 if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) { /* KEY_VOLUMEUP */
2669 if (viewer_play_data->volumebar_timer) {
2670 ecore_timer_del(viewer_play_data->volumebar_timer);
2671 viewer_play_data->volumebar_timer = NULL;
2673 __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volume_slider);
2675 viewer_play_data->vol_up_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_up_key_long_press_cb, (void *)viewer_play_data);
2676 } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) { /* KEY_VOLUMEDOWN */
2677 if (viewer_play_data->volumebar_timer) {
2678 ecore_timer_del(viewer_play_data->volumebar_timer);
2679 viewer_play_data->volumebar_timer = NULL;
2681 __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volume_slider);
2683 viewer_play_data->vol_down_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_down_key_long_press_cb, (void *)viewer_play_data);
2685 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
2692 void msg_ui_viewer_create_volume_bar(void *data)
2694 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2695 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2696 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2698 Evas_Object *layout = NULL;
2699 Evas_Object *slider = NULL;
2700 Evas_Object *icon_start = NULL;
2701 Evas_Object *icon_end = NULL;
2703 layout = elm_layout_add(viewer_play_data->play_layout);
2704 elm_layout_file_set(layout, MSG_VIEWER_THEME, "volume_controller");
2705 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2706 evas_object_show(layout);
2708 slider = elm_slider_add(layout);
2709 elm_slider_indicator_show_set(slider, EINA_TRUE);
2710 evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
2711 evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
2712 elm_slider_indicator_format_set(slider, "%1.0f");
2713 evas_object_show(slider);
2715 icon_start = elm_icon_add(layout);
2716 elm_image_file_set(icon_start, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MIN);
2717 evas_object_size_hint_aspect_set(icon_start, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2719 icon_end = elm_icon_add(layout);
2720 elm_image_file_set(icon_end, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MAX);
2721 evas_object_size_hint_aspect_set(icon_end, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2723 elm_object_content_set(slider,icon_start);
2724 elm_object_part_content_set(slider, "end", icon_end);
2726 elm_slider_min_max_set(slider, 0, __msg_ui_viewer_get_max_volume());
2727 elm_slider_value_set(slider, __msg_ui_viewer_get_current_volume());
2729 elm_object_part_content_set(layout, "slider", slider);
2731 viewer_play_data->volumebar = layout;
2732 viewer_play_data->volume_slider = slider;
2733 elm_object_part_content_set(viewer_play_data->play_layout, "volume_layout", viewer_play_data->volumebar);
2735 evas_object_data_set(slider, "viewer_play_data", viewer_play_data);
2737 __msg_ui_viewer_volumebar_event_callback_add(slider, __msg_ui_viewer_volumebar_event_cb);
2739 evas_object_smart_callback_add(slider, "slider,drag,start", __msg_ui_viewer_volumebar_drag_start_cb, viewer_play_data);
2740 evas_object_smart_callback_add(slider, "slider,drag,stop", __msg_ui_viewer_volumebar_drag_stop_cb, viewer_play_data);
2741 evas_object_smart_callback_add(slider, "changed", __msg_ui_viewer_volumebar_changed_cb, viewer_play_data);
2744 if (viewer_play_data->volumebar_timer) {
2745 ecore_timer_del(viewer_play_data->volumebar_timer);
2746 viewer_play_data->volumebar_timer = NULL;
2748 viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
2752 void msg_ui_viewer_destroy_volume_bar(void *data)
2754 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2755 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2756 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2758 if (viewer_play_data->volumebar_timer) {
2759 ecore_timer_del(viewer_play_data->volumebar_timer);
2760 viewer_play_data->volumebar_timer = NULL;
2763 elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
2764 evas_object_del(viewer_play_data->volumebar);
2765 viewer_play_data->volumebar = NULL;
2768 static Eina_Bool __msg_ui_viewer_volumebar_timer_cb(void *data)
2770 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2771 MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
2772 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2774 elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
2775 evas_object_del(viewer_play_data->volumebar);
2776 viewer_play_data->volumebar = NULL;
2778 return ECORE_CALLBACK_CANCEL;
2781 static void __msg_ui_viewer_volumebar_drag_start_cb(void *data, Evas_Object *obj, void *event_info)
2783 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2784 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
2785 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2787 if (viewer_play_data->volumebar_event_cb)
2788 viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_START);
2790 viewer_play_data->drag_volume_slider = true;
2793 static void __msg_ui_viewer_volumebar_drag_stop_cb(void *data, Evas_Object *obj, void *event_info)
2795 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2796 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
2797 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2799 if (viewer_play_data->volumebar_event_cb)
2800 viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_STOP);
2802 viewer_play_data->drag_volume_slider = false;
2805 static void __msg_ui_viewer_volumebar_changed_cb(void *data, Evas_Object *obj, void *event_info)
2807 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2808 double val = elm_slider_value_get(obj);
2810 if ((int)val != __msg_ui_viewer_get_current_volume())
2811 __msg_ui_viewer_set_volume((int)val);
2814 static void __msg_ui_viewer_volumebar_event_cb(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event)
2816 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2817 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, user_data == NULL, "data is NULL");
2818 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)user_data;
2820 if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_START) {
2821 if (viewer_play_data->volumebar_timer) {
2822 ecore_timer_del(viewer_play_data->volumebar_timer);
2823 viewer_play_data->volumebar_timer = NULL;
2825 } else if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_STOP) {
2826 viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
2830 static void __msg_ui_viewer_volumebar_event_callback_add(Evas_Object *obj, MSG_VIEWER_VOLUMEBAR_CB event_cb)
2832 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2833 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, obj == NULL);
2834 MSG_PLAY_DATA_S *viewer_play_data = evas_object_data_get(obj, "viewer_play_data");
2836 viewer_play_data->volumebar_event_cb = event_cb;
2839 static void __msg_ui_viewer_volumebar_volume_up(Evas_Object *obj)
2841 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2843 elm_slider_min_max_get(obj, NULL, &max);
2845 double current = elm_slider_value_get(obj);
2848 elm_slider_value_set(obj, (current + 1.0));
2850 evas_object_smart_callback_call(obj, "changed", NULL);
2853 static void __msg_ui_viewer_volumebar_volume_down(Evas_Object *obj)
2855 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2857 elm_slider_min_max_get(obj, &min, NULL);
2859 double current = elm_slider_value_get(obj);
2862 elm_slider_value_set(obj, (current - 1.0));
2864 evas_object_smart_callback_call(obj, "changed", NULL);
2867 static int __msg_ui_viewer_get_max_volume(void)
2869 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2872 int ret = sound_manager_get_max_volume(SOUND_TYPE_MEDIA, &max_vol);
2873 if (ret != SOUND_MANAGER_ERROR_NONE) {
2874 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
2881 static int __msg_ui_viewer_get_current_volume(void)
2883 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2886 int ret = sound_manager_get_volume(SOUND_TYPE_MEDIA, ¤t);
2887 if (ret != SOUND_MANAGER_ERROR_NONE) {
2888 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
2895 static bool __msg_ui_viewer_set_volume(int volume)
2897 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2898 int ret = sound_manager_set_volume(SOUND_TYPE_MEDIA, volume);
2899 if (ret != SOUND_MANAGER_ERROR_NONE) {
2900 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_set_volume().. [0x%x]", ret);
2904 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"set volume value = %d", volume);