6b5e3b7a44113b4758cf04e5364ce8e32cbb9b50
[apps/home/message-app.git] / viewer / src / msg-ui-viewer-play-view-callback.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://floralicense.org/license
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #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"
22
23 #include <contacts.h>
24 #include "appsvc.h"
25 #include <utilX.h>
26 #include <app_service.h>
27 #include <syspopup_caller.h>
28 #include <status.h>
29
30 /*==================================================================================================
31  *                                                                      DEFINITIONS
32  *==================================================================================================*/
33 Elm_Genlist_Item_Class itc_popup = {0,};        /** itc for list style popup */
34
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);
46
47 /*attachment list for help page */
48 static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data);
49
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);
53
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);
68
69 /*==================================================================================================
70  *                                                              FUNCTION IMPLEMENTATIONS
71  *================================================================================================*/
72 Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event)
73 {
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;
81         int start_point = 0;
82         int end_point = 0;
83         int screen_width = 0;
84         int rotate = 0;
85
86         play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
87         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
88
89         /*get start and end point according to rotation*/
90         rotate = elm_win_rotation_get(viewer_play_data->main_window);
91         if (rotate == 0) {      /*PORTRAIT mode*/
92                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT mode");
93                 start_point = viewer_play_data->m_x;
94                 end_point = ev->x;
95                 screen_width = viewer_play_data->window_width;
96         } else if (rotate == 180) {
97                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT reverse mode");
98                 start_point = ev->x;
99                 end_point = viewer_play_data->m_x;
100                 screen_width = viewer_play_data->window_width;
101         } else if (rotate == 90) {      /*LANDSCAPE mode*/
102                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE mode");
103                 start_point = ev->y;
104                 end_point = viewer_play_data->m_y;
105                 screen_width = viewer_play_data->window_height;
106         } else if (rotate == 270) {
107                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE reverse mode");
108                 start_point = viewer_play_data->m_y;
109                 end_point = ev->y;
110                 screen_width = viewer_play_data->window_height;
111         } else {
112                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
113                 return FALSE;
114         }
115         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start_point = %d, end_point = %d, screen_width = %d", start_point, end_point, screen_width);
116
117         if (end_point - start_point > screen_width / 4) {
118                 /* prev*/
119                 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
120                 if (pageIdx >= 0) {
121                         if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
122                                 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
123                                 if (err != MSG_SMIL_SUCCESS) {
124                                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
125                                 } else {
126                                         /* hide menu title genlist if player status is changed to play */
127                                         if (viewer_play_data->title_menu_opened) {
128                                                 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
129
130                                                 /* play viewer again if previous status was PLAY */
131                                                 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
132                                                         if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
133                                                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
134                                                                 return EINA_FALSE;
135                                                         }
136                                                 }
137                                         }
138                                         /* show play controller */
139                                         if (viewer_play_data->play_controller) {
140                                                 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
141                                                 evas_object_show(viewer_play_data->play_controller);
142                                                 viewer_play_data->playcontroller_opened = true;
143                                                 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
144
145                                                 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
146                                         }
147                                         /* set progressbar and progress text sync */
148                                         if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
149                                                 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
150                                 }
151                         }
152                 }
153         } else if (start_point - end_point > screen_width / 4) {
154                 /*next*/
155                 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
156                 int total_page = viewer_play_data->smil_eventStatus->pageCnt;
157                 if (total_page >= pageIdx) {
158                         if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
159                                 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
160                                 if (err != MSG_SMIL_SUCCESS) {
161                                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
162                                 } else {
163                                         /* hide menu title genlist if player status is changed to play */
164                                         if (viewer_play_data->title_menu_opened) {
165                                                 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
166
167                                                 /* play viewer again if previous status was PLAY */
168                                                 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
169                                                         if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
170                                                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
171                                                                 return EINA_FALSE;
172                                                         }
173                                                 }
174                                         }
175                                         /* show play controller */
176                                         if (viewer_play_data->play_controller) {
177                                                 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
178                                                 evas_object_show(viewer_play_data->play_controller);
179                                                 viewer_play_data->playcontroller_opened = true;
180                                                 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
181
182                                                 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
183                                         }
184                                         /* set progressbar and progress text sync */
185                                         if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
186                                                 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
187                                 }
188                         }
189                 }
190         }
191
192         return EINA_TRUE;
193 }
194
195 Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event)
196 {
197         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
198         MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
199         MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
200         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
201         Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
202
203         viewer_play_data->m_x = ev->x;
204         viewer_play_data->m_y = ev->y;
205
206         if (viewer_play_data->mouse_up_event_handler) {
207                 ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
208                 viewer_play_data->mouse_up_event_handler = NULL;
209         }
210         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);
211
212         return EINA_TRUE;
213 }
214
215 void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
216 {
217         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
218         MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
219         MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
220         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
221         Evas_Event_Mouse_Down *ev = event_info;
222
223         viewer_play_data->ctrl_start_x = ev->canvas.x;
224         viewer_play_data->ctrl_start_y = ev->canvas.y;
225 }
226
227 void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
228 {
229         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
230         MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
231         MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
232         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
233         Evas_Event_Mouse_Up *ev = event_info;
234
235         viewer_play_data->ctrl_end_x = ev->canvas.x;
236         viewer_play_data->ctrl_end_y = ev->canvas.y;
237
238         int screen_width = 0;
239         int screen_height = 0;
240         int rotate = 0;
241
242         //get screen size
243         rotate = elm_win_rotation_get(viewer_play_data->main_window);
244         if (rotate == 0 || rotate == 180) {
245                 screen_width = viewer_play_data->window_width;
246                 screen_height = viewer_play_data->window_height;
247         } else if (rotate == 90 || rotate == 270) {
248                 screen_width = viewer_play_data->window_height;
249                 screen_height = viewer_play_data->window_width;
250         } else {
251                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
252                 return;
253         }
254
255         //check only case for playcontroller is not opened, the other case is checked within msg_ui_viewer_play_layout_clicked_cb
256         if (!viewer_play_data->playcontroller_opened && !viewer_play_data->title_menu_opened) {
257                 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 ) {
258                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is tapped and play controller should be displayed");
259
260                         if (viewer_play_data->play_controller) {
261                                 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
262                                 evas_object_show(viewer_play_data->play_controller);
263                                 viewer_play_data->playcontroller_opened = true;
264                                 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
265                                 //create play controller timer
266                                 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
267                         }
268                 }
269         } else if (viewer_play_data->playcontroller_opened) {
270                 /* up/down drag condition - close play controller */
271                 if (abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) > screen_height / 5) {
272                         elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
273                         evas_object_hide(viewer_play_data->play_controller);
274                         viewer_play_data->playcontroller_opened = false;
275                         elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
276
277                         msg_ui_viewer_destroy_play_controller_timer(viewer_play_data);
278                 }
279         }
280 }
281
282 void msg_ui_viewer_play_layout_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
283 {
284         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
285         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
286         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
287
288         if (viewer_play_data->title_menu_opened) {
289                 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
290
291                 /* play viewer again if previous status was PLAY */
292                 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
293                         if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
294                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
295                                 return;
296                         }
297                 }
298         } else if (viewer_play_data->playcontroller_opened) {
299                 int screen_width = 0;
300                 int screen_height = 0;
301                 int rotate = 0;
302
303                 //get screen size
304                 rotate = elm_win_rotation_get(viewer_play_data->main_window);
305                 if (rotate == 0 || rotate == 180) {
306                         screen_width = viewer_play_data->window_width;
307                         screen_height = viewer_play_data->window_height;
308                 } else if (rotate == 90 || rotate == 270) {
309                         screen_width = viewer_play_data->window_height;
310                         screen_height = viewer_play_data->window_width;
311                 } else {
312                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
313                         return;
314                 }
315
316                 if (abs(viewer_play_data->ctrl_start_x-viewer_play_data->ctrl_end_x) < screen_width / 10 &&
317                         abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) < screen_height / 10 &&
318                         viewer_play_data->ctrl_end_y < screen_height-(VIEWER_NAVIFRAME_BOTTOM_H+VIEWER_PLAY_CONTROLLER_HEIGHT)) {
319                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is now displayed and play controller should be hided");
320
321                         elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
322                         elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
323                         evas_object_hide(viewer_play_data->play_controller);
324                         viewer_play_data->playcontroller_opened = false;
325                         //destroy play controller timer
326                         msg_ui_viewer_destroy_play_controller_timer(viewer_play_data);
327                 }
328         }
329 }
330
331 MSG_SMIL_ERROR_E msg_ui_viewer_set_entry_handle_cb(MSG_PLAY_DATA_S *data, void *entry)
332 {
333         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
334         MSG_UI_RETV_IF(MSG_UI_LEVEL_ASSERT, data == NULL, MSG_ERR_SMIL_UNKNOWN);
335         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
336         bool isHelpText = false;
337
338         viewer_play_data->render_entry = (Evas_Object *)entry;
339
340         if (viewer_play_data->render_entry) {
341                 if (viewer_play_data->smil_eventStatus) {
342                         isHelpText = (viewer_play_data->smil_eventStatus->isHelpSlide) ? true : false;
343                 } else {
344                         SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
345                         isHelpText = (!slide || !slide->commonData) ? false : ((slide->commonData->pageCnt == 0) ? true : false);
346                 }
347                 MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
348                 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE);
349         }
350
351         return MSG_SMIL_SUCCESS;
352 }
353
354 void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info)
355 {
356         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
357         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
358         MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
359
360         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->launch_cmd : %d", viewer_play_data->launch_cmd);
361
362         /*prevent invalid double pressing button event after launching ug or app(like call, vtcall)*/
363         if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE)
364                 return;
365
366         if (viewer_play_data->title_menu_opened)
367                 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
368
369         if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
370                 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
371                 if (err != MSG_SMIL_SUCCESS) {
372                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
373                 }
374
375                 viewer_play_data->status = MSG_VIEWER_STOP;
376                 msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
377         }
378
379         msg_ui_viewer_disconnect_handler(viewer_play_data);
380
381         if (!viewer_play_data->del_idler)
382                 viewer_play_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_play_data->viewer_main);
383
384         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
385 }
386
387 void msg_ui_viewer_title_button_clicked_cb(void * data, Evas_Object * obj, void * event_info)
388 {
389         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
390         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
391         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
392
393         if (viewer_play_data->title_menu_opened) {
394                 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
395
396                 /* play viewer again if previous status was PLAY */
397                 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
398                         if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
399                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
400                                 return;
401                         }
402                 }
403         } else {
404                 msg_ui_viewer_open_title_menu_genlist(viewer_play_data);
405
406                 viewer_play_data->previous_status = viewer_play_data->status;
407                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
408
409                 /* set player state to pause and update icon */
410                 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
411                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_viewer_command_play_pause is failed");
412                         return;
413                 }
414         }
415
416         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
417 }
418
419 void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info)
420 {
421         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
422         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
423         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
424         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
425
426         /* check media count */
427         if (viewer_play_data->insert_count + viewer_play_data->attach_count == 0) {
428                 msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_NO_ATTACHMENTS"));
429                 return;
430         }
431
432         /* close title menu list if exist, else pause SMIL and save previous status */
433         if (viewer_play_data->title_menu_opened) {
434                 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
435         } else {
436                 viewer_play_data->previous_status = viewer_play_data->status;
437                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
438
439                 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) { // pause
440                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
441                         return;
442                 }
443         }
444
445         /* create popup for save attachments and insert items */
446         msg_ui_viewer_create_save_attachments_popup(viewer_play_data);
447
448         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
449 }
450
451 void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_info)
452 {
453         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
454         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
455         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
456         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
457         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
458
459         if (viewer_play_data->popup) {
460                 evas_object_del(viewer_play_data->popup);
461                 viewer_play_data->popup = NULL;
462                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
463         }
464
465         Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
466         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
467
468         /* Add protection on/off menu */
469         bool is_protected = false;
470         msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
471         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"));
472
473         Evas_Object *btn_ok = elm_button_add(popup);
474         elm_object_style_set(btn_ok, "popup_button/default");
475         elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
476         elm_object_part_content_set(popup, "button1", btn_ok);
477         evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_delete_ok_clicked_cb, viewer_play_data);
478
479         Evas_Object *btn_cancel = elm_button_add(popup);
480         elm_object_style_set(btn_cancel, "popup_button/default");
481         elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
482         elm_object_part_content_set(popup, "button2", btn_cancel);
483         evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
484
485         evas_object_show(popup);
486         viewer_play_data->popup = popup;
487         viewer_play_data->popup_type = MSG_VIEWER_DELETE_POPUP;
488
489         /*disconnect mouse handler*/
490         msg_ui_viewer_disconnect_handler(viewer_play_data);
491
492         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
493 }
494
495 static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
496 {
497         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
498         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
499
500         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
501         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
502         char str_id[DEF_BUF_LEN] = {0,};
503
504         if (viewer_play_data->popup) {
505                 evas_object_del(viewer_play_data->popup);
506                 viewer_play_data->popup = NULL;
507                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
508         }
509
510         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete msg-id is %d", viewer_play_data->msgID);
511
512         if (viewer_play_data->msg_box_viewer) {
513                 if (msg_delete_message(viewer_play_data->msgHandle, viewer_play_data->msgID) == MSG_SUCCESS) {
514                         status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED"));
515                 } else {
516                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_message is failed");
517                         status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
518                         return;
519                 }
520
521         } else {
522                 service_h svc_handle = NULL;
523
524                 service_create(&svc_handle);
525                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
526
527                 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_DELETE_MSG);
528
529                 snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
530                 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
531
532                 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
533                 service_destroy(svc_handle);
534         }
535
536         /*destroy viewer*/
537         ug_destroy_me(viewer_main_data->viewer_ug);
538
539         return;
540 }
541
542 static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
543 {
544         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
545         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
546
547         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
548
549         if (viewer_play_data->popup) {
550                 evas_object_del(viewer_play_data->popup);
551                 viewer_play_data->popup = NULL;
552                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
553         }
554
555         /* connect handler again*/
556         msg_ui_viewer_connect_handler(viewer_play_data);
557
558         /* play viewer again if previous status was PLAY */
559         if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
560                 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
561                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
562                         return;
563                 }
564         }
565 }
566
567 void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_info)
568 {
569         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
570         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
571         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
572         char buf[DEF_BUF_LEN_S] = { 0, };
573         service_h svc_handle;
574
575         if (viewer_play_data->popup) {
576                 evas_object_del(viewer_play_data->popup);
577                 viewer_play_data->popup = NULL;
578                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
579         }
580
581         /* create and call composer-ug */
582         if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
583                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
584         } else {
585                 snprintf(buf, sizeof(buf), "%d", viewer_play_data->msgID);
586                 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, buf);
587                 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_FORWARD);
588                 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FROM, MSG_BUNDLE_VALUE_INTERNAL);
589                 ui_gadget_h loaded_ug;
590
591                 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);
592
593                 if (loaded_ug) {
594                         msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
595                         msg_ui_viewer_disconnect_handler(viewer_play_data);
596                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
597                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
598                 }
599
600                 service_destroy(svc_handle);
601         }
602
603         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
604 }
605
606 void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_info)
607 {
608         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
609         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
610         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
611         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
612         char str_id[DEF_BUF_LEN] = {0,};
613
614         if (viewer_play_data->popup) {
615                 evas_object_del(viewer_play_data->popup);
616                 viewer_play_data->popup = NULL;
617                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
618         }
619
620         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed msg-id is %d", viewer_play_data->msgID);
621
622         service_h svc_handle = NULL;
623         service_create(&svc_handle);
624         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
625
626         service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_RESEND);
627
628         snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
629         service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
630
631         ug_send_result(viewer_main_data->viewer_ug, svc_handle);
632         service_destroy(svc_handle);
633
634         /*destroy viewer*/
635         ug_destroy_me(viewer_main_data->viewer_ug);
636
637         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
638 }
639
640 void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_info)
641 {
642         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
643         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
644         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
645         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
646         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
647
648         int thread_id;
649         msg_error_t err = MSG_SUCCESS;
650         service_h svc_handle;
651
652         if (viewer_play_data->popup) {
653                 evas_object_del(viewer_play_data->popup);
654                 viewer_play_data->popup = NULL;
655                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
656         }
657
658         /* get thread id value to check whether viewer is launched from bubble-composer or other external app(ug) */
659         err = msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
660
661         /* back to bubble-composer and request to show keypad */
662         if (err == MSG_SUCCESS && thread_id > 0) {
663                 service_create(&svc_handle);
664                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
665
666                 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_REPLY);
667                 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
668
669                 service_destroy(svc_handle);
670
671                 /*destroy viewer*/
672                 ug_destroy_me(viewer_main_data->viewer_ug);
673         } else {        /* create new composer with reply number */
674                 service_create(&svc_handle);
675                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
676
677                 char *reply_addr = NULL;
678                 int contact_id = 0;
679                 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &reply_addr, &contact_id);
680
681                 if (reply_addr) {
682                         service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, reply_addr);
683                         free(reply_addr);
684                 }
685
686                 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);
687
688                 if (loaded_ug) {
689                         msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
690                         msg_ui_viewer_disconnect_handler(viewer_play_data);
691                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
692                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
693                 }
694
695                 service_destroy(svc_handle);
696         }
697
698         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
699 }
700
701 void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info)
702 {
703         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
704         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
705         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
706         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
707         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
708
709         MSG_BOOL hasText = FALSE;
710         int page_count = 0;
711         int media_count = 0;
712         int folder_id = MSG_MAX_FOLDER_ID;
713
714         if (viewer_play_data->popup) {
715                 evas_object_del(viewer_play_data->popup);
716                 viewer_play_data->popup = NULL;
717                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
718         }
719
720         /* set current status to previous status */
721         viewer_play_data->previous_status = viewer_play_data->status;
722         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
723
724         /* set player state to pause*/
725         if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
726                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
727                 return;
728         }
729
730         Evas_Object *ctx_popup = NULL;
731         ctx_popup = elm_ctxpopup_add(viewer_play_data->navi_frame);
732         evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_viewer_more_ctxpopup_dismissed_cb, (void *)viewer_play_data);
733
734         /* add delete menu */
735         elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_OPT_DELETE"), NULL, msg_ui_viewer_delete_button_cb, (void *)viewer_play_data);
736
737         /* Get folder ID and Add Resend / Reply menu */
738         msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
739
740         if (folder_id == MSG_OUTBOX_ID)
741                 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_SK_RESEND"), NULL, msg_ui_viewer_resend_button_cb, (void *)viewer_play_data);
742         else if (folder_id == MSG_INBOX_ID)
743                 elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_SK_REPLY"), NULL, msg_ui_viewer_reply_button_cb, (void *)viewer_play_data);
744
745         /* Add FORWARD menu */
746         elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_BODY_FORWARD"), NULL, msg_ui_viewer_forward_button_cb, (void *)viewer_play_data);
747
748         /* Add protection on/off menu */
749         bool is_protected = false;
750         msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
751         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Lock status of current message %d", is_protected);
752
753         if (is_protected)
754                 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_OFF"), NULL, __msg_ui_viewer_protection_cb, (void *)viewer_play_data);
755         else
756                 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_ON"), NULL, __msg_ui_viewer_protection_cb, (void *)viewer_play_data);
757
758         /* Add Copy Message text menu */
759         if (viewer_play_data->smil_eventStatus != NULL) {
760                 /* get msg body */
761                 msg_list_handle_t pagelist_info = NULL;
762                 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
763                 page_count = msg_list_length(pagelist_info);
764
765                 msg_struct_t page_info = NULL;
766                 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, viewer_play_data->smil_eventStatus->pageIdx);
767                 if (page_info) {
768                         int i = 0;
769                         msg_list_handle_t medialist_info = NULL;
770                         msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
771                         media_count = msg_list_length(medialist_info);
772
773                         for (i = 0; i < media_count; i++) {
774                                 int mediaType;
775                                 msg_struct_t media_info = NULL;
776                                 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, i);
777
778                                 if (media_info == NULL) {
779                                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "getting media has failed");
780                                         continue;
781                                 }
782
783                                 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
784                                 if (mediaType != MMS_SMIL_MEDIA_TEXT)
785                                         continue;
786
787                                 hasText = TRUE;
788                         }
789                 }
790         }
791
792         if (hasText)
793                 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);
794
795         /* Add view message details menu */
796         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);
797
798         // move ctx popup
799         Evas_Coord x, y, w, h;
800         evas_object_geometry_get(viewer_play_data->more_btn, &x, &y, &w, &h);
801         evas_object_move(ctx_popup, x, y);
802         evas_object_show(ctx_popup);
803
804         viewer_play_data->popup = ctx_popup;
805         viewer_play_data->popup_type = MSG_VIEWER_MENU_CTX_POPUP;
806
807         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
808 }
809
810 void msg_ui_viewer_volume_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
811 {
812         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
813         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
814         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
815
816         syspopup_launch("volume", NULL);
817
818         //create play controller timer repeatedly
819         msg_ui_viewer_create_play_controller_timer(viewer_play_data);
820 }
821
822 void msg_ui_viewer_prev_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
823 {
824         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
825         MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
826         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
827         SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
828         MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
829
830         play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
831         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
832
833         MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
834
835         if (!strcmp(emission, "prev_clicked")) {
836                 /* prev*/
837                 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
838                 if (pageIdx >= 0) {
839                         if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
840                                 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
841                                 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
842                                 if (err != MSG_SMIL_SUCCESS) {
843                                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
844                                 } else {
845                                         //set progressbar and progress text sync
846                                         if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
847                                                 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
848                                 }
849                         }
850                 }
851
852                 //create play controller timer repeatedly
853                 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
854
855                 /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
856                 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
857                         if (viewer_play_data->title_menu_opened)
858                                 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
859                 }
860         }
861
862         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
863 }
864
865 void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
866 {
867         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
868         MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
869         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
870
871         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))
872                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
873
874         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
875 }
876
877 void msg_ui_viewer_next_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
878 {
879         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
880         MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
881         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
882
883         if (!strcmp(emission, "next_clicked"))
884         {
885                 SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
886                 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
887
888                 play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
889                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
890
891                 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
892                 /*next*/
893                 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
894                 int total_page = viewer_play_data->smil_eventStatus->pageCnt;
895                 if (total_page >= pageIdx) {
896                         if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
897                                 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
898                                 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
899                                 if (err != MSG_SMIL_SUCCESS) {
900                                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
901                                 } else {
902                                         //set progressbar and progress text sync
903                                         if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
904                                                 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
905                                 }
906                         }
907                 }
908
909                 //create play controller timer repeatedly
910                 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
911
912                 /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
913                 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
914                         if (viewer_play_data->title_menu_opened)
915                                 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
916                 }
917         }
918 }
919
920 void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info)
921 {
922         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
923         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
924         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
925         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
926         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
927         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
928
929         service_error_e svc_err = SERVICE_ERROR_NONE;
930
931         msg_struct_list_s *addr_list = NULL;
932         msg_get_list_handle(viewer_play_data->msg_t, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
933
934         int addr_count = addr_list->nCount;     //get address count
935
936         if (addr_count == 1) {
937                 service_h svc_handle = NULL;
938                 msg_struct_t addr_info = NULL;
939                 char szAddress[MAX_ADDRESS_VAL_LEN + 1] = {0,};
940                 addr_info = addr_list->msg_struct_info[0];
941                 msg_get_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, szAddress, MAX_ADDRESS_VAL_LEN);
942
943                 char *address = (char*)calloc(1, strlen(szAddress)+1);
944                 if (address == NULL) {
945                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
946                         return;
947                 }
948
949                 memcpy(address, szAddress, strlen(szAddress));
950
951                 svc_err = service_create(&svc_handle);
952                 if (svc_err != SERVICE_ERROR_NONE || svc_handle == NULL) {
953                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
954                         free(address);
955                         return;
956                 }
957
958                 service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
959                 service_set_app_id(svc_handle, "email-composer-efl");
960                 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
961                 service_add_extra_data(svc_handle, SERVICE_DATA_TO, address);
962
963                 Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
964                 service_set_window(svc_handle, win_id);
965
966                 svc_err = service_send_launch_request(svc_handle, NULL, NULL);
967
968                 if (svc_err == SERVICE_ERROR_NONE) {
969                         msg_ui_viewer_disconnect_handler(viewer_play_data);
970                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
971                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
972                 } else {
973                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", svc_err);
974                 }
975
976                 free(address);
977                 service_destroy(svc_handle);
978         }
979
980         /* close title menu list */
981         msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
982
983         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
984 }
985
986 void msg_ui_viewer_toolbar_call_cb(void *data, Evas_Object *obj, void *event_info)
987 {
988         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
989         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
990         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
991         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
992
993         int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
994
995         if (addr_count == 1) {
996                 char telnum[255] = {0,};
997                 int ret = 0;
998                 service_h svc_handle = NULL;
999
1000                 service_create(&svc_handle);
1001                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1002
1003                 service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
1004
1005                 char *address = NULL;
1006                 int contactid = 0;
1007
1008                 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1009
1010                 if (address) {
1011                         snprintf(telnum, sizeof(telnum), "tel:%s", address);     /* Number to make a call */
1012                         service_set_uri(svc_handle, telnum);
1013                         free(address);
1014                 } else {
1015                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1016                         service_destroy(svc_handle);
1017                         return;
1018                 }
1019
1020                 if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
1021                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request failed ret : %d", ret);
1022                 } else {
1023                         msg_ui_viewer_disconnect_handler(viewer_play_data);
1024                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1025                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL;
1026                 }
1027                 service_destroy(svc_handle);
1028         }
1029
1030         /* close title menu list */
1031         msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1032
1033         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1034 }
1035
1036 void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_info)
1037 {
1038         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1039         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1040         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1041         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1042
1043         int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1044
1045         if (addr_count == 1) {
1046                 service_error_e err = SERVICE_ERROR_NONE;
1047                 service_h svc_handle = NULL;
1048                 char telnum[MAX_ADDRESS_VAL_LEN+5] = {0,};
1049                 char contact_id[VIEWER_BUFFER_SIZE_64] = {0,};
1050
1051                 service_create(&svc_handle);
1052                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1053                 char *address = NULL;
1054                 int contactid = 0;
1055
1056                 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1057
1058                 if (address) {
1059                         snprintf(telnum, sizeof(telnum), "tel:%s", address);
1060                         snprintf(contact_id, sizeof(contact_id), "%d", contactid);
1061                         free(address);
1062                 } else {
1063                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
1064                         service_destroy(svc_handle);
1065                         return;
1066                 }
1067
1068                 service_set_operation(svc_handle, "http://tizen.org/appcontrol/operation/vt");
1069                 service_set_uri(svc_handle, telnum);
1070                 service_add_extra_data(svc_handle, "ctindex", contact_id);
1071                 err = service_send_launch_request(svc_handle, NULL, NULL);
1072
1073                 if (err == SERVICE_ERROR_NONE) {
1074                         msg_ui_viewer_disconnect_handler(viewer_play_data);
1075                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1076                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
1077                 } else {
1078                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", err);
1079                 }
1080
1081                 service_destroy(svc_handle);
1082         }
1083
1084         /* close title menu list */
1085         msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1086
1087         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1088 }
1089
1090 void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info)
1091 {
1092         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1093         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1094         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1095         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1096
1097         int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1098
1099         if (addr_count == 1) {
1100                 ui_gadget_h loaded_ug = NULL;
1101                 char buf[DEF_BUF_LEN_D] = { 0, };
1102
1103                 service_h svc_handle = NULL;
1104
1105                 service_create(&svc_handle);
1106                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1107
1108                 char *address = NULL;
1109                 int contactid = 0;
1110
1111                 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1112
1113                 if (address) {
1114                         if (strstr(address, "@")) {
1115                                 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
1116                                 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1117                                 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, address);
1118                         } else {
1119                                 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
1120                                 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1121                                 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, address);
1122                         }
1123                         free(address);
1124                 } else {
1125                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
1126                         service_destroy(svc_handle);
1127                         return;
1128                 }
1129
1130                 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);
1131
1132                 if (loaded_ug) {
1133                         msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1134                         msg_ui_viewer_disconnect_handler(viewer_play_data);
1135                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1136                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1137                 }
1138
1139                 service_destroy(svc_handle);
1140         }
1141
1142         /* close title menu list */
1143         msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1144
1145         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1146 }
1147
1148 void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *event_info)
1149 {
1150         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1151         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1152         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1153         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1154
1155         int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1156
1157         if (addr_count == 1) {
1158                 ui_gadget_h loaded_ug = NULL;
1159                 char contactId[DEF_BUF_LEN_S] = { 0, };
1160                 char buf[DEF_BUF_LEN_D] = { 0, };
1161                 char *address = NULL;
1162                 int contact_id = 0;
1163
1164                 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1165
1166                 if (contact_id > 0 ) {
1167                         service_h svc_handle = NULL;
1168                         service_create(&svc_handle);
1169                         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1170
1171                         snprintf(contactId, sizeof(contactId), "%d", contact_id);
1172                         snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
1173
1174                         service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1175                         service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
1176
1177                         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);
1178
1179                         if (loaded_ug) {
1180                                 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1181                                 msg_ui_viewer_disconnect_handler(viewer_play_data);
1182                                 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1183                                 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1184                         }
1185
1186                         service_destroy(svc_handle);
1187                 } else {
1188                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid contact_id = %d", contact_id);
1189                 }
1190
1191                 if (address)
1192                         free(address);
1193         }
1194
1195         /* close title menu list */
1196         msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1197
1198         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1199 }
1200
1201 void msg_ui_viewer_toolbar_block_address_cb(void *data, Evas_Object *obj, void *event_info)
1202 {
1203         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1204         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1205         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1206         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1207
1208         Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
1209         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1210
1211         char *popup_text = NULL;
1212         char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
1213         char *address = NULL;
1214         int contactid = 0;
1215
1216         msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1217
1218         if (address) {
1219                 popup_text = g_strdup_printf(szbuf, address);
1220                 free(address);
1221                 if (!popup_text) {
1222                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
1223                         return;
1224                 }
1225         } else {
1226                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1227                 return;
1228         }
1229
1230         elm_object_text_set(popup, popup_text);
1231         free(popup_text);
1232
1233         Evas_Object *btn_ok = elm_button_add(popup);
1234         elm_object_style_set(btn_ok, "popup_button/default");
1235         elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
1236         elm_object_part_content_set(popup, "button1", btn_ok);
1237         evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_block_ok_clicked_cb, viewer_play_data);
1238
1239         Evas_Object *btn_cancel = elm_button_add(popup);
1240         elm_object_style_set(btn_cancel, "popup_button/default");
1241         elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
1242         elm_object_part_content_set(popup, "button2", btn_cancel);
1243         /* use same cb function with delete cancel button */
1244         evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
1245
1246         evas_object_show(popup);
1247         viewer_play_data->popup = popup;
1248         viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
1249
1250         /*disconnect mouse handler*/
1251         msg_ui_viewer_disconnect_handler(viewer_play_data);
1252
1253         /* close title menu list */
1254         msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1255
1256         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1257 }
1258
1259 void msg_ui_viewer_toolbar_unblock_address_cb(void *data, Evas_Object *obj, void *event_info)
1260 {
1261         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1262         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1263         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1264         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1265         int filter_id = 0;
1266         char *address = NULL;
1267         int contactid = 0;
1268
1269         msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1270
1271         if (address) {
1272                 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, address, &filter_id)) {
1273                         msg_error_t err =  MSG_SUCCESS;
1274                         err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
1275                         if (err != MSG_SUCCESS) {
1276                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
1277                                 free(address);
1278                                 return;
1279                         }
1280
1281                         char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
1282                         char *message_text = g_strdup_printf(szbuf, address);
1283                         if (!message_text) {
1284                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1285                                 free(address);
1286                                 return;
1287                         }
1288                         status_message_post(message_text);
1289                         free(message_text);
1290
1291                         msg_ui_viewer_title_update(viewer_play_data, MSG_VIEWER_OPTION_BLOCK);
1292                 }
1293                 free(address);
1294         } else {
1295                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1296                 return;
1297         }
1298
1299         /* close title menu list */
1300         msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1301
1302         /* play viewer again if previous status was PLAY */
1303         if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
1304                 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
1305                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
1306                         return;
1307                 }
1308         }
1309
1310         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1311 }
1312
1313 static void __msg_ui_viewer_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1314 {
1315         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1316         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1317
1318         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1319
1320         if (viewer_play_data->popup) {
1321                 evas_object_del(viewer_play_data->popup);
1322                 viewer_play_data->popup = NULL;
1323                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1324         }
1325
1326         int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1327
1328         if (addr_count == 1) {
1329                 msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
1330                 msg_error_t err =  MSG_SUCCESS;
1331
1332                 err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
1333                 if (err != MSG_SUCCESS) {
1334                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
1335                         msg_release_struct(&filter);
1336                         return;
1337                 }
1338
1339                 char *address = NULL;
1340                 int contactid = 0;
1341
1342                 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1343
1344                 if (address) {
1345                         err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, address, strlen(address));
1346                         if (err != MSG_SUCCESS) {
1347                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
1348                                 msg_release_struct(&filter);
1349                                 free(address);
1350                                 return;
1351                         }
1352
1353                         err = msg_add_filter(viewer_play_data->msgHandle, filter);
1354                         if (err != MSG_SUCCESS) {
1355                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
1356                                 msg_release_struct(&filter);
1357                                 free(address);
1358                                 return;
1359                         }
1360
1361                         char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
1362                         char *message_text = g_strdup_printf(szbuf, address);
1363                         if (!message_text) {
1364                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1365                                 msg_release_struct(&filter);
1366                                 free(address);
1367                                 return;
1368                         }
1369
1370                         status_message_post(message_text);
1371                         free(message_text);
1372                         free(address);
1373                 } else {
1374                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
1375                         msg_release_struct(&filter);
1376                         return;
1377                 }
1378
1379                 msg_release_struct(&filter);
1380         }
1381
1382         /* play viewer again if previous status was PLAY */
1383         if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
1384                 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
1385                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
1386                         return;
1387                 }
1388         }
1389
1390         return;
1391 }
1392
1393
1394 void msg_ui_viewer_open_title_menu_genlist(void *data)
1395 {
1396         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1397         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1398         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
1399         MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
1400         int i = 0;
1401
1402         /* create box (for setting min size of genlist)*/
1403         Evas_Object *box = elm_box_add(viewer_play_data->play_layout);
1404         evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1405         evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
1406         evas_object_show(box);
1407
1408         elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.title.menu", box);
1409
1410         /* create genlist */
1411         Evas_Object *genlist = elm_genlist_add(box);
1412         elm_object_theme_set(genlist, viewer_play_data->title_th);
1413         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1414         evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1415         elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1416         evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
1417         evas_object_show(genlist);
1418
1419         elm_box_pack_end(box, genlist);
1420
1421         viewer_play_data->title_box_layout = box;
1422
1423         int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1424
1425         if (addr_count == 1) {
1426                 /* set genlist styles */
1427                 viewer_play_data->itc_title_single.item_style = "1text.custom";
1428                 viewer_play_data->itc_title_single.func.text_get = __msg_ui_viewer_title_menu_gl_text_get;
1429                 viewer_play_data->itc_title_single.func.content_get = NULL;
1430                 viewer_play_data->itc_title_single.func.state_get = NULL;
1431                 viewer_play_data->itc_title_single.func.del = NULL;
1432
1433                 /* genlist list load */
1434                 char *address = NULL;
1435                 int contact_id = 0;
1436
1437                 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1438
1439                 if (!address) {
1440                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1441                         return;
1442                 }
1443
1444                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address = %s, contact_id = %d", address, contact_id);
1445
1446                 if (msg_common_is_valid_phone_number(address)) {
1447                         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);
1448                         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);
1449                 } else if (msg_common_is_valid_email_addr(address)) {
1450                         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);
1451                 } else {
1452                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
1453                 }
1454
1455                 if (contact_id > 0)
1456                         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);
1457                 else
1458                         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);
1459
1460                 if (msg_common_is_valid_phone_number(address)) {
1461                         int filter_id = 0;
1462                         if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, address, &filter_id))
1463                                 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);
1464                         else
1465                                 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);
1466                 }
1467
1468                 evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * elm_genlist_items_count(genlist));
1469                 free(address);
1470         } else {
1471                 /* set genlist styles */
1472                 viewer_play_data->itc_title.item_style = "2text.1icon.2.custom";
1473                 viewer_play_data->itc_title.func.text_get = __msg_ui_viewer_title_menu_gl_text_get;
1474                 viewer_play_data->itc_title.func.content_get = __msg_ui_viewer_title_menu_gl_content_get;
1475                 viewer_play_data->itc_title.func.state_get = NULL;
1476                 viewer_play_data->itc_title.func.del = __msg_ui_viewer_title_menu_del;
1477
1478                 /* genlist list load */
1479                 for (i = 0; i < addr_count; i++) {
1480                         addrInfo = (MSG_VIEWER_ADDR_INFO *)calloc(1, sizeof(MSG_VIEWER_ADDR_INFO));
1481                         if (!addrInfo) {
1482                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "addrInfo calloc failed");
1483                                 return;
1484                         }
1485
1486                         char *address = NULL;
1487                         int contact_id = 0;
1488
1489                         msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, i, &address, &contact_id);
1490
1491                         if (!address) {
1492                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is null");
1493                                 free(addrInfo);
1494                                 return;
1495                         }
1496                         strncpy(addrInfo->address, address, MAX_ADDRESS_VAL_LEN);
1497                         free(address);
1498
1499                         char *display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1500                         if (display_name) {
1501                                 strncpy(addrInfo->name, display_name, MAX_DISPLAY_NAME_LEN);
1502                                 free(display_name);
1503                         }
1504
1505                         addrInfo->contact_id = contact_id;
1506
1507                         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);
1508                 }
1509
1510                 /* set genlist size */
1511                 if (addr_count >= VIEWER_TITLE_MENU_GENLIST_MAX_ITEM)
1512                         evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * VIEWER_TITLE_MENU_GENLIST_MAX_ITEM * elm_config_scale_get());
1513                 else
1514                         evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * addr_count * elm_config_scale_get());
1515         }
1516
1517         /** emit signal for changing state of title menu list to open */
1518         elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,open", "");
1519         elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
1520
1521         viewer_play_data->title_menu_opened = true;
1522
1523         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1524 }
1525
1526 void msg_ui_viewer_close_title_menu_genlist(void *data)
1527 {
1528         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1529         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1530         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
1531
1532         elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,close", "");
1533
1534         if (!viewer_play_data->playcontroller_opened)
1535                 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
1536
1537         Evas_Object *layout = elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.title.menu");
1538         if (layout) {
1539                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete box layout");
1540                 evas_object_del(layout);
1541         }
1542
1543         viewer_play_data->title_menu_opened = false;
1544         viewer_play_data->title_box_layout = NULL;
1545
1546         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1547 }
1548
1549 static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
1550 {
1551         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1552         MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
1553         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !addrInfo, NULL);
1554
1555         if (g_strcmp0(part, "elm.text") == 0) {
1556                 return strdup((char *)data);
1557         } else if (g_strcmp0(part, "elm.text.1") == 0) {
1558                 if (addrInfo->contact_id > 0 && addrInfo->name[0] != '\0')
1559                         return strdup(addrInfo->name);
1560                 else if (addrInfo->address[0] != '\0')
1561                         return strdup (addrInfo->address);
1562                 else
1563                         return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1564         } else if (g_strcmp0(part, "elm.text.2") == 0) {
1565                 if (addrInfo->address[0] != '\0')
1566                         return strdup(addrInfo->address);
1567                 else
1568                         return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1569         }
1570
1571         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1572         return NULL;
1573 }
1574
1575
1576 static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part)
1577 {
1578         // Currently, this function do nothing, caller_id concept is not determined
1579         return NULL;
1580 }
1581
1582 static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info)
1583 {
1584         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1585         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1586         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
1587
1588         Elm_Object_Item *item = NULL;
1589         MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
1590
1591         item = (Elm_Object_Item *)event_info;
1592         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !item, "Item is  NULL or Item is not Message item\n");
1593
1594         addrInfo = (MSG_VIEWER_ADDR_INFO *)elm_object_item_data_get(item);
1595         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, addrInfo == NULL, "item_data is NULL");
1596
1597         elm_genlist_item_selected_set(item, 0);
1598
1599         if (viewer_play_data->popup) {
1600                 evas_object_del(viewer_play_data->popup);
1601                 viewer_play_data->popup = NULL;
1602                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1603         }
1604
1605         Evas_Object *popup = NULL;
1606         Evas_Object *list = NULL;
1607         Evas_Object *btn_close = NULL;
1608
1609         popup = elm_popup_add(viewer_play_data->main_window);
1610         elm_object_style_set(popup, "min_menustyle");
1611         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1612
1613         btn_close = elm_button_add(popup);
1614         elm_object_style_set(btn_close, "popup_button/default");
1615         elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
1616         elm_object_part_content_set(popup, "button1", btn_close);
1617         evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_title_menu_popup_close_clicked_cb, viewer_play_data);
1618
1619         list = elm_list_add(popup);
1620         elm_list_mode_set(list, ELM_LIST_EXPAND);
1621
1622         evas_object_data_set(list, "viewer_play_data", viewer_play_data);
1623
1624         if (msg_common_is_valid_phone_number(addrInfo->address)) {
1625                 elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1626                 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);
1627         } else if (msg_common_is_valid_email_addr(addrInfo->address)) {
1628                 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);
1629         } else {
1630                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
1631         }
1632
1633         if (addrInfo->contact_id> 0) {
1634                 elm_object_part_text_set(popup, "title,text", addrInfo->name);
1635                 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);
1636         } else {
1637                 elm_object_part_text_set(popup, "title,text", addrInfo->address);
1638                 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);
1639         }
1640
1641         if (msg_common_is_valid_phone_number(addrInfo->address)) {
1642                 int filter_id = 0;
1643                 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, addrInfo->address, &filter_id))
1644                         elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1645                 else
1646                         elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1647         }
1648
1649         elm_list_go(list);
1650         elm_object_content_set(popup, list);
1651         evas_object_show(popup);
1652
1653         viewer_play_data->popup = popup;
1654         viewer_play_data->popup_type = MSG_VIEWER_TITLE_MENU_POPUP;
1655
1656         /*disconnect mouse handler*/
1657         msg_ui_viewer_disconnect_handler(viewer_play_data);
1658
1659         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1660 }
1661
1662 static void  __msg_ui_viewer_title_menu_del(void *data, Evas_Object *obj)
1663 {
1664         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1665         MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
1666         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL!");
1667
1668         if (addrInfo)
1669                 free(addrInfo);
1670
1671         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1672 }
1673
1674 static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1675 {
1676         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1677         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1678
1679         if (viewer_play_data->popup) {
1680                 evas_object_del(viewer_play_data->popup);
1681                 viewer_play_data->popup = NULL;
1682                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1683         }
1684
1685         /* connect handler again*/
1686         msg_ui_viewer_connect_handler(viewer_play_data);
1687
1688         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1689 }
1690
1691 static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info)
1692 {
1693         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1694         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
1695         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL");
1696         MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
1697         addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
1698         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL");
1699
1700         if (viewer_play_data->popup) {
1701                 evas_object_del(viewer_play_data->popup);
1702                 viewer_play_data->popup = NULL;
1703                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1704         }
1705
1706         const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info);
1707
1708         if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) {
1709                 char telnum[255] = {0,};
1710                 int ret = 0;
1711                 service_h svc_handle = NULL;
1712
1713                 service_create(&svc_handle);
1714                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1715
1716                 service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
1717                 snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address);   /* Number to make a call */
1718                 service_set_uri(svc_handle, telnum);
1719                 if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
1720                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service failed ret : %d", ret);
1721                 } else {
1722                         msg_ui_viewer_disconnect_handler(viewer_play_data);
1723                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1724                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL;
1725                 }
1726
1727                 service_destroy(svc_handle);
1728         } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) {
1729                 service_error_e err = SERVICE_ERROR_NONE;
1730                 service_h svc_handle = NULL;
1731                 char telnum[MAX_ADDRESS_VAL_LEN+5] = {0,};
1732                 char contact_id[VIEWER_BUFFER_SIZE_64] = {0,};
1733
1734                 service_create(&svc_handle);
1735                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1736
1737                 snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address);
1738                 snprintf(contact_id, sizeof(contact_id), "%d", addrInfo->contact_id);
1739
1740                 service_set_operation(svc_handle, "http://tizen.org/appcontrol/operation/vt");
1741                 service_set_uri(svc_handle, telnum);
1742                 service_add_extra_data(svc_handle, "ctindex", contact_id);
1743                 err = service_send_launch_request(svc_handle, NULL, NULL);
1744
1745                 if (err == SERVICE_ERROR_NONE) {
1746                         msg_ui_viewer_disconnect_handler(viewer_play_data);
1747                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1748                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
1749                 } else {
1750                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", err);
1751                 }
1752
1753                 service_destroy(svc_handle);
1754         } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */
1755                 ui_gadget_h loaded_ug = NULL;
1756                 char buf[DEF_BUF_LEN_D] = { 0, };
1757                 service_h svc_handle = NULL;
1758
1759                 service_create(&svc_handle);
1760                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1761
1762                 if (strstr(addrInfo->address, "@")) {
1763                         snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
1764                         service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1765                         service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, addrInfo->address);
1766                 } else {
1767                         snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
1768                         service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1769                         service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, addrInfo->address);
1770                 }
1771
1772                 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);
1773
1774                 if (loaded_ug) {
1775                         msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1776                         msg_ui_viewer_disconnect_handler(viewer_play_data);
1777                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1778                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1779                 }
1780
1781                 service_destroy(svc_handle);
1782         } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) {
1783                 ui_gadget_h loaded_ug = NULL;
1784                 char contactId[DEF_BUF_LEN_S] = { 0, };
1785                 char buf[DEF_BUF_LEN_D] = { 0, };
1786                 service_h svc_handle = NULL;
1787
1788                 service_create(&svc_handle);
1789                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1790
1791                 snprintf(contactId, sizeof(contactId), "%d", addrInfo->contact_id);
1792                 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
1793
1794                 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1795                 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
1796
1797                 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);
1798
1799                 if (loaded_ug) {
1800                         msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1801                         msg_ui_viewer_disconnect_handler(viewer_play_data);
1802                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1803                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1804                 }
1805
1806                 service_destroy(svc_handle);
1807         } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) {
1808                 service_h svc_handle = NULL;
1809                 service_error_e svc_err = SERVICE_ERROR_NONE;
1810
1811                 service_create(&svc_handle);
1812                 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1813
1814                 service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
1815                 service_set_app_id(svc_handle, "email-composer-efl");
1816                 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
1817                 service_add_extra_data(svc_handle, SERVICE_DATA_TO, addrInfo->address);
1818
1819                 Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
1820                 service_set_window(svc_handle, win_id);
1821
1822                 svc_err = service_send_launch_request(svc_handle, NULL, NULL);
1823
1824                 if (svc_err == SERVICE_ERROR_NONE) {
1825                         msg_ui_viewer_disconnect_handler(viewer_play_data);
1826                         viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1827                         viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
1828                 } else {
1829                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", svc_err);
1830                 }
1831
1832                 service_destroy(svc_handle);
1833         } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK")) == 0) {
1834                 int filter_id = 0;
1835                 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, addrInfo->address, &filter_id)) {
1836                         msg_error_t err =  MSG_SUCCESS;
1837                         err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
1838                         if (err != MSG_SUCCESS) {
1839                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
1840                                 return;
1841                         }
1842
1843                         char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
1844
1845                         char *message_text = g_strdup_printf(szbuf, addrInfo->address);
1846                         if (!message_text) {
1847                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1848                                 return;
1849                         }
1850
1851                         status_message_post(message_text);
1852                         free(message_text);
1853                 }
1854         } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK")) == 0) {
1855                 Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
1856                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1857
1858                 char *popup_text = NULL;
1859                 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
1860
1861                 popup_text = g_strdup_printf(szbuf, addrInfo->address);
1862                 if (!popup_text) {
1863                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
1864                         return;
1865                 }
1866                 elm_object_text_set(popup, popup_text);
1867                 free(popup_text);
1868
1869                 Evas_Object *btn_ok = elm_button_add(popup);
1870                 elm_object_style_set(btn_ok, "popup_button/default");
1871                 elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
1872                 elm_object_part_content_set(popup, "button1", btn_ok);
1873                 evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_title_menu_block_ok_clicked_cb, viewer_play_data);
1874                 evas_object_data_set(btn_ok, "addrInfo", addrInfo);
1875
1876                 Evas_Object *btn_cancel = elm_button_add(popup);
1877                 elm_object_style_set(btn_cancel, "popup_button/default");
1878                 elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
1879                 elm_object_part_content_set(popup, "button2", btn_cancel);
1880                 evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
1881
1882                 evas_object_show(popup);
1883                 viewer_play_data->popup = popup;
1884                 viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
1885
1886                 /* disconnect mouse handler */
1887                 msg_ui_viewer_disconnect_handler(viewer_play_data);
1888         }
1889
1890         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1891 }
1892
1893 static void __msg_ui_viewer_title_menu_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1894 {
1895         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1896         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1897
1898         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1899         MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)evas_object_data_get(obj, "addrInfo");
1900         msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
1901         msg_error_t err =  MSG_SUCCESS;
1902
1903         if (viewer_play_data->popup) {
1904                 evas_object_del(viewer_play_data->popup);
1905                 viewer_play_data->popup = NULL;
1906                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1907         }
1908
1909         err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
1910         if (err != MSG_SUCCESS) {
1911                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
1912                 msg_release_struct(&filter);
1913                 return;
1914         }
1915
1916         err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, addrInfo->address, strlen(addrInfo->address));
1917         if (err != MSG_SUCCESS) {
1918                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
1919                 msg_release_struct(&filter);
1920                 return;
1921         }
1922
1923         err = msg_add_filter(viewer_play_data->msgHandle, filter);
1924         if (err != MSG_SUCCESS) {
1925                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
1926                 msg_release_struct(&filter);
1927                 return;
1928         }
1929
1930         char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
1931         char *message_text = g_strdup_printf(szbuf, addrInfo->address);
1932         if (!message_text) {
1933                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1934                 msg_release_struct(&filter);
1935                 return;
1936         }
1937
1938         status_message_post(message_text);
1939         free(message_text);
1940
1941         msg_release_struct(&filter);
1942
1943         /* close title menu popup */
1944         msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1945
1946         return;
1947 }
1948
1949 void msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
1950 {
1951         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1952         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1953         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1954         Evas_Object *popup = NULL;
1955         Evas_Object *box = NULL;
1956         Evas_Object *genlist = NULL;
1957         Evas_Object *btn_save = NULL;
1958         Evas_Object *btn_close = NULL;
1959         int index = 0;
1960         int total_media_count = 0;
1961         int popup_height = 0;
1962
1963         /* destroy previous popup */
1964         if (viewer_play_data->popup) {
1965                 evas_object_del(viewer_play_data->popup);
1966                 viewer_play_data->popup = NULL;
1967                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1968         }
1969
1970         total_media_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
1971
1972         /* create popup */
1973         popup = elm_popup_add(viewer_play_data->main_window);
1974         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1975         evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
1976
1977         if (total_media_count > 3 )
1978                 elm_object_style_set(popup, "menustyle");
1979         else
1980                 elm_object_style_set(popup, "min_menustyle");
1981
1982         /* set popup title */
1983         elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_ATTACHMENTS"));
1984
1985         /* set select all genlist item style */
1986         viewer_play_data->attach_sa_class.item_style = "1text.1icon.2";
1987         viewer_play_data->attach_sa_class.func.text_get = __msg_ui_viewer_save_attachments_sa_gl_text_get;
1988         viewer_play_data->attach_sa_class.func.content_get = __msg_ui_viewer_save_attachments_sa_gl_content_get;
1989         viewer_play_data->attach_sa_class.func.state_get = NULL;
1990         viewer_play_data->attach_sa_class.func.del = NULL;
1991
1992         /* set genlist style */
1993         viewer_play_data->attach_item_class.item_style = "1text.2icon.2";
1994         viewer_play_data->attach_item_class.func.text_get = __msg_ui_viewer_save_attachments_gl_text_get;
1995         viewer_play_data->attach_item_class.func.content_get = __msg_ui_viewer_save_attachments_gl_content_get;
1996         viewer_play_data->attach_item_class.func.state_get = NULL;
1997         viewer_play_data->attach_item_class.func.del = NULL;
1998
1999         /* create genlist */
2000         genlist = elm_genlist_add(viewer_play_data->main_window);
2001         evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2002         evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2003         evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
2004
2005         /* add genlist item based on media count, if item's count is over 1 then 'select all' item should be inserted*/
2006         if (total_media_count > 1) {
2007                 /* add Select all item */
2008                 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);
2009
2010                 /* add each item (order is inserted + attached) */
2011                 for (index = 1; index < total_media_count+1; index++) {
2012                         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);
2013                 }
2014         } else {
2015                 /* add each item (order is inserted + attached) */
2016                 for (index = 0; index < total_media_count; index++) {
2017                         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);
2018                 }
2019         }
2020
2021         /* add save button */
2022         btn_save = elm_button_add(popup);
2023         elm_object_style_set(btn_save, "popup_button/default");
2024         elm_object_text_set(btn_save, dgettext("sys_string", "IDS_COM_SK_SAVE"));
2025         elm_object_part_content_set(popup, "button1", btn_save);
2026         evas_object_smart_callback_add(btn_save, "clicked", __msg_ui_viewer_save_attachments_popup_save_clicked_cb, viewer_play_data);
2027         viewer_play_data->save_button = btn_save;
2028         elm_object_disabled_set(viewer_play_data->save_button, EINA_TRUE);
2029
2030         /* add close button */
2031         btn_close = elm_button_add(popup);
2032         elm_object_style_set(btn_close, "popup_button/default");
2033         elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
2034         elm_object_part_content_set(popup, "button2", btn_close);
2035         evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb, viewer_play_data);
2036
2037         /* set popup style */
2038         box = elm_box_add(viewer_play_data->main_window);
2039         popup_height = VIEWER_ATTACH_GL_ITEM_HEIGHT * ((total_media_count > 3) ? 4 : ((total_media_count > 1) ? total_media_count + 1 : total_media_count));
2040         evas_object_size_hint_min_set(box, 0, popup_height * elm_config_scale_get());
2041         evas_object_show(genlist);
2042         elm_box_pack_end(box, genlist);
2043         elm_object_content_set(popup, box);
2044
2045         /* show popup */
2046         evas_object_show(popup);
2047         viewer_play_data->save_attachment_gl= genlist;
2048         viewer_play_data->popup = popup;
2049         viewer_play_data->popup_type = MSG_VIEWER_ATTACHMENTS_POPUP;
2050
2051         /*disconnect mouse handler*/
2052         msg_ui_viewer_disconnect_handler(viewer_play_data);
2053
2054         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2055 }
2056
2057 static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2058 {
2059         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2060         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2061
2062         int index = 0;
2063         int total_count = 0;
2064         MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2065
2066         if (viewer_play_data->popup) {
2067                 evas_object_del(viewer_play_data->save_button);
2068                 viewer_play_data->save_button = NULL;
2069                 evas_object_del(viewer_play_data->popup);
2070                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2071                 viewer_play_data->popup = NULL;
2072                 viewer_play_data->sa_check = NULL;
2073         }
2074
2075         total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
2076
2077         while (index < total_count) {
2078                 if (index < viewer_play_data->insert_count)
2079                         media_info = eina_list_nth(viewer_play_data->insert_list, index);
2080                 else if (index < total_count)
2081                         media_info = eina_list_nth(viewer_play_data->attach_list, index-viewer_play_data->insert_count);
2082                 else
2083                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!", index);
2084
2085                 if (media_info ) // disable check status
2086                         media_info->isChecked = FALSE;
2087
2088                 index++;
2089         }
2090
2091         viewer_play_data->isSelectAll = FALSE;
2092
2093         /* connect handler again*/
2094         msg_ui_viewer_connect_handler(viewer_play_data);
2095
2096         /* play viewer again if previous status was PLAY */
2097         if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2098                 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2099                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2100                         return;
2101                 }
2102         }
2103
2104         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2105 }
2106
2107 static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2108 {
2109         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2110         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2111         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2112
2113         int attach_count = 0;
2114         int insert_count = 0;
2115         int total_count = 0;
2116         int selected_count = 0;
2117
2118         int index = 0;
2119         int insert_index = 0;
2120         int attach_index = 0;
2121         int failed_count = 0;
2122         int saved_count = 0;
2123
2124         if (viewer_play_data->popup) {
2125                 evas_object_del(viewer_play_data->save_button);
2126                 viewer_play_data->save_button = NULL;
2127                 evas_object_del(viewer_play_data->popup);
2128                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2129                 viewer_play_data->popup = NULL;
2130                 viewer_play_data->sa_check = NULL;
2131         }
2132
2133         MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_Info = NULL;
2134
2135         insert_count = eina_list_count(viewer_play_data->insert_list);
2136         attach_count = eina_list_count(viewer_play_data->attach_list);
2137         total_count = insert_count + attach_count;
2138
2139         while (index < total_count) {
2140                 if (index < insert_count)
2141                         media_Info = eina_list_nth(viewer_play_data->insert_list , insert_index++);
2142                 else if (index < total_count)
2143                         media_Info = eina_list_nth(viewer_play_data->attach_list , attach_index++);
2144
2145                 if (media_Info) {
2146                         bool saveCondition = (viewer_play_data->isSelectAll) ? TRUE : (media_Info->isChecked ? TRUE : FALSE);
2147
2148                         if (saveCondition) {
2149                                 selected_count++;
2150
2151                                 /*get default file path*/
2152                                 MSG_BOOL result = FALSE;
2153                                 char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
2154
2155                                 result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
2156                                 if (result) {
2157                                         char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
2158                                         snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, media_Info->pfile_name);
2159                                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
2160                                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", media_Info->pfile_path);
2161
2162                                         char *result_path = msg_ui_viewer_util_copy_file(media_Info->pfile_path, dst_path);
2163                                         if (result_path) {
2164                                                 saved_count++;
2165                                                 free(result_path);
2166                                         } else {
2167                                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
2168                                                 failed_count++;
2169                                         }
2170                                 } else {
2171                                         failed_count++;
2172                                 }
2173
2174                                 //release check status
2175                                 media_Info->isChecked = FALSE;
2176                                 if (viewer_play_data->isSelectAll)
2177                                         viewer_play_data->isSelectAll = FALSE;
2178                         }
2179                 } else {
2180                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
2181                 }
2182
2183                 media_Info = NULL;
2184
2185                 index++;
2186         }
2187
2188         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Selected(%d) / Total(%d) [inserted(%d),attached(%d)]", selected_count, total_count, insert_count, attach_count);
2189         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Saved(%d), Failed(%d)", saved_count, failed_count);
2190
2191         /* show indicator status text */
2192         if (failed_count == selected_count) {
2193                 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2194         } else {
2195                 if (selected_count == 1 && saved_count == 1) {
2196                         status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
2197                 } else {
2198                         char buf[DEF_BUF_LEN_S + 1] = {0, };
2199                         snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, selected_count);
2200                         status_message_post(buf);
2201                 }
2202         }
2203
2204         /* connect handler again*/
2205         msg_ui_viewer_connect_handler(viewer_play_data);
2206
2207         /* play viewer again if previous status was PLAY */
2208         if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2209                 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2210                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2211                         return;
2212                 }
2213         }
2214
2215         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2216 }
2217
2218 static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part)
2219 {
2220         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2221         int index = (int)data;
2222
2223         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2224
2225         if (!strcmp(part, "elm.text")) {
2226                 if (index == 0) {
2227                         return strdup(dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
2228                 } else {
2229                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid index of select all(%d)", index);
2230                         return NULL;
2231                 }
2232         }
2233         return NULL;
2234 }
2235
2236 static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part)
2237 {
2238         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2239         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2240         int index = (int)data;
2241         Evas_Object *check;
2242
2243         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2244
2245         if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
2246                 check = elm_check_add(obj);
2247                 elm_check_state_pointer_set(check, &(viewer_play_data->isSelectAll));
2248                 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2249                 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
2250                 evas_object_smart_callback_add(check, "changed", __msg_ui_viewer_save_attachments_sa_check_changed_cb, viewer_play_data);
2251                 viewer_play_data->sa_check = check;
2252
2253                 return check;
2254         }
2255
2256         return NULL;
2257 }
2258
2259 static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
2260 {
2261         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2262         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2263         int i = 0;
2264         Eina_List * realized_list;
2265         Elm_Object_Item *it;
2266         Eina_List *l;
2267         Eina_Bool checked;
2268
2269         int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
2270         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "total Count = %d", total_count);
2271         checked = elm_check_state_get(obj);
2272         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "checked status = %d", checked);
2273         MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2274
2275         for (i = 0; i < total_count; i++) {
2276                 if (i < viewer_play_data->insert_count) {
2277                         media_info = eina_list_nth(viewer_play_data->insert_list, i);
2278                         media_info->isChecked = checked;
2279                 } else if (i < total_count) {
2280                         media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2281                         media_info->isChecked = checked;
2282                 } else {
2283                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2284                 }
2285         }
2286
2287         // Update realized items only
2288         realized_list = elm_genlist_realized_items_get(viewer_play_data->save_attachment_gl);
2289         EINA_LIST_FOREACH(realized_list, l, it) {
2290                  elm_genlist_item_update(it);
2291         }
2292
2293 }
2294
2295 static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info)
2296 {
2297         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2298         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2299         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2300         int index = 0;
2301         int i = 0;
2302         int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
2303
2304         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
2305         MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
2306
2307         if (item != NULL) {
2308                 index = (int)elm_object_item_data_get(item);
2309                 elm_genlist_item_selected_set(item, EINA_FALSE);
2310
2311                 viewer_play_data->isSelectAll = !viewer_play_data->isSelectAll;
2312
2313                 //check state changed cb will be called
2314                 elm_check_state_set(viewer_play_data->sa_check, viewer_play_data->isSelectAll);
2315                 elm_genlist_item_update(item);
2316
2317                 if (total_count > 1) {
2318                         for (i = 0; i < total_count; i++) {
2319                                 if (i < viewer_play_data->insert_count) {
2320                                         tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
2321
2322                                 } else if (i < total_count) {
2323                                         tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2324                                 } else {
2325                                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2326                                         continue;
2327                                 }
2328                                 elm_check_state_set(tmp_media_info->check_item, (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE);
2329                                 tmp_media_info->isChecked = (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE;
2330                         }
2331                 }
2332                 elm_object_disabled_set(viewer_play_data->save_button, (viewer_play_data->isSelectAll) ? EINA_FALSE : EINA_TRUE);
2333         }
2334 }
2335
2336 static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part)
2337 {
2338         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2339         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2340         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
2341
2342         int index = (int) data;
2343         int realIndex = 0;
2344         int insert_count = viewer_play_data->insert_count;
2345         int attach_count = viewer_play_data->attach_count;
2346         int total_count = insert_count + attach_count;
2347         MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2348
2349         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2350
2351         realIndex = (total_count > 1) ? index-1 : index;        // calculate item index considering 'select all' item
2352
2353         // check boundary
2354         if (realIndex < 0 ) {
2355                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
2356                 return NULL;
2357         }
2358
2359         if (!strcmp(part, "elm.text")) {
2360                 if (realIndex < insert_count) {
2361                         media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
2362                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[INSERT MEDIA] name is  = %s", media_info->pfile_name);
2363                 } else if (realIndex < insert_count+attach_count) {
2364                         media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
2365                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ATTACH MEDIA] name is  = %s", media_info->pfile_name);
2366                 }
2367
2368                 return strdup(media_info->pfile_name);
2369         }
2370         return NULL;
2371 }
2372
2373 static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part)
2374 {
2375         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2376         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2377         MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
2378         MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2379         int index = (int)data;
2380         Evas_Object *check;
2381         int realIndex = index-1;
2382         int insert_count = viewer_play_data->insert_count;
2383         int attach_count = viewer_play_data->attach_count;
2384         int total_count = insert_count + attach_count;
2385
2386         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2387
2388         realIndex = (total_count > 1) ? index-1 : index;        // calculate item index considering 'select all' item
2389
2390         // check boundary
2391         if (realIndex < 0 ) {
2392                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
2393                 return NULL;
2394         }
2395
2396         if (realIndex < insert_count) {
2397                 media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
2398                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
2399         } else if (realIndex < total_count) {
2400                 media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
2401                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
2402         }
2403
2404         if (strcmp(part, "elm.icon.1") == 0) {
2405                 check = elm_check_add(obj);
2406                 //set the State pointer to keep the current UI state of Checkbox.
2407                 elm_check_state_pointer_set(check, &media_info->isChecked);
2408                 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2409                 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
2410
2411                 media_info->check_item = check;
2412
2413                 return check;
2414         } else  if (strcmp(part, "elm.icon.2") == 0) {
2415                 Evas_Object *image = NULL;
2416
2417                 image = elm_icon_add(obj);
2418
2419                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info->pfile_path = %s", media_info->pfile_path);
2420
2421                 /*set attach file icon*/
2422                 if (media_info->media_type == MSG_VIEWER_MEDIA_IMG ||
2423                                 media_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
2424                         elm_image_file_set(image, media_info->pfile_path, NULL);
2425                 } else if (media_info->media_type == MSG_VIEWER_MEDIA_DRM) {
2426                         elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
2427                 } else {
2428                         if (strlen(media_info->pfile_path)) {
2429                                 const char *icon_path = NULL;
2430
2431                                 icon_path = msg_common_get_file_icon(media_info->pfile_path);
2432                                 if (icon_path) {
2433                                         elm_image_file_set(image, MSG_IMAGES_EDJ, icon_path);
2434                                 } else {
2435                                         D_EMSG("icon_path is NULL");
2436                                         elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
2437                                 }
2438                         } else {
2439                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
2440                                 return NULL;
2441                         }
2442                 }
2443
2444                 if (image)
2445                         evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2446
2447                 return image;
2448         } else {
2449                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
2450         }
2451
2452         return NULL;
2453 }
2454
2455 static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info)
2456 {
2457         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2458         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2459         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2460
2461         int i = 0;
2462         int index = 0;
2463         int realIndex = 0;
2464         int insert_count = viewer_play_data->insert_count;
2465         int attach_count = viewer_play_data->attach_count;
2466         int total_count = insert_count + attach_count;
2467         bool isAllSelected = TRUE;
2468         bool isNoneSelected = TRUE;
2469
2470         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
2471         MSG_VIEWER_ATTACH_MEDIA_INFO_S *sel_media_info = NULL;
2472         MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
2473
2474         if (item != NULL) {
2475                 index = (int)elm_object_item_data_get(item);
2476                 realIndex = (total_count > 1) ? index-1 : index;                // calculate item index considering 'select all' item
2477
2478                 // check boundary
2479                 if (realIndex < 0 ) {
2480                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
2481                         return;
2482                 }
2483
2484                 elm_genlist_item_selected_set(item, EINA_FALSE);
2485
2486                 if (realIndex < insert_count) {
2487                         sel_media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
2488                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
2489                 } else {
2490                         sel_media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
2491                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
2492                 }
2493
2494                 // toggle check status
2495                 sel_media_info->isChecked = !sel_media_info->isChecked;
2496
2497                 elm_genlist_item_update(item);
2498
2499                 //check condition for set select all item
2500                 if (total_count > 1 && sel_media_info->isChecked) {
2501                         i =0;
2502                         for (i = 0; i < total_count; i++) {
2503                                 if (i < viewer_play_data->insert_count) {
2504                                         tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
2505                                         if (!tmp_media_info->isChecked) {
2506                                                 isAllSelected = FALSE;
2507                                                 break;
2508                                         }
2509                                 } else if (i < total_count) {
2510                                         tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2511                                         if (!tmp_media_info->isChecked) {
2512                                                 isAllSelected = FALSE;
2513                                                 break;
2514                                         }
2515                                 } else {
2516                                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2517                                 }
2518                         }
2519
2520                         if (isAllSelected) {
2521                                 elm_check_state_set(viewer_play_data->sa_check, EINA_TRUE);
2522                                 viewer_play_data->isSelectAll = EINA_TRUE;
2523                         }
2524                 }
2525
2526                 // check condition for release select all item
2527                 if (total_count > 1 && !sel_media_info->isChecked && viewer_play_data->isSelectAll) {
2528                         elm_check_state_set(viewer_play_data->sa_check, EINA_FALSE);
2529                         viewer_play_data->isSelectAll = EINA_FALSE;
2530                 }
2531
2532                 // check condition for enable save button item
2533                 for (i = 0; i < total_count; i++) {
2534                         if (i < viewer_play_data->insert_count) {
2535                                 tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
2536                                 if (tmp_media_info->isChecked) {
2537                                         isNoneSelected = FALSE;
2538                                         break;
2539                                 }
2540                         } else if (i < total_count) {
2541                                 tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2542                                 if (tmp_media_info->isChecked) {
2543                                         isNoneSelected = FALSE;
2544                                         break;
2545                                 }
2546                         } else {
2547                                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2548                         }
2549                 }
2550                 elm_object_disabled_set(viewer_play_data->save_button, (isNoneSelected) ? EINA_TRUE : EINA_FALSE);
2551         }
2552 }
2553
2554 static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data)
2555 {
2556         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2557         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2558         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->attach_list == NULL);
2559
2560         int attach_count = eina_list_count(viewer_play_data->attach_list);
2561         int index = 0;
2562         int attach_index = 0;
2563         int failed_count = 0;
2564         int saved_count = 0;
2565
2566         MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttachInfo = NULL;
2567
2568         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attach_cnt = %d", attach_count);
2569
2570         while (index < attach_count) {
2571                 pAttachInfo = eina_list_nth(viewer_play_data->attach_list , attach_index++);
2572
2573                 if (pAttachInfo) {
2574                         /*get default file path*/
2575                         MSG_BOOL result = FALSE;
2576                         char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
2577
2578                         result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
2579                         if (result) {
2580                                 char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
2581                                 snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttachInfo->pfile_name);
2582                                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
2583                                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", pAttachInfo->pfile_path);
2584
2585                                 char *result_path = msg_ui_viewer_util_copy_file(pAttachInfo->pfile_path, dst_path);
2586                                 if (result_path) {
2587                                         saved_count++;
2588                                         free(result_path);
2589                                 } else {
2590                                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
2591                                         failed_count++;
2592                                 }
2593                         } else {
2594                                 failed_count++;
2595                         }
2596
2597                 } else {
2598                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
2599                         failed_count++;
2600                 }
2601
2602                 pAttachInfo = NULL;
2603
2604                 index++;
2605         }
2606
2607         /* show indicator status text */
2608         if (failed_count == attach_count) {
2609                 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2610         } else {
2611                 if (attach_count == 1 && failed_count == 0) {
2612                         status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
2613                 } else {
2614                         char buf[DEF_BUF_LEN_S + 1] = {0, };
2615                         snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, attach_count);
2616                         status_message_post(buf);
2617                 }
2618         }
2619
2620         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2621 }
2622
2623 void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2624 {
2625         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2626         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2627         MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
2628         MSG_PLAY_DATA_S *viewer_play_data = pAttach_info->viewer_play_data;
2629
2630         MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, "viewer_play_data is NULL");
2631
2632         if (strlen(pAttach_info->pfile_path) == 0) {
2633                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pfile_path is NULL");
2634                 if (pAttach_info->isSaveAll == FALSE) {
2635                         status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2636                 } else {                //Save all
2637                         __msg_ui_viewer_help_page_save_all_item(viewer_play_data);
2638                 }
2639                 return;
2640         } else {
2641                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pAttach_info->pfile_path);
2642                 MSG_BOOL result = 0;
2643                 MSG_BOOL issave = TRUE;
2644                 char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
2645
2646                 /*get default file path*/
2647                 result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
2648                 if (result) {
2649                         char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
2650                         snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttach_info->pfile_name);
2651                         MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path);
2652
2653                         char *result_path = msg_ui_viewer_util_copy_file(pAttach_info->pfile_path, dst_path);
2654                         if (result_path) {
2655                                 free(result_path);
2656                         } else {
2657                                 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);
2658                                 issave = FALSE;
2659                         }
2660                 } else {
2661                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed");
2662                         status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2663                         return;
2664                 }
2665
2666                 if (issave)
2667                         status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
2668                 else
2669                         status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2670         }
2671
2672         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2673 }
2674
2675 static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2676 {
2677         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2678         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2679         const char *label = elm_object_item_text_get((Elm_Object_Item *)event_info);
2680
2681         if (viewer_play_data->popup) {
2682                 evas_object_del(viewer_play_data->popup);
2683                 viewer_play_data->popup = NULL;
2684                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2685         }
2686
2687         if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB")) == 0) {
2688                 msg_ui_viewer_copy_message_text_to_clipboard(viewer_play_data);
2689
2690                 /* play viewer again if previous status was PLAY */
2691                 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2692                         if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2693                                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2694                                 return;
2695                         }
2696                 }
2697         } else if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB")) == 0) {
2698                 msg_ui_viewer_create_msg_detail_popup(viewer_play_data);
2699         } else {
2700                 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid list type");
2701                 return;
2702         }
2703
2704
2705         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2706 }
2707
2708 static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
2709 {
2710         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2711         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2712
2713         if (viewer_play_data->popup) {
2714                 evas_object_del(viewer_play_data->popup);
2715                 viewer_play_data->popup = NULL;
2716                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2717         }
2718
2719         /* play viewer again if previous status was PLAY */
2720         if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2721                 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2722                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2723                         return;
2724                 }
2725         }
2726
2727         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2728 }
2729
2730 static void __msg_ui_viewer_protection_cb(void *data, Evas_Object *obj, void *event_info)
2731 {
2732         MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2733         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
2734
2735         MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2736         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
2737         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
2738
2739         MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
2740         MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_main_data == NULL);
2741
2742         msg_error_t err = MSG_SUCCESS;
2743         bool is_protected = false;
2744
2745         msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
2746
2747         /* get lock status and change status */
2748         err = msg_update_protected_status(viewer_play_data->msgHandle, viewer_play_data->msgID, ((is_protected) ? false : true));
2749
2750         /* update message info */
2751         if (err != MSG_SUCCESS) {
2752                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_update_protected_status is failed");
2753                 return;
2754         }
2755
2756         msg_set_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, !is_protected);
2757
2758         /* delete ctx popup */
2759         if (viewer_play_data->popup) {
2760                 evas_object_del(viewer_play_data->popup);
2761                 viewer_play_data->popup = NULL;
2762                 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2763         }
2764
2765         /* signal emit for showing/hiding lock icon */
2766         if (is_protected)
2767                 edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/hide", "*");
2768         else
2769                 edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/show", "*");
2770
2771         /* play viewer again if previous status was PLAY */
2772         if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2773                 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2774                         MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2775                         return;
2776                 }
2777         }
2778
2779         /* send refresh conversation result to bubble-composer ug */
2780         char str_id[DEF_BUF_LEN] = {0,};
2781         service_h svc_handle = NULL;
2782
2783         service_create(&svc_handle);
2784         if (svc_handle < 0 || svc_handle == NULL) {
2785                 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
2786                 return;
2787         }
2788
2789         service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_REFRESH_CONV);
2790
2791         snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
2792         service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
2793
2794         ug_send_result(viewer_main_data->viewer_ug, svc_handle);
2795
2796         service_destroy(svc_handle);
2797
2798         MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2799
2800 }