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->mode != MSG_VIEWER_DEFAULT_MODE) {
284 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER view is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->mode);
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->mode = 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->del_idler = NULL;
422 viewer_play_data->play_controller_timer = NULL;
423 viewer_play_data->ctrl_start_x = 0;
424 viewer_play_data->ctrl_start_y = 0;
425 viewer_play_data->insert_count = 0;
426 viewer_play_data->attach_count = 0;
427 viewer_play_data->insert_list = NULL;
428 viewer_play_data->attach_list = NULL;
429 viewer_play_data->title_menu_opened = 0;
430 viewer_play_data->playcontroller_opened = 0;
431 viewer_play_data->auto_resume_state = true;
432 viewer_play_data->drag_volume_slider = false;
433 viewer_play_data->volkey_release_handler = NULL;
434 viewer_play_data->volkey_press_handler = NULL;
435 viewer_play_data->vol_up_key_longpress = NULL;
436 viewer_play_data->vol_down_key_longpress = NULL;
437 viewer_play_data->xdisplay = NULL;
439 viewer_play_data->title_th = elm_theme_new();
440 elm_theme_ref_set(viewer_play_data->title_th, NULL);
441 elm_theme_extension_add(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ);
443 viewer_play_data->progress_th = elm_theme_new();
444 elm_theme_ref_set(viewer_play_data->progress_th, NULL);
445 elm_theme_extension_add(viewer_play_data->progress_th, MSG_VIEWER_EDJ);
447 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
450 void msg_ui_viewer_destroy_play_view(void *data)
452 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
453 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
454 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
455 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
457 if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
458 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
459 if (err != MSG_SMIL_SUCCESS) {
460 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
462 viewer_play_data->status = MSG_VIEWER_STOP;
466 if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb) < 0) {
467 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "unregister failed in vconf_notify_key_changed with key[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
469 if (vconf_ignore_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb) < 0) {
470 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "unregister failed in vconf_notify_key_changed with key[%s]", VCONFKEY_MSG_APP_FONT_SIZE);
473 if (viewer_play_data->insert_list) {
476 ntotal = eina_list_count(viewer_play_data->insert_list);
477 for (index = 0; index < ntotal; index++) {
478 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(viewer_play_data->insert_list, index);
484 eina_list_free(viewer_play_data->insert_list);
485 viewer_play_data->insert_list = NULL;
488 if (viewer_play_data->attach_list) {
491 ntotal = eina_list_count(viewer_play_data->attach_list);
492 for (index = 0; index < ntotal; index++) {
493 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, index);
499 eina_list_free(viewer_play_data->attach_list);
500 viewer_play_data->attach_list = NULL;
503 if (viewer_play_data->popup) {
504 evas_object_del(viewer_play_data->popup);
505 viewer_play_data->popup = NULL;
506 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
509 if (viewer_play_data->del_idler) {
510 ecore_idler_del(viewer_play_data->del_idler);
511 viewer_play_data->del_idler = NULL;
514 if (viewer_play_data->help_page_gl) {
515 evas_object_del(viewer_play_data->help_page_gl);
516 viewer_play_data->help_page_gl = NULL;
519 if (viewer_play_data->play_controller_timer) {
520 ecore_timer_del(viewer_play_data->play_controller_timer);
521 viewer_play_data->play_controller_timer = NULL;
524 if (viewer_play_data->play_controller_progressbar_timer) {
525 ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
526 viewer_play_data->play_controller_progressbar_timer = NULL;
529 if (viewer_play_data->title_th) {
530 elm_theme_extension_del(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ);
531 elm_theme_free(viewer_play_data->title_th);
532 viewer_play_data->title_th = NULL;
535 if (viewer_play_data->progress_th) {
536 elm_theme_extension_del(viewer_play_data->progress_th, EDJDIR"/msg_viewer.edj");
537 elm_theme_free(viewer_play_data->progress_th);
538 viewer_play_data->progress_th = NULL;
541 if (viewer_play_data->volumebar_timer) {
542 ecore_timer_del(viewer_play_data->volumebar_timer);
543 viewer_play_data->volumebar_timer = NULL;
546 if (viewer_play_data->volkey_release_handler) {
547 ecore_event_handler_del(viewer_play_data->volkey_release_handler);
548 viewer_play_data->volkey_release_handler = NULL;
551 if (viewer_play_data->vol_up_key_longpress) {
552 ecore_timer_del(viewer_play_data->vol_up_key_longpress);
553 viewer_play_data->vol_up_key_longpress = NULL;
556 if (viewer_play_data->volkey_press_handler) {
557 ecore_event_handler_del(viewer_play_data->volkey_press_handler);
558 viewer_play_data->volkey_press_handler = NULL;
561 if (viewer_play_data->vol_down_key_longpress) {
562 ecore_timer_del(viewer_play_data->vol_down_key_longpress);
563 viewer_play_data->vol_down_key_longpress = NULL;
566 if (viewer_play_data->focus_in) {
567 ecore_event_handler_del(viewer_play_data->focus_in);
568 viewer_play_data->focus_in = NULL;
571 if (viewer_play_data->focus_out) {
572 ecore_event_handler_del(viewer_play_data->focus_out);
573 viewer_play_data->focus_out = NULL;
576 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
579 void msg_ui_viewer_connect_handler(void *data)
581 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
582 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
583 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
585 /* connect mouse handler for flick event */
586 if (!viewer_play_data->mouse_down_event_handler)
587 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);
589 __msg_ui_viewer_grab_volume_key(viewer_play_data);
591 /* connect key handler for volume up/down */
592 if (!viewer_play_data->volkey_release_handler)
593 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);
595 if (!viewer_play_data->volkey_press_handler)
596 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);
598 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
601 void msg_ui_viewer_disconnect_handler(void *data)
603 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
604 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
605 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
607 if (viewer_play_data->mouse_up_event_handler) {
608 ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
609 viewer_play_data->mouse_up_event_handler = NULL;
612 if (viewer_play_data->mouse_down_event_handler) {
613 ecore_event_handler_del(viewer_play_data->mouse_down_event_handler);
614 viewer_play_data->mouse_down_event_handler = NULL;
617 if (viewer_play_data->volkey_release_handler) {
618 ecore_event_handler_del(viewer_play_data->volkey_release_handler);
619 viewer_play_data->volkey_release_handler = NULL;
622 if (viewer_play_data->vol_up_key_longpress) {
623 ecore_timer_del(viewer_play_data->vol_up_key_longpress);
624 viewer_play_data->vol_up_key_longpress = NULL;
627 if (viewer_play_data->volkey_press_handler) {
628 ecore_event_handler_del(viewer_play_data->volkey_press_handler);
629 viewer_play_data->volkey_press_handler = NULL;
632 if (viewer_play_data->vol_down_key_longpress) {
633 ecore_timer_del(viewer_play_data->vol_down_key_longpress);
634 viewer_play_data->vol_down_key_longpress = NULL;
637 __msg_ui_viewer_ungrab_volume_key(viewer_play_data);
639 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
642 MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
644 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
645 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
646 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
647 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL, FALSE);
648 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL, FALSE);
649 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
650 Evas_Object *layout = NULL;
651 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
653 viewer_play_data->xdisplay = ecore_x_display_get();
654 if (viewer_play_data->xdisplay == NULL) {
655 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_x_display_get() is failed");
659 /*get message information like bgcolor, insert and attach count
660 *it should be called before __msg_ui_viewer_create_control_toolbar*/
661 if (__msg_ui_viewer_play_view_get_message_info(viewer_play_data) == FALSE)
662 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_viewer_play_view_get_content_count is failed");
664 layout = msg_ui_viewer_get_main_layout(viewer_play_data->viewer_main);
665 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE);
667 /* create naviframe */
668 if (!viewer_play_data->navi_frame) {
669 viewer_play_data->navi_frame = msg_ui_viewer_create_navigation_layout(layout);
670 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->navi_frame == NULL, FALSE);
671 msg_ui_viewer_set_navi_frame(viewer_play_data->viewer_main, viewer_play_data->navi_frame);
673 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "navi_frame is already created");
676 /*create play layout*/
677 if (__msg_ui_viewer_create_content_layout(viewer_play_data) == FALSE)
680 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
682 /* create back button */
683 Evas_Object *back_btn = elm_button_add(viewer_play_data->navi_frame);
684 elm_object_style_set(back_btn, "naviframe/back_btn/default");
685 evas_object_smart_callback_add(back_btn, "clicked", msg_ui_viewer_back_button_cb, (void*)viewer_play_data);
687 /* set title text & title button */
688 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
689 /* create naviframe item and push */
690 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);
692 /* create naviframe item and push */
693 viewer_play_data->navi_item = elm_naviframe_item_push(viewer_play_data->navi_frame, NULL, back_btn, NULL, viewer_play_data->play_layout, "empty");
695 /* create naviframe title layout and set */
696 viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data);
697 elm_object_item_part_content_set(viewer_play_data->navi_item, "title", viewer_play_data->navi_title_layout);
698 msg_ui_viewer_set_navi_title_layout(viewer_play_data);
701 /* register vconf notify */
702 if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb, viewer_play_data) < 0) {
703 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "register failed in vconf_notify_key_changed with key[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
705 if (vconf_notify_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb, viewer_play_data) < 0) {
706 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "register failed in vconf_notify_key_changed with key[%s]", VCONFKEY_MSG_APP_FONT_SIZE);
710 __msg_ui_viewer_init_font_size(viewer_play_data);
711 /* create subject & index layout */
712 __msg_ui_viewer_create_subject_index_layout(viewer_play_data);
713 /* create page navigator */
714 __msg_ui_viewer_create_play_controller(viewer_play_data);
715 /* create control toolbar */
716 __msg_ui_viewer_create_control_toolbar(viewer_play_data);
717 /* connect handlers */
718 msg_ui_viewer_connect_handler(viewer_play_data);
720 /* for checking focus */
721 viewer_play_data->focus_in = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, msg_ui_viewer_focused_in_cb, viewer_play_data);
722 viewer_play_data->focus_out = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, msg_ui_viewer_focused_out_cb, viewer_play_data);
724 /* create smil rendering layout */
725 if (msg_smil_create_smil_player_layout(viewer_play_data->SmilHandle, viewer_play_data->play_layout) == FALSE)
728 SMIL_POSITION_S left_top = {0,};
729 SMIL_POSITION_S right_bottom = {0,};
730 __msg_ui_viewer_get_layout_size(viewer_play_data, &left_top, &right_bottom);
732 if (msg_smil_set_smil_player_layout_size(viewer_play_data->SmilHandle, &left_top, &right_bottom) == FALSE)
735 /*register help page show callback to renderer */
736 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)
737 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_help_page_cb is failed");
739 /*register change font size callback to render */
740 if (msg_smil_set_smil_player_entry_handle_cb(viewer_play_data->SmilHandle, msg_ui_viewer_set_entry_handle_cb) == FALSE)
741 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_cutlink_cb is failed");
743 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
744 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREVIEW_PLAY);
745 if (err != MSG_SMIL_SUCCESS) {
746 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
747 if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
751 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
752 if (err != MSG_SMIL_SUCCESS) {
753 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
754 if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
759 if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
761 bool readStatus = FALSE;
762 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_READ_BOOL, &readStatus);
765 msg_update_read_status(viewer_play_data->msgHandle, viewer_play_data->msgID, TRUE);
767 /* send read report*/
768 int folder_id = MSG_MAX_FOLDER_ID;
769 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
770 if (folder_id == MSG_INBOX_ID) {
771 msg_error_t err = MSG_SUCCESS;
773 msg_struct_t rcvSetting_info = msg_create_struct(MSG_STRUCT_SETTING_MMS_RECV_OPT);
774 err = msg_get_mms_recv_opt(viewer_play_data->msgHandle, rcvSetting_info);
776 if (err == MSG_SUCCESS) {
778 msg_get_bool_value(rcvSetting_info, MSG_MMS_RECVOPT_READ_REPORT_BOOL, &bReadReport);
780 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "bsend_read_report = %d", bReadReport);
781 /*read report request status and sent read report result of current message will be checked by MF after calling msg_mms_send_read_report.
782 *So, currently ui always call msg_mms_send_read_report when setting value of send read report is on*/
784 msg_mms_send_read_report(viewer_play_data->msgHandle, viewer_play_data->msgID, MSG_READ_REPORT_IS_READ);
787 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_config is failed!");
789 msg_release_struct(&rcvSetting_info);
793 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
798 MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data)
800 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
801 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
802 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
803 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
805 /* connect handler again*/
806 msg_ui_viewer_connect_handler(viewer_play_data);
808 /*change command bar*/
809 if (viewer_play_data->play_controller) {
810 edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
811 msg_ui_viewer_create_progressbar(viewer_play_data, 0);
815 if (!viewer_play_data->navi_title_layout)
816 viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data);
818 msg_ui_viewer_set_navi_title_layout(viewer_play_data);
821 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
822 if (err != MSG_SMIL_SUCCESS) {
823 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
827 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
831 Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent)
833 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
834 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
835 Evas_Object *navi_frame = NULL;
837 navi_frame = elm_naviframe_add(parent);
838 elm_object_part_content_set(parent, "elm.swallow.content", navi_frame);
839 evas_object_show(navi_frame);
841 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
845 static void __msg_ui_viewer_init_font_size(MSG_PLAY_DATA_S *data)
847 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
848 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
849 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
853 int access_font_index = 0;
854 int msg_access_font_index = 0;
857 /* get msg accessibility font index */
858 if (msg_common_get_access_font_size(&msg_access_font_index) == FALSE) {
859 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_access_font_size is failed !!");
860 msg_access_font_index = MSG_APP_FONT_SIZE_INDEX_NORMAL; /* 1 */
863 /* get accessibility font index */
864 if (vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &access_font_index) < 0) {
865 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE) is failed !!");
866 access_font_index = MSG_SYS_FONT_SIZE_INDEX_NORMAL; /* 1 */
869 if (msg_common_get_font_size(&index) == FALSE) {
870 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_font_size() is failed");
873 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected font_size index = %d", index);
876 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "VCONFKEY_MSG_APP_ACCESS_FONT_SIZE = %d", msg_access_font_index);
877 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE = %d", access_font_index);
879 if (msg_access_font_index != access_font_index) {
880 font_size = msg_common_get_font_size_from_index(access_font_index);
882 /* sync current font size as accessibility font index */
883 if (msg_common_set_font_size(access_font_index) == FALSE)
884 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_set_font_size(index = %d) is failed !!", access_font_index);
886 /* sync msg accessibility font size with accessibility font index */
887 if (msg_common_set_access_font_size(access_font_index) == FALSE)
888 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_set_int(VCONFKEY_MSG_APP_ACCESS_FONT_SIZE) is failed !!, [%d]", access_font_index);
890 font_size = msg_common_get_font_size_from_index(index);
893 viewer_play_data->font_size = font_size;
896 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)
898 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
899 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
900 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
903 if (change_type == MSG_VIEWER_FONT_CHANGE_LOAD_SETTING) {
904 if (msg_common_get_font_size(&index) == FALSE) {
905 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_font_size() is failed");
908 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected font_size index = %d", index);
910 viewer_play_data->font_size = msg_common_get_font_size_from_index(index);
912 index = msg_common_get_index_from_font_size(viewer_play_data->font_size);
913 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "use latest updated font, index = %d, size = %d", index, viewer_play_data->font_size);
916 if (viewer_play_data->render_entry) {
917 char font_size_str[DEF_BUF_LEN_S + 1] = {0,};
919 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "entry type = %d", entry_type);
921 if (entry_type == MSG_VIEWER_ENTRY_NORMAL_TEXT)
922 snprintf(font_size_str, sizeof(font_size_str), "DEFAULT='font_size=%d'", viewer_play_data->font_size);
924 snprintf(font_size_str, sizeof(font_size_str), "DEFAULT='font_size=%d'", (viewer_play_data->font_size*4)/5);
926 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font_size_str = (%s)", font_size_str);
927 elm_entry_text_style_user_push(viewer_play_data->render_entry, font_size_str);
931 static void __msg_ui_viewer_vconf_changed_cb(keynode_t *key, void *data)
933 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
934 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
935 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
939 char *key_name = NULL;
941 if ((key_name = vconf_keynode_get_name(key)) == NULL) {
942 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "key_name is NULL");
946 if (!strcmp(key_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) {
947 index = vconf_keynode_get_int(key);
948 font_size = msg_common_get_font_size_from_index(index);
949 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font size updated with ACCESSIBILITY TYPE, index = %d, font size = %d", index, font_size);
951 viewer_play_data->font_size = font_size;
953 /* sync current font size as accessibility font index */
954 if (msg_common_set_font_size(index) == FALSE)
955 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_set_font_size(index = %d) is failed !!", index);
957 /* sync msg accessibility font size with accessibility font index */
958 if (msg_common_set_access_font_size(index) == FALSE)
959 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_set_int(VCONFKEY_MSG_APP_ACCESS_FONT_SIZE) is failed !!, [%d]", index);
961 } else if (!strcmp(key_name, VCONFKEY_MSG_APP_FONT_SIZE)) {
962 index = vconf_keynode_get_int(key);
963 font_size = msg_common_get_font_size_from_index(index);
964 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font size updated with MSG TYPE, index = %d, font size = %d", index, font_size);
966 viewer_play_data->font_size = font_size;
968 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid key name");
972 static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data)
974 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
975 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
976 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
978 if (!viewer_play_data->play_layout) {
979 viewer_play_data->play_layout = elm_layout_add(viewer_play_data->navi_frame);
980 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->play_layout == NULL, FALSE);
981 elm_layout_file_set(viewer_play_data->play_layout, MSG_VIEWER_THEME, "viewer_main");
982 evas_object_size_hint_weight_set(viewer_play_data->play_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
983 evas_object_show(viewer_play_data->play_layout);
985 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);
986 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);
987 elm_object_signal_callback_add(viewer_play_data->play_layout, "action,clicked", "", msg_ui_viewer_play_layout_clicked_cb, (void *)viewer_play_data);
990 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
994 static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data)
996 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
997 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
998 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
999 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1000 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
1001 char strSubject[MAX_SUBJECT_LEN] = {0};
1003 Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
1004 elm_layout_file_set(layout, MSG_VIEWER_THEME, "subject/pageindex");
1005 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1006 evas_object_show(layout);
1007 viewer_play_data->subject_index_layout = layout;
1010 Evas_Object *bg = evas_object_rectangle_add(evas_object_evas_get(layout));
1011 evas_object_color_set(bg, 248, 246, 239, 255);
1012 elm_object_part_content_set(layout, "rect/bg", bg);
1013 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1014 evas_object_show(bg);
1016 /* get subject str */
1017 msg_get_str_value(viewer_play_data->msg_t, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN);
1018 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "subject text is %s", strSubject);
1020 if (strSubject[0] != '\0')
1021 edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "subject/text", strSubject);
1023 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.subject", viewer_play_data->subject_index_layout);
1025 /* set LOCK icon if available */
1026 bool bProtected = false;
1027 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &bProtected);
1028 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Lock status of current message %d", bProtected);
1029 edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), ((bProtected) ? "lock/icon/show" : "lock/icon/hide"), "*");
1031 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1034 static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data)
1036 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1037 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1038 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1040 Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
1041 elm_layout_file_set(layout, MSG_VIEWER_THEME, "play_controller");
1042 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1043 evas_object_show(layout);
1045 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", layout);
1046 viewer_play_data->play_controller = layout;
1047 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
1049 //add signal callbacks
1050 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "volume_clicked", "", msg_ui_viewer_volume_button_cb, (void *)viewer_play_data);
1051 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "prev_clicked", "", msg_ui_viewer_prev_button_cb, (void *)viewer_play_data);
1052 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "play_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
1053 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "pause_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
1054 edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "next_clicked", "", msg_ui_viewer_next_button_cb, (void *)viewer_play_data);
1056 viewer_play_data->playcontroller_opened = true;
1059 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
1061 //create progressbar
1062 msg_ui_viewer_create_progressbar(viewer_play_data, 0);
1064 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1067 static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data)
1069 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1070 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1071 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1072 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1073 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
1075 Evas_Object *btn = NULL;
1076 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
1078 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
1080 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
1081 // TODO : EMPTY, needs to add item?
1082 } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE) {
1083 // unset and delete btn objects(init)
1084 if (viewer_play_data->more_btn)
1085 evas_object_del(viewer_play_data->more_btn);
1086 elm_object_item_part_content_unset(viewer_play_data->navi_item, "toolbar_more_btn");
1089 btn = elm_button_add(viewer_play_data->navi_frame);
1090 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, btn == NULL);
1091 elm_object_style_set(btn, "naviframe/more/default");
1092 elm_object_item_part_content_set(viewer_play_data->navi_item, "toolbar_more_btn", btn);
1093 viewer_play_data->more_btn = btn;
1095 evas_object_smart_callback_add(btn, "clicked", msg_ui_viewer_more_button_cb, data);
1097 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid launch mode");
1100 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1103 Evas_Object *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data)
1105 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1106 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1107 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1109 Evas_Object *title_layout = elm_layout_add(viewer_play_data->navi_frame);
1110 elm_layout_file_set(title_layout, MSG_VIEWER_THEME, "title");
1112 evas_object_size_hint_weight_set(title_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1113 evas_object_size_hint_align_set(title_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1114 evas_object_show(title_layout);
1116 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1117 return title_layout;
1120 void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data)
1122 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1123 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1124 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1125 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1126 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
1128 int folder_id = MSG_MAX_FOLDER_ID;
1129 char *display_name = NULL;
1130 char title_address[MAX_ADDRESS_VAL_LEN + 1] = {0,};
1131 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
1133 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type
1134 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
1136 if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
1137 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launchmode is not applicable, current mode is %d", launchmode);
1140 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "folder_id = [%d]", folder_id);
1142 if (folder_id == MSG_INBOX_ID) {
1143 viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
1144 evas_object_size_hint_weight_set(viewer_play_data->title_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1145 evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
1147 elm_object_focus_allow_set(viewer_play_data->title_button, EINA_FALSE);
1148 elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
1149 elm_object_style_set(viewer_play_data->title_button, "title_button");
1151 char *address = NULL;
1154 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1156 if (contact_id > 0) {
1157 display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1160 snprintf(title_address, sizeof(title_address), "%s", display_name);
1163 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name");
1164 snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
1171 snprintf(title_address, sizeof(title_address), "%s", address);
1176 elm_object_text_set(viewer_play_data->title_button, title_address);
1178 evas_object_show(viewer_play_data->title_button);
1179 elm_object_part_content_set(viewer_play_data->navi_title_layout, "title_btn", viewer_play_data->title_button);
1180 evas_object_smart_callback_add(viewer_play_data->title_button, "clicked", msg_ui_viewer_title_button_clicked_cb, (void *)viewer_play_data);
1181 } else if (folder_id == MSG_OUTBOX_ID || folder_id == MSG_SENTBOX_ID) {
1182 viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
1183 evas_object_size_hint_weight_set(viewer_play_data->title_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1184 evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
1186 elm_object_focus_allow_set(viewer_play_data->title_button, EINA_FALSE);
1187 elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
1188 elm_object_style_set(viewer_play_data->title_button, "title_button");
1190 char *address = NULL;
1193 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1195 if (contact_id > 0) {
1196 display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1199 snprintf(title_address, sizeof(title_address), "%s", display_name);
1202 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name");
1203 snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME"));
1210 snprintf(title_address, sizeof(title_address), "%s", address);
1215 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1217 if (addr_count == 1) {
1218 elm_object_text_set(viewer_play_data->title_button, title_address);
1219 } else if (addr_count > 1) {
1220 char title_text[DEF_BUF_LEN+1] = {0,};
1221 snprintf(title_text, sizeof(title_text), "%s +%d", title_address, addr_count-1);
1222 elm_object_text_set(viewer_play_data->title_button, title_text);
1224 elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1227 evas_object_show(viewer_play_data->title_button);
1228 elm_object_part_content_set(viewer_play_data->navi_title_layout, "title_btn", viewer_play_data->title_button);
1229 evas_object_smart_callback_add(viewer_play_data->title_button, "clicked", msg_ui_viewer_title_button_clicked_cb, (void *)viewer_play_data);
1231 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid type of message folder id = [%d]", folder_id);
1234 /* create attach button */
1235 Evas_Object *button = elm_button_add(viewer_play_data->navi_frame);
1236 elm_object_style_set(button, "naviframe/title_icon");
1238 Evas_Object *icon = elm_icon_add(viewer_play_data->navi_frame);
1240 if (viewer_play_data->insert_count + viewer_play_data->attach_count != 0)
1241 elm_object_disabled_set(button, EINA_FALSE);
1243 elm_object_disabled_set(button, EINA_TRUE);
1244 elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_LIST_ICON);
1246 elm_object_content_set(button, icon);
1247 evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_save_button_cb, viewer_play_data);
1249 evas_object_show(button);
1250 elm_object_part_content_set(viewer_play_data->navi_title_layout, "attach_btn", button);
1252 viewer_play_data->attach_button = button;
1255 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1258 static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom)
1260 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1261 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1262 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, left_top == NULL);
1263 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, right_bottom == NULL);
1264 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1265 int navi_frame_height = 0;
1266 int window_width = 0;
1267 int window_height = 0;
1270 ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, &window_height);
1271 viewer_play_data->window_width = window_width;
1272 viewer_play_data->window_height = window_height;
1274 /*get navi_frame height*/
1275 double scale = elm_config_scale_get();
1276 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "scale = %lf", scale);
1278 navi_frame_height = (int)(scale * VIEWER_NAVI_FRAME_HEIGHT);
1279 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "navi_frame_height = %d", navi_frame_height);
1282 left_top->y = navi_frame_height;
1283 right_bottom->x = window_width;
1284 right_bottom->y = window_height;
1286 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1289 static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data)
1291 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1292 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
1293 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1295 int media_count = 0;
1296 int nmedia_count = 0;
1299 /*get the SMIL content*/
1300 if (!viewer_play_data->mms_t) {
1301 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mms data struct is null");
1306 msg_get_int_value(viewer_play_data->mms_t, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor);
1307 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->bgcolor = 0x%x", bgColor);
1309 /*get attach count*/
1310 msg_list_handle_t attachlist_info = NULL;
1311 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
1312 viewer_play_data->attach_count= msg_list_length(attachlist_info);
1314 /*get attach list */
1315 viewer_play_data->attach_list = __msg_ui_viewer_get_attach_list(viewer_play_data);
1317 /*get insert count*/
1318 msg_list_handle_t pagelist_info = NULL;
1319 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
1320 page_count = msg_list_length(pagelist_info);
1324 for (page_idx = 0; page_idx < page_count; ++page_idx) {
1325 msg_struct_t page_info = NULL;
1326 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
1329 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
1333 msg_list_handle_t medialist_info = NULL;
1334 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
1335 media_count = msg_list_length(medialist_info);
1336 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count);
1339 for (media_idx = 0; media_idx < media_count; ++media_idx) {
1341 msg_struct_t media_info = NULL;
1342 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
1345 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is NULL", media_idx);
1349 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
1351 if (mediaType == MMS_SMIL_MEDIA_TEXT)
1358 viewer_play_data->insert_count = nmedia_count;
1360 /* get insert item list */
1361 viewer_play_data->insert_list = __msg_ui_viewer_get_inserted_item_list(viewer_play_data);
1362 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert count : %d, attach count : %d", viewer_play_data->insert_count, viewer_play_data->attach_count);
1364 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1369 int msg_ui_viewer_get_thread_address_count(MSG_PLAY_DATA_S *data)
1371 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, -1);
1372 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1373 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL, -1);
1374 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL, -1);
1375 msg_struct_list_s addrList;
1377 msg_error_t err = MSG_SUCCESS;
1380 /* get address list(thread) */
1381 memset(&addrList, 0x00, sizeof(msg_struct_list_s));
1382 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
1384 err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
1385 if (err != MSG_SUCCESS) {
1386 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_address_list has failed");
1390 count = addrList.nCount;
1392 msg_release_list_struct(&addrList);
1397 void msg_ui_viewer_get_thread_address_nth_address(MSG_PLAY_DATA_S *data, int number, char **address, int *contact_id)
1399 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1400 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1401 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1402 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
1403 msg_struct_list_s addrList;
1405 msg_error_t err = MSG_SUCCESS;
1406 char buf_address[MAX_ADDRESS_VAL_LEN+1] = {0,};
1408 /* get address list(thread) */
1409 memset(&addrList, 0x00, sizeof(msg_struct_list_s));
1410 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
1412 err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
1413 if (err != MSG_SUCCESS) {
1414 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_address_list has failed");
1418 /* get Nth address */
1419 if (addrList.msg_struct_info[number]) {
1420 err = msg_get_str_value(addrList.msg_struct_info[number], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, buf_address, MAX_ADDRESS_VAL_LEN);
1421 if (err != MSG_SUCCESS) {
1422 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_str_value() is failed");
1423 msg_release_list_struct(&addrList);
1427 err = msg_get_int_value(addrList.msg_struct_info[number], MSG_ADDRESS_INFO_CONTACT_ID_INT, contact_id);
1428 if (err != MSG_SUCCESS) {
1429 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_int_value() is failed");
1430 msg_release_list_struct(&addrList);
1434 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "addrList.msg_struct_info[%d] is NULL", number);
1435 msg_release_list_struct(&addrList);
1439 msg_release_list_struct(&addrList);
1441 *address = (char *)calloc(1, strlen(buf_address) + 1);
1442 if (*address == NULL) {
1443 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "*address is NULL");
1447 strncpy(*address, buf_address, strlen(buf_address));
1449 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is %s", *address);
1450 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "contact_id is %d", *contact_id);
1453 static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data)
1455 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1456 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1457 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1461 int media_count = 0;
1464 Eina_List *insert_list = NULL;
1466 char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
1467 char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
1469 /*get insert count*/
1470 msg_list_handle_t pagelist_info = NULL;
1471 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
1472 page_count = msg_list_length(pagelist_info);
1474 for (page_idx = 0; page_idx < page_count; ++page_idx) {
1475 msg_struct_t page_info = NULL;
1476 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
1478 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
1482 msg_list_handle_t medialist_info = NULL;
1483 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
1484 media_count = msg_list_length(medialist_info);
1485 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count);
1488 for (media_idx = 0; media_idx < media_count; ++media_idx) {
1490 msg_struct_t media_info = NULL;
1491 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
1494 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx);
1498 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
1500 if (mediaType == MMS_SMIL_MEDIA_TEXT) {
1501 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is TEXT type, skip adding", media_idx);
1505 bzero(strFileName, sizeof(strFileName));
1506 bzero(strFilePath, sizeof(strFilePath));
1508 msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName));
1509 msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
1511 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert media file name: %s", strFileName);
1512 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
1514 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pInsert_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1515 if (pInsert_info == NULL) {
1516 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
1522 if (strlen(strFileName)) {
1523 strncpy(pInsert_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
1525 const char *file_name = NULL;
1526 file_name = ecore_file_file_get(strFilePath);
1528 strncpy(pInsert_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
1530 strncpy(pInsert_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
1533 strncpy(pInsert_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
1535 pInsert_info->pfile_size = ecore_file_size(strFilePath);
1537 msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType);
1539 if (drmType != MSG_DRM_TYPE_NONE) {
1540 pInsert_info->media_type = MSG_VIEWER_MEDIA_DRM;
1542 switch (mediaType) {
1543 case MMS_SMIL_MEDIA_IMG:
1544 pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG;
1546 case MMS_SMIL_MEDIA_AUDIO:
1547 pInsert_info->media_type = MSG_VIEWER_MEDIA_AUDIO;
1549 case MMS_SMIL_MEDIA_VIDEO:
1550 pInsert_info->media_type = MSG_VIEWER_MEDIA_VIDEO;
1552 case MMS_SMIL_MEDIA_ANIMATE:
1553 pInsert_info->media_type = MSG_VIEWER_MEDIA_ANIMATE;
1555 case MMS_SMIL_MEDIA_IMG_OR_VIDEO:
1556 pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG_OR_VIDEO;
1559 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d type is not handled in switch!");
1560 pInsert_info->media_type = MSG_VIEWER_MEDIA_ATTACH; // set attach type, it's better to set attach type, not to set invalid type
1564 pInsert_info->viewer_play_data = viewer_play_data;
1566 /*append insert item list*/
1567 insert_list = eina_list_append(insert_list, pInsert_info);
1573 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d insert item(s) added", insertCnt);
1574 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1578 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free insert item list");
1582 ntotal = eina_list_count(insert_list);
1583 for (index = 0; index < ntotal; index++) {
1584 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(insert_list, index);
1590 eina_list_free(insert_list);
1596 static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data)
1598 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1599 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1600 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1602 /*get attached content list*/
1604 int attach_count = 0;
1605 Eina_List *attach_list = NULL;
1606 char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
1607 char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
1609 /*get attach count*/
1610 msg_list_handle_t attachlist_info = NULL;
1611 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
1612 attach_count = msg_list_length(attachlist_info);
1614 for (attach_idx = 0; attach_idx < attach_count; ++attach_idx) {
1615 msg_struct_t attach_info = NULL;
1617 attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, attach_idx);
1619 if (attach_info == NULL) {
1620 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach is NULL");
1623 bzero(strFileName, sizeof(strFileName));
1624 bzero(strFilePath, sizeof(strFilePath));
1626 msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, strFileName, sizeof(strFileName));
1627 msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath));
1629 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file name: %s", strFileName);
1630 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
1632 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1633 if (pAttach_info == NULL) {
1634 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
1640 if (strlen(strFileName)) {
1641 strncpy(pAttach_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
1643 const char *file_name = NULL;
1644 file_name = ecore_file_file_get(strFilePath);
1646 strncpy(pAttach_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
1648 strncpy(pAttach_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
1651 strncpy(pAttach_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
1653 pAttach_info->pfile_size = ecore_file_size(strFilePath);
1654 pAttach_info->media_type = MSG_VIEWER_MEDIA_ATTACH;
1655 pAttach_info->viewer_play_data = viewer_play_data;
1657 /*append attach list*/
1658 attach_list = eina_list_append(attach_list, pAttach_info);
1664 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d attach(s) added", attach_count);
1665 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1669 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free attachment list");
1673 ntotal = eina_list_count(attach_list);
1674 for (index = 0; index < ntotal; index++) {
1675 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(attach_list, index);
1678 pAttach_info = NULL;
1681 eina_list_free(attach_list);
1687 void msg_ui_viewer_title_update(MSG_PLAY_DATA_S *data, MSG_VIEWER_OPTION_CHANGE_TYPE_E option_type)
1689 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1690 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1691 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1693 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1695 char *address = NULL;
1698 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1701 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1705 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "addr_count = %d, address = %s, contact_id = %d", addr_count, address, contact_id);
1707 if (option_type == MSG_VIEWER_OPTION_CONTACT) {
1708 display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1709 /* change title button */
1710 if (addr_count == 1) {
1712 elm_object_text_set(viewer_play_data->title_button, display_name);
1715 elm_object_text_set(viewer_play_data->title_button, address);
1717 } else if (addr_count > 1) {
1718 char title_text[DEF_BUF_LEN+1] = {0,};
1720 snprintf(title_text, sizeof(title_text), "%s +%d", display_name, addr_count-1);
1723 snprintf(title_text, sizeof(title_text), "%s +%d", address, addr_count-1);
1726 elm_object_text_set(viewer_play_data->title_button, title_text);
1728 elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1734 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1739 void msg_ui_viewer_show_popup(void *data, Evas_Object *parent, char *pcontent)
1741 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1742 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1743 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, parent == NULL);
1744 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1745 Evas_Object *popup = NULL;
1747 if (viewer_play_data->popup) {
1748 evas_object_del(viewer_play_data->popup);
1749 viewer_play_data->popup = NULL;
1750 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1753 popup = elm_popup_add(parent);
1754 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, popup == NULL, "popup is NULL");
1755 viewer_play_data->popup = popup;
1756 viewer_play_data->popup_type = MSG_VIEWER_NORMAL_POPUP;
1757 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1760 elm_object_text_set(popup, pcontent);
1761 elm_popup_timeout_set(popup, 2);
1762 evas_object_smart_callback_add(popup, "block,clicked", msg_ui_viewer_popup_block_clicked_cb, viewer_play_data);
1763 evas_object_smart_callback_add(popup, "timeout", msg_ui_viewer_popup_timeout_cb, viewer_play_data);
1765 evas_object_del(viewer_play_data->popup);
1766 viewer_play_data->popup = NULL;
1767 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1771 evas_object_show(popup);
1773 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1776 void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1778 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1779 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1780 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1782 if (viewer_play_data->popup) {
1783 evas_object_del(viewer_play_data->popup);
1784 viewer_play_data->popup = NULL;
1785 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1788 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1791 void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
1793 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1794 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1795 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1797 if (viewer_play_data->popup) {
1798 evas_object_del(viewer_play_data->popup);
1799 viewer_play_data->popup = NULL;
1800 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1803 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1806 MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box)
1808 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1809 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1810 Evas_Object *renderBox = (Evas_Object *)box;
1811 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
1812 int attach_count = viewer_play_data->attach_count;
1814 /* create box (for setting min size of genlist)*/
1815 Evas_Object *box2 = elm_box_add(renderBox);
1816 evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1817 evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
1818 evas_object_show(box2);
1820 /* create genlist */
1821 Evas_Object *genlist = elm_genlist_add(box2);
1822 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1823 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1824 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1825 elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
1826 evas_object_show(genlist);
1828 elm_box_pack_end(box2, genlist);
1829 evas_object_size_hint_min_set(box2, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * (attach_count + 1) * elm_config_scale_get());
1831 viewer_play_data->hp_sa_class.item_style = "dialogue/1text.1icon";
1832 viewer_play_data->hp_sa_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
1833 viewer_play_data->hp_sa_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get;
1834 viewer_play_data->hp_sa_class.func.state_get = NULL;
1835 viewer_play_data->hp_sa_class.func.del = __msg_ui_viewer_help_page_gl_del;
1837 viewer_play_data->hp_class.item_style = "dialogue/1text.2icon";
1838 viewer_play_data->hp_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
1839 viewer_play_data->hp_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get;
1840 viewer_play_data->hp_class.func.state_get = NULL;
1841 viewer_play_data->hp_class.func.del = __msg_ui_viewer_help_page_gl_del;
1843 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "attachment_count = %d", attach_count);
1845 if (attach_count > 0) {
1846 int attach_index = 0;
1848 if (attach_count > 1) {
1849 //make 'Save all' item
1850 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1851 memset(pItem, 0x00, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1852 strncpy(pItem->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"), strlen(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL")));
1853 pItem->isSaveAll = TRUE;
1854 pItem->viewer_play_data = viewer_play_data;
1856 for (attach_index = 0; attach_index < attach_count; attach_index++) {
1857 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
1858 if (pAttach_info == NULL) {
1859 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "(%d)th pAttach_info is NULL", attach_index);
1861 pItem->pfile_size += pAttach_info->pfile_size;
1865 Elm_Object_Item *item = NULL;
1866 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);
1867 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1870 for (attach_index = 0; attach_index < attach_count; attach_index++) {
1871 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
1872 if (pAttach_info == NULL) {
1873 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info is NULL");
1875 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1876 memcpy(pItem, pAttach_info, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
1878 elm_genlist_item_append(genlist, &(viewer_play_data->hp_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, pItem);
1883 viewer_play_data->help_page_gl = genlist;
1885 elm_box_pack_end(renderBox, box2);
1886 *attach_list = genlist;
1891 static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part)
1893 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1894 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
1895 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
1897 if (strcmp(part, "elm.text") == 0) {
1899 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_name = %s", pAttach_info->pfile_name);
1901 Eina_Strbuf *text_buf = eina_strbuf_new();
1902 eina_strbuf_append(text_buf, pAttach_info->pfile_name);
1903 eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_SPACE);
1904 eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_LEFT_BRACE);
1906 //get and convert size
1907 char size[DEF_BUF_LEN] = {0,};
1908 long long sizeKB = 0;
1909 long long sizeB = 0;
1911 if (pAttach_info->pfile_size < VIEWER_DETAILS_TEXT_MSG_SIZE_KB) {
1912 snprintf(size, sizeof(size), "1 %s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
1914 sizeKB = (long long)(pAttach_info->pfile_size)/VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
1915 sizeB = (long long)(pAttach_info->pfile_size)%VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
1917 if (sizeB >= (VIEWER_DETAILS_TEXT_MSG_SIZE_KB/2))
1920 snprintf(size, sizeof(size), "%lld %s", sizeKB, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
1923 eina_strbuf_append(text_buf, size);
1924 eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
1926 char *return_text = strdup(eina_strbuf_string_get(text_buf));
1927 eina_strbuf_free(text_buf);
1936 static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part)
1938 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
1939 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, NULL);
1940 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
1942 if (strcmp(part, "elm.icon.2") == 0 || strcmp(part, "elm.icon") == 0) {
1943 Evas_Object *box = elm_box_add(obj);
1944 Evas_Object *button = elm_button_add(obj);
1945 Evas_Object *icon = elm_icon_add(obj);
1947 evas_object_propagate_events_set(button, EINA_FALSE);
1948 elm_box_pack_start(box, button);
1949 elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_SAVE_ICON);
1950 elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
1951 elm_object_part_content_set(button, "icon", icon);
1952 elm_object_style_set(button, "circle/empty");
1953 evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_help_page_save_button_clicked_cb, data);
1954 evas_object_show(button);
1955 evas_object_show(box);
1957 } else if (strcmp(part, "elm.icon.1") == 0) {
1958 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
1959 Evas_Object *image = NULL;
1961 image = elm_icon_add(obj);
1963 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_path = %s", pAttach_info->pfile_path);
1965 /*set attach file icon*/
1966 if (pAttach_info->media_type == MSG_VIEWER_MEDIA_IMG ||
1967 pAttach_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
1968 elm_image_file_set(image, pAttach_info->pfile_path, NULL);
1969 } else if (pAttach_info->media_type == MSG_VIEWER_MEDIA_DRM) {
1970 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
1972 if (strlen(pAttach_info->pfile_path)) {
1973 const char *icon_path = NULL;
1975 icon_path = msg_common_get_file_icon(pAttach_info->pfile_path);
1977 elm_image_file_set(image, MSG_IMAGES_EDJ, icon_path);
1979 D_EMSG("icon_path is NULL");
1980 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
1983 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
1989 evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
1993 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
1999 static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info)
2001 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2002 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL);
2003 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
2004 Elm_Object_Item *pselected_item = (Elm_Object_Item *)event_info;
2005 service_h svc_handle = NULL;
2006 service_error_e err = MSG_SUCCESS;
2008 elm_genlist_item_selected_set(pselected_item, FALSE);
2010 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pAttach_info->pfile_name);
2011 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pAttach_info->pfile_path);
2012 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pAttach_info->media_type);
2015 if (!strcmp(pAttach_info->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"))) {
2016 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Save all item");
2020 if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
2021 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
2025 service_set_operation(svc_handle, SERVICE_OPERATION_VIEW);
2026 service_set_uri(svc_handle, pAttach_info->pfile_path);
2028 err = service_send_launch_request(svc_handle, NULL, NULL);
2029 if (err == SERVICE_ERROR_NONE) {
2030 if (pAttach_info->viewer_play_data) {
2031 /* set player state to pause and update icon */
2032 if (!msg_ui_viewer_command_play_pause(pAttach_info->viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
2033 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2038 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed, err = %d", err);
2041 service_destroy(svc_handle);
2046 static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj)
2048 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2050 MSG_VIEWER_ATTACH_MEDIA_INFO_S *del_data = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
2056 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2059 void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data)
2061 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2062 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2063 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2065 //register timer for disappear play_controller automatically when time elapsed after shown
2066 if (viewer_play_data->play_controller_timer) {
2067 ecore_timer_del(viewer_play_data->play_controller_timer);
2068 viewer_play_data->play_controller_timer = NULL;
2071 viewer_play_data->play_controller_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_LIFETIME, msg_ui_viewer_play_controller_timer_cb, (void *)viewer_play_data);
2073 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2076 void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx)
2078 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2079 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2080 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2081 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
2083 Evas_Object *progressbar = NULL;
2084 MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
2085 MSG_BOOL bExcludeHp = FALSE;
2086 double total_time = 0.0;
2087 double remain_time = 0.0;
2088 double elapse_time = 0.0;
2089 int remain_second = 0.0;
2090 int elapse_second = 0.0;
2091 char strTimeBuf[10] = {0,};
2093 if (slideIdx < 0 ) {
2094 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d, slideIdx must be same or over 0", slideIdx);
2098 if (!viewer_play_data->progressbar) {
2099 progressbar = elm_progressbar_add(viewer_play_data->play_controller);
2100 elm_object_theme_set(progressbar, viewer_play_data->progress_th);
2101 elm_object_style_set(progressbar, "list_progress");
2102 elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
2103 evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
2104 evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2105 viewer_play_data->progressbar = progressbar;
2106 evas_object_show(progressbar);
2107 elm_object_part_content_set(viewer_play_data->play_controller,"progressbar", progressbar);
2110 msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
2112 //In preview mode, slide time for help page should not be considered to total slide time
2113 bExcludeHp = (launchmode == MSG_VIEWER_PREVIEW_MODE) ? TRUE : FALSE;
2115 if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, 0, bExcludeHp, &total_time)) {
2116 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", 0, bExcludeHp);
2119 if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, slideIdx, bExcludeHp, &remain_time)) {
2120 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", slideIdx, bExcludeHp);
2124 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total slide time is %f", total_time);
2125 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Remain slide time from current slide(%d) is %f", slideIdx, remain_time);
2126 elapse_time = total_time-remain_time;
2127 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Elapsed slide time from first slide(0) to current slide(%d) is %f", slideIdx, elapse_time);
2129 viewer_play_data->totalProgressTime = remain_second = (int)total_time/1000;
2130 elapse_second = (int)elapse_time/1000;
2131 viewer_play_data->elapsedProgressTime = elapse_second;
2133 // START timer text set
2134 snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", elapse_second/60, elapse_second%60);
2135 edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
2137 bzero(strTimeBuf, sizeof(strTimeBuf));
2139 // END timer text set
2140 snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", remain_second/60, remain_second%60);
2141 edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/end/time", strTimeBuf);
2143 elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
2145 if (viewer_play_data->play_controller_progressbar_timer) {
2146 ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
2147 viewer_play_data->play_controller_progressbar_timer = NULL;
2150 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);
2152 if (msg_smil_get_current_slide_status(viewer_play_data->SmilHandle) == PLAYER_STATUS_PAUSED) {
2153 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Pause progress timer because current slide status is PAUSED");
2154 ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
2157 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2160 Eina_Bool msg_ui_viewer_play_controller_progressbar_timer_cb(void *data)
2162 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2163 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
2164 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2166 char strTimeBuf[10] = {0,};
2168 viewer_play_data->elapsedProgressTime += VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME;
2170 // update START timer text
2171 snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", viewer_play_data->elapsedProgressTime/60, viewer_play_data->elapsedProgressTime%60);
2172 edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
2174 if (viewer_play_data->elapsedProgressTime == viewer_play_data->totalProgressTime) {
2175 if (viewer_play_data->play_controller && evas_object_visible_get(viewer_play_data->play_controller) == EINA_FALSE) {
2176 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
2177 evas_object_show(viewer_play_data->play_controller);
2178 viewer_play_data->playcontroller_opened = true;
2179 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
2180 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
2182 // create play controller timer again
2183 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
2186 elm_progressbar_value_set(viewer_play_data->progressbar, 1.0);
2187 viewer_play_data->play_controller_progressbar_timer = NULL;
2189 return ECORE_CALLBACK_CANCEL;
2192 elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
2194 return ECORE_CALLBACK_RENEW;
2197 void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data)
2199 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2200 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2201 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2203 if (viewer_play_data->play_controller_progressbar_timer) {
2204 ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
2205 viewer_play_data->play_controller_progressbar_timer = NULL;
2206 viewer_play_data->elapsedProgressTime = 0;
2209 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2212 Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data)
2214 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2215 MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
2216 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2218 viewer_play_data->play_controller_timer = NULL;
2220 if (viewer_play_data->playcontroller_opened) {
2221 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play controller is hided after 3 seconds elapsed");
2222 elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
2223 evas_object_hide(viewer_play_data->play_controller);
2224 viewer_play_data->playcontroller_opened = false;
2225 if (!viewer_play_data->title_menu_opened)
2226 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
2229 return ECORE_CALLBACK_CANCEL;
2232 void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data)
2234 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2235 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2236 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2238 if (viewer_play_data->play_controller_timer) {
2239 ecore_timer_del(viewer_play_data->play_controller_timer);
2240 viewer_play_data->play_controller_timer = NULL;
2243 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2246 void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data)
2248 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2249 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2250 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2251 SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = NULL;
2254 int media_count = 0;
2255 bool is_text_copied = FALSE;
2257 char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
2260 eventStatus = (SMIL_SLIDE_CLIENT_CB_PARAM_S * )viewer_play_data->smil_eventStatus;
2261 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current page index is %d", eventStatus->pageIdx);
2263 /*get page list info*/
2264 msg_list_handle_t pagelist_info = NULL;
2265 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
2266 page_count = msg_list_length(pagelist_info);
2268 msg_struct_t page_info = NULL;
2269 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, eventStatus->pageIdx);
2271 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
2275 msg_list_handle_t medialist_info = NULL;
2276 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
2277 media_count = msg_list_length(medialist_info);
2278 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", eventStatus->pageIdx, media_count);
2280 for (media_idx = 0; media_idx < media_count; media_idx++) {
2282 msg_struct_t media_info = NULL;
2283 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
2286 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx);
2290 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
2292 if (mediaType != MMS_SMIL_MEDIA_TEXT) {
2293 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media type is not TEXT", media_idx);
2297 bzero(strFilePath, sizeof(strFilePath));
2298 msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
2300 //if text media is exist, get text and store it
2301 fp = fopen(strFilePath, "r");
2303 char *pszPageText = NULL;
2304 struct stat stat_buf;
2305 if (stat(strFilePath, &stat_buf) != 0) {
2306 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Getting file information Error");
2311 if (stat_buf.st_size > 0) {
2312 pszPageText = (void *)calloc(1, (size_t)stat_buf.st_size + 1);
2314 if (pszPageText == NULL) {
2315 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
2319 int result = fread(pszPageText, sizeof(char), stat_buf.st_size, fp);
2320 if (result != stat_buf.st_size) {
2321 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "fread is failed result : %d", result);
2324 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pszPageText : (%s)", (char *)pszPageText);
2326 if (pszPageText[0] != '\0') {
2327 Evas_Object *entry = elm_entry_add(viewer_play_data->main_window);
2328 elm_cnp_selection_set(entry, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, pszPageText, strlen(pszPageText));
2329 evas_object_del(entry);
2330 is_text_copied = TRUE;
2333 /*free message text after displaying*/
2348 status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"));
2350 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2353 void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data)
2355 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2356 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2357 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2358 Evas_Object *popup = NULL;
2359 Evas_Object *layout = NULL;
2360 Evas_Object *bg = NULL;
2361 Evas_Object *scroller = NULL;
2362 Evas_Object *box = NULL;
2363 Evas_Object *entry = NULL;
2364 Evas_Object *btn_close = NULL;
2366 /* delete previous popup */
2367 if (viewer_play_data->popup) {
2368 evas_object_del(viewer_play_data->popup);
2369 viewer_play_data->popup = NULL;
2370 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2374 popup = elm_popup_add(viewer_play_data->main_window);
2375 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2376 evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
2377 elm_object_style_set(popup, "menustyle");
2378 elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_MESSAGE_DETAILS"));
2381 layout = elm_layout_add(viewer_play_data->main_window);
2382 elm_layout_file_set(layout, MSG_VIEWER_THEME, "msg/detail");
2383 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2384 evas_object_show(layout);
2387 bg = evas_object_rectangle_add(evas_object_evas_get(layout));
2388 elm_object_part_content_set(layout, "msg/detail/bg", bg);
2389 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, 0.0);
2390 evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, 0.0);
2391 evas_object_show(bg);
2393 /* create scroller */
2394 scroller = elm_scroller_add(layout);
2395 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2396 evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
2397 elm_scroller_bounce_set(scroller, FALSE, TRUE);
2398 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
2399 elm_object_part_content_set(layout, "msg/detail/content", scroller);
2400 evas_object_show(scroller);
2403 box = elm_box_add(layout);
2404 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2405 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
2406 elm_box_homogeneous_set(box, EINA_FALSE);
2407 evas_object_show(box);
2408 evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT*4);
2409 elm_object_content_set(scroller, box);
2412 entry = elm_entry_add(layout);
2413 evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2414 evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
2415 elm_entry_single_line_set(entry, EINA_FALSE);
2416 elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
2417 elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
2418 elm_entry_magnifier_disabled_set(entry, EINA_TRUE);
2419 elm_entry_editable_set(entry, EINA_FALSE);
2421 char *str = msg_common_make_message_detail_text(viewer_play_data->msgHandle, viewer_play_data->msgID);
2424 elm_entry_entry_set(entry, str);
2427 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_make_message_detail_text is failed");
2431 elm_box_pack_end(box, entry);
2432 evas_object_show(entry);
2434 /* add close button */
2435 btn_close = elm_button_add(popup);
2436 elm_object_style_set(btn_close, "popup_button/default");
2437 elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
2438 elm_object_part_content_set(popup, "button1", btn_close);
2439 evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_message_details_popup_close_clicked_cb, viewer_play_data);
2441 viewer_play_data->popup = popup;
2442 viewer_play_data->popup_type = MSG_VIEWER_DETAILS_POPUP;
2443 elm_object_content_set(popup, layout);
2445 msg_ui_viewer_disconnect_handler(viewer_play_data);
2447 evas_object_show(popup);
2449 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2452 static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2454 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2455 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2457 if (viewer_play_data->popup) {
2458 evas_object_del(viewer_play_data->popup);
2459 viewer_play_data->popup = NULL;
2460 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2463 /* connect handler again*/
2464 msg_ui_viewer_connect_handler(viewer_play_data);
2466 /* play viewer again if previous status was PLAY */
2467 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2468 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2469 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2475 MSG_BOOL msg_ui_viewer_check_address_is_blocked(void *data, char *address, int *filter_id)
2477 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2478 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2479 msg_error_t err = MSG_SUCCESS;
2480 msg_struct_list_s filter_list;
2483 char filter_val[MAX_FILTER_VALUE_LEN] = {0,};
2485 err = msg_get_filter_list(viewer_play_data->msgHandle, &filter_list);
2486 if (err != MSG_SUCCESS) {
2487 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_filter_list() fail - err [%d]", err);
2491 total_cnt = filter_list.nCount;
2493 for (i = 0; i < total_cnt; i++) {
2495 bzero(filter_val, sizeof(filter_val));
2496 err = msg_get_str_value(filter_list.msg_struct_info[i], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val));
2498 if (err != MSG_SUCCESS) {
2499 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_str_value() fail - err [%d]", err);
2500 msg_release_list_struct(&filter_list);
2504 if (!strcmp(address, filter_val)) {
2506 msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_TYPE_INT, &filter_type);
2507 if (filter_type == MSG_FILTER_BY_ADDRESS_SAME) {
2508 /* get filter id if address is exist in block list */
2509 msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_ID_INT, filter_id);
2510 msg_release_list_struct(&filter_list);
2516 msg_release_list_struct(&filter_list);
2520 static void __msg_ui_viewer_grab_volume_key(void *data)
2522 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2523 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2524 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2527 ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP, TOP_POSITION_GRAB);
2528 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_grab_key() ret = %d", ret);
2530 ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN, TOP_POSITION_GRAB);
2531 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_grab_key() ret = %d", ret);
2534 static void __msg_ui_viewer_ungrab_volume_key(void *data)
2536 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2537 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2538 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2541 ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP);
2542 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_ungrab_key() ret = %d", ret);
2544 ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN);
2545 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_ungrab_key() ret = %d", ret);
2548 static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data)
2550 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2551 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
2552 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2553 int use_volume_key = false;
2555 vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
2557 if (use_volume_key) {
2558 msg_common_increase_font_size();
2560 if (viewer_play_data->render_entry) {
2561 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
2562 MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
2563 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
2566 __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volume_slider);
2572 static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data)
2574 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2575 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
2576 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2577 int use_volume_key = false;
2579 vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
2581 if (use_volume_key) {
2582 msg_common_decrease_font_size();
2584 if (viewer_play_data->render_entry) {
2585 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
2586 MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
2587 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
2590 __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volume_slider);
2596 static Eina_Bool __msg_ui_viewer_volume_key_release_cb(void *data, int type, void *event)
2598 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2599 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
2600 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
2601 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2602 Ecore_Event_Key *ev = event;
2603 int use_volume_key = false;
2605 vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
2607 if (!use_volume_key) {
2608 if (viewer_play_data->volumebar_timer) {
2609 ecore_timer_del(viewer_play_data->volumebar_timer);
2610 viewer_play_data->volumebar_timer = NULL;
2612 viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
2615 if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) { /* KEY_VOLUMEUP */
2616 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is released");
2618 if (viewer_play_data->vol_up_key_longpress) {
2619 ecore_timer_del(viewer_play_data->vol_up_key_longpress);
2620 viewer_play_data->vol_up_key_longpress = NULL;
2622 } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) { /* KEY_VOLUMEDOWN */
2623 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is released");
2625 if (viewer_play_data->vol_down_key_longpress) {
2626 ecore_timer_del(viewer_play_data->vol_down_key_longpress);
2627 viewer_play_data->vol_down_key_longpress = NULL;
2630 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
2636 static Eina_Bool __msg_ui_viewer_volume_key_press_cb(void *data, int type, void *event)
2638 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2639 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
2640 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
2641 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2642 Ecore_Event_Key *ev = event;
2643 int use_volume_key = false;
2645 vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
2647 if (use_volume_key) {
2648 if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) { /* KEY_VOLUMEUP */
2649 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is pressed");
2651 msg_common_increase_font_size();
2653 if (viewer_play_data->render_entry) {
2654 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
2655 MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
2656 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
2659 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);
2660 } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) { /* KEY_VOLUMEDOWN */
2661 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is pressed");
2663 msg_common_decrease_font_size();
2665 if (viewer_play_data->render_entry) {
2666 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
2667 MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
2668 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
2671 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);
2673 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
2676 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Use volume key setting is not activated. Do volume key action");
2678 if (!viewer_play_data->volumebar || !viewer_play_data->volume_slider)
2679 msg_ui_viewer_create_volume_bar(viewer_play_data);
2681 if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) { /* KEY_VOLUMEUP */
2682 if (viewer_play_data->volumebar_timer) {
2683 ecore_timer_del(viewer_play_data->volumebar_timer);
2684 viewer_play_data->volumebar_timer = NULL;
2686 __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volume_slider);
2688 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);
2689 } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) { /* KEY_VOLUMEDOWN */
2690 if (viewer_play_data->volumebar_timer) {
2691 ecore_timer_del(viewer_play_data->volumebar_timer);
2692 viewer_play_data->volumebar_timer = NULL;
2694 __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volume_slider);
2696 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);
2698 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
2705 void msg_ui_viewer_create_volume_bar(void *data)
2707 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2708 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2709 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2711 Evas_Object *layout = NULL;
2712 Evas_Object *slider = NULL;
2713 Evas_Object *icon_start = NULL;
2714 Evas_Object *icon_end = NULL;
2716 layout = elm_layout_add(viewer_play_data->play_layout);
2717 elm_layout_file_set(layout, MSG_VIEWER_THEME, "volume_controller");
2718 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2719 evas_object_show(layout);
2721 slider = elm_slider_add(layout);
2722 elm_slider_indicator_show_set(slider, EINA_TRUE);
2723 evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
2724 evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
2725 elm_slider_indicator_format_set(slider, "%1.0f");
2726 evas_object_show(slider);
2728 icon_start = elm_icon_add(layout);
2729 elm_image_file_set(icon_start, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MIN);
2730 evas_object_size_hint_aspect_set(icon_start, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2732 icon_end = elm_icon_add(layout);
2733 elm_image_file_set(icon_end, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MAX);
2734 evas_object_size_hint_aspect_set(icon_end, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2736 elm_object_content_set(slider,icon_start);
2737 elm_object_part_content_set(slider, "end", icon_end);
2739 elm_slider_min_max_set(slider, 0, __msg_ui_viewer_get_max_volume());
2740 elm_slider_value_set(slider, __msg_ui_viewer_get_current_volume());
2742 elm_object_part_content_set(layout, "slider", slider);
2744 viewer_play_data->volumebar = layout;
2745 viewer_play_data->volume_slider = slider;
2746 elm_object_part_content_set(viewer_play_data->play_layout, "volume_layout", viewer_play_data->volumebar);
2748 evas_object_data_set(slider, "viewer_play_data", viewer_play_data);
2750 __msg_ui_viewer_volumebar_event_callback_add(slider, __msg_ui_viewer_volumebar_event_cb);
2752 evas_object_smart_callback_add(slider, "slider,drag,start", __msg_ui_viewer_volumebar_drag_start_cb, viewer_play_data);
2753 evas_object_smart_callback_add(slider, "slider,drag,stop", __msg_ui_viewer_volumebar_drag_stop_cb, viewer_play_data);
2754 evas_object_smart_callback_add(slider, "changed", __msg_ui_viewer_volumebar_changed_cb, viewer_play_data);
2757 if (viewer_play_data->volumebar_timer) {
2758 ecore_timer_del(viewer_play_data->volumebar_timer);
2759 viewer_play_data->volumebar_timer = NULL;
2761 viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
2765 void msg_ui_viewer_destroy_volume_bar(void *data)
2767 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2768 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2769 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2771 if (viewer_play_data->volumebar_timer) {
2772 ecore_timer_del(viewer_play_data->volumebar_timer);
2773 viewer_play_data->volumebar_timer = NULL;
2776 elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
2777 evas_object_del(viewer_play_data->volumebar);
2778 viewer_play_data->volumebar = NULL;
2781 static Eina_Bool __msg_ui_viewer_volumebar_timer_cb(void *data)
2783 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2784 MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
2785 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2787 elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
2788 evas_object_del(viewer_play_data->volumebar);
2789 viewer_play_data->volumebar = NULL;
2791 return ECORE_CALLBACK_CANCEL;
2794 static void __msg_ui_viewer_volumebar_drag_start_cb(void *data, Evas_Object *obj, void *event_info)
2796 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2797 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
2798 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2800 if (viewer_play_data->volumebar_event_cb)
2801 viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_START);
2803 viewer_play_data->drag_volume_slider = true;
2806 static void __msg_ui_viewer_volumebar_drag_stop_cb(void *data, Evas_Object *obj, void *event_info)
2808 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2809 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
2810 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2812 if (viewer_play_data->volumebar_event_cb)
2813 viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_STOP);
2815 viewer_play_data->drag_volume_slider = false;
2818 static void __msg_ui_viewer_volumebar_changed_cb(void *data, Evas_Object *obj, void *event_info)
2820 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2821 double val = elm_slider_value_get(obj);
2823 if ((int)val != __msg_ui_viewer_get_current_volume())
2824 __msg_ui_viewer_set_volume((int)val);
2827 static void __msg_ui_viewer_volumebar_event_cb(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event)
2829 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2830 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, user_data == NULL, "data is NULL");
2831 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)user_data;
2833 if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_START) {
2834 if (viewer_play_data->volumebar_timer) {
2835 ecore_timer_del(viewer_play_data->volumebar_timer);
2836 viewer_play_data->volumebar_timer = NULL;
2838 } else if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_STOP) {
2839 viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
2843 static void __msg_ui_viewer_volumebar_event_callback_add(Evas_Object *obj, MSG_VIEWER_VOLUMEBAR_CB event_cb)
2845 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2846 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, obj == NULL);
2847 MSG_PLAY_DATA_S *viewer_play_data = evas_object_data_get(obj, "viewer_play_data");
2849 viewer_play_data->volumebar_event_cb = event_cb;
2852 static void __msg_ui_viewer_volumebar_volume_up(Evas_Object *obj)
2854 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2856 elm_slider_min_max_get(obj, NULL, &max);
2858 double current = elm_slider_value_get(obj);
2861 elm_slider_value_set(obj, (current + 1.0));
2863 evas_object_smart_callback_call(obj, "changed", NULL);
2866 static void __msg_ui_viewer_volumebar_volume_down(Evas_Object *obj)
2868 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2870 elm_slider_min_max_get(obj, &min, NULL);
2872 double current = elm_slider_value_get(obj);
2875 elm_slider_value_set(obj, (current - 1.0));
2877 evas_object_smart_callback_call(obj, "changed", NULL);
2880 static int __msg_ui_viewer_get_max_volume(void)
2882 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2885 int ret = sound_manager_get_max_volume(SOUND_TYPE_MEDIA, &max_vol);
2886 if (ret != SOUND_MANAGER_ERROR_NONE) {
2887 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
2894 static int __msg_ui_viewer_get_current_volume(void)
2896 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2899 int ret = sound_manager_get_volume(SOUND_TYPE_MEDIA, ¤t);
2900 if (ret != SOUND_MANAGER_ERROR_NONE) {
2901 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
2908 static bool __msg_ui_viewer_set_volume(int volume)
2910 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2911 int ret = sound_manager_set_volume(SOUND_TYPE_MEDIA, volume);
2912 if (ret != SOUND_MANAGER_ERROR_NONE) {
2913 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_set_volume().. [0x%x]", ret);
2917 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"set volume value = %d", volume);