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 #include "msg-ui-viewer-play-view.h"
18 #include "msg-ui-viewer-main.h"
19 #include "msg-ui-viewer-utility.h"
20 #include "msg-ui-common-utility.h"
21 #include "msg-ui-image-resource.h"
26 #include <app_service.h>
27 #include <syspopup_caller.h>
30 /*==================================================================================================
32 *==================================================================================================*/
33 Elm_Genlist_Item_Class itc_popup = {0,}; /** itc for list style popup */
35 /*==================================================================================================
36 * FUNCTION DECLARATIONS
37 *==================================================================================================*/
38 /* genlist for multirecipients in title button */
39 static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part);
40 static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part);
41 static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info);
42 static void __msg_ui_viewer_title_menu_del(void *data, Evas_Object *obj);
43 static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
44 static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info);
45 static void __msg_ui_viewer_title_menu_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
47 /*attachment list for help page */
48 static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data);
50 /* controllbar toolbar option */
51 static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info);
52 static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
54 /* save attachment popup */
55 static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
56 static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info);
57 static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part);
58 static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part);
59 static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
60 static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info);
61 static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part);
62 static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part);
63 static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info);
64 static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
65 static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
66 static void __msg_ui_viewer_protection_cb(void *data, Evas_Object *obj, void *event_info);
67 static void __msg_ui_viewer_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
69 /*==================================================================================================
70 * FUNCTION IMPLEMENTATIONS
71 *================================================================================================*/
72 Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event)
74 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
75 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
76 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
77 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
78 Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
79 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
80 SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
86 if (viewer_play_data->drag_volume_slider) {
87 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "volume slider is dragging, do not navigate page!");
91 play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
92 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
94 /*get start and end point according to rotation*/
95 rotate = elm_win_rotation_get(viewer_play_data->main_window);
96 if (rotate == 0) { /*PORTRAIT mode*/
97 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT mode");
98 start_point = viewer_play_data->m_x;
100 screen_width = viewer_play_data->window_width;
101 } else if (rotate == 180) {
102 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT reverse mode");
104 end_point = viewer_play_data->m_x;
105 screen_width = viewer_play_data->window_width;
106 } else if (rotate == 90) { /*LANDSCAPE mode*/
107 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE mode");
109 end_point = viewer_play_data->m_y;
110 screen_width = viewer_play_data->window_height;
111 } else if (rotate == 270) {
112 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE reverse mode");
113 start_point = viewer_play_data->m_y;
115 screen_width = viewer_play_data->window_height;
117 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
120 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start_point = %d, end_point = %d, screen_width = %d", start_point, end_point, screen_width);
122 if (end_point - start_point > screen_width / 4) {
124 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
126 if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
127 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
128 if (err != MSG_SMIL_SUCCESS) {
129 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
131 /* hide menu title genlist if player status is changed to play */
132 if (viewer_play_data->title_menu_opened) {
133 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
135 /* play viewer again if previous status was PLAY */
136 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
137 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
138 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
143 /* show play controller */
144 if (viewer_play_data->play_controller) {
145 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
146 evas_object_show(viewer_play_data->play_controller);
147 viewer_play_data->playcontroller_opened = true;
148 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
150 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
152 /* set progressbar and progress text sync */
153 if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
154 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
158 } else if (start_point - end_point > screen_width / 4) {
160 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
161 int total_page = viewer_play_data->smil_eventStatus->pageCnt;
162 if (total_page >= pageIdx) {
163 if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
164 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
165 if (err != MSG_SMIL_SUCCESS) {
166 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
168 /* hide menu title genlist if player status is changed to play */
169 if (viewer_play_data->title_menu_opened) {
170 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
172 /* play viewer again if previous status was PLAY */
173 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
174 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
175 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
180 /* show play controller */
181 if (viewer_play_data->play_controller) {
182 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
183 evas_object_show(viewer_play_data->play_controller);
184 viewer_play_data->playcontroller_opened = true;
185 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
187 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
189 /* set progressbar and progress text sync */
190 if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
191 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
200 Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event)
202 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
203 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
204 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
205 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
206 Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
208 viewer_play_data->m_x = ev->x;
209 viewer_play_data->m_y = ev->y;
211 if (viewer_play_data->mouse_up_event_handler) {
212 ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
213 viewer_play_data->mouse_up_event_handler = NULL;
215 viewer_play_data->mouse_up_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, msg_ui_viewer_mouse_up_cb, (void *) viewer_play_data);
220 void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
222 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
223 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
224 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
225 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
226 Evas_Event_Mouse_Down *ev = event_info;
228 viewer_play_data->ctrl_start_x = ev->canvas.x;
229 viewer_play_data->ctrl_start_y = ev->canvas.y;
232 void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
234 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
235 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
236 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
237 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
238 Evas_Event_Mouse_Up *ev = event_info;
240 viewer_play_data->ctrl_end_x = ev->canvas.x;
241 viewer_play_data->ctrl_end_y = ev->canvas.y;
243 int screen_width = 0;
244 int screen_height = 0;
248 rotate = elm_win_rotation_get(viewer_play_data->main_window);
249 if (rotate == 0 || rotate == 180) {
250 screen_width = viewer_play_data->window_width;
251 screen_height = viewer_play_data->window_height;
252 } else if (rotate == 90 || rotate == 270) {
253 screen_width = viewer_play_data->window_height;
254 screen_height = viewer_play_data->window_width;
256 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
260 //check only case for playcontroller is not opened, the other case is checked within msg_ui_viewer_play_layout_clicked_cb
261 if (!viewer_play_data->playcontroller_opened && !viewer_play_data->title_menu_opened) {
262 if (abs(viewer_play_data->ctrl_start_x-viewer_play_data->ctrl_end_x) < screen_width / 10 && abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) < screen_height / 10 ) {
263 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is tapped and play controller should be displayed");
265 if (viewer_play_data->play_controller) {
266 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
267 evas_object_show(viewer_play_data->play_controller);
268 viewer_play_data->playcontroller_opened = true;
269 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
270 //create play controller timer
271 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
274 } else if (viewer_play_data->playcontroller_opened) {
275 /* up/down drag condition - close play controller */
276 if (abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) > screen_height / 5) {
277 elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
278 evas_object_hide(viewer_play_data->play_controller);
279 viewer_play_data->playcontroller_opened = false;
280 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
282 msg_ui_viewer_destroy_play_controller_timer(viewer_play_data);
287 void msg_ui_viewer_play_layout_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
289 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
290 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
291 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
293 if (viewer_play_data->title_menu_opened) {
294 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
296 /* play viewer again if previous status was PLAY */
297 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
298 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
299 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
303 } else if (viewer_play_data->playcontroller_opened) {
304 int screen_width = 0;
305 int screen_height = 0;
309 rotate = elm_win_rotation_get(viewer_play_data->main_window);
310 if (rotate == 0 || rotate == 180) {
311 screen_width = viewer_play_data->window_width;
312 screen_height = viewer_play_data->window_height;
313 } else if (rotate == 90 || rotate == 270) {
314 screen_width = viewer_play_data->window_height;
315 screen_height = viewer_play_data->window_width;
317 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
321 if (abs(viewer_play_data->ctrl_start_x-viewer_play_data->ctrl_end_x) < screen_width / 10 &&
322 abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) < screen_height / 10 &&
323 viewer_play_data->ctrl_end_y < screen_height-(VIEWER_NAVIFRAME_BOTTOM_H+VIEWER_PLAY_CONTROLLER_HEIGHT)) {
324 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is now displayed and play controller should be hided");
326 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
327 elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
328 evas_object_hide(viewer_play_data->play_controller);
329 viewer_play_data->playcontroller_opened = false;
330 //destroy play controller timer
331 msg_ui_viewer_destroy_play_controller_timer(viewer_play_data);
336 MSG_SMIL_ERROR_E msg_ui_viewer_set_entry_handle_cb(MSG_PLAY_DATA_S *data, void *entry)
338 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
339 MSG_UI_RETV_IF(MSG_UI_LEVEL_ASSERT, data == NULL, MSG_ERR_SMIL_UNKNOWN);
340 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
341 bool isHelpText = false;
343 viewer_play_data->render_entry = (Evas_Object *)entry;
345 if (viewer_play_data->render_entry) {
346 if (viewer_play_data->smil_eventStatus) {
347 isHelpText = (viewer_play_data->smil_eventStatus->isHelpSlide) ? true : false;
349 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
350 isHelpText = (!slide || !slide->commonData) ? false : ((slide->commonData->pageCnt == 0) ? true : false);
352 MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
353 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE);
356 return MSG_SMIL_SUCCESS;
359 void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info)
361 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
362 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
363 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
365 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->launch_cmd : %d", viewer_play_data->launch_cmd);
367 /*prevent invalid double pressing button event after launching ug or app(like call, vtcall)*/
368 if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE)
371 if (viewer_play_data->title_menu_opened)
372 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
374 if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
375 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
376 if (err != MSG_SMIL_SUCCESS) {
377 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
380 viewer_play_data->status = MSG_VIEWER_STOP;
381 msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
384 msg_ui_viewer_disconnect_handler(viewer_play_data);
386 if (!viewer_play_data->del_idler)
387 viewer_play_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_play_data->viewer_main);
389 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
392 void msg_ui_viewer_title_button_clicked_cb(void * data, Evas_Object * obj, void * event_info)
394 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
395 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
396 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
398 if (viewer_play_data->title_menu_opened) {
399 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
401 /* play viewer again if previous status was PLAY */
402 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
403 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
404 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
409 msg_ui_viewer_open_title_menu_genlist(viewer_play_data);
411 viewer_play_data->previous_status = viewer_play_data->status;
412 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
414 /* set player state to pause and update icon */
415 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
416 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_viewer_command_play_pause is failed");
421 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
424 void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info)
426 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
427 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
428 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
429 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
431 /* check media count */
432 if (viewer_play_data->insert_count + viewer_play_data->attach_count == 0) {
433 msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_NO_ATTACHMENTS"));
437 /* close title menu list if exist, else pause SMIL and save previous status */
438 if (viewer_play_data->title_menu_opened) {
439 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
441 viewer_play_data->previous_status = viewer_play_data->status;
442 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
444 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) { // pause
445 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
450 /* create popup for save attachments and insert items */
451 msg_ui_viewer_create_save_attachments_popup(viewer_play_data);
453 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
456 void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_info)
458 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
459 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
460 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
461 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
462 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
464 if (viewer_play_data->popup) {
465 evas_object_del(viewer_play_data->popup);
466 viewer_play_data->popup = NULL;
467 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
470 Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
471 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
473 /* Add protection on/off menu */
474 bool is_protected = false;
475 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
476 elm_object_text_set(popup, (is_protected) ? dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_DELETE_THIS_PROTECTED_MESSAGE_Q") : dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_DELETE_Q"));
478 Evas_Object *btn_ok = elm_button_add(popup);
479 elm_object_style_set(btn_ok, "popup_button/default");
480 elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
481 elm_object_part_content_set(popup, "button1", btn_ok);
482 evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_delete_ok_clicked_cb, viewer_play_data);
484 Evas_Object *btn_cancel = elm_button_add(popup);
485 elm_object_style_set(btn_cancel, "popup_button/default");
486 elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
487 elm_object_part_content_set(popup, "button2", btn_cancel);
488 evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
490 evas_object_show(popup);
491 viewer_play_data->popup = popup;
492 viewer_play_data->popup_type = MSG_VIEWER_DELETE_POPUP;
494 /*disconnect mouse handler*/
495 msg_ui_viewer_disconnect_handler(viewer_play_data);
497 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
500 static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
502 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
503 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
505 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
506 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
507 char str_id[DEF_BUF_LEN] = {0,};
509 if (viewer_play_data->popup) {
510 evas_object_del(viewer_play_data->popup);
511 viewer_play_data->popup = NULL;
512 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
515 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete msg-id is %d", viewer_play_data->msgID);
517 if (viewer_play_data->msg_box_viewer) {
518 if (msg_delete_message(viewer_play_data->msgHandle, viewer_play_data->msgID) == MSG_SUCCESS) {
519 status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED"));
521 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_message is failed");
522 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
527 service_h svc_handle = NULL;
529 service_create(&svc_handle);
530 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
532 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_DELETE_MSG);
534 snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
535 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
537 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
538 service_destroy(svc_handle);
542 ug_destroy_me(viewer_main_data->viewer_ug);
547 static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
549 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
550 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
552 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
554 if (viewer_play_data->popup) {
555 evas_object_del(viewer_play_data->popup);
556 viewer_play_data->popup = NULL;
557 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
560 /* connect handler again*/
561 msg_ui_viewer_connect_handler(viewer_play_data);
563 /* play viewer again if previous status was PLAY */
564 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
565 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
566 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
572 void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_info)
574 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
575 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
576 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
577 char buf[DEF_BUF_LEN_S] = { 0, };
578 service_h svc_handle;
580 if (viewer_play_data->popup) {
581 evas_object_del(viewer_play_data->popup);
582 viewer_play_data->popup = NULL;
583 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
586 /* create and call composer-ug */
587 if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
588 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
590 snprintf(buf, sizeof(buf), "%d", viewer_play_data->msgID);
591 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, buf);
592 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_FORWARD);
593 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FROM, MSG_BUNDLE_VALUE_INTERNAL);
594 ui_gadget_h loaded_ug;
596 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
599 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
600 msg_ui_viewer_disconnect_handler(viewer_play_data);
601 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
602 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
605 service_destroy(svc_handle);
608 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
611 void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_info)
613 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
614 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
615 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
616 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
617 char str_id[DEF_BUF_LEN] = {0,};
619 if (viewer_play_data->popup) {
620 evas_object_del(viewer_play_data->popup);
621 viewer_play_data->popup = NULL;
622 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
625 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed msg-id is %d", viewer_play_data->msgID);
627 service_h svc_handle = NULL;
628 service_create(&svc_handle);
629 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
631 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_RESEND);
633 snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
634 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
636 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
637 service_destroy(svc_handle);
640 ug_destroy_me(viewer_main_data->viewer_ug);
642 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
645 void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_info)
647 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
648 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
649 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
650 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
651 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
654 msg_error_t err = MSG_SUCCESS;
655 service_h svc_handle;
657 if (viewer_play_data->popup) {
658 evas_object_del(viewer_play_data->popup);
659 viewer_play_data->popup = NULL;
660 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
663 /* get thread id value to check whether viewer is launched from bubble-composer or other external app(ug) */
664 err = msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
666 /* back to bubble-composer and request to show keypad */
667 if (err == MSG_SUCCESS && thread_id > 0) {
668 service_create(&svc_handle);
669 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
671 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_REPLY);
672 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
674 service_destroy(svc_handle);
677 ug_destroy_me(viewer_main_data->viewer_ug);
678 } else { /* create new composer with reply number */
679 service_create(&svc_handle);
680 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
682 char *reply_addr = NULL;
684 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &reply_addr, &contact_id);
687 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, reply_addr);
691 ui_gadget_h loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
694 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
695 msg_ui_viewer_disconnect_handler(viewer_play_data);
696 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
697 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
700 service_destroy(svc_handle);
703 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
706 void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info)
708 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
709 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
710 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
711 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
712 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
714 MSG_BOOL hasText = FALSE;
717 int folder_id = MSG_MAX_FOLDER_ID;
719 if (viewer_play_data->popup) {
720 evas_object_del(viewer_play_data->popup);
721 viewer_play_data->popup = NULL;
722 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
725 /* set current status to previous status */
726 viewer_play_data->previous_status = viewer_play_data->status;
727 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
729 /* set player state to pause*/
730 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
731 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
735 Evas_Object *ctx_popup = NULL;
736 ctx_popup = elm_ctxpopup_add(viewer_play_data->navi_frame);
737 evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_viewer_more_ctxpopup_dismissed_cb, (void *)viewer_play_data);
739 /* add delete menu */
740 elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_OPT_DELETE"), NULL, msg_ui_viewer_delete_button_cb, (void *)viewer_play_data);
742 /* Get folder ID and Add Resend / Reply menu */
743 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
745 if (folder_id == MSG_OUTBOX_ID)
746 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_SK_RESEND"), NULL, msg_ui_viewer_resend_button_cb, (void *)viewer_play_data);
747 else if (folder_id == MSG_INBOX_ID)
748 elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_SK_REPLY"), NULL, msg_ui_viewer_reply_button_cb, (void *)viewer_play_data);
750 /* Add FORWARD menu */
751 elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_BODY_FORWARD"), NULL, msg_ui_viewer_forward_button_cb, (void *)viewer_play_data);
753 /* Add protection on/off menu */
754 bool is_protected = false;
755 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
756 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Lock status of current message %d", is_protected);
759 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_OFF"), NULL, __msg_ui_viewer_protection_cb, (void *)viewer_play_data);
761 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_ON"), NULL, __msg_ui_viewer_protection_cb, (void *)viewer_play_data);
763 /* Add Copy Message text menu */
764 if (viewer_play_data->smil_eventStatus != NULL) {
766 msg_list_handle_t pagelist_info = NULL;
767 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
768 page_count = msg_list_length(pagelist_info);
770 msg_struct_t page_info = NULL;
771 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, viewer_play_data->smil_eventStatus->pageIdx);
774 msg_list_handle_t medialist_info = NULL;
775 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
776 media_count = msg_list_length(medialist_info);
778 for (i = 0; i < media_count; i++) {
780 msg_struct_t media_info = NULL;
781 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, i);
783 if (media_info == NULL) {
784 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "getting media has failed");
788 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
789 if (mediaType != MMS_SMIL_MEDIA_TEXT)
798 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"), NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
800 /* Add view message details menu */
801 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"), NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
804 Evas_Coord x, y, w, h;
805 evas_object_geometry_get(viewer_play_data->more_btn, &x, &y, &w, &h);
806 evas_object_move(ctx_popup, x, y);
807 evas_object_show(ctx_popup);
809 viewer_play_data->popup = ctx_popup;
810 viewer_play_data->popup_type = MSG_VIEWER_MENU_CTX_POPUP;
812 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
815 void msg_ui_viewer_volume_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
817 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
818 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
819 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
821 if (!viewer_play_data->volumebar)
822 msg_ui_viewer_create_volume_bar((void *)viewer_play_data);
824 msg_ui_viewer_destroy_volume_bar((void *)viewer_play_data);
826 //create play controller timer repeatedly
827 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
830 void msg_ui_viewer_prev_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
832 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
833 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
834 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
835 SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
836 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
838 play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
839 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
841 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
843 if (!strcmp(emission, "prev_clicked")) {
845 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
847 if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
848 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
849 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
850 if (err != MSG_SMIL_SUCCESS) {
851 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
853 //set progressbar and progress text sync
854 if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
855 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
860 //create play controller timer repeatedly
861 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
863 /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
864 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
865 if (viewer_play_data->title_menu_opened)
866 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
870 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
873 void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
875 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
876 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
877 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
879 if (!msg_ui_viewer_command_play_pause(viewer_play_data, (viewer_play_data->status == MSG_VIEWER_PLAY) ? MSG_VIEWER_ACTION_TOOLBAR_PAUSE : MSG_VIEWER_ACTION_TOOLBAR_PLAY))
880 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
882 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
885 void msg_ui_viewer_next_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
887 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
888 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
889 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
891 if (!strcmp(emission, "next_clicked"))
893 SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
894 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
896 play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
897 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
899 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
901 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
902 int total_page = viewer_play_data->smil_eventStatus->pageCnt;
903 if (total_page >= pageIdx) {
904 if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
905 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
906 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
907 if (err != MSG_SMIL_SUCCESS) {
908 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
910 //set progressbar and progress text sync
911 if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
912 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
917 //create play controller timer repeatedly
918 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
920 /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
921 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
922 if (viewer_play_data->title_menu_opened)
923 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
928 void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info)
930 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
931 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
932 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
933 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
934 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
935 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
937 service_error_e svc_err = SERVICE_ERROR_NONE;
939 msg_struct_list_s *addr_list = NULL;
940 msg_get_list_handle(viewer_play_data->msg_t, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
942 int addr_count = addr_list->nCount; //get address count
944 if (addr_count == 1) {
945 service_h svc_handle = NULL;
946 msg_struct_t addr_info = NULL;
947 char szAddress[MAX_ADDRESS_VAL_LEN + 1] = {0,};
948 addr_info = addr_list->msg_struct_info[0];
949 msg_get_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, szAddress, MAX_ADDRESS_VAL_LEN);
951 char *address = (char*)calloc(1, strlen(szAddress)+1);
952 if (address == NULL) {
953 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
957 memcpy(address, szAddress, strlen(szAddress));
959 svc_err = service_create(&svc_handle);
960 if (svc_err != SERVICE_ERROR_NONE || svc_handle == NULL) {
961 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
966 service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
967 service_set_app_id(svc_handle, "email-composer-efl");
968 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
969 service_add_extra_data(svc_handle, SERVICE_DATA_TO, address);
971 Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
972 service_set_window(svc_handle, win_id);
974 svc_err = service_send_launch_request(svc_handle, NULL, NULL);
976 if (svc_err == SERVICE_ERROR_NONE) {
977 msg_ui_viewer_disconnect_handler(viewer_play_data);
978 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
979 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
981 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", svc_err);
985 service_destroy(svc_handle);
988 /* close title menu list */
989 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
991 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
994 void msg_ui_viewer_toolbar_call_cb(void *data, Evas_Object *obj, void *event_info)
996 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
997 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
998 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
999 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1001 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1003 if (addr_count == 1) {
1004 char telnum[255] = {0,};
1006 service_h svc_handle = NULL;
1008 service_create(&svc_handle);
1009 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1011 service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
1013 char *address = NULL;
1016 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1019 snprintf(telnum, sizeof(telnum), "tel:%s", address); /* Number to make a call */
1020 service_set_uri(svc_handle, telnum);
1023 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1024 service_destroy(svc_handle);
1028 if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
1029 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request failed ret : %d", ret);
1031 msg_ui_viewer_disconnect_handler(viewer_play_data);
1032 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1033 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL;
1035 service_destroy(svc_handle);
1038 /* close title menu list */
1039 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1041 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1044 void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_info)
1046 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1047 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1048 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1049 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1051 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1053 if (addr_count == 1) {
1054 service_error_e err = SERVICE_ERROR_NONE;
1055 service_h svc_handle = NULL;
1056 char telnum[MAX_ADDRESS_VAL_LEN+5] = {0,};
1057 char contact_id[VIEWER_BUFFER_SIZE_64] = {0,};
1059 service_create(&svc_handle);
1060 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1061 char *address = NULL;
1064 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1067 snprintf(telnum, sizeof(telnum), "tel:%s", address);
1068 snprintf(contact_id, sizeof(contact_id), "%d", contactid);
1071 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
1072 service_destroy(svc_handle);
1076 service_set_operation(svc_handle, "http://tizen.org/appcontrol/operation/vt");
1077 service_set_uri(svc_handle, telnum);
1078 service_add_extra_data(svc_handle, "ctindex", contact_id);
1079 err = service_send_launch_request(svc_handle, NULL, NULL);
1081 if (err == SERVICE_ERROR_NONE) {
1082 msg_ui_viewer_disconnect_handler(viewer_play_data);
1083 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1084 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
1086 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", err);
1089 service_destroy(svc_handle);
1092 /* close title menu list */
1093 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1095 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1098 void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info)
1100 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1101 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1102 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1103 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1105 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1107 if (addr_count == 1) {
1108 ui_gadget_h loaded_ug = NULL;
1109 char buf[DEF_BUF_LEN_D] = { 0, };
1111 service_h svc_handle = NULL;
1113 service_create(&svc_handle);
1114 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1116 char *address = NULL;
1119 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1122 if (strstr(address, "@")) {
1123 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
1124 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1125 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, address);
1127 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
1128 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1129 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, address);
1133 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
1134 service_destroy(svc_handle);
1138 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
1141 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1142 msg_ui_viewer_disconnect_handler(viewer_play_data);
1143 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1144 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1147 service_destroy(svc_handle);
1150 /* close title menu list */
1151 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1153 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1156 void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *event_info)
1158 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1159 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1160 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1161 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1163 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1165 if (addr_count == 1) {
1166 ui_gadget_h loaded_ug = NULL;
1167 char contactId[DEF_BUF_LEN_S] = { 0, };
1168 char buf[DEF_BUF_LEN_D] = { 0, };
1169 char *address = NULL;
1172 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1174 if (contact_id > 0 ) {
1175 service_h svc_handle = NULL;
1176 service_create(&svc_handle);
1177 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1179 snprintf(contactId, sizeof(contactId), "%d", contact_id);
1180 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
1182 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1183 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
1185 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
1188 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1189 msg_ui_viewer_disconnect_handler(viewer_play_data);
1190 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1191 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1194 service_destroy(svc_handle);
1196 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid contact_id = %d", contact_id);
1203 /* close title menu list */
1204 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1206 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1209 void msg_ui_viewer_toolbar_block_address_cb(void *data, Evas_Object *obj, void *event_info)
1211 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1212 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1213 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1214 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1216 Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
1217 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1219 char *popup_text = NULL;
1220 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
1221 char *address = NULL;
1224 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1227 popup_text = g_strdup_printf(szbuf, address);
1230 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
1234 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1238 elm_object_text_set(popup, popup_text);
1241 Evas_Object *btn_ok = elm_button_add(popup);
1242 elm_object_style_set(btn_ok, "popup_button/default");
1243 elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
1244 elm_object_part_content_set(popup, "button1", btn_ok);
1245 evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_block_ok_clicked_cb, viewer_play_data);
1247 Evas_Object *btn_cancel = elm_button_add(popup);
1248 elm_object_style_set(btn_cancel, "popup_button/default");
1249 elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
1250 elm_object_part_content_set(popup, "button2", btn_cancel);
1251 /* use same cb function with delete cancel button */
1252 evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
1254 evas_object_show(popup);
1255 viewer_play_data->popup = popup;
1256 viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
1258 /*disconnect mouse handler*/
1259 msg_ui_viewer_disconnect_handler(viewer_play_data);
1261 /* close title menu list */
1262 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1264 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1267 void msg_ui_viewer_toolbar_unblock_address_cb(void *data, Evas_Object *obj, void *event_info)
1269 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1270 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1271 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1272 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1274 char *address = NULL;
1277 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1280 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, address, &filter_id)) {
1281 msg_error_t err = MSG_SUCCESS;
1282 err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
1283 if (err != MSG_SUCCESS) {
1284 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
1289 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
1290 char *message_text = g_strdup_printf(szbuf, address);
1291 if (!message_text) {
1292 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1296 status_message_post(message_text);
1299 msg_ui_viewer_title_update(viewer_play_data, MSG_VIEWER_OPTION_BLOCK);
1303 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1307 /* close title menu list */
1308 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1310 /* play viewer again if previous status was PLAY */
1311 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
1312 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
1313 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
1318 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1321 static void __msg_ui_viewer_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1323 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1324 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1326 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1328 if (viewer_play_data->popup) {
1329 evas_object_del(viewer_play_data->popup);
1330 viewer_play_data->popup = NULL;
1331 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1334 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1336 if (addr_count == 1) {
1337 msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
1338 msg_error_t err = MSG_SUCCESS;
1340 err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
1341 if (err != MSG_SUCCESS) {
1342 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
1343 msg_release_struct(&filter);
1347 char *address = NULL;
1350 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1353 err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, address, strlen(address));
1354 if (err != MSG_SUCCESS) {
1355 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
1356 msg_release_struct(&filter);
1361 err = msg_add_filter(viewer_play_data->msgHandle, filter);
1362 if (err != MSG_SUCCESS) {
1363 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
1364 msg_release_struct(&filter);
1369 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
1370 char *message_text = g_strdup_printf(szbuf, address);
1371 if (!message_text) {
1372 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1373 msg_release_struct(&filter);
1378 status_message_post(message_text);
1382 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
1383 msg_release_struct(&filter);
1387 msg_release_struct(&filter);
1390 /* play viewer again if previous status was PLAY */
1391 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
1392 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
1393 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
1402 void msg_ui_viewer_open_title_menu_genlist(void *data)
1404 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1405 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1406 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
1407 MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
1410 /* create box (for setting min size of genlist)*/
1411 Evas_Object *box = elm_box_add(viewer_play_data->play_layout);
1412 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1413 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
1414 evas_object_show(box);
1416 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.title.menu", box);
1418 /* create genlist */
1419 Evas_Object *genlist = elm_genlist_add(box);
1420 elm_object_theme_set(genlist, viewer_play_data->title_th);
1421 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1422 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1423 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1424 evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
1425 evas_object_show(genlist);
1427 elm_box_pack_end(box, genlist);
1429 viewer_play_data->title_box_layout = box;
1431 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1433 if (addr_count == 1) {
1434 /* set genlist styles */
1435 viewer_play_data->itc_title_single.item_style = "1text.custom";
1436 viewer_play_data->itc_title_single.func.text_get = __msg_ui_viewer_title_menu_gl_text_get;
1437 viewer_play_data->itc_title_single.func.content_get = NULL;
1438 viewer_play_data->itc_title_single.func.state_get = NULL;
1439 viewer_play_data->itc_title_single.func.del = NULL;
1441 /* genlist list load */
1442 char *address = NULL;
1445 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1448 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1452 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address = %s, contact_id = %d", address, contact_id);
1454 if (msg_common_is_valid_phone_number(address)) {
1455 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_call_cb, viewer_play_data);
1456 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_vcall_cb, viewer_play_data);
1457 } else if (msg_common_is_valid_email_addr(address)) {
1458 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_email_cb, viewer_play_data);
1460 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
1464 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_view_contact_cb, viewer_play_data);
1466 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_add_to_contact_cb, viewer_play_data);
1468 if (msg_common_is_valid_phone_number(address)) {
1470 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, address, &filter_id))
1471 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_unblock_address_cb, viewer_play_data);
1473 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_block_address_cb, viewer_play_data);
1476 evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * elm_genlist_items_count(genlist));
1479 /* set genlist styles */
1480 viewer_play_data->itc_title.item_style = "2text.1icon.2.custom";
1481 viewer_play_data->itc_title.func.text_get = __msg_ui_viewer_title_menu_gl_text_get;
1482 viewer_play_data->itc_title.func.content_get = __msg_ui_viewer_title_menu_gl_content_get;
1483 viewer_play_data->itc_title.func.state_get = NULL;
1484 viewer_play_data->itc_title.func.del = __msg_ui_viewer_title_menu_del;
1486 /* genlist list load */
1487 for (i = 0; i < addr_count; i++) {
1488 addrInfo = (MSG_VIEWER_ADDR_INFO *)calloc(1, sizeof(MSG_VIEWER_ADDR_INFO));
1490 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "addrInfo calloc failed");
1494 char *address = NULL;
1497 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, i, &address, &contact_id);
1500 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is null");
1504 strncpy(addrInfo->address, address, MAX_ADDRESS_VAL_LEN);
1507 char *display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1509 strncpy(addrInfo->name, display_name, MAX_DISPLAY_NAME_LEN);
1513 addrInfo->contact_id = contact_id;
1515 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title), addrInfo, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_title_menu_gl_sel, viewer_play_data);
1518 /* set genlist size */
1519 if (addr_count >= VIEWER_TITLE_MENU_GENLIST_MAX_ITEM)
1520 evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * VIEWER_TITLE_MENU_GENLIST_MAX_ITEM * elm_config_scale_get());
1522 evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * addr_count * elm_config_scale_get());
1525 /** emit signal for changing state of title menu list to open */
1526 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,open", "");
1527 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
1529 viewer_play_data->title_menu_opened = true;
1531 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1534 void msg_ui_viewer_close_title_menu_genlist(void *data)
1536 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1537 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1538 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
1540 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,close", "");
1542 if (!viewer_play_data->playcontroller_opened)
1543 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
1545 Evas_Object *layout = elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.title.menu");
1547 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete box layout");
1548 evas_object_del(layout);
1551 viewer_play_data->title_menu_opened = false;
1552 viewer_play_data->title_box_layout = NULL;
1554 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1557 static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
1559 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1560 MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
1561 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !addrInfo, NULL);
1563 if (g_strcmp0(part, "elm.text") == 0) {
1564 return strdup((char *)data);
1565 } else if (g_strcmp0(part, "elm.text.1") == 0) {
1566 if (addrInfo->contact_id > 0 && addrInfo->name[0] != '\0')
1567 return strdup(addrInfo->name);
1568 else if (addrInfo->address[0] != '\0')
1569 return strdup (addrInfo->address);
1571 return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1572 } else if (g_strcmp0(part, "elm.text.2") == 0) {
1573 if (addrInfo->address[0] != '\0')
1574 return strdup(addrInfo->address);
1576 return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1579 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1584 static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part)
1586 // Currently, this function do nothing, caller_id concept is not determined
1590 static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info)
1592 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1593 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1594 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
1596 Elm_Object_Item *item = NULL;
1597 MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
1599 item = (Elm_Object_Item *)event_info;
1600 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !item, "Item is NULL or Item is not Message item\n");
1602 addrInfo = (MSG_VIEWER_ADDR_INFO *)elm_object_item_data_get(item);
1603 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, addrInfo == NULL, "item_data is NULL");
1605 elm_genlist_item_selected_set(item, 0);
1607 if (viewer_play_data->popup) {
1608 evas_object_del(viewer_play_data->popup);
1609 viewer_play_data->popup = NULL;
1610 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1613 Evas_Object *popup = NULL;
1614 Evas_Object *list = NULL;
1615 Evas_Object *btn_close = NULL;
1617 popup = elm_popup_add(viewer_play_data->main_window);
1618 elm_object_style_set(popup, "min_menustyle");
1619 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1621 btn_close = elm_button_add(popup);
1622 elm_object_style_set(btn_close, "popup_button/default");
1623 elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
1624 elm_object_part_content_set(popup, "button1", btn_close);
1625 evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_title_menu_popup_close_clicked_cb, viewer_play_data);
1627 list = elm_list_add(popup);
1628 elm_list_mode_set(list, ELM_LIST_EXPAND);
1630 evas_object_data_set(list, "viewer_play_data", viewer_play_data);
1632 if (msg_common_is_valid_phone_number(addrInfo->address)) {
1633 elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1634 elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1635 } else if (msg_common_is_valid_email_addr(addrInfo->address)) {
1636 elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1638 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
1641 if (addrInfo->contact_id> 0) {
1642 elm_object_part_text_set(popup, "title,text", addrInfo->name);
1643 elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1645 elm_object_part_text_set(popup, "title,text", addrInfo->address);
1646 elm_list_item_append(list, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1649 if (msg_common_is_valid_phone_number(addrInfo->address)) {
1651 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, addrInfo->address, &filter_id))
1652 elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1654 elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1658 elm_object_content_set(popup, list);
1659 evas_object_show(popup);
1661 viewer_play_data->popup = popup;
1662 viewer_play_data->popup_type = MSG_VIEWER_TITLE_MENU_POPUP;
1664 /*disconnect mouse handler*/
1665 msg_ui_viewer_disconnect_handler(viewer_play_data);
1667 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1670 static void __msg_ui_viewer_title_menu_del(void *data, Evas_Object *obj)
1672 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1673 MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
1674 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL!");
1679 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1682 static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1684 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1685 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1687 if (viewer_play_data->popup) {
1688 evas_object_del(viewer_play_data->popup);
1689 viewer_play_data->popup = NULL;
1690 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1693 /* connect handler again*/
1694 msg_ui_viewer_connect_handler(viewer_play_data);
1696 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1699 static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info)
1701 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1702 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
1703 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL");
1704 MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
1705 addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
1706 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL");
1708 if (viewer_play_data->popup) {
1709 evas_object_del(viewer_play_data->popup);
1710 viewer_play_data->popup = NULL;
1711 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1714 const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info);
1716 if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) {
1717 char telnum[255] = {0,};
1719 service_h svc_handle = NULL;
1721 service_create(&svc_handle);
1722 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1724 service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
1725 snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address); /* Number to make a call */
1726 service_set_uri(svc_handle, telnum);
1727 if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
1728 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service failed ret : %d", ret);
1730 msg_ui_viewer_disconnect_handler(viewer_play_data);
1731 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1732 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL;
1735 service_destroy(svc_handle);
1736 } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) {
1737 service_error_e err = SERVICE_ERROR_NONE;
1738 service_h svc_handle = NULL;
1739 char telnum[MAX_ADDRESS_VAL_LEN+5] = {0,};
1740 char contact_id[VIEWER_BUFFER_SIZE_64] = {0,};
1742 service_create(&svc_handle);
1743 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1745 snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address);
1746 snprintf(contact_id, sizeof(contact_id), "%d", addrInfo->contact_id);
1748 service_set_operation(svc_handle, "http://tizen.org/appcontrol/operation/vt");
1749 service_set_uri(svc_handle, telnum);
1750 service_add_extra_data(svc_handle, "ctindex", contact_id);
1751 err = service_send_launch_request(svc_handle, NULL, NULL);
1753 if (err == SERVICE_ERROR_NONE) {
1754 msg_ui_viewer_disconnect_handler(viewer_play_data);
1755 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1756 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
1758 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", err);
1761 service_destroy(svc_handle);
1762 } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */
1763 ui_gadget_h loaded_ug = NULL;
1764 char buf[DEF_BUF_LEN_D] = { 0, };
1765 service_h svc_handle = NULL;
1767 service_create(&svc_handle);
1768 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1770 if (strstr(addrInfo->address, "@")) {
1771 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
1772 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1773 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, addrInfo->address);
1775 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
1776 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1777 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, addrInfo->address);
1780 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
1783 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1784 msg_ui_viewer_disconnect_handler(viewer_play_data);
1785 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1786 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1789 service_destroy(svc_handle);
1790 } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) {
1791 ui_gadget_h loaded_ug = NULL;
1792 char contactId[DEF_BUF_LEN_S] = { 0, };
1793 char buf[DEF_BUF_LEN_D] = { 0, };
1794 service_h svc_handle = NULL;
1796 service_create(&svc_handle);
1797 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1799 snprintf(contactId, sizeof(contactId), "%d", addrInfo->contact_id);
1800 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
1802 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1803 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
1805 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
1808 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1809 msg_ui_viewer_disconnect_handler(viewer_play_data);
1810 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1811 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1814 service_destroy(svc_handle);
1815 } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) {
1816 service_h svc_handle = NULL;
1817 service_error_e svc_err = SERVICE_ERROR_NONE;
1819 service_create(&svc_handle);
1820 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1822 service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
1823 service_set_app_id(svc_handle, "email-composer-efl");
1824 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
1825 service_add_extra_data(svc_handle, SERVICE_DATA_TO, addrInfo->address);
1827 Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
1828 service_set_window(svc_handle, win_id);
1830 svc_err = service_send_launch_request(svc_handle, NULL, NULL);
1832 if (svc_err == SERVICE_ERROR_NONE) {
1833 msg_ui_viewer_disconnect_handler(viewer_play_data);
1834 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1835 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
1837 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", svc_err);
1840 service_destroy(svc_handle);
1841 } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK")) == 0) {
1843 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, addrInfo->address, &filter_id)) {
1844 msg_error_t err = MSG_SUCCESS;
1845 err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
1846 if (err != MSG_SUCCESS) {
1847 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
1851 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
1853 char *message_text = g_strdup_printf(szbuf, addrInfo->address);
1854 if (!message_text) {
1855 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1859 status_message_post(message_text);
1862 } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK")) == 0) {
1863 Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
1864 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1866 char *popup_text = NULL;
1867 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
1869 popup_text = g_strdup_printf(szbuf, addrInfo->address);
1871 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
1874 elm_object_text_set(popup, popup_text);
1877 Evas_Object *btn_ok = elm_button_add(popup);
1878 elm_object_style_set(btn_ok, "popup_button/default");
1879 elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
1880 elm_object_part_content_set(popup, "button1", btn_ok);
1881 evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_title_menu_block_ok_clicked_cb, viewer_play_data);
1882 evas_object_data_set(btn_ok, "addrInfo", addrInfo);
1884 Evas_Object *btn_cancel = elm_button_add(popup);
1885 elm_object_style_set(btn_cancel, "popup_button/default");
1886 elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
1887 elm_object_part_content_set(popup, "button2", btn_cancel);
1888 evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
1890 evas_object_show(popup);
1891 viewer_play_data->popup = popup;
1892 viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
1894 /* disconnect mouse handler */
1895 msg_ui_viewer_disconnect_handler(viewer_play_data);
1898 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1901 static void __msg_ui_viewer_title_menu_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1903 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1904 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1906 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1907 MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)evas_object_data_get(obj, "addrInfo");
1908 msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
1909 msg_error_t err = MSG_SUCCESS;
1911 if (viewer_play_data->popup) {
1912 evas_object_del(viewer_play_data->popup);
1913 viewer_play_data->popup = NULL;
1914 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1917 err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
1918 if (err != MSG_SUCCESS) {
1919 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
1920 msg_release_struct(&filter);
1924 err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, addrInfo->address, strlen(addrInfo->address));
1925 if (err != MSG_SUCCESS) {
1926 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
1927 msg_release_struct(&filter);
1931 err = msg_add_filter(viewer_play_data->msgHandle, filter);
1932 if (err != MSG_SUCCESS) {
1933 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
1934 msg_release_struct(&filter);
1938 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
1939 char *message_text = g_strdup_printf(szbuf, addrInfo->address);
1940 if (!message_text) {
1941 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1942 msg_release_struct(&filter);
1946 status_message_post(message_text);
1949 msg_release_struct(&filter);
1951 /* close title menu popup */
1952 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1957 void msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
1959 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1960 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1961 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1962 Evas_Object *popup = NULL;
1963 Evas_Object *box = NULL;
1964 Evas_Object *genlist = NULL;
1965 Evas_Object *btn_save = NULL;
1966 Evas_Object *btn_close = NULL;
1968 int total_media_count = 0;
1969 int popup_height = 0;
1971 /* destroy previous popup */
1972 if (viewer_play_data->popup) {
1973 evas_object_del(viewer_play_data->popup);
1974 viewer_play_data->popup = NULL;
1975 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1978 total_media_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
1981 popup = elm_popup_add(viewer_play_data->main_window);
1982 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1983 evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
1985 if (total_media_count > 3 )
1986 elm_object_style_set(popup, "menustyle");
1988 elm_object_style_set(popup, "min_menustyle");
1990 /* set popup title */
1991 elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_ATTACHMENTS"));
1993 /* set select all genlist item style */
1994 viewer_play_data->attach_sa_class.item_style = "1text.1icon.2";
1995 viewer_play_data->attach_sa_class.func.text_get = __msg_ui_viewer_save_attachments_sa_gl_text_get;
1996 viewer_play_data->attach_sa_class.func.content_get = __msg_ui_viewer_save_attachments_sa_gl_content_get;
1997 viewer_play_data->attach_sa_class.func.state_get = NULL;
1998 viewer_play_data->attach_sa_class.func.del = NULL;
2000 /* set genlist style */
2001 viewer_play_data->attach_item_class.item_style = "1text.2icon.2";
2002 viewer_play_data->attach_item_class.func.text_get = __msg_ui_viewer_save_attachments_gl_text_get;
2003 viewer_play_data->attach_item_class.func.content_get = __msg_ui_viewer_save_attachments_gl_content_get;
2004 viewer_play_data->attach_item_class.func.state_get = NULL;
2005 viewer_play_data->attach_item_class.func.del = NULL;
2007 /* create genlist */
2008 genlist = elm_genlist_add(viewer_play_data->main_window);
2009 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2010 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2011 evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
2013 /* add genlist item based on media count, if item's count is over 1 then 'select all' item should be inserted*/
2014 if (total_media_count > 1) {
2015 /* add Select all item */
2016 elm_genlist_item_append(genlist, &viewer_play_data->attach_sa_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_sa_gl_sel, NULL);
2018 /* add each item (order is inserted + attached) */
2019 for (index = 1; index < total_media_count+1; index++) {
2020 elm_genlist_item_append(genlist, &viewer_play_data->attach_item_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_gl_sel, NULL);
2023 /* add each item (order is inserted + attached) */
2024 for (index = 0; index < total_media_count; index++) {
2025 elm_genlist_item_append(genlist, &viewer_play_data->attach_item_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_gl_sel, NULL);
2029 /* add save button */
2030 btn_save = elm_button_add(popup);
2031 elm_object_style_set(btn_save, "popup_button/default");
2032 elm_object_text_set(btn_save, dgettext("sys_string", "IDS_COM_SK_SAVE"));
2033 elm_object_part_content_set(popup, "button1", btn_save);
2034 evas_object_smart_callback_add(btn_save, "clicked", __msg_ui_viewer_save_attachments_popup_save_clicked_cb, viewer_play_data);
2035 viewer_play_data->save_button = btn_save;
2036 elm_object_disabled_set(viewer_play_data->save_button, EINA_TRUE);
2038 /* add close button */
2039 btn_close = elm_button_add(popup);
2040 elm_object_style_set(btn_close, "popup_button/default");
2041 elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
2042 elm_object_part_content_set(popup, "button2", btn_close);
2043 evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb, viewer_play_data);
2045 /* set popup style */
2046 box = elm_box_add(viewer_play_data->main_window);
2047 popup_height = VIEWER_ATTACH_GL_ITEM_HEIGHT * ((total_media_count > 3) ? 4 : ((total_media_count > 1) ? total_media_count + 1 : total_media_count));
2048 evas_object_size_hint_min_set(box, 0, popup_height * elm_config_scale_get());
2049 evas_object_show(genlist);
2050 elm_box_pack_end(box, genlist);
2051 elm_object_content_set(popup, box);
2054 evas_object_show(popup);
2055 viewer_play_data->save_attachment_gl= genlist;
2056 viewer_play_data->popup = popup;
2057 viewer_play_data->popup_type = MSG_VIEWER_ATTACHMENTS_POPUP;
2059 /*disconnect mouse handler*/
2060 msg_ui_viewer_disconnect_handler(viewer_play_data);
2062 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2065 static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2067 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2068 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2071 int total_count = 0;
2072 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2074 if (viewer_play_data->popup) {
2075 evas_object_del(viewer_play_data->save_button);
2076 viewer_play_data->save_button = NULL;
2077 evas_object_del(viewer_play_data->popup);
2078 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2079 viewer_play_data->popup = NULL;
2080 viewer_play_data->sa_check = NULL;
2083 total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
2085 while (index < total_count) {
2086 if (index < viewer_play_data->insert_count)
2087 media_info = eina_list_nth(viewer_play_data->insert_list, index);
2088 else if (index < total_count)
2089 media_info = eina_list_nth(viewer_play_data->attach_list, index-viewer_play_data->insert_count);
2091 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!", index);
2093 if (media_info ) // disable check status
2094 media_info->isChecked = FALSE;
2099 viewer_play_data->isSelectAll = FALSE;
2101 /* connect handler again*/
2102 msg_ui_viewer_connect_handler(viewer_play_data);
2104 /* play viewer again if previous status was PLAY */
2105 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2106 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2107 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2112 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2115 static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2117 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2118 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2119 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2121 int attach_count = 0;
2122 int insert_count = 0;
2123 int total_count = 0;
2124 int selected_count = 0;
2127 int insert_index = 0;
2128 int attach_index = 0;
2129 int failed_count = 0;
2130 int saved_count = 0;
2132 if (viewer_play_data->popup) {
2133 evas_object_del(viewer_play_data->save_button);
2134 viewer_play_data->save_button = NULL;
2135 evas_object_del(viewer_play_data->popup);
2136 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2137 viewer_play_data->popup = NULL;
2138 viewer_play_data->sa_check = NULL;
2141 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_Info = NULL;
2143 insert_count = eina_list_count(viewer_play_data->insert_list);
2144 attach_count = eina_list_count(viewer_play_data->attach_list);
2145 total_count = insert_count + attach_count;
2147 while (index < total_count) {
2148 if (index < insert_count)
2149 media_Info = eina_list_nth(viewer_play_data->insert_list , insert_index++);
2150 else if (index < total_count)
2151 media_Info = eina_list_nth(viewer_play_data->attach_list , attach_index++);
2154 bool saveCondition = (viewer_play_data->isSelectAll) ? TRUE : (media_Info->isChecked ? TRUE : FALSE);
2156 if (saveCondition) {
2159 /*get default file path*/
2160 MSG_BOOL result = FALSE;
2161 char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
2163 result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
2165 char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
2166 snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, media_Info->pfile_name);
2167 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
2168 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", media_Info->pfile_path);
2170 char *result_path = msg_ui_viewer_util_copy_file(media_Info->pfile_path, dst_path);
2175 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
2182 //release check status
2183 media_Info->isChecked = FALSE;
2184 if (viewer_play_data->isSelectAll)
2185 viewer_play_data->isSelectAll = FALSE;
2188 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
2196 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Selected(%d) / Total(%d) [inserted(%d),attached(%d)]", selected_count, total_count, insert_count, attach_count);
2197 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Saved(%d), Failed(%d)", saved_count, failed_count);
2199 /* show indicator status text */
2200 if (failed_count == selected_count) {
2201 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2203 if (selected_count == 1 && saved_count == 1) {
2204 status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
2206 char buf[DEF_BUF_LEN_S + 1] = {0, };
2207 snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, selected_count);
2208 status_message_post(buf);
2212 /* connect handler again*/
2213 msg_ui_viewer_connect_handler(viewer_play_data);
2215 /* play viewer again if previous status was PLAY */
2216 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2217 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2218 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2223 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2226 static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part)
2228 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2229 int index = (int)data;
2231 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2233 if (!strcmp(part, "elm.text")) {
2235 return strdup(dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
2237 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid index of select all(%d)", index);
2244 static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part)
2246 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2247 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2248 int index = (int)data;
2251 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2253 if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
2254 check = elm_check_add(obj);
2255 elm_check_state_pointer_set(check, &(viewer_play_data->isSelectAll));
2256 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2257 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
2258 evas_object_smart_callback_add(check, "changed", __msg_ui_viewer_save_attachments_sa_check_changed_cb, viewer_play_data);
2259 viewer_play_data->sa_check = check;
2267 static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
2269 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2270 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2272 Eina_List * realized_list;
2273 Elm_Object_Item *it;
2277 int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
2278 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "total Count = %d", total_count);
2279 checked = elm_check_state_get(obj);
2280 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "checked status = %d", checked);
2281 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2283 for (i = 0; i < total_count; i++) {
2284 if (i < viewer_play_data->insert_count) {
2285 media_info = eina_list_nth(viewer_play_data->insert_list, i);
2286 media_info->isChecked = checked;
2287 } else if (i < total_count) {
2288 media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2289 media_info->isChecked = checked;
2291 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2295 // Update realized items only
2296 realized_list = elm_genlist_realized_items_get(viewer_play_data->save_attachment_gl);
2297 EINA_LIST_FOREACH(realized_list, l, it) {
2298 elm_genlist_item_update(it);
2303 static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info)
2305 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2306 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2307 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2310 int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
2312 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
2313 MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
2316 index = (int)elm_object_item_data_get(item);
2317 elm_genlist_item_selected_set(item, EINA_FALSE);
2319 viewer_play_data->isSelectAll = !viewer_play_data->isSelectAll;
2321 //check state changed cb will be called
2322 elm_check_state_set(viewer_play_data->sa_check, viewer_play_data->isSelectAll);
2323 elm_genlist_item_update(item);
2325 if (total_count > 1) {
2326 for (i = 0; i < total_count; i++) {
2327 if (i < viewer_play_data->insert_count) {
2328 tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
2330 } else if (i < total_count) {
2331 tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2333 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2336 elm_check_state_set(tmp_media_info->check_item, (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE);
2337 tmp_media_info->isChecked = (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE;
2340 elm_object_disabled_set(viewer_play_data->save_button, (viewer_play_data->isSelectAll) ? EINA_FALSE : EINA_TRUE);
2344 static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part)
2346 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2347 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2348 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
2350 int index = (int) data;
2352 int insert_count = viewer_play_data->insert_count;
2353 int attach_count = viewer_play_data->attach_count;
2354 int total_count = insert_count + attach_count;
2355 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2357 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2359 realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item
2362 if (realIndex < 0 ) {
2363 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
2367 if (!strcmp(part, "elm.text")) {
2368 if (realIndex < insert_count) {
2369 media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
2370 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[INSERT MEDIA] name is = %s", media_info->pfile_name);
2371 } else if (realIndex < insert_count+attach_count) {
2372 media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
2373 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ATTACH MEDIA] name is = %s", media_info->pfile_name);
2376 return strdup(media_info->pfile_name);
2381 static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part)
2383 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2384 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2385 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
2386 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2387 int index = (int)data;
2389 int realIndex = index-1;
2390 int insert_count = viewer_play_data->insert_count;
2391 int attach_count = viewer_play_data->attach_count;
2392 int total_count = insert_count + attach_count;
2394 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2396 realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item
2399 if (realIndex < 0 ) {
2400 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
2404 if (realIndex < insert_count) {
2405 media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
2406 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
2407 } else if (realIndex < total_count) {
2408 media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
2409 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
2412 if (strcmp(part, "elm.icon.1") == 0) {
2413 check = elm_check_add(obj);
2414 //set the State pointer to keep the current UI state of Checkbox.
2415 elm_check_state_pointer_set(check, &media_info->isChecked);
2416 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2417 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
2419 media_info->check_item = check;
2422 } else if (strcmp(part, "elm.icon.2") == 0) {
2423 Evas_Object *image = NULL;
2425 image = elm_icon_add(obj);
2427 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info->pfile_path = %s", media_info->pfile_path);
2429 /*set attach file icon*/
2430 if (media_info->media_type == MSG_VIEWER_MEDIA_IMG ||
2431 media_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
2432 elm_image_file_set(image, media_info->pfile_path, NULL);
2433 } else if (media_info->media_type == MSG_VIEWER_MEDIA_DRM) {
2434 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
2436 if (strlen(media_info->pfile_path)) {
2437 const char *icon_path = NULL;
2439 icon_path = msg_common_get_file_icon(media_info->pfile_path);
2441 elm_image_file_set(image, MSG_IMAGES_EDJ, icon_path);
2443 D_EMSG("icon_path is NULL");
2444 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
2447 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
2453 evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2457 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
2463 static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info)
2465 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2466 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2467 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2472 int insert_count = viewer_play_data->insert_count;
2473 int attach_count = viewer_play_data->attach_count;
2474 int total_count = insert_count + attach_count;
2475 bool isAllSelected = TRUE;
2476 bool isNoneSelected = TRUE;
2478 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
2479 MSG_VIEWER_ATTACH_MEDIA_INFO_S *sel_media_info = NULL;
2480 MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
2483 index = (int)elm_object_item_data_get(item);
2484 realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item
2487 if (realIndex < 0 ) {
2488 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
2492 elm_genlist_item_selected_set(item, EINA_FALSE);
2494 if (realIndex < insert_count) {
2495 sel_media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
2496 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
2498 sel_media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
2499 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
2502 // toggle check status
2503 sel_media_info->isChecked = !sel_media_info->isChecked;
2505 elm_genlist_item_update(item);
2507 //check condition for set select all item
2508 if (total_count > 1 && sel_media_info->isChecked) {
2510 for (i = 0; i < total_count; i++) {
2511 if (i < viewer_play_data->insert_count) {
2512 tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
2513 if (!tmp_media_info->isChecked) {
2514 isAllSelected = FALSE;
2517 } else if (i < total_count) {
2518 tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2519 if (!tmp_media_info->isChecked) {
2520 isAllSelected = FALSE;
2524 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2528 if (isAllSelected) {
2529 elm_check_state_set(viewer_play_data->sa_check, EINA_TRUE);
2530 viewer_play_data->isSelectAll = EINA_TRUE;
2534 // check condition for release select all item
2535 if (total_count > 1 && !sel_media_info->isChecked && viewer_play_data->isSelectAll) {
2536 elm_check_state_set(viewer_play_data->sa_check, EINA_FALSE);
2537 viewer_play_data->isSelectAll = EINA_FALSE;
2540 // check condition for enable save button item
2541 for (i = 0; i < total_count; i++) {
2542 if (i < viewer_play_data->insert_count) {
2543 tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
2544 if (tmp_media_info->isChecked) {
2545 isNoneSelected = FALSE;
2548 } else if (i < total_count) {
2549 tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2550 if (tmp_media_info->isChecked) {
2551 isNoneSelected = FALSE;
2555 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2558 elm_object_disabled_set(viewer_play_data->save_button, (isNoneSelected) ? EINA_TRUE : EINA_FALSE);
2562 static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data)
2564 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2565 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2566 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->attach_list == NULL);
2568 int attach_count = eina_list_count(viewer_play_data->attach_list);
2570 int attach_index = 0;
2571 int failed_count = 0;
2572 int saved_count = 0;
2574 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttachInfo = NULL;
2576 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attach_cnt = %d", attach_count);
2578 while (index < attach_count) {
2579 pAttachInfo = eina_list_nth(viewer_play_data->attach_list , attach_index++);
2582 /*get default file path*/
2583 MSG_BOOL result = FALSE;
2584 char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
2586 result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
2588 char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
2589 snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttachInfo->pfile_name);
2590 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
2591 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", pAttachInfo->pfile_path);
2593 char *result_path = msg_ui_viewer_util_copy_file(pAttachInfo->pfile_path, dst_path);
2598 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
2606 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
2615 /* show indicator status text */
2616 if (failed_count == attach_count) {
2617 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2619 if (attach_count == 1 && failed_count == 0) {
2620 status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
2622 char buf[DEF_BUF_LEN_S + 1] = {0, };
2623 snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, attach_count);
2624 status_message_post(buf);
2628 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2631 void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2633 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2634 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2635 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
2636 MSG_PLAY_DATA_S *viewer_play_data = pAttach_info->viewer_play_data;
2638 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, "viewer_play_data is NULL");
2640 if (strlen(pAttach_info->pfile_path) == 0) {
2641 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pfile_path is NULL");
2642 if (pAttach_info->isSaveAll == FALSE) {
2643 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2645 __msg_ui_viewer_help_page_save_all_item(viewer_play_data);
2649 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pAttach_info->pfile_path);
2650 MSG_BOOL result = 0;
2651 MSG_BOOL issave = TRUE;
2652 char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
2654 /*get default file path*/
2655 result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
2657 char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
2658 snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttach_info->pfile_name);
2659 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path);
2661 char *result_path = msg_ui_viewer_util_copy_file(pAttach_info->pfile_path, dst_path);
2665 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed, [src] = %s, [dst] = %s", pAttach_info->pfile_path, dst_path);
2669 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed");
2670 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2675 status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
2677 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2680 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2683 static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2685 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2686 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2687 const char *label = elm_object_item_text_get((Elm_Object_Item *)event_info);
2689 if (viewer_play_data->popup) {
2690 evas_object_del(viewer_play_data->popup);
2691 viewer_play_data->popup = NULL;
2692 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2695 if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB")) == 0) {
2696 msg_ui_viewer_copy_message_text_to_clipboard(viewer_play_data);
2698 /* play viewer again if previous status was PLAY */
2699 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2700 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2701 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2705 } else if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB")) == 0) {
2706 msg_ui_viewer_create_msg_detail_popup(viewer_play_data);
2708 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid list type");
2713 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2716 static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
2718 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2719 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2721 if (viewer_play_data->popup) {
2722 evas_object_del(viewer_play_data->popup);
2723 viewer_play_data->popup = NULL;
2724 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2727 /* play viewer again if previous status was PLAY */
2728 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2729 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2730 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2735 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2738 static void __msg_ui_viewer_protection_cb(void *data, Evas_Object *obj, void *event_info)
2740 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2741 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
2743 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2744 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
2745 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
2747 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
2748 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_main_data == NULL);
2750 msg_error_t err = MSG_SUCCESS;
2751 bool is_protected = false;
2753 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
2755 /* get lock status and change status */
2756 err = msg_update_protected_status(viewer_play_data->msgHandle, viewer_play_data->msgID, ((is_protected) ? false : true));
2758 /* update message info */
2759 if (err != MSG_SUCCESS) {
2760 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_update_protected_status is failed");
2764 msg_set_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, !is_protected);
2766 /* delete ctx popup */
2767 if (viewer_play_data->popup) {
2768 evas_object_del(viewer_play_data->popup);
2769 viewer_play_data->popup = NULL;
2770 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2773 /* signal emit for showing/hiding lock icon */
2775 edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/hide", "*");
2777 edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/show", "*");
2779 /* play viewer again if previous status was PLAY */
2780 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2781 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2782 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2787 /* send refresh conversation result to bubble-composer ug */
2788 char str_id[DEF_BUF_LEN] = {0,};
2789 service_h svc_handle = NULL;
2791 service_create(&svc_handle);
2792 if (svc_handle < 0 || svc_handle == NULL) {
2793 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
2797 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_REFRESH_CONV);
2799 snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
2800 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
2802 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
2804 service_destroy(svc_handle);
2806 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);