N_SE-24098 : Tapping volumebar is not working
[apps/home/message-app.git] / viewer / src / msg-ui-viewer-gadget.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
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
7  *
8  *    http://floralicense.org/license
9  *
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.
15  */
16
17 #ifndef UG_MODULE_API
18 #define UG_MODULE_API __attribute__ ((visibility("default")))
19 #endif
20
21 /*==================================================================================================
22  *                                                                              INCLUDE HEADERS
23 *==================================================================================================*/
24 #include <msg.h>
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"
29 #include <glib.h>
30 #include <vconf.h>
31 #include "msg-ui-common-utility.h"
32
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);
44
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);
49
50 /*==================================================================================================
51  *                                                                      FUNCTION IMPLEMENTATIONS
52  *================================================================================================*/
53 static unsigned int __msg_ui_viewer_convert_atoh(const char *string)
54 {
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;
59         char c;
60
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;
68                 else
69                         break;
70
71                 value = (value << 4) + digit;
72         }
73
74         return value;
75 }
76
77 static void __msg_ui_viewer_rotate_play_window(void *data, int rotate)
78 {
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);
82
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;
86
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);
89                 }
90         }
91 }
92
93 static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h svc_handle, void *priv)
94 {
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;
103
104         /*Set Message Handler*/
105         err = msg_open_msg_handle(&msgHandle);
106
107         if (err != MSG_SUCCESS) {
108                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_open_msg_handle failed, Error = %d", err);
109                 ug_destroy_me(ug);
110                 return NULL;
111         }
112
113         msg_ui_viewer_main_init(viewer_main_data);
114
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);
123
124         if (svc_handle) {
125                 char *mode_value = NULL;
126                 /* get mode value */
127                 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, &mode_value);
128
129                 /*preview mode*/
130                 if (!g_strcmp0(mode_value, MSG_BUNDLE_VALUE_PREVIEW_MODE)) {
131                         unsigned int msg_t_pointer = 0;
132                         char *preview_data = NULL;
133
134                         viewer_main_data->launchmode = MSG_VIEWER_PREVIEW_MODE;
135
136                         /* get data value */
137                         service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_PREVIEW_DATA, &preview_data);
138
139                         if (preview_data) {
140                                 /* get msg_t */
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;
143
144                                 /*create mms_t*/
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);
147
148                                 if (err != MSG_SUCCESS) {
149                                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in get mms data handler");
150                                         return NULL;
151                                 }
152                         } else {
153                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "preview_data is NULL");
154                                 return NULL;
155                         }
156                 } else { /*normal view mode*/
157                         char *msgid = NULL;
158                         service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msgid);
159                         if (msgid) {
160                                 viewer_main_data->msgID = (int)atoi(msgid);
161                                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgID = %d", viewer_main_data->msgID);
162                         } else {
163                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgID");
164                                 return NULL;
165                         }
166
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);
170
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);
177                                         return NULL;
178                                 }
179                         }
180
181                         msg_release_struct(&sendOpt);
182
183                         /*create mms_t*/
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);
186
187                         if (err != MSG_SUCCESS) {
188                                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in get mms data handler");
189                                 return NULL;
190                         }
191
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);
195
196                         if (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;
199                         }
200                 }
201         } else {
202                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "data is NULL");
203                 return NULL;
204         }
205
206         if (mode == UG_MODE_FULLVIEW) {
207                 viewer_main_data->ug_launch_mode = MSG_UG_MODE_FULLVIEW;
208                 /*create layout*/
209                 Evas_Object *bg = msg_ui_viewer_create_bg(viewer_main_data, viewer_main_data->main_window);
210
211                 bool show_indicator = true;
212                 char *indicator_mode = NULL;
213
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;
218                 }
219
220                 layout = msg_ui_viewer_create_layout_main(viewer_main_data->main_window, show_indicator);
221                 viewer_main_data->layout_main = layout;
222
223                 if (bg)
224                         elm_object_part_content_set(layout, "elm.swallow.bg", bg);
225                 else
226                         return NULL;
227         } else {
228                 viewer_main_data->ug_launch_mode = MSG_UG_MODE_FRAMVIEW;
229                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "framview is not supported");
230                 return NULL;
231         }
232
233         return layout;
234 }
235
236 static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void *priv)
237 {
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;
242
243         if (msg_ui_viewer_launch(viewer_main_data) == FALSE)
244                 ug_destroy_me(viewer_main_data->viewer_ug);
245 }
246
247 static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv)
248 {
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);
254
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);
261
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);
266                                 }
267
268                                 viewer_main_data->player_view->status = MSG_VIEWER_PAUSE;
269
270                                 if (viewer_main_data->player_view->play_controller) {
271                                         edje_object_signal_emit(_EDJ(viewer_main_data->player_view->play_controller), "play", "*");
272
273                                         if (viewer_main_data->player_view->play_controller_progressbar_timer)
274                                                 ecore_timer_freeze(viewer_main_data->player_view->play_controller_progressbar_timer);
275                                 }
276                         }
277                 }
278         }
279 }
280
281 static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void *priv)
282 {
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);
288
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);
292
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);
296
297                         if (!viewer_main_data->player_view->popup) {
298                                 /*connect handler again*/
299                                 msg_ui_viewer_connect_handler(viewer_main_data->player_view);
300                         }
301
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;
306                         }
307                 }
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);
314
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;
317                         }
318                 }
319         }
320 }
321
322 static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, void *priv)
323 {
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;
328         msg_error_t err;
329
330         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->SmilHandle : %x", viewer_main_data->SmilHandle);
331
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;
336         }
337
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;
342         }
343
344         if (viewer_main_data->bg) {
345                 evas_object_del(viewer_main_data->bg);
346                 viewer_main_data->bg = NULL;
347         }
348
349         if (viewer_main_data->layout_main) {
350                 evas_object_del(viewer_main_data->layout_main);
351                 viewer_main_data->layout_main = NULL;
352         }
353
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);
359                 int index = 0;
360
361                 for (index = 0; index < ntotal; index++) {
362                         pmedia_info = eina_list_nth(viewer_main_data->drm_list, index);
363                         if (pmedia_info) {
364                                 free(pmedia_info);
365                                 pmedia_info = NULL;
366                         }
367                 }
368                 eina_list_free(viewer_main_data->drm_list);
369                 viewer_main_data->drm_list = NULL;
370         }
371
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);
375         }
376
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;
381         }
382
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;
387         }
388
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);
391
392         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
393 }
394
395 static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv)
396 {
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;
400
401         __msg_ui_viewer_reload_viewer_ug(viewer_main_data, svc_msg_h);
402
403         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
404 }
405
406 static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv)
407 {
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;
412
413         switch (event) {
414         case UG_EVENT_LOW_MEMORY:
415                 break;
416         case UG_EVENT_LOW_BATTERY:
417         {
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);
424
425                         if (!charger_status)
426                                 __msg_ui_viewer_destroy_viewer_ug(priv);
427                 }
428
429                 break;
430         }
431         case UG_EVENT_LANG_CHANGE:
432                 msg_ui_viewer_change_language(viewer_main_data);
433                 break;
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);
437                 break;
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);
441                 break;
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);
445                 break;
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);
449                 break;
450         case UG_EVENT_REGION_CHANGE:
451                 break;
452         default:
453                 break;
454         }
455 }
456
457 static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv)
458 {
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;
464         int     ispopup = FALSE;
465
466         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
467
468         switch (event) {
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;
476                                         ispopup = TRUE;
477                                 }
478
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);
484                                         }
485
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);
488                                 }
489                         }
490                 } else {
491                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Not required case");
492                 }
493
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);
497                 }
498
499                 break;
500         default:
501                 break;
502         }
503 }
504
505 static void __msg_ui_viewer_reload_viewer_ug(void *data, service_h svc_handle)
506 {
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;
510
511         if (viewer_main_data->msg_t) {
512                 msg_release_struct(&viewer_main_data->msg_t);
513                 viewer_main_data->msg_t = NULL;
514         }
515
516         if (viewer_main_data->mms_t) {
517                 msg_release_struct(&viewer_main_data->mms_t);
518                 viewer_main_data->mms_t = NULL;
519         }
520
521         if (svc_handle) {
522                 char *msgid = NULL;
523                 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msgid);
524                 if (msgid) {
525                         viewer_main_data->msgID = (int)atoi(msgid);
526                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgID = %d", viewer_main_data->msgID);
527                 } else {
528                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgid");
529                         return;
530                 }
531         }
532
533         if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
534                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Reset play view mode");
535
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;
540                 }
541
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);
545                 }
546
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);
550                 }
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;
557                 }
558
559         } else {
560                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d mode is not required anything", viewer_main_data->view_mode);
561         }
562 }
563
564
565 static void __msg_ui_viewer_destroy_viewer_ug(void *data)
566 {
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;
571
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;
578                         }
579
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);
585                                 } else {
586                                         viewer_main_data->player_view->status = MSG_VIEWER_STOP;
587                                 }
588                         }
589                 }
590         } else {
591                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d mode is not required anything", viewer_main_data->view_mode);
592         }
593
594         if (!viewer_main_data->del_idler)
595                 viewer_main_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_main_data);
596 }
597
598 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
599 {
600         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
601         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL;
602
603         if (!ops)
604                 return MSG_UI_RET_ERR;
605
606         viewer_main_data = calloc(1, sizeof(MSG_VIEWER_MAIN_DATA_S));
607         if (!viewer_main_data)
608                 return MSG_UI_RET_ERR;
609
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;
620
621         return MSG_UI_RET_SUCCESS;
622 }
623
624 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
625 {
626         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
627         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL;
628
629         if (!ops)
630                 return;
631
632         viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)ops->priv;
633
634         if (viewer_main_data)
635                 free(viewer_main_data);
636 }