83949cfb76526e27b53a939975269b148315e640
[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 <Ecore_X.h>
30 #include <glib.h>
31 #include <vconf.h>
32 #include "msg-ui-common-utility.h"
33
34 /*==================================================================================================
35  *                                                                      FUNCTION DECLARATIONS
36  *==================================================================================================*/
37 static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h svc_handle, void *priv);
38 static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void *priv);
39 static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv);
40 static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void *priv);
41 static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, void *priv);
42 static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv);
43 static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv);
44 static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv);
45
46 static void __msg_ui_viewer_reload_viewer_ug(void *data, service_h svc_handle);
47 static void __msg_ui_viewer_destroy_viewer_ug(void *data);
48 static unsigned int __msg_ui_viewer_convert_atoh(const char *string);
49 static void __msg_ui_viewer_rotate_play_window(void *data, int rotate);
50
51 /*==================================================================================================
52  *                                                                      FUNCTION IMPLEMENTATIONS
53  *================================================================================================*/
54 static unsigned int __msg_ui_viewer_convert_atoh(const char *string)
55 {
56         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
57         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, string == NULL, 0);
58         unsigned int value = 0;
59         unsigned int digit = 0;
60         char c;
61
62         while ((c = *string++) != '\0') {
63                 if (c >= '0' && c <= '9')
64                         digit = (unsigned int) (c - '0');
65                 else if (c >= 'a' && c <= 'f')
66                         digit = (unsigned int) (c - 'a') + 10;
67                 else if (c >= 'A' && c <= 'F')
68                         digit = (unsigned int) (c - 'A') + 10;
69                 else
70                         break;
71
72                 value = (value << 4) + digit;
73         }
74
75         return value;
76 }
77
78 static void __msg_ui_viewer_rotate_play_window(void *data, int rotate)
79 {
80         MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
81         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
82         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
83
84         if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
85                 if (viewer_main_data->player_view) {
86                         MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
87
88                         if ((Error = msg_smil_on_slide_event_handler(&(viewer_main_data->SmilHandle), PLAYER_EVENT_ROTATE_WINDOW)) != MSG_SMIL_SUCCESS)
89                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "PLAYER_EVENT_ROTATE_WINDOW failed : %d", Error);
90                 }
91         }
92 }
93
94 static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h svc_handle, void *priv)
95 {
96         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
97         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, ug == NULL, NULL);
98         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, svc_handle == NULL, NULL);
99         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, priv == NULL, NULL);
100         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
101         msg_error_t err = MSG_SUCCESS;
102         msg_handle_t msgHandle = NULL;
103         Evas_Object *layout = NULL;
104
105         /*Set Message Handler*/
106         err = msg_open_msg_handle(&msgHandle);
107
108         if (err != MSG_SUCCESS) {
109                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_open_msg_handle failed, Error = %d", err);
110                 ug_destroy_me(ug);
111                 return NULL;
112         }
113
114         msg_ui_viewer_main_init(viewer_main_data);
115
116         viewer_main_data->viewer_ug = ug;
117         viewer_main_data->cbs.layout_cb = msg_ui_viewer_layout_cb;
118         viewer_main_data->cbs.result_cb = msg_ui_viewer_result_cb;
119         viewer_main_data->cbs.destroy_cb = msg_ui_viewer_destroy_cb;
120         viewer_main_data->cbs.priv = (void *)viewer_main_data;
121         viewer_main_data->msgHandle = msgHandle;
122         viewer_main_data->main_window = ug_get_window();
123         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_main_data->main_window == NULL, NULL);
124
125         if (svc_handle) {
126                 char *mode_value = NULL;
127                 /* get mode value */
128                 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, &mode_value);
129
130                 /*preview mode*/
131                 if (!g_strcmp0(mode_value, MSG_BUNDLE_VALUE_PREVIEW_MODE)) {
132                         unsigned int msg_t_pointer = 0;
133                         char *preview_data = NULL;
134
135                         viewer_main_data->launchmode = MSG_VIEWER_PREVIEW_MODE;
136
137                         /* get data value */
138                         service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_PREVIEW_DATA, &preview_data);
139
140                         if (preview_data) {
141                                 /* get msg_t */
142                                 msg_t_pointer = __msg_ui_viewer_convert_atoh((const char*)preview_data);
143                                 viewer_main_data->msg_t = (msg_struct_t)msg_t_pointer;
144
145                                 /*create mms_t*/
146                                 viewer_main_data->mms_t = msg_create_struct(MSG_STRUCT_MMS);
147                                 err = msg_get_mms_struct(viewer_main_data->msg_t, viewer_main_data->mms_t);
148
149                                 if (err != MSG_SUCCESS) {
150                                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in get mms data handler");
151                                         return NULL;
152                                 }
153                         } else {
154                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "preview_data is NULL");
155                                 return NULL;
156                         }
157                 } else { /*normal view mode*/
158                         char *msgid = NULL;
159                         service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msgid);
160                         if (msgid) {
161                                 viewer_main_data->msgID = (int)atoi(msgid);
162                                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgID = %d", viewer_main_data->msgID);
163                         } else {
164                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgID");
165                                 return NULL;
166                         }
167
168                         /*get msg info struct handle */
169                         viewer_main_data->msg_t = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
170                         msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
171
172                         if (viewer_main_data->msgID != -1) {
173                                 err = msg_get_message(viewer_main_data->msgHandle, viewer_main_data->msgID, viewer_main_data->msg_t, sendOpt);
174                                 if (err != MSG_SUCCESS) {
175                                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
176                                         msg_release_struct(&viewer_main_data->msg_t);
177                                         msg_release_struct(&sendOpt);
178                                         return NULL;
179                                 }
180                         }
181
182                         msg_release_struct(&sendOpt);
183
184                         /*create mms_t*/
185                         viewer_main_data->mms_t = msg_create_struct(MSG_STRUCT_MMS);
186                         err = msg_get_mms_struct(viewer_main_data->msg_t, viewer_main_data->mms_t);
187
188                         if (err != MSG_SUCCESS) {
189                                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in get mms data handler");
190                                 return NULL;
191                         }
192
193                         char *msg_box_mode = NULL;
194                         /* get mode if viewer should be displayed from message box */
195                         service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MESSAGE_BOX, &msg_box_mode);
196
197                         if (msg_box_mode) {
198                                 if (!g_strcmp0(msg_box_mode, MSG_BUNDLE_VALUE_MSGBOX_PROTECTED) || !g_strcmp0(msg_box_mode, MSG_BUNDLE_VALUE_MSGBOX_SPAM))
199                                         viewer_main_data->msg_box_viewer = true;
200                         }
201                 }
202         } else {
203                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "data is NULL");
204                 return NULL;
205         }
206
207         if (mode == UG_MODE_FULLVIEW) {
208                 viewer_main_data->ug_launch_mode = MSG_UG_MODE_FULLVIEW;
209                 /*create layout*/
210                 Evas_Object *bg = msg_ui_viewer_create_bg(viewer_main_data, viewer_main_data->main_window);
211
212                 bool show_indicator = true;
213                 char *indicator_mode = NULL;
214
215                 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_INDICATOR_MODE, &indicator_mode);
216                 if (indicator_mode) {
217                         if (!g_strcmp0(indicator_mode, MSG_BUNDLE_VALUE_NO_INDICATOR))
218                                 show_indicator = false;
219                 }
220
221                 layout = msg_ui_viewer_create_layout_main(viewer_main_data->main_window, show_indicator);
222                 viewer_main_data->layout_main = layout;
223
224                 if (bg)
225                         elm_object_part_content_set(layout, "elm.swallow.bg", bg);
226                 else
227                         return NULL;
228         } else {
229                 viewer_main_data->ug_launch_mode = MSG_UG_MODE_FRAMVIEW;
230                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "framview is not supported");
231                 return NULL;
232         }
233
234         viewer_main_data->xdisplay = ecore_x_display_get();
235         if (viewer_main_data->xdisplay == NULL) {
236                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_x_display_get() is failed");
237                 return NULL;
238         }
239
240         /* key grap setting */
241         int use_volume_key = 0;
242         vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
243         if (use_volume_key)
244                 msg_ui_viewer_grab_key_setting(viewer_main_data);
245
246         return layout;
247 }
248
249 static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void *priv)
250 {
251         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
252         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
253         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
254         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
255
256         if (msg_ui_viewer_launch(viewer_main_data) == FALSE)
257                 ug_destroy_me(viewer_main_data->viewer_ug);
258 }
259
260 static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv)
261 {
262         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
263         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
264         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
265         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
266         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
267
268         msg_ui_viewer_ungrab_key_setting(viewer_main_data);
269
270         if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
271                 if (viewer_main_data->player_view) {
272                         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);
273                         /* viewer will be paused */
274                         MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
275                         msg_ui_viewer_disconnect_handler(viewer_main_data->player_view);
276
277                         if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY) {
278                                 Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_PAUSE);
279                                 if (Error != MSG_SMIL_SUCCESS) {
280                                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
281                                 }
282
283                                 viewer_main_data->player_view->status = MSG_VIEWER_PAUSE;
284
285                                 if (viewer_main_data->player_view->play_controller) {
286                                         edje_object_signal_emit(_EDJ(viewer_main_data->player_view->play_controller), "play", "*");
287
288                                         if (viewer_main_data->player_view->play_controller_progressbar_timer)
289                                                 ecore_timer_freeze(viewer_main_data->player_view->play_controller_progressbar_timer);
290                                 }
291                         }
292                 }
293         }
294 }
295
296 static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void *priv)
297 {
298         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
299         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
300         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
301         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
302         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
303
304         if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
305                 if (viewer_main_data->player_view) {
306                         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);
307
308                         bool isHelpText = (!viewer_main_data->player_view->smil_eventStatus) ? false : ((viewer_main_data->player_view->smil_eventStatus->isHelpSlide) ? true : false);
309                         MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
310                         msg_ui_viewer_set_font_size(viewer_main_data->player_view, entry_type, MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE);
311
312                         if (!viewer_main_data->player_view->popup) {
313                                 /*connect handler again*/
314                                 msg_ui_viewer_connect_handler(viewer_main_data->player_view);
315                         }
316
317                         if (viewer_main_data->player_view->launch_cmd == MSG_VIEWER_LOAD_OTHER_APP_MODE) {
318                                 /*reset launch_cmd and cmd_type*/
319                                 viewer_main_data->player_view->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
320                                 viewer_main_data->player_view->cmd_type = MSG_VIEWER_CMD_NONE;
321                         }
322                 }
323         } else if (viewer_main_data->view_mode == MSG_VIEWER_DRM_LIST_VIEW) {
324                 if (viewer_main_data->drm_list_view) {
325                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drm list view drm_list_cmd : %d", viewer_main_data->drm_list_view->drm_list_cmd);
326                         if (viewer_main_data->drm_list_view->drm_list_cmd == MSG_VIEWER_DRM_LIST_CMD_LAUNCH_BROWSER) {
327                                 if (msg_ui_viewer_drm_list_check_current_ro_valid(viewer_main_data->drm_list_view))
328                                         msg_ui_viewer_drm_list_delete_current_list(viewer_main_data->drm_list_view);
329
330                                 viewer_main_data->drm_list_view->drm_list_cmd = MSG_VIEWER_DRM_LIST_CMD_NONE;
331                                 viewer_main_data->drm_list_view->selected_file_info = NULL;
332                         }
333                 }
334         }
335 }
336
337 static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, void *priv)
338 {
339         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
340         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
341         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
342         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
343         msg_error_t err;
344
345         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->SmilHandle : %x", viewer_main_data->SmilHandle);
346
347         if (viewer_main_data->player_view) {
348                 msg_ui_viewer_destroy_play_view(viewer_main_data->player_view);
349                 free(viewer_main_data->player_view);
350                 viewer_main_data->player_view = NULL;
351         }
352
353         if (viewer_main_data->drm_list_view) {
354                 msg_ui_viewer_destroy_drm_list_view(viewer_main_data->drm_list_view);
355                 free(viewer_main_data->drm_list_view);
356                 viewer_main_data->drm_list_view = NULL;
357         }
358
359         if (viewer_main_data->bg) {
360                 evas_object_del(viewer_main_data->bg);
361                 viewer_main_data->bg = NULL;
362         }
363
364         if (viewer_main_data->layout_main) {
365                 evas_object_del(viewer_main_data->layout_main);
366                 viewer_main_data->layout_main = NULL;
367         }
368
369         if (viewer_main_data->volkey_release_handler) {
370                 ecore_event_handler_del(viewer_main_data->volkey_release_handler);
371                 viewer_main_data->volkey_release_handler = NULL;
372         }
373
374         if (viewer_main_data->vol_up_key_longpress) {
375                 ecore_timer_del(viewer_main_data->vol_up_key_longpress);
376                 viewer_main_data->vol_up_key_longpress = NULL;
377         }
378
379         if (viewer_main_data->volkey_press_handler) {
380                 ecore_event_handler_del(viewer_main_data->volkey_press_handler);
381                 viewer_main_data->volkey_press_handler = NULL;
382         }
383
384         if (viewer_main_data->vol_down_key_longpress) {
385                 ecore_timer_del(viewer_main_data->vol_down_key_longpress);
386                 viewer_main_data->vol_down_key_longpress = NULL;
387         }
388
389         /*destroy viewer_main data*/
390         /*free the drm list*/
391         if (viewer_main_data->drm_list) {
392                 MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL;
393                 int ntotal = eina_list_count(viewer_main_data->drm_list);
394                 int index = 0;
395
396                 for (index = 0; index < ntotal; index++) {
397                         pmedia_info = eina_list_nth(viewer_main_data->drm_list, index);
398                         if (pmedia_info) {
399                                 free(pmedia_info);
400                                 pmedia_info = NULL;
401                         }
402                 }
403                 eina_list_free(viewer_main_data->drm_list);
404                 viewer_main_data->drm_list = NULL;
405         }
406
407         if (viewer_main_data->SmilHandle) {
408                 msg_smil_destroy_smil_player(viewer_main_data->SmilHandle);
409                 msg_ui_viewer_set_smilhandle(viewer_main_data, NULL);
410         }
411
412         /* release msg info struct handle */
413         if (viewer_main_data->msg_t) {
414                 msg_release_struct(&viewer_main_data->msg_t);
415                 viewer_main_data->msg_t = NULL;
416         }
417
418         /* release mms struct handle */
419         if (viewer_main_data->mms_t) {
420                 msg_release_struct(&viewer_main_data->mms_t);
421                 viewer_main_data->mms_t = NULL;
422         }
423
424         if ((err = msg_close_msg_handle(&viewer_main_data->msgHandle)) != MSG_SUCCESS)
425                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_close_msg_handle, err=[%d]", err);
426
427         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
428 }
429
430 static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv)
431 {
432         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
433         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
434         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
435
436         __msg_ui_viewer_reload_viewer_ug(viewer_main_data, svc_msg_h);
437
438         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
439 }
440
441 static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv)
442 {
443         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
444         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
445         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "event : %d", event);
446         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
447
448         switch (event) {
449         case UG_EVENT_LOW_MEMORY:
450                 break;
451         case UG_EVENT_LOW_BATTERY:
452         {
453                 int battey_level = 0;
454                 vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW , &battey_level);
455                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "battey_level = %d", battey_level);
456                 if (battey_level == VCONFKEY_SYSMAN_BAT_POWER_OFF) {
457                         int charger_status = -1;
458                         vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, &charger_status);
459
460                         if (!charger_status)
461                                 __msg_ui_viewer_destroy_viewer_ug(priv);
462                 }
463
464                 break;
465         }
466         case UG_EVENT_LANG_CHANGE:
467                 msg_ui_viewer_change_language(viewer_main_data);
468                 break;
469         case UG_EVENT_ROTATE_PORTRAIT:
470                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_PORTRAIT");
471                 __msg_ui_viewer_rotate_play_window(viewer_main_data, 0);
472                 break;
473         case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
474                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN");
475                 __msg_ui_viewer_rotate_play_window(viewer_main_data, 180);
476                 break;
477         case UG_EVENT_ROTATE_LANDSCAPE:
478                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_LANDSCAPE");
479                 __msg_ui_viewer_rotate_play_window(viewer_main_data, 270);
480                 break;
481         case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
482                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN");
483                 __msg_ui_viewer_rotate_play_window(viewer_main_data, 90);
484                 break;
485         case UG_EVENT_REGION_CHANGE:
486                 break;
487         default:
488                 break;
489         }
490 }
491
492 static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv)
493 {
494         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
495         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL);
496         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
497         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
498         MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
499         int     ispopup = FALSE;
500
501         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode);
502
503         switch (event) {
504         case UG_KEY_EVENT_END:
505                 if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
506                         if (viewer_main_data->player_view) {
507                                 if (viewer_main_data->player_view->popup) {
508                                         evas_object_del(viewer_main_data->player_view->popup);
509                                         viewer_main_data->player_view->popup = NULL;
510                                         viewer_main_data->player_view->popup_type = MSG_VIEWER_POPUP_NONE;
511                                         ispopup = TRUE;
512                                 }
513
514                                 if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY ||
515                                         viewer_main_data->player_view->status == MSG_VIEWER_PAUSE) {
516                                         Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_STOP);
517                                         if (Error != MSG_SMIL_SUCCESS) {
518                                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
519                                         }
520
521                                         viewer_main_data->player_view->status = MSG_VIEWER_STOP;
522                                         msg_ui_viewer_update_play_controller(viewer_main_data->player_view, MSG_VIEWER_STOP);
523                                 }
524                         }
525                 } else {
526                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Not required case");
527                 }
528
529                 if (ispopup == FALSE) {
530                         if (!viewer_main_data->del_idler)
531                                 viewer_main_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_main_data);
532                 }
533
534                 break;
535         default:
536                 break;
537         }
538 }
539
540 static void __msg_ui_viewer_reload_viewer_ug(void *data, service_h svc_handle)
541 {
542         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
543         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
544         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
545
546         if (viewer_main_data->msg_t) {
547                 msg_release_struct(&viewer_main_data->msg_t);
548                 viewer_main_data->msg_t = NULL;
549         }
550
551         if (viewer_main_data->mms_t) {
552                 msg_release_struct(&viewer_main_data->mms_t);
553                 viewer_main_data->mms_t = NULL;
554         }
555
556         if (svc_handle) {
557                 char *msgid = NULL;
558                 service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msgid);
559                 if (msgid) {
560                         viewer_main_data->msgID = (int)atoi(msgid);
561                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgID = %d", viewer_main_data->msgID);
562                 } else {
563                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgid");
564                         return;
565                 }
566         }
567
568         if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
569                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Reset play view mode");
570
571                 if (viewer_main_data->player_view) {
572                         msg_ui_viewer_destroy_play_view(viewer_main_data->player_view);
573                         free(viewer_main_data->player_view);
574                         viewer_main_data->player_view = NULL;
575                 }
576
577                 if (viewer_main_data->SmilHandle) {
578                         msg_smil_destroy_smil_player(viewer_main_data->SmilHandle);
579                         msg_ui_viewer_set_smilhandle(viewer_main_data, NULL);
580                 }
581
582                 if (msg_ui_viewer_launch(viewer_main_data) == FALSE) {
583                         msg_common_reset_font_size("entry");
584                         ug_destroy_me(viewer_main_data->viewer_ug);
585                 }
586         } else if (viewer_main_data->view_mode == MSG_VIEWER_DRM_LIST_VIEW) {
587                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "DRM list view mode, come here to implement");
588                 if (viewer_main_data->drm_list_view) {
589                         msg_ui_viewer_destroy_drm_list_view(viewer_main_data->drm_list_view);
590                         free(viewer_main_data->drm_list_view);
591                         viewer_main_data->drm_list_view = NULL;
592                 }
593
594         } else {
595                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d mode is not required anything", viewer_main_data->view_mode);
596         }
597 }
598
599
600 static void __msg_ui_viewer_destroy_viewer_ug(void *data)
601 {
602         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
603         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
604         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
605         MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
606
607         if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
608                 if (viewer_main_data->player_view) {
609                         if (viewer_main_data->player_view->popup) {
610                                 evas_object_del(viewer_main_data->player_view->popup);
611                                 viewer_main_data->player_view->popup = NULL;
612                                 viewer_main_data->player_view->popup_type = MSG_VIEWER_POPUP_NONE;
613                         }
614
615                         if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY ||
616                                 viewer_main_data->player_view->status == MSG_VIEWER_PAUSE) {
617                                 Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_STOP);
618                                 if (Error != MSG_SMIL_SUCCESS) {
619                                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
620                                 } else {
621                                         viewer_main_data->player_view->status = MSG_VIEWER_STOP;
622                                 }
623                         }
624                 }
625         } else {
626                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d mode is not required anything", viewer_main_data->view_mode);
627         }
628
629         if (!viewer_main_data->del_idler)
630                 viewer_main_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_main_data);
631 }
632
633 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
634 {
635         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
636         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL;
637
638         if (!ops)
639                 return MSG_UI_RET_ERR;
640
641         viewer_main_data = calloc(1, sizeof(MSG_VIEWER_MAIN_DATA_S));
642         if (!viewer_main_data)
643                 return MSG_UI_RET_ERR;
644
645         ops->create = __msg_ui_viewer_on_create;
646         ops->start = __msg_ui_viewer_on_start;
647         ops->pause = __msg_ui_viewer_on_pause;
648         ops->resume = __msg_ui_viewer_on_resume;
649         ops->destroy = __msg_ui_viewer_on_destroy;
650         ops->message = __msg_ui_viewer_on_message;
651         ops->event = __msg_ui_viewer_on_event;
652         ops->key_event = __msg_ui_viewer_on_key_event;
653         ops->priv = (void *)viewer_main_data;
654         ops->opt = UG_OPT_INDICATOR_ENABLE;
655
656         return MSG_UI_RET_SUCCESS;
657 }
658
659 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
660 {
661         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
662         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL;
663
664         if (!ops)
665                 return;
666
667         viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)ops->priv;
668
669         if (viewer_main_data)
670                 free(viewer_main_data);
671 }