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.
18 #define UG_MODULE_API __attribute__ ((visibility("default")))
21 /*==================================================================================================
23 *==================================================================================================*/
25 #include "msg-smil-player-interface.h"
26 #include "msg-ui-common-utility.h"
27 #include "msg-ui-viewer-main.h"
28 #include "msg-ui-image-resource.h"
31 #include "msg-ui-common-utility.h"
33 /*==================================================================================================
34 * FUNCTION DECLARATIONS
35 *==================================================================================================*/
36 static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h svc_handle, void *priv);
37 static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void *priv);
38 static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv);
39 static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void *priv);
40 static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, void *priv);
41 static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv);
42 static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv);
43 static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv);
45 static void __msg_ui_viewer_reload_viewer_ug(void *data, service_h svc_handle);
46 static void __msg_ui_viewer_destroy_viewer_ug(void *data);
47 static unsigned int __msg_ui_viewer_convert_atoh(const char *string);
48 static void __msg_ui_viewer_rotate_play_window(void *data, int rotate);
50 /*==================================================================================================
51 * FUNCTION IMPLEMENTATIONS
52 *================================================================================================*/
53 static unsigned int __msg_ui_viewer_convert_atoh(const char *string)
55 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
56 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, string == NULL, 0);
57 unsigned int value = 0;
58 unsigned int digit = 0;
61 while ((c = *string++) != '\0') {
62 if (c >= '0' && c <= '9')
63 digit = (unsigned int) (c - '0');
64 else if (c >= 'a' && c <= 'f')
65 digit = (unsigned int) (c - 'a') + 10;
66 else if (c >= 'A' && c <= 'F')
67 digit = (unsigned int) (c - 'A') + 10;
71 value = (value << 4) + digit;
77 static void __msg_ui_viewer_rotate_play_window(void *data, int rotate)
79 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
80 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
81 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
83 if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
84 if (viewer_main_data->player_view) {
85 MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
87 if ((Error = msg_smil_on_slide_event_handler(&(viewer_main_data->SmilHandle), PLAYER_EVENT_ROTATE_WINDOW)) != MSG_SMIL_SUCCESS)
88 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "PLAYER_EVENT_ROTATE_WINDOW failed : %d", Error);
93 static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h svc_handle, void *priv)
95 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
96 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, ug == NULL, NULL);
97 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, svc_handle == NULL, NULL);
98 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, priv == NULL, NULL);
99 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
100 msg_error_t err = MSG_SUCCESS;
101 msg_handle_t msgHandle = NULL;
102 Evas_Object *layout = NULL;
104 /*Set Message Handler*/
105 err = msg_open_msg_handle(&msgHandle);
107 if (err != MSG_SUCCESS) {
108 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_open_msg_handle failed, Error = %d", err);
113 msg_ui_viewer_main_init(viewer_main_data);
115 viewer_main_data->viewer_ug = ug;
116 viewer_main_data->cbs.layout_cb = msg_ui_viewer_layout_cb;
117 viewer_main_data->cbs.result_cb = msg_ui_viewer_result_cb;
118 viewer_main_data->cbs.destroy_cb = msg_ui_viewer_destroy_cb;
119 viewer_main_data->cbs.priv = (void *)viewer_main_data;
120 viewer_main_data->msgHandle = msgHandle;
121 viewer_main_data->main_window = ug_get_window();
122 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_main_data->main_window == NULL, NULL);
125 char *mode_value = NULL;
127 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, &mode_value);
130 if (!g_strcmp0(mode_value, MSG_BUNDLE_VALUE_PREVIEW_MODE)) {
131 unsigned int msg_t_pointer = 0;
132 char *preview_data = NULL;
134 viewer_main_data->launchmode = MSG_VIEWER_PREVIEW_MODE;
137 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_PREVIEW_DATA, &preview_data);
141 msg_t_pointer = __msg_ui_viewer_convert_atoh((const char*)preview_data);
142 viewer_main_data->msg_t = (msg_struct_t)msg_t_pointer;
145 viewer_main_data->mms_t = msg_create_struct(MSG_STRUCT_MMS);
146 err = msg_get_mms_struct(viewer_main_data->msg_t, viewer_main_data->mms_t);
148 if (err != MSG_SUCCESS) {
149 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in get mms data handler");
153 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "preview_data is NULL");
156 } else { /*normal view mode*/
158 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msgid);
160 viewer_main_data->msgID = (int)atoi(msgid);
161 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgID = %d", viewer_main_data->msgID);
163 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgID");
167 /*get msg info struct handle */
168 viewer_main_data->msg_t = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
169 msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
171 if (viewer_main_data->msgID != -1) {
172 err = msg_get_message(viewer_main_data->msgHandle, viewer_main_data->msgID, viewer_main_data->msg_t, sendOpt);
173 if (err != MSG_SUCCESS) {
174 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
175 msg_release_struct(&viewer_main_data->msg_t);
176 msg_release_struct(&sendOpt);
181 msg_release_struct(&sendOpt);
184 viewer_main_data->mms_t = msg_create_struct(MSG_STRUCT_MMS);
185 err = msg_get_mms_struct(viewer_main_data->msg_t, viewer_main_data->mms_t);
187 if (err != MSG_SUCCESS) {
188 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in get mms data handler");
192 char *msg_box_mode = NULL;
193 /* get mode if viewer should be displayed from message box */
194 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MESSAGE_BOX, &msg_box_mode);
197 if (!g_strcmp0(msg_box_mode, MSG_BUNDLE_VALUE_MSGBOX_PROTECTED) || !g_strcmp0(msg_box_mode, MSG_BUNDLE_VALUE_MSGBOX_SPAM))
198 viewer_main_data->msg_box_viewer = true;
202 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "data is NULL");
206 if (mode == UG_MODE_FULLVIEW) {
207 viewer_main_data->ug_launch_mode = MSG_UG_MODE_FULLVIEW;
209 Evas_Object *bg = msg_ui_viewer_create_bg(viewer_main_data, viewer_main_data->main_window);
211 bool show_indicator = true;
212 char *indicator_mode = NULL;
214 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_INDICATOR_MODE, &indicator_mode);
215 if (indicator_mode) {
216 if (!g_strcmp0(indicator_mode, MSG_BUNDLE_VALUE_NO_INDICATOR))
217 show_indicator = false;
220 layout = msg_ui_viewer_create_layout_main(viewer_main_data->main_window, show_indicator);
221 viewer_main_data->layout_main = layout;
224 elm_object_part_content_set(layout, "elm.swallow.bg", bg);
228 viewer_main_data->ug_launch_mode = MSG_UG_MODE_FRAMVIEW;
229 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "framview is not supported");
236 static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void *priv)
238 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
239 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
240 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
241 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
243 if (msg_ui_viewer_launch(viewer_main_data) == FALSE)
244 ug_destroy_me(viewer_main_data->viewer_ug);
247 static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv)
249 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
250 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
251 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
252 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
253 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
255 if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
256 if (viewer_main_data->player_view) {
257 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Player view launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type);
258 /* viewer will be paused */
259 MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
260 msg_ui_viewer_disconnect_handler(viewer_main_data->player_view);
262 if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY) {
263 Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_PAUSE);
264 if (Error != MSG_SMIL_SUCCESS) {
265 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
268 viewer_main_data->player_view->status = MSG_VIEWER_PAUSE;
270 if (viewer_main_data->player_view->play_controller) {
271 edje_object_signal_emit(_EDJ(viewer_main_data->player_view->play_controller), "play", "*");
273 if (viewer_main_data->player_view->play_controller_progressbar_timer)
274 ecore_timer_freeze(viewer_main_data->player_view->play_controller_progressbar_timer);
281 static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void *priv)
283 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
284 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
285 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
286 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
287 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
289 if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
290 if (viewer_main_data->player_view) {
291 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Player view launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type);
293 bool isHelpText = (!viewer_main_data->player_view->smil_eventStatus) ? false : ((viewer_main_data->player_view->smil_eventStatus->isHelpSlide) ? true : false);
294 MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
295 msg_ui_viewer_set_font_size(viewer_main_data->player_view, entry_type, MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE);
297 if (!viewer_main_data->player_view->popup) {
298 /*connect handler again*/
299 msg_ui_viewer_connect_handler(viewer_main_data->player_view);
302 if (viewer_main_data->player_view->launch_cmd == MSG_VIEWER_LOAD_OTHER_APP_MODE) {
303 /*reset launch_cmd and cmd_type*/
304 viewer_main_data->player_view->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
305 viewer_main_data->player_view->cmd_type = MSG_VIEWER_CMD_NONE;
308 } else if (viewer_main_data->view_mode == MSG_VIEWER_DRM_LIST_VIEW) {
309 if (viewer_main_data->drm_list_view) {
310 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drm list view drm_list_cmd : %d", viewer_main_data->drm_list_view->drm_list_cmd);
311 if (viewer_main_data->drm_list_view->drm_list_cmd == MSG_VIEWER_DRM_LIST_CMD_LAUNCH_BROWSER) {
312 if (msg_ui_viewer_drm_list_check_current_ro_valid(viewer_main_data->drm_list_view))
313 msg_ui_viewer_drm_list_delete_current_list(viewer_main_data->drm_list_view);
315 viewer_main_data->drm_list_view->drm_list_cmd = MSG_VIEWER_DRM_LIST_CMD_NONE;
316 viewer_main_data->drm_list_view->selected_file_info = NULL;
322 static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, void *priv)
324 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
325 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
326 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
327 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
330 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->SmilHandle : %x", viewer_main_data->SmilHandle);
332 if (viewer_main_data->player_view) {
333 msg_ui_viewer_destroy_play_view(viewer_main_data->player_view);
334 free(viewer_main_data->player_view);
335 viewer_main_data->player_view = NULL;
338 if (viewer_main_data->drm_list_view) {
339 msg_ui_viewer_destroy_drm_list_view(viewer_main_data->drm_list_view);
340 free(viewer_main_data->drm_list_view);
341 viewer_main_data->drm_list_view = NULL;
344 if (viewer_main_data->bg) {
345 evas_object_del(viewer_main_data->bg);
346 viewer_main_data->bg = NULL;
349 if (viewer_main_data->layout_main) {
350 evas_object_del(viewer_main_data->layout_main);
351 viewer_main_data->layout_main = NULL;
354 /*destroy viewer_main data*/
355 /*free the drm list*/
356 if (viewer_main_data->drm_list) {
357 MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL;
358 int ntotal = eina_list_count(viewer_main_data->drm_list);
361 for (index = 0; index < ntotal; index++) {
362 pmedia_info = eina_list_nth(viewer_main_data->drm_list, index);
368 eina_list_free(viewer_main_data->drm_list);
369 viewer_main_data->drm_list = NULL;
372 if (viewer_main_data->SmilHandle) {
373 msg_smil_destroy_smil_player(viewer_main_data->SmilHandle);
374 msg_ui_viewer_set_smilhandle(viewer_main_data, NULL);
377 /* release msg info struct handle */
378 if (viewer_main_data->msg_t) {
379 msg_release_struct(&viewer_main_data->msg_t);
380 viewer_main_data->msg_t = NULL;
383 /* release mms struct handle */
384 if (viewer_main_data->mms_t) {
385 msg_release_struct(&viewer_main_data->mms_t);
386 viewer_main_data->mms_t = NULL;
389 if ((err = msg_close_msg_handle(&viewer_main_data->msgHandle)) != MSG_SUCCESS)
390 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_close_msg_handle, err=[%d]", err);
392 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
395 static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv)
397 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
398 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
399 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
401 __msg_ui_viewer_reload_viewer_ug(viewer_main_data, svc_msg_h);
403 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
406 static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv)
408 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
409 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
410 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "event : %d", event);
411 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
414 case UG_EVENT_LOW_MEMORY:
416 case UG_EVENT_LOW_BATTERY:
418 int battey_level = 0;
419 vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW , &battey_level);
420 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "battey_level = %d", battey_level);
421 if (battey_level == VCONFKEY_SYSMAN_BAT_POWER_OFF) {
422 int charger_status = -1;
423 vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, &charger_status);
426 __msg_ui_viewer_destroy_viewer_ug(priv);
431 case UG_EVENT_LANG_CHANGE:
432 msg_ui_viewer_change_language(viewer_main_data);
434 case UG_EVENT_ROTATE_PORTRAIT:
435 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_PORTRAIT");
436 __msg_ui_viewer_rotate_play_window(viewer_main_data, 0);
438 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
439 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN");
440 __msg_ui_viewer_rotate_play_window(viewer_main_data, 180);
442 case UG_EVENT_ROTATE_LANDSCAPE:
443 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_LANDSCAPE");
444 __msg_ui_viewer_rotate_play_window(viewer_main_data, 270);
446 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
447 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN");
448 __msg_ui_viewer_rotate_play_window(viewer_main_data, 90);
450 case UG_EVENT_REGION_CHANGE:
457 static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv)
459 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
460 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
461 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
462 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
463 MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
466 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
469 case UG_KEY_EVENT_END:
470 if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
471 if (viewer_main_data->player_view) {
472 if (viewer_main_data->player_view->popup) {
473 evas_object_del(viewer_main_data->player_view->popup);
474 viewer_main_data->player_view->popup = NULL;
475 viewer_main_data->player_view->popup_type = MSG_VIEWER_POPUP_NONE;
479 if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY ||
480 viewer_main_data->player_view->status == MSG_VIEWER_PAUSE) {
481 Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_STOP);
482 if (Error != MSG_SMIL_SUCCESS) {
483 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
486 viewer_main_data->player_view->status = MSG_VIEWER_STOP;
487 msg_ui_viewer_update_play_controller(viewer_main_data->player_view, MSG_VIEWER_STOP);
491 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Not required case");
494 if (ispopup == FALSE) {
495 if (!viewer_main_data->del_idler)
496 viewer_main_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_main_data);
505 static void __msg_ui_viewer_reload_viewer_ug(void *data, service_h svc_handle)
507 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
508 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
509 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
511 if (viewer_main_data->msg_t) {
512 msg_release_struct(&viewer_main_data->msg_t);
513 viewer_main_data->msg_t = NULL;
516 if (viewer_main_data->mms_t) {
517 msg_release_struct(&viewer_main_data->mms_t);
518 viewer_main_data->mms_t = NULL;
523 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msgid);
525 viewer_main_data->msgID = (int)atoi(msgid);
526 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgID = %d", viewer_main_data->msgID);
528 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgid");
533 if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
534 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Reset play view mode");
536 if (viewer_main_data->player_view) {
537 msg_ui_viewer_destroy_play_view(viewer_main_data->player_view);
538 free(viewer_main_data->player_view);
539 viewer_main_data->player_view = NULL;
542 if (viewer_main_data->SmilHandle) {
543 msg_smil_destroy_smil_player(viewer_main_data->SmilHandle);
544 msg_ui_viewer_set_smilhandle(viewer_main_data, NULL);
547 if (msg_ui_viewer_launch(viewer_main_data) == FALSE) {
548 msg_common_reset_font_size("entry");
549 ug_destroy_me(viewer_main_data->viewer_ug);
551 } else if (viewer_main_data->view_mode == MSG_VIEWER_DRM_LIST_VIEW) {
552 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "DRM list view mode, come here to implement");
553 if (viewer_main_data->drm_list_view) {
554 msg_ui_viewer_destroy_drm_list_view(viewer_main_data->drm_list_view);
555 free(viewer_main_data->drm_list_view);
556 viewer_main_data->drm_list_view = NULL;
560 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d mode is not required anything", viewer_main_data->view_mode);
565 static void __msg_ui_viewer_destroy_viewer_ug(void *data)
567 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
568 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
569 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
570 MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
572 if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
573 if (viewer_main_data->player_view) {
574 if (viewer_main_data->player_view->popup) {
575 evas_object_del(viewer_main_data->player_view->popup);
576 viewer_main_data->player_view->popup = NULL;
577 viewer_main_data->player_view->popup_type = MSG_VIEWER_POPUP_NONE;
580 if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY ||
581 viewer_main_data->player_view->status == MSG_VIEWER_PAUSE) {
582 Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_STOP);
583 if (Error != MSG_SMIL_SUCCESS) {
584 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
586 viewer_main_data->player_view->status = MSG_VIEWER_STOP;
591 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d mode is not required anything", viewer_main_data->view_mode);
594 if (!viewer_main_data->del_idler)
595 viewer_main_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_main_data);
598 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
600 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
601 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL;
604 return MSG_UI_RET_ERR;
606 viewer_main_data = calloc(1, sizeof(MSG_VIEWER_MAIN_DATA_S));
607 if (!viewer_main_data)
608 return MSG_UI_RET_ERR;
610 ops->create = __msg_ui_viewer_on_create;
611 ops->start = __msg_ui_viewer_on_start;
612 ops->pause = __msg_ui_viewer_on_pause;
613 ops->resume = __msg_ui_viewer_on_resume;
614 ops->destroy = __msg_ui_viewer_on_destroy;
615 ops->message = __msg_ui_viewer_on_message;
616 ops->event = __msg_ui_viewer_on_event;
617 ops->key_event = __msg_ui_viewer_on_key_event;
618 ops->priv = (void *)viewer_main_data;
619 ops->opt = UG_OPT_INDICATOR_ENABLE;
621 return MSG_UI_RET_SUCCESS;
624 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
626 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
627 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL;
632 viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)ops->priv;
634 if (viewer_main_data)
635 free(viewer_main_data);