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 *==================================================================================================*/
21 #include <msg_storage.h>
23 #include "msg-smil-player-interface.h"
24 #include "msg-ui-common-utility.h"
26 #include "msg-ui-viewer-main.h"
27 #include "msg-ui-viewer-drm-utility.h"
29 /*==================================================================================================
30 * FUNCTION DECLARATIONS
31 *==================================================================================================*/
32 static MSG_BOOL __msg_ui_viewer_check_drm_content(void *data);
33 static MSG_SMIL_ERROR_E __msg_ui_viewer_main_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data);
34 static MSG_BOOL __msg_ui_vewer_get_smil_handle(void *data);
35 static MSG_BOOL __msg_ui_viewer_launch_drm_list(void *data);
36 static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data);
37 static MSG_BOOL __msg_ui_viewer_show_play_view(void *data);
39 /*==================================================================================================
40 * FUNCTION IMPLEMENTATIONS
41 *================================================================================================*/
42 void msg_ui_viewer_main_init(void *data)
44 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
45 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
46 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
48 viewer_main_data->main_window = NULL;
49 viewer_main_data->layout_main = NULL;
50 viewer_main_data->bg = NULL;
51 viewer_main_data->msgHandle = NULL;
52 viewer_main_data->msgID = -1;
53 viewer_main_data->launchmode = MSG_VIEWER_FULLVIEW_MODE;
54 viewer_main_data->SmilHandle = NULL;
55 viewer_main_data->msg_t = NULL;
56 viewer_main_data->mms_t = NULL;
57 viewer_main_data->ug_launch_mode = MSG_UG_MODE_FULLVIEW;
58 viewer_main_data->navi_frame = NULL;
59 viewer_main_data->player_view = NULL;
60 viewer_main_data->drm_list_view = NULL;
61 viewer_main_data->del_idler = NULL;
64 MSG_BOOL msg_ui_viewer_launch(void *data)
66 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
67 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
68 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
71 if (!__msg_ui_vewer_get_smil_handle(viewer_main_data)) {
72 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_vewer_get_smil_handle is failed");
76 if (viewer_main_data->launchmode == MSG_VIEWER_FULLVIEW_MODE) {
77 if (__msg_ui_viewer_check_drm_content(viewer_main_data)) {
78 ret = __msg_ui_viewer_launch_drm_list(viewer_main_data);
79 viewer_main_data->view_mode = MSG_VIEWER_DRM_LIST_VIEW;
81 ret = __msg_ui_viewer_launch_play_view(viewer_main_data);
82 viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
85 ret = __msg_ui_viewer_launch_play_view(viewer_main_data);
86 viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
92 void msg_ui_viewer_show_view_by_mode(void *data, MSG_VIEWER_VIEW_MODE_E viewMode, unsigned int commandType)
94 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
95 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
97 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewMode = %d", viewMode);
98 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->player_view = 0x%x", viewer_main_data->player_view);
99 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->drm_list_view = 0x%x", viewer_main_data->drm_list_view);
101 if (viewMode == MSG_VIEWER_PLAYER_VIEW) {
102 if (commandType == MSG_VIEWER_VIEW_CMD_PLAY) {
103 if (__msg_ui_viewer_show_play_view(viewer_main_data))
104 viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
106 __msg_ui_viewer_launch_play_view(viewer_main_data);
107 viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
109 } else if (viewMode == MSG_VIEWER_DRM_LIST_VIEW) {
110 __msg_ui_viewer_launch_drm_list(viewer_main_data);
111 viewer_main_data->view_mode = MSG_VIEWER_DRM_LIST_VIEW;
113 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid viewMode!!");
117 static MSG_BOOL __msg_ui_viewer_launch_drm_list(void *data)
119 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
120 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
121 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
122 MSG_DRM_LIST_DATA_S *pdrm_list_data = NULL;
124 /*allocate drm_list_view*/
125 if (!viewer_main_data->drm_list_view) {
126 pdrm_list_data = (MSG_DRM_LIST_DATA_S *)calloc(1, sizeof(MSG_DRM_LIST_DATA_S));
127 if (!pdrm_list_data) {
128 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
131 viewer_main_data->drm_list_view = pdrm_list_data;
133 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drm list view is already created");
134 pdrm_list_data = viewer_main_data->drm_list_view;
137 msg_ui_viewer_drm_list_init(pdrm_list_data);
138 /*set drm list view data from viewer_main_data*/
139 pdrm_list_data->mms_t = viewer_main_data->mms_t;
140 pdrm_list_data->msgID = viewer_main_data->msgID;
141 pdrm_list_data->main_window = viewer_main_data->main_window;
142 if (viewer_main_data->navi_frame)
143 pdrm_list_data->navi_frame = viewer_main_data->navi_frame;
145 if (viewer_main_data->drm_list) {
146 MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL;
147 int ntotal = eina_list_count(viewer_main_data->drm_list);
151 for (index = 0; index < ntotal; index++) {
152 pmedia_info = eina_list_nth(viewer_main_data->drm_list, index);
154 MSG_VIEWER_MEDIA_INFO_S *ptmp_media_info = (MSG_VIEWER_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_MEDIA_INFO_S));
155 if (ptmp_media_info) {
156 memcpy(ptmp_media_info, pmedia_info, sizeof(MSG_VIEWER_MEDIA_INFO_S));
158 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
162 pdrm_list_data->drm_list = eina_list_append(pdrm_list_data->drm_list, ptmp_media_info);
166 /*free the drm list*/
167 if (viewer_main_data->drm_list) {
168 MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL;
169 int ntotal = eina_list_count(viewer_main_data->drm_list);
172 for (index = 0; index < ntotal; index++) {
173 pmedia_info = eina_list_nth(viewer_main_data->drm_list, index);
179 eina_list_free(viewer_main_data->drm_list);
180 viewer_main_data->drm_list = NULL;
183 pdrm_list_data->viewer_main = viewer_main_data;
185 return msg_ui_viewer_create_drm_list_view(pdrm_list_data);
188 static MSG_BOOL __msg_ui_viewer_show_play_view(void *data)
190 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
191 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
192 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
193 MSG_PLAY_DATA_S *viewer_play_data = NULL;
195 if (!viewer_main_data->player_view) {
196 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player view is not created");
199 viewer_play_data = viewer_main_data->player_view;
201 return msg_ui_viewer_show_player_view(viewer_play_data);
204 static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data)
206 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
207 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
208 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
209 MSG_PLAY_DATA_S *viewer_play_data = NULL;
211 if (!viewer_main_data->player_view) {
212 viewer_play_data = (MSG_PLAY_DATA_S *)calloc(1, sizeof(MSG_PLAY_DATA_S));
213 if (!viewer_play_data) {
214 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
217 viewer_main_data->player_view = viewer_play_data;
219 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play view is already created");
220 viewer_play_data = viewer_main_data->player_view;
223 msg_ui_viewer_play_view_init(viewer_play_data);
225 viewer_play_data->msgID = viewer_main_data->msgID;
226 viewer_play_data->msgHandle = viewer_main_data->msgHandle;
227 viewer_play_data->SmilHandle = viewer_main_data->SmilHandle;
228 viewer_play_data->msg_t = viewer_main_data->msg_t;
229 viewer_play_data->mms_t = viewer_main_data->mms_t;
230 viewer_play_data->main_window = viewer_main_data->main_window;
231 viewer_play_data->msg_box_viewer = viewer_main_data->msg_box_viewer;
233 if (viewer_main_data->navi_frame)
234 viewer_play_data->navi_frame = viewer_main_data->navi_frame;
236 viewer_play_data->cbs = viewer_main_data->cbs;
237 viewer_play_data->viewer_main = viewer_main_data;
239 return msg_ui_viewer_create_player_view(viewer_play_data);
242 static MSG_SMIL_ERROR_E __msg_ui_viewer_main_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data)
244 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
245 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
246 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
247 MSG_PLAY_DATA_S *viewer_data = viewer_main_data->player_view;
249 return msg_ui_viewer_smil_cb(eventStatus, viewer_data);
252 static MSG_BOOL __msg_ui_vewer_get_smil_handle(void *data)
254 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
255 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
256 MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
258 if (viewer_main_data->launchmode == MSG_VIEWER_FULLVIEW_MODE) {
259 if (!viewer_main_data->mms_t) {
260 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "viewer_main_data->mms_t is null");
265 /*Create smilplayer handler*/
266 Error = msg_smil_create_smil_player(viewer_main_data->mms_t, __msg_ui_viewer_main_smil_cb, (void *)viewer_main_data, &(viewer_main_data->SmilHandle));
267 if (Error != MSG_SMIL_SUCCESS) {
268 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_create_smil_player is failed! Error = %d", Error);
269 service_h svc_handle = NULL;
270 service_create(&svc_handle);
271 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL, FALSE);
273 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_VIEWER_MESSAGE, MSG_BUNDLE_VALUE_ERROR);
274 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
275 service_destroy(svc_handle);
283 static MSG_BOOL __msg_ui_viewer_check_drm_content(void *data)
285 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
286 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
287 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
288 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_main_data->mms_t == NULL, FALSE);
290 MSG_BOOL isdrm_content = FALSE;
292 /*check invalid sd, ssd type drm file*/
293 if (msg_ui_viewer_get_invalid_ro_drm_list(viewer_main_data->mms_t, &viewer_main_data->drm_list)) {
294 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "RO is required");
295 isdrm_content = TRUE;
297 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Ro is not required");
299 return isdrm_content;
302 Evas_Object *msg_ui_viewer_create_bg(void *data, Evas_Object *parent)
304 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
305 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
306 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
307 Evas_Object *bg = NULL;
309 if (viewer_main_data->bg == NULL) {
310 bg = elm_bg_add(parent);
311 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, bg == NULL, NULL);
312 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
313 elm_win_resize_object_add(parent, bg);
314 evas_object_show(bg);
315 viewer_main_data->bg = bg;
317 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "bg is already created");
324 Evas_Object *msg_ui_viewer_create_layout_main(Evas_Object *parent, bool indicator)
326 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
327 Evas_Object *layout = NULL;
329 layout = elm_layout_add(parent);
330 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, NULL);
333 elm_layout_theme_set(layout, "layout", "application", "default");
335 elm_layout_theme_set(layout, "layout", "application", "noindicator");
337 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
338 evas_object_show(layout);
343 void msg_ui_viewer_set_loaded_ug(void *data, ui_gadget_h loaded_ug)
345 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
346 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, loaded_ug == NULL);
347 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
348 viewer_main_data->loaded_ug = loaded_ug;
351 void msg_ui_viewer_set_navi_frame(void *data, Evas_Object *navi_frame)
353 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
354 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, navi_frame == NULL);
355 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
356 viewer_main_data->navi_frame = navi_frame;
359 void msg_ui_viewer_set_smilhandle(void *data, void *smilhandle)
361 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
362 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
365 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "smilhandle is set as NULL");
367 viewer_main_data->SmilHandle = smilhandle;
370 MSG_BOOL msg_ui_viewer_get_viewer_launchmode(void *data, MSG_VIEWER_LAUNCH_VIEW_MODE_E *launchmode)
372 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
373 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, launchmode == NULL, FALSE);
374 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
375 *launchmode = viewer_main_data->launchmode;
380 MSG_BOOL msg_ui_viewer_get_viewer_ug_mode(void *data, MSG_UG_LAUNCH_MODE_E *ug_mode)
382 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
383 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, ug_mode == NULL, FALSE);
384 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
385 *ug_mode = viewer_main_data->ug_launch_mode;
390 ui_gadget_h msg_ui_viewer_get_viewer_ug(void *data)
392 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
393 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
395 return viewer_main_data->viewer_ug;
398 Evas_Object *msg_ui_viewer_get_main_layout(void *data)
400 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
401 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
403 return viewer_main_data->layout_main;
406 Evas_Object *msg_ui_viewer_get_bg_layout(void *data)
408 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
409 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
411 return viewer_main_data->bg;
414 void msg_ui_viewer_change_language(void *data)
416 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
417 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
418 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
420 if (viewer_main_data->player_view) {
421 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)viewer_main_data->player_view;
423 if (viewer_play_data->popup) {
424 switch (viewer_play_data->popup_type) {
425 case MSG_VIEWER_DELETE_POPUP:
426 msg_ui_viewer_delete_button_cb(viewer_play_data, NULL, NULL);
428 case MSG_VIEWER_ATTACHMENTS_POPUP:
429 msg_ui_viewer_create_save_attachments_popup(viewer_play_data);
431 case MSG_VIEWER_DETAILS_POPUP:
432 msg_ui_viewer_create_msg_detail_popup(viewer_play_data);
434 case MSG_VIEWER_MENU_CTX_POPUP:
435 msg_ui_viewer_more_button_cb(viewer_play_data, NULL, NULL);
437 case MSG_VIEWER_CUTLINK_POPUP:
438 case MSG_VIEWER_TITLE_MENU_POPUP:
439 case MSG_VIEWER_BLOCK_POPOP:
442 evas_object_del(viewer_play_data->popup);
443 viewer_play_data->popup = NULL;
444 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
449 if (viewer_play_data->title_menu_opened) {
450 /* close and open again */
451 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
452 msg_ui_viewer_open_title_menu_genlist(viewer_play_data);
455 if (viewer_play_data->render_entry && viewer_play_data->smil_eventStatus->isHelpSlide) {
456 char buf_helptext[DEF_BUF_LEN+1] = {0,};
457 snprintf(buf_helptext, sizeof(buf_helptext), "<color=#6ca8c7>%s", ((viewer_play_data->attach_count > 1) ? dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE") : dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE")));
458 elm_entry_entry_set(viewer_play_data->render_entry, buf_helptext);