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