2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "msg-ui-viewer-play-view.h"
18 #include "msg-ui-viewer-main.h"
19 #include "msg-ui-viewer-utility.h"
20 #include "msg-ui-common-utility.h"
21 #include "msg-ui-image-resource.h"
26 #include <app_service.h>
27 #include <syspopup_caller.h>
30 /*==================================================================================================
32 *==================================================================================================*/
33 Elm_Genlist_Item_Class itc_popup = {0,}; /** itc for list style popup */
35 /*==================================================================================================
36 * FUNCTION DECLARATIONS
37 *==================================================================================================*/
38 /* genlist for multirecipients in title button */
39 static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part);
40 static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part);
41 static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info);
42 static void __msg_ui_viewer_title_menu_del(void *data, Evas_Object *obj);
43 static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
44 static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info);
45 static void __msg_ui_viewer_title_menu_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
47 /*attachment list for help page */
48 static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data);
50 /* controllbar toolbar option */
51 static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info);
52 static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
54 /* save attachment popup */
55 static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
56 static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info);
57 static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part);
58 static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part);
59 static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
60 static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info);
61 static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part);
62 static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part);
63 static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info);
64 static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
65 static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
66 static void __msg_ui_viewer_protection_cb(void *data, Evas_Object *obj, void *event_info);
67 static void __msg_ui_viewer_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
69 /*==================================================================================================
70 * FUNCTION IMPLEMENTATIONS
71 *================================================================================================*/
72 Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event)
74 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
75 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
76 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
77 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
78 Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
79 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
80 SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
86 play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
87 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
89 /*get start and end point according to rotation*/
90 rotate = elm_win_rotation_get(viewer_play_data->main_window);
91 if (rotate == 0) { /*PORTRAIT mode*/
92 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT mode");
93 start_point = viewer_play_data->m_x;
95 screen_width = viewer_play_data->window_width;
96 } else if (rotate == 180) {
97 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT reverse mode");
99 end_point = viewer_play_data->m_x;
100 screen_width = viewer_play_data->window_width;
101 } else if (rotate == 90) { /*LANDSCAPE mode*/
102 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE mode");
104 end_point = viewer_play_data->m_y;
105 screen_width = viewer_play_data->window_height;
106 } else if (rotate == 270) {
107 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE reverse mode");
108 start_point = viewer_play_data->m_y;
110 screen_width = viewer_play_data->window_height;
112 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
115 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start_point = %d, end_point = %d, screen_width = %d", start_point, end_point, screen_width);
117 if (end_point - start_point > screen_width / 4) {
119 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
121 if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
122 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
123 if (err != MSG_SMIL_SUCCESS) {
124 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
126 /* hide menu title genlist if player status is changed to play */
127 if (viewer_play_data->title_menu_opened) {
128 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
130 /* play viewer again if previous status was PLAY */
131 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
132 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
133 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
138 /* show play controller */
139 if (viewer_play_data->play_controller) {
140 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
141 evas_object_show(viewer_play_data->play_controller);
142 viewer_play_data->playcontroller_opened = true;
143 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
145 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
147 /* set progressbar and progress text sync */
148 if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
149 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
153 } else if (start_point - end_point > screen_width / 4) {
155 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
156 int total_page = viewer_play_data->smil_eventStatus->pageCnt;
157 if (total_page >= pageIdx) {
158 if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
159 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
160 if (err != MSG_SMIL_SUCCESS) {
161 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
163 /* hide menu title genlist if player status is changed to play */
164 if (viewer_play_data->title_menu_opened) {
165 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
167 /* play viewer again if previous status was PLAY */
168 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
169 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
170 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
175 /* show play controller */
176 if (viewer_play_data->play_controller) {
177 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
178 evas_object_show(viewer_play_data->play_controller);
179 viewer_play_data->playcontroller_opened = true;
180 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
182 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
184 /* set progressbar and progress text sync */
185 if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
186 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
195 Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event)
197 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
198 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
199 MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
200 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
201 Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
203 viewer_play_data->m_x = ev->x;
204 viewer_play_data->m_y = ev->y;
206 if (viewer_play_data->mouse_up_event_handler) {
207 ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
208 viewer_play_data->mouse_up_event_handler = NULL;
210 viewer_play_data->mouse_up_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, msg_ui_viewer_mouse_up_cb, (void *) viewer_play_data);
215 void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
217 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
218 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
219 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
220 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
221 Evas_Event_Mouse_Down *ev = event_info;
223 viewer_play_data->ctrl_start_x = ev->canvas.x;
224 viewer_play_data->ctrl_start_y = ev->canvas.y;
227 void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
229 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
230 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
231 MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
232 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
233 Evas_Event_Mouse_Up *ev = event_info;
235 viewer_play_data->ctrl_end_x = ev->canvas.x;
236 viewer_play_data->ctrl_end_y = ev->canvas.y;
238 int screen_width = 0;
239 int screen_height = 0;
243 rotate = elm_win_rotation_get(viewer_play_data->main_window);
244 if (rotate == 0 || rotate == 180) {
245 screen_width = viewer_play_data->window_width;
246 screen_height = viewer_play_data->window_height;
247 } else if (rotate == 90 || rotate == 270) {
248 screen_width = viewer_play_data->window_height;
249 screen_height = viewer_play_data->window_width;
251 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
255 //check only case for playcontroller is not opened, the other case is checked within msg_ui_viewer_play_layout_clicked_cb
256 if (!viewer_play_data->playcontroller_opened && !viewer_play_data->title_menu_opened) {
257 if (abs(viewer_play_data->ctrl_start_x-viewer_play_data->ctrl_end_x) < screen_width / 10 && abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) < screen_height / 10 ) {
258 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is tapped and play controller should be displayed");
260 if (viewer_play_data->play_controller) {
261 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
262 evas_object_show(viewer_play_data->play_controller);
263 viewer_play_data->playcontroller_opened = true;
264 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
265 //create play controller timer
266 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
269 } else if (viewer_play_data->playcontroller_opened) {
270 /* up/down drag condition - close play controller */
271 if (abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) > screen_height / 5) {
272 elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
273 evas_object_hide(viewer_play_data->play_controller);
274 viewer_play_data->playcontroller_opened = false;
275 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
277 msg_ui_viewer_destroy_play_controller_timer(viewer_play_data);
282 void msg_ui_viewer_play_layout_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
284 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
285 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
286 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
288 if (viewer_play_data->title_menu_opened) {
289 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
291 /* play viewer again if previous status was PLAY */
292 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
293 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
294 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
298 } else if (viewer_play_data->playcontroller_opened) {
299 int screen_width = 0;
300 int screen_height = 0;
304 rotate = elm_win_rotation_get(viewer_play_data->main_window);
305 if (rotate == 0 || rotate == 180) {
306 screen_width = viewer_play_data->window_width;
307 screen_height = viewer_play_data->window_height;
308 } else if (rotate == 90 || rotate == 270) {
309 screen_width = viewer_play_data->window_height;
310 screen_height = viewer_play_data->window_width;
312 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
316 if (abs(viewer_play_data->ctrl_start_x-viewer_play_data->ctrl_end_x) < screen_width / 10 &&
317 abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) < screen_height / 10 &&
318 viewer_play_data->ctrl_end_y < screen_height-(VIEWER_NAVIFRAME_BOTTOM_H+VIEWER_PLAY_CONTROLLER_HEIGHT)) {
319 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is now displayed and play controller should be hided");
321 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
322 elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
323 evas_object_hide(viewer_play_data->play_controller);
324 viewer_play_data->playcontroller_opened = false;
325 //destroy play controller timer
326 msg_ui_viewer_destroy_play_controller_timer(viewer_play_data);
331 MSG_SMIL_ERROR_E msg_ui_viewer_set_entry_handle_cb(MSG_PLAY_DATA_S *data, void *entry)
333 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
334 MSG_UI_RETV_IF(MSG_UI_LEVEL_ASSERT, data == NULL, MSG_ERR_SMIL_UNKNOWN);
335 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
336 bool isHelpText = false;
338 viewer_play_data->render_entry = (Evas_Object *)entry;
340 if (viewer_play_data->render_entry) {
341 if (viewer_play_data->smil_eventStatus) {
342 isHelpText = (viewer_play_data->smil_eventStatus->isHelpSlide) ? true : false;
344 SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
345 isHelpText = (!slide || !slide->commonData) ? false : ((slide->commonData->pageCnt == 0) ? true : false);
347 MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
348 msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE);
351 return MSG_SMIL_SUCCESS;
354 void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info)
356 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
357 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
358 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
360 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->launch_cmd : %d", viewer_play_data->launch_cmd);
362 /*prevent invalid double pressing button event after launching ug or app(like call, vtcall)*/
363 if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE)
366 if (viewer_play_data->title_menu_opened)
367 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
369 if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
370 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
371 if (err != MSG_SMIL_SUCCESS) {
372 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
375 viewer_play_data->status = MSG_VIEWER_STOP;
376 msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
379 msg_ui_viewer_disconnect_handler(viewer_play_data);
381 if (!viewer_play_data->del_idler)
382 viewer_play_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_play_data->viewer_main);
384 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
387 void msg_ui_viewer_title_button_clicked_cb(void * data, Evas_Object * obj, void * event_info)
389 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
390 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
391 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
393 if (viewer_play_data->title_menu_opened) {
394 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
396 /* play viewer again if previous status was PLAY */
397 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
398 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
399 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
404 msg_ui_viewer_open_title_menu_genlist(viewer_play_data);
406 viewer_play_data->previous_status = viewer_play_data->status;
407 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
409 /* set player state to pause and update icon */
410 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
411 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_viewer_command_play_pause is failed");
416 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
419 void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info)
421 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
422 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
423 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
424 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
426 /* check media count */
427 if (viewer_play_data->insert_count + viewer_play_data->attach_count == 0) {
428 msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_NO_ATTACHMENTS"));
432 /* close title menu list if exist, else pause SMIL and save previous status */
433 if (viewer_play_data->title_menu_opened) {
434 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
436 viewer_play_data->previous_status = viewer_play_data->status;
437 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
439 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) { // pause
440 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
445 /* create popup for save attachments and insert items */
446 msg_ui_viewer_create_save_attachments_popup(viewer_play_data);
448 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
451 void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_info)
453 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
454 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
455 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
456 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
457 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
459 if (viewer_play_data->popup) {
460 evas_object_del(viewer_play_data->popup);
461 viewer_play_data->popup = NULL;
462 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
465 Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
466 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
468 /* Add protection on/off menu */
469 bool is_protected = false;
470 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
471 elm_object_text_set(popup, (is_protected) ? dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_DELETE_THIS_PROTECTED_MESSAGE_Q") : dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_DELETE_Q"));
473 Evas_Object *btn_ok = elm_button_add(popup);
474 elm_object_style_set(btn_ok, "popup_button/default");
475 elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
476 elm_object_part_content_set(popup, "button1", btn_ok);
477 evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_delete_ok_clicked_cb, viewer_play_data);
479 Evas_Object *btn_cancel = elm_button_add(popup);
480 elm_object_style_set(btn_cancel, "popup_button/default");
481 elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
482 elm_object_part_content_set(popup, "button2", btn_cancel);
483 evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
485 evas_object_show(popup);
486 viewer_play_data->popup = popup;
487 viewer_play_data->popup_type = MSG_VIEWER_DELETE_POPUP;
489 /*disconnect mouse handler*/
490 msg_ui_viewer_disconnect_handler(viewer_play_data);
492 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
495 static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
497 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
498 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
500 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
501 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
502 char str_id[DEF_BUF_LEN] = {0,};
504 if (viewer_play_data->popup) {
505 evas_object_del(viewer_play_data->popup);
506 viewer_play_data->popup = NULL;
507 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
510 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete msg-id is %d", viewer_play_data->msgID);
512 if (viewer_play_data->msg_box_viewer) {
513 if (msg_delete_message(viewer_play_data->msgHandle, viewer_play_data->msgID) == MSG_SUCCESS) {
514 status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED"));
516 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_message is failed");
517 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
522 service_h svc_handle = NULL;
524 service_create(&svc_handle);
525 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
527 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_DELETE_MSG);
529 snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
530 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
532 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
533 service_destroy(svc_handle);
537 ug_destroy_me(viewer_main_data->viewer_ug);
542 static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
544 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
545 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
547 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
549 if (viewer_play_data->popup) {
550 evas_object_del(viewer_play_data->popup);
551 viewer_play_data->popup = NULL;
552 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
555 /* connect handler again*/
556 msg_ui_viewer_connect_handler(viewer_play_data);
558 /* play viewer again if previous status was PLAY */
559 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
560 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
561 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
567 void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_info)
569 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
570 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
571 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
572 char buf[DEF_BUF_LEN_S] = { 0, };
573 service_h svc_handle;
575 if (viewer_play_data->popup) {
576 evas_object_del(viewer_play_data->popup);
577 viewer_play_data->popup = NULL;
578 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
581 /* create and call composer-ug */
582 if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
583 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
585 snprintf(buf, sizeof(buf), "%d", viewer_play_data->msgID);
586 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, buf);
587 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_FORWARD);
588 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FROM, MSG_BUNDLE_VALUE_INTERNAL);
589 ui_gadget_h loaded_ug;
591 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
594 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
595 msg_ui_viewer_disconnect_handler(viewer_play_data);
596 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
597 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
600 service_destroy(svc_handle);
603 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
606 void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_info)
608 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
609 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
610 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
611 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
612 char str_id[DEF_BUF_LEN] = {0,};
614 if (viewer_play_data->popup) {
615 evas_object_del(viewer_play_data->popup);
616 viewer_play_data->popup = NULL;
617 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
620 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed msg-id is %d", viewer_play_data->msgID);
622 service_h svc_handle = NULL;
623 service_create(&svc_handle);
624 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
626 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_RESEND);
628 snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
629 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
631 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
632 service_destroy(svc_handle);
635 ug_destroy_me(viewer_main_data->viewer_ug);
637 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
640 void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_info)
642 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
643 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
644 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
645 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
646 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
649 msg_error_t err = MSG_SUCCESS;
650 service_h svc_handle;
652 if (viewer_play_data->popup) {
653 evas_object_del(viewer_play_data->popup);
654 viewer_play_data->popup = NULL;
655 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
658 /* get thread id value to check whether viewer is launched from bubble-composer or other external app(ug) */
659 err = msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
661 /* back to bubble-composer and request to show keypad */
662 if (err == MSG_SUCCESS && thread_id > 0) {
663 service_create(&svc_handle);
664 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
666 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_REPLY);
667 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
669 service_destroy(svc_handle);
672 ug_destroy_me(viewer_main_data->viewer_ug);
673 } else { /* create new composer with reply number */
674 service_create(&svc_handle);
675 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
677 char *reply_addr = NULL;
679 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &reply_addr, &contact_id);
682 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, reply_addr);
686 ui_gadget_h loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
689 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
690 msg_ui_viewer_disconnect_handler(viewer_play_data);
691 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
692 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
695 service_destroy(svc_handle);
698 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
701 void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info)
703 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
704 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
705 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
706 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
707 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
709 MSG_BOOL hasText = FALSE;
712 int folder_id = MSG_MAX_FOLDER_ID;
714 if (viewer_play_data->popup) {
715 evas_object_del(viewer_play_data->popup);
716 viewer_play_data->popup = NULL;
717 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
720 /* set current status to previous status */
721 viewer_play_data->previous_status = viewer_play_data->status;
722 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
724 /* set player state to pause*/
725 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
726 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
730 Evas_Object *ctx_popup = NULL;
731 ctx_popup = elm_ctxpopup_add(viewer_play_data->navi_frame);
732 evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_viewer_more_ctxpopup_dismissed_cb, (void *)viewer_play_data);
734 /* add delete menu */
735 elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_OPT_DELETE"), NULL, msg_ui_viewer_delete_button_cb, (void *)viewer_play_data);
737 /* Get folder ID and Add Resend / Reply menu */
738 msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
740 if (folder_id == MSG_OUTBOX_ID)
741 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_SK_RESEND"), NULL, msg_ui_viewer_resend_button_cb, (void *)viewer_play_data);
742 else if (folder_id == MSG_INBOX_ID)
743 elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_SK_REPLY"), NULL, msg_ui_viewer_reply_button_cb, (void *)viewer_play_data);
745 /* Add FORWARD menu */
746 elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_BODY_FORWARD"), NULL, msg_ui_viewer_forward_button_cb, (void *)viewer_play_data);
748 /* Add protection on/off menu */
749 bool is_protected = false;
750 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
751 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Lock status of current message %d", is_protected);
754 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_OFF"), NULL, __msg_ui_viewer_protection_cb, (void *)viewer_play_data);
756 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_ON"), NULL, __msg_ui_viewer_protection_cb, (void *)viewer_play_data);
758 /* Add Copy Message text menu */
759 if (viewer_play_data->smil_eventStatus != NULL) {
761 msg_list_handle_t pagelist_info = NULL;
762 msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
763 page_count = msg_list_length(pagelist_info);
765 msg_struct_t page_info = NULL;
766 page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, viewer_play_data->smil_eventStatus->pageIdx);
769 msg_list_handle_t medialist_info = NULL;
770 msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
771 media_count = msg_list_length(medialist_info);
773 for (i = 0; i < media_count; i++) {
775 msg_struct_t media_info = NULL;
776 media_info = (msg_struct_t)msg_list_nth_data(medialist_info, i);
778 if (media_info == NULL) {
779 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "getting media has failed");
783 msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
784 if (mediaType != MMS_SMIL_MEDIA_TEXT)
793 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"), NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
795 /* Add view message details menu */
796 elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"), NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
799 Evas_Coord x, y, w, h;
800 evas_object_geometry_get(viewer_play_data->more_btn, &x, &y, &w, &h);
801 evas_object_move(ctx_popup, x, y);
802 evas_object_show(ctx_popup);
804 viewer_play_data->popup = ctx_popup;
805 viewer_play_data->popup_type = MSG_VIEWER_MENU_CTX_POPUP;
807 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
810 void msg_ui_viewer_volume_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
812 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
813 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
814 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
816 syspopup_launch("volume", NULL);
818 //create play controller timer repeatedly
819 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
822 void msg_ui_viewer_prev_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
824 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
825 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
826 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
827 SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
828 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
830 play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
831 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
833 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
835 if (!strcmp(emission, "prev_clicked")) {
837 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
839 if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
840 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
841 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
842 if (err != MSG_SMIL_SUCCESS) {
843 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
845 //set progressbar and progress text sync
846 if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
847 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
852 //create play controller timer repeatedly
853 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
855 /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
856 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
857 if (viewer_play_data->title_menu_opened)
858 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
862 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
865 void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
867 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
868 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
869 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
871 if (!msg_ui_viewer_command_play_pause(viewer_play_data, (viewer_play_data->status == MSG_VIEWER_PLAY) ? MSG_VIEWER_ACTION_TOOLBAR_PAUSE : MSG_VIEWER_ACTION_TOOLBAR_PLAY))
872 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
874 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
877 void msg_ui_viewer_next_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
879 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
880 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
881 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
883 if (!strcmp(emission, "next_clicked"))
885 SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
886 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
888 play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
889 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
891 MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
893 int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
894 int total_page = viewer_play_data->smil_eventStatus->pageCnt;
895 if (total_page >= pageIdx) {
896 if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
897 MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
898 err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
899 if (err != MSG_SMIL_SUCCESS) {
900 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
902 //set progressbar and progress text sync
903 if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
904 msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
909 //create play controller timer repeatedly
910 msg_ui_viewer_create_play_controller_timer(viewer_play_data);
912 /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
913 if (viewer_play_data->status == MSG_VIEWER_PLAY) {
914 if (viewer_play_data->title_menu_opened)
915 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
920 void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info)
922 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
923 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
924 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
925 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
926 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
927 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
929 service_error_e svc_err = SERVICE_ERROR_NONE;
931 msg_struct_list_s *addr_list = NULL;
932 msg_get_list_handle(viewer_play_data->msg_t, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
934 int addr_count = addr_list->nCount; //get address count
936 if (addr_count == 1) {
937 service_h svc_handle = NULL;
938 msg_struct_t addr_info = NULL;
939 char szAddress[MAX_ADDRESS_VAL_LEN + 1] = {0,};
940 addr_info = addr_list->msg_struct_info[0];
941 msg_get_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, szAddress, MAX_ADDRESS_VAL_LEN);
943 char *address = (char*)calloc(1, strlen(szAddress)+1);
944 if (address == NULL) {
945 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
949 memcpy(address, szAddress, strlen(szAddress));
951 svc_err = service_create(&svc_handle);
952 if (svc_err != SERVICE_ERROR_NONE || svc_handle == NULL) {
953 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
958 service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
959 service_set_app_id(svc_handle, "email-composer-efl");
960 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
961 service_add_extra_data(svc_handle, SERVICE_DATA_TO, address);
963 Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
964 service_set_window(svc_handle, win_id);
966 svc_err = service_send_launch_request(svc_handle, NULL, NULL);
968 if (svc_err == SERVICE_ERROR_NONE) {
969 msg_ui_viewer_disconnect_handler(viewer_play_data);
970 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
971 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
973 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", svc_err);
977 service_destroy(svc_handle);
980 /* close title menu list */
981 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
983 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
986 void msg_ui_viewer_toolbar_call_cb(void *data, Evas_Object *obj, void *event_info)
988 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
989 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
990 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
991 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
993 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
995 if (addr_count == 1) {
996 char telnum[255] = {0,};
998 service_h svc_handle = NULL;
1000 service_create(&svc_handle);
1001 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1003 service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
1005 char *address = NULL;
1008 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1011 snprintf(telnum, sizeof(telnum), "tel:%s", address); /* Number to make a call */
1012 service_set_uri(svc_handle, telnum);
1015 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1016 service_destroy(svc_handle);
1020 if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
1021 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request failed ret : %d", ret);
1023 msg_ui_viewer_disconnect_handler(viewer_play_data);
1024 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1025 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL;
1027 service_destroy(svc_handle);
1030 /* close title menu list */
1031 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1033 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1036 void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_info)
1038 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1039 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1040 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1041 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1043 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1045 if (addr_count == 1) {
1046 service_error_e err = SERVICE_ERROR_NONE;
1047 service_h svc_handle = NULL;
1048 char telnum[MAX_ADDRESS_VAL_LEN+5] = {0,};
1049 char contact_id[VIEWER_BUFFER_SIZE_64] = {0,};
1051 service_create(&svc_handle);
1052 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1053 char *address = NULL;
1056 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1059 snprintf(telnum, sizeof(telnum), "tel:%s", address);
1060 snprintf(contact_id, sizeof(contact_id), "%d", contactid);
1063 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
1064 service_destroy(svc_handle);
1068 service_set_operation(svc_handle, "http://tizen.org/appcontrol/operation/vt");
1069 service_set_uri(svc_handle, telnum);
1070 service_add_extra_data(svc_handle, "ctindex", contact_id);
1071 err = service_send_launch_request(svc_handle, NULL, NULL);
1073 if (err == SERVICE_ERROR_NONE) {
1074 msg_ui_viewer_disconnect_handler(viewer_play_data);
1075 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1076 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
1078 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", err);
1081 service_destroy(svc_handle);
1084 /* close title menu list */
1085 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1087 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1090 void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info)
1092 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1093 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1094 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1095 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1097 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1099 if (addr_count == 1) {
1100 ui_gadget_h loaded_ug = NULL;
1101 char buf[DEF_BUF_LEN_D] = { 0, };
1103 service_h svc_handle = NULL;
1105 service_create(&svc_handle);
1106 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1108 char *address = NULL;
1111 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1114 if (strstr(address, "@")) {
1115 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
1116 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1117 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, address);
1119 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
1120 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1121 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, address);
1125 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
1126 service_destroy(svc_handle);
1130 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
1133 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1134 msg_ui_viewer_disconnect_handler(viewer_play_data);
1135 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1136 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1139 service_destroy(svc_handle);
1142 /* close title menu list */
1143 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1145 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1148 void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *event_info)
1150 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1151 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1152 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1153 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1155 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1157 if (addr_count == 1) {
1158 ui_gadget_h loaded_ug = NULL;
1159 char contactId[DEF_BUF_LEN_S] = { 0, };
1160 char buf[DEF_BUF_LEN_D] = { 0, };
1161 char *address = NULL;
1164 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1166 if (contact_id > 0 ) {
1167 service_h svc_handle = NULL;
1168 service_create(&svc_handle);
1169 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1171 snprintf(contactId, sizeof(contactId), "%d", contact_id);
1172 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
1174 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1175 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
1177 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
1180 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1181 msg_ui_viewer_disconnect_handler(viewer_play_data);
1182 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1183 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1186 service_destroy(svc_handle);
1188 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid contact_id = %d", contact_id);
1195 /* close title menu list */
1196 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1198 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1201 void msg_ui_viewer_toolbar_block_address_cb(void *data, Evas_Object *obj, void *event_info)
1203 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1204 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1205 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1206 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1208 Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
1209 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1211 char *popup_text = NULL;
1212 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
1213 char *address = NULL;
1216 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1219 popup_text = g_strdup_printf(szbuf, address);
1222 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
1226 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1230 elm_object_text_set(popup, popup_text);
1233 Evas_Object *btn_ok = elm_button_add(popup);
1234 elm_object_style_set(btn_ok, "popup_button/default");
1235 elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
1236 elm_object_part_content_set(popup, "button1", btn_ok);
1237 evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_block_ok_clicked_cb, viewer_play_data);
1239 Evas_Object *btn_cancel = elm_button_add(popup);
1240 elm_object_style_set(btn_cancel, "popup_button/default");
1241 elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
1242 elm_object_part_content_set(popup, "button2", btn_cancel);
1243 /* use same cb function with delete cancel button */
1244 evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
1246 evas_object_show(popup);
1247 viewer_play_data->popup = popup;
1248 viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
1250 /*disconnect mouse handler*/
1251 msg_ui_viewer_disconnect_handler(viewer_play_data);
1253 /* close title menu list */
1254 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1256 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1259 void msg_ui_viewer_toolbar_unblock_address_cb(void *data, Evas_Object *obj, void *event_info)
1261 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1262 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
1263 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1264 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
1266 char *address = NULL;
1269 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1272 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, address, &filter_id)) {
1273 msg_error_t err = MSG_SUCCESS;
1274 err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
1275 if (err != MSG_SUCCESS) {
1276 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
1281 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
1282 char *message_text = g_strdup_printf(szbuf, address);
1283 if (!message_text) {
1284 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1288 status_message_post(message_text);
1291 msg_ui_viewer_title_update(viewer_play_data, MSG_VIEWER_OPTION_BLOCK);
1295 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1299 /* close title menu list */
1300 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1302 /* play viewer again if previous status was PLAY */
1303 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
1304 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
1305 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
1310 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1313 static void __msg_ui_viewer_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1315 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1316 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1318 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1320 if (viewer_play_data->popup) {
1321 evas_object_del(viewer_play_data->popup);
1322 viewer_play_data->popup = NULL;
1323 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1326 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1328 if (addr_count == 1) {
1329 msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
1330 msg_error_t err = MSG_SUCCESS;
1332 err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
1333 if (err != MSG_SUCCESS) {
1334 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
1335 msg_release_struct(&filter);
1339 char *address = NULL;
1342 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
1345 err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, address, strlen(address));
1346 if (err != MSG_SUCCESS) {
1347 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
1348 msg_release_struct(&filter);
1353 err = msg_add_filter(viewer_play_data->msgHandle, filter);
1354 if (err != MSG_SUCCESS) {
1355 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
1356 msg_release_struct(&filter);
1361 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
1362 char *message_text = g_strdup_printf(szbuf, address);
1363 if (!message_text) {
1364 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1365 msg_release_struct(&filter);
1370 status_message_post(message_text);
1374 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
1375 msg_release_struct(&filter);
1379 msg_release_struct(&filter);
1382 /* play viewer again if previous status was PLAY */
1383 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
1384 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
1385 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
1394 void msg_ui_viewer_open_title_menu_genlist(void *data)
1396 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1397 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1398 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
1399 MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
1402 /* create box (for setting min size of genlist)*/
1403 Evas_Object *box = elm_box_add(viewer_play_data->play_layout);
1404 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1405 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
1406 evas_object_show(box);
1408 elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.title.menu", box);
1410 /* create genlist */
1411 Evas_Object *genlist = elm_genlist_add(box);
1412 elm_object_theme_set(genlist, viewer_play_data->title_th);
1413 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1414 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
1415 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
1416 evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
1417 evas_object_show(genlist);
1419 elm_box_pack_end(box, genlist);
1421 viewer_play_data->title_box_layout = box;
1423 int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
1425 if (addr_count == 1) {
1426 /* set genlist styles */
1427 viewer_play_data->itc_title_single.item_style = "1text.custom";
1428 viewer_play_data->itc_title_single.func.text_get = __msg_ui_viewer_title_menu_gl_text_get;
1429 viewer_play_data->itc_title_single.func.content_get = NULL;
1430 viewer_play_data->itc_title_single.func.state_get = NULL;
1431 viewer_play_data->itc_title_single.func.del = NULL;
1433 /* genlist list load */
1434 char *address = NULL;
1437 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
1440 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
1444 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address = %s, contact_id = %d", address, contact_id);
1446 if (msg_common_is_valid_phone_number(address)) {
1447 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_call_cb, viewer_play_data);
1448 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_vcall_cb, viewer_play_data);
1449 } else if (msg_common_is_valid_email_addr(address)) {
1450 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_email_cb, viewer_play_data);
1452 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
1456 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_view_contact_cb, viewer_play_data);
1458 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_add_to_contact_cb, viewer_play_data);
1460 if (msg_common_is_valid_phone_number(address)) {
1462 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, address, &filter_id))
1463 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_unblock_address_cb, viewer_play_data);
1465 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title_single), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK"), NULL, ELM_GENLIST_ITEM_NONE, msg_ui_viewer_toolbar_block_address_cb, viewer_play_data);
1468 evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * elm_genlist_items_count(genlist));
1471 /* set genlist styles */
1472 viewer_play_data->itc_title.item_style = "2text.1icon.2.custom";
1473 viewer_play_data->itc_title.func.text_get = __msg_ui_viewer_title_menu_gl_text_get;
1474 viewer_play_data->itc_title.func.content_get = __msg_ui_viewer_title_menu_gl_content_get;
1475 viewer_play_data->itc_title.func.state_get = NULL;
1476 viewer_play_data->itc_title.func.del = __msg_ui_viewer_title_menu_del;
1478 /* genlist list load */
1479 for (i = 0; i < addr_count; i++) {
1480 addrInfo = (MSG_VIEWER_ADDR_INFO *)calloc(1, sizeof(MSG_VIEWER_ADDR_INFO));
1482 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "addrInfo calloc failed");
1486 char *address = NULL;
1489 msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, i, &address, &contact_id);
1492 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is null");
1496 strncpy(addrInfo->address, address, MAX_ADDRESS_VAL_LEN);
1499 char *display_name = msg_viewer_util_get_display_name_by_index(contact_id);
1501 strncpy(addrInfo->name, display_name, MAX_DISPLAY_NAME_LEN);
1505 addrInfo->contact_id = contact_id;
1507 elm_genlist_item_append(genlist, &(viewer_play_data->itc_title), addrInfo, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_title_menu_gl_sel, viewer_play_data);
1510 /* set genlist size */
1511 if (addr_count >= VIEWER_TITLE_MENU_GENLIST_MAX_ITEM)
1512 evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * VIEWER_TITLE_MENU_GENLIST_MAX_ITEM * elm_config_scale_get());
1514 evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * addr_count * elm_config_scale_get());
1517 /** emit signal for changing state of title menu list to open */
1518 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,open", "");
1519 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
1521 viewer_play_data->title_menu_opened = true;
1523 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1526 void msg_ui_viewer_close_title_menu_genlist(void *data)
1528 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1529 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1530 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
1532 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,close", "");
1534 if (!viewer_play_data->playcontroller_opened)
1535 elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
1537 Evas_Object *layout = elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.title.menu");
1539 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete box layout");
1540 evas_object_del(layout);
1543 viewer_play_data->title_menu_opened = false;
1544 viewer_play_data->title_box_layout = NULL;
1546 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1549 static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
1551 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1552 MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
1553 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !addrInfo, NULL);
1555 if (g_strcmp0(part, "elm.text") == 0) {
1556 return strdup((char *)data);
1557 } else if (g_strcmp0(part, "elm.text.1") == 0) {
1558 if (addrInfo->contact_id > 0 && addrInfo->name[0] != '\0')
1559 return strdup(addrInfo->name);
1560 else if (addrInfo->address[0] != '\0')
1561 return strdup (addrInfo->address);
1563 return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1564 } else if (g_strcmp0(part, "elm.text.2") == 0) {
1565 if (addrInfo->address[0] != '\0')
1566 return strdup(addrInfo->address);
1568 return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
1571 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1576 static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part)
1578 // Currently, this function do nothing, caller_id concept is not determined
1582 static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info)
1584 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1585 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1586 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
1588 Elm_Object_Item *item = NULL;
1589 MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
1591 item = (Elm_Object_Item *)event_info;
1592 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !item, "Item is NULL or Item is not Message item\n");
1594 addrInfo = (MSG_VIEWER_ADDR_INFO *)elm_object_item_data_get(item);
1595 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, addrInfo == NULL, "item_data is NULL");
1597 elm_genlist_item_selected_set(item, 0);
1599 if (viewer_play_data->popup) {
1600 evas_object_del(viewer_play_data->popup);
1601 viewer_play_data->popup = NULL;
1602 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1605 Evas_Object *popup = NULL;
1606 Evas_Object *list = NULL;
1607 Evas_Object *btn_close = NULL;
1609 popup = elm_popup_add(viewer_play_data->main_window);
1610 elm_object_style_set(popup, "min_menustyle");
1611 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1613 btn_close = elm_button_add(popup);
1614 elm_object_style_set(btn_close, "popup_button/default");
1615 elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
1616 elm_object_part_content_set(popup, "button1", btn_close);
1617 evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_title_menu_popup_close_clicked_cb, viewer_play_data);
1619 list = elm_list_add(popup);
1620 elm_list_mode_set(list, ELM_LIST_EXPAND);
1622 evas_object_data_set(list, "viewer_play_data", viewer_play_data);
1624 if (msg_common_is_valid_phone_number(addrInfo->address)) {
1625 elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1626 elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1627 } else if (msg_common_is_valid_email_addr(addrInfo->address)) {
1628 elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1630 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
1633 if (addrInfo->contact_id> 0) {
1634 elm_object_part_text_set(popup, "title,text", addrInfo->name);
1635 elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1637 elm_object_part_text_set(popup, "title,text", addrInfo->address);
1638 elm_list_item_append(list, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1641 if (msg_common_is_valid_phone_number(addrInfo->address)) {
1643 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, addrInfo->address, &filter_id))
1644 elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1646 elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
1650 elm_object_content_set(popup, list);
1651 evas_object_show(popup);
1653 viewer_play_data->popup = popup;
1654 viewer_play_data->popup_type = MSG_VIEWER_TITLE_MENU_POPUP;
1656 /*disconnect mouse handler*/
1657 msg_ui_viewer_disconnect_handler(viewer_play_data);
1659 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1662 static void __msg_ui_viewer_title_menu_del(void *data, Evas_Object *obj)
1664 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1665 MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
1666 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL!");
1671 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1674 static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1676 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1677 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1679 if (viewer_play_data->popup) {
1680 evas_object_del(viewer_play_data->popup);
1681 viewer_play_data->popup = NULL;
1682 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1685 /* connect handler again*/
1686 msg_ui_viewer_connect_handler(viewer_play_data);
1688 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1691 static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info)
1693 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1694 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
1695 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL");
1696 MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
1697 addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
1698 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL");
1700 if (viewer_play_data->popup) {
1701 evas_object_del(viewer_play_data->popup);
1702 viewer_play_data->popup = NULL;
1703 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1706 const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info);
1708 if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) {
1709 char telnum[255] = {0,};
1711 service_h svc_handle = NULL;
1713 service_create(&svc_handle);
1714 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1716 service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
1717 snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address); /* Number to make a call */
1718 service_set_uri(svc_handle, telnum);
1719 if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
1720 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service failed ret : %d", ret);
1722 msg_ui_viewer_disconnect_handler(viewer_play_data);
1723 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1724 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL;
1727 service_destroy(svc_handle);
1728 } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) {
1729 service_error_e err = SERVICE_ERROR_NONE;
1730 service_h svc_handle = NULL;
1731 char telnum[MAX_ADDRESS_VAL_LEN+5] = {0,};
1732 char contact_id[VIEWER_BUFFER_SIZE_64] = {0,};
1734 service_create(&svc_handle);
1735 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1737 snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address);
1738 snprintf(contact_id, sizeof(contact_id), "%d", addrInfo->contact_id);
1740 service_set_operation(svc_handle, "http://tizen.org/appcontrol/operation/vt");
1741 service_set_uri(svc_handle, telnum);
1742 service_add_extra_data(svc_handle, "ctindex", contact_id);
1743 err = service_send_launch_request(svc_handle, NULL, NULL);
1745 if (err == SERVICE_ERROR_NONE) {
1746 msg_ui_viewer_disconnect_handler(viewer_play_data);
1747 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1748 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
1750 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", err);
1753 service_destroy(svc_handle);
1754 } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */
1755 ui_gadget_h loaded_ug = NULL;
1756 char buf[DEF_BUF_LEN_D] = { 0, };
1757 service_h svc_handle = NULL;
1759 service_create(&svc_handle);
1760 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1762 if (strstr(addrInfo->address, "@")) {
1763 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
1764 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1765 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, addrInfo->address);
1767 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
1768 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1769 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, addrInfo->address);
1772 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
1775 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1776 msg_ui_viewer_disconnect_handler(viewer_play_data);
1777 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1778 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1781 service_destroy(svc_handle);
1782 } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) {
1783 ui_gadget_h loaded_ug = NULL;
1784 char contactId[DEF_BUF_LEN_S] = { 0, };
1785 char buf[DEF_BUF_LEN_D] = { 0, };
1786 service_h svc_handle = NULL;
1788 service_create(&svc_handle);
1789 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1791 snprintf(contactId, sizeof(contactId), "%d", addrInfo->contact_id);
1792 snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
1794 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
1795 service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
1797 loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
1800 msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
1801 msg_ui_viewer_disconnect_handler(viewer_play_data);
1802 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
1803 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
1806 service_destroy(svc_handle);
1807 } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) {
1808 service_h svc_handle = NULL;
1809 service_error_e svc_err = SERVICE_ERROR_NONE;
1811 service_create(&svc_handle);
1812 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
1814 service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
1815 service_set_app_id(svc_handle, "email-composer-efl");
1816 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
1817 service_add_extra_data(svc_handle, SERVICE_DATA_TO, addrInfo->address);
1819 Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
1820 service_set_window(svc_handle, win_id);
1822 svc_err = service_send_launch_request(svc_handle, NULL, NULL);
1824 if (svc_err == SERVICE_ERROR_NONE) {
1825 msg_ui_viewer_disconnect_handler(viewer_play_data);
1826 viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
1827 viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
1829 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", svc_err);
1832 service_destroy(svc_handle);
1833 } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK")) == 0) {
1835 if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, addrInfo->address, &filter_id)) {
1836 msg_error_t err = MSG_SUCCESS;
1837 err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
1838 if (err != MSG_SUCCESS) {
1839 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
1843 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
1845 char *message_text = g_strdup_printf(szbuf, addrInfo->address);
1846 if (!message_text) {
1847 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1851 status_message_post(message_text);
1854 } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK")) == 0) {
1855 Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
1856 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1858 char *popup_text = NULL;
1859 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
1861 popup_text = g_strdup_printf(szbuf, addrInfo->address);
1863 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
1866 elm_object_text_set(popup, popup_text);
1869 Evas_Object *btn_ok = elm_button_add(popup);
1870 elm_object_style_set(btn_ok, "popup_button/default");
1871 elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
1872 elm_object_part_content_set(popup, "button1", btn_ok);
1873 evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_title_menu_block_ok_clicked_cb, viewer_play_data);
1874 evas_object_data_set(btn_ok, "addrInfo", addrInfo);
1876 Evas_Object *btn_cancel = elm_button_add(popup);
1877 elm_object_style_set(btn_cancel, "popup_button/default");
1878 elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
1879 elm_object_part_content_set(popup, "button2", btn_cancel);
1880 evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
1882 evas_object_show(popup);
1883 viewer_play_data->popup = popup;
1884 viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
1886 /* disconnect mouse handler */
1887 msg_ui_viewer_disconnect_handler(viewer_play_data);
1890 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1893 static void __msg_ui_viewer_title_menu_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1895 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1896 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1898 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1899 MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)evas_object_data_get(obj, "addrInfo");
1900 msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
1901 msg_error_t err = MSG_SUCCESS;
1903 if (viewer_play_data->popup) {
1904 evas_object_del(viewer_play_data->popup);
1905 viewer_play_data->popup = NULL;
1906 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1909 err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
1910 if (err != MSG_SUCCESS) {
1911 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
1912 msg_release_struct(&filter);
1916 err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, addrInfo->address, strlen(addrInfo->address));
1917 if (err != MSG_SUCCESS) {
1918 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
1919 msg_release_struct(&filter);
1923 err = msg_add_filter(viewer_play_data->msgHandle, filter);
1924 if (err != MSG_SUCCESS) {
1925 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
1926 msg_release_struct(&filter);
1930 char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
1931 char *message_text = g_strdup_printf(szbuf, addrInfo->address);
1932 if (!message_text) {
1933 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
1934 msg_release_struct(&filter);
1938 status_message_post(message_text);
1941 msg_release_struct(&filter);
1943 /* close title menu popup */
1944 msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
1949 void msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
1951 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
1952 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
1953 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
1954 Evas_Object *popup = NULL;
1955 Evas_Object *box = NULL;
1956 Evas_Object *genlist = NULL;
1957 Evas_Object *btn_save = NULL;
1958 Evas_Object *btn_close = NULL;
1960 int total_media_count = 0;
1961 int popup_height = 0;
1963 /* destroy previous popup */
1964 if (viewer_play_data->popup) {
1965 evas_object_del(viewer_play_data->popup);
1966 viewer_play_data->popup = NULL;
1967 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
1970 total_media_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
1973 popup = elm_popup_add(viewer_play_data->main_window);
1974 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1975 evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
1977 if (total_media_count > 3 )
1978 elm_object_style_set(popup, "menustyle");
1980 elm_object_style_set(popup, "min_menustyle");
1982 /* set popup title */
1983 elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_ATTACHMENTS"));
1985 /* set select all genlist item style */
1986 viewer_play_data->attach_sa_class.item_style = "1text.1icon.2";
1987 viewer_play_data->attach_sa_class.func.text_get = __msg_ui_viewer_save_attachments_sa_gl_text_get;
1988 viewer_play_data->attach_sa_class.func.content_get = __msg_ui_viewer_save_attachments_sa_gl_content_get;
1989 viewer_play_data->attach_sa_class.func.state_get = NULL;
1990 viewer_play_data->attach_sa_class.func.del = NULL;
1992 /* set genlist style */
1993 viewer_play_data->attach_item_class.item_style = "1text.2icon.2";
1994 viewer_play_data->attach_item_class.func.text_get = __msg_ui_viewer_save_attachments_gl_text_get;
1995 viewer_play_data->attach_item_class.func.content_get = __msg_ui_viewer_save_attachments_gl_content_get;
1996 viewer_play_data->attach_item_class.func.state_get = NULL;
1997 viewer_play_data->attach_item_class.func.del = NULL;
1999 /* create genlist */
2000 genlist = elm_genlist_add(viewer_play_data->main_window);
2001 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2002 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
2003 evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
2005 /* add genlist item based on media count, if item's count is over 1 then 'select all' item should be inserted*/
2006 if (total_media_count > 1) {
2007 /* add Select all item */
2008 elm_genlist_item_append(genlist, &viewer_play_data->attach_sa_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_sa_gl_sel, NULL);
2010 /* add each item (order is inserted + attached) */
2011 for (index = 1; index < total_media_count+1; index++) {
2012 elm_genlist_item_append(genlist, &viewer_play_data->attach_item_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_gl_sel, NULL);
2015 /* add each item (order is inserted + attached) */
2016 for (index = 0; index < total_media_count; index++) {
2017 elm_genlist_item_append(genlist, &viewer_play_data->attach_item_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_gl_sel, NULL);
2021 /* add save button */
2022 btn_save = elm_button_add(popup);
2023 elm_object_style_set(btn_save, "popup_button/default");
2024 elm_object_text_set(btn_save, dgettext("sys_string", "IDS_COM_SK_SAVE"));
2025 elm_object_part_content_set(popup, "button1", btn_save);
2026 evas_object_smart_callback_add(btn_save, "clicked", __msg_ui_viewer_save_attachments_popup_save_clicked_cb, viewer_play_data);
2027 viewer_play_data->save_button = btn_save;
2028 elm_object_disabled_set(viewer_play_data->save_button, EINA_TRUE);
2030 /* add close button */
2031 btn_close = elm_button_add(popup);
2032 elm_object_style_set(btn_close, "popup_button/default");
2033 elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
2034 elm_object_part_content_set(popup, "button2", btn_close);
2035 evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb, viewer_play_data);
2037 /* set popup style */
2038 box = elm_box_add(viewer_play_data->main_window);
2039 popup_height = VIEWER_ATTACH_GL_ITEM_HEIGHT * ((total_media_count > 3) ? 4 : ((total_media_count > 1) ? total_media_count + 1 : total_media_count));
2040 evas_object_size_hint_min_set(box, 0, popup_height * elm_config_scale_get());
2041 evas_object_show(genlist);
2042 elm_box_pack_end(box, genlist);
2043 elm_object_content_set(popup, box);
2046 evas_object_show(popup);
2047 viewer_play_data->save_attachment_gl= genlist;
2048 viewer_play_data->popup = popup;
2049 viewer_play_data->popup_type = MSG_VIEWER_ATTACHMENTS_POPUP;
2051 /*disconnect mouse handler*/
2052 msg_ui_viewer_disconnect_handler(viewer_play_data);
2054 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2057 static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2059 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2060 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2063 int total_count = 0;
2064 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2066 if (viewer_play_data->popup) {
2067 evas_object_del(viewer_play_data->save_button);
2068 viewer_play_data->save_button = NULL;
2069 evas_object_del(viewer_play_data->popup);
2070 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2071 viewer_play_data->popup = NULL;
2072 viewer_play_data->sa_check = NULL;
2075 total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
2077 while (index < total_count) {
2078 if (index < viewer_play_data->insert_count)
2079 media_info = eina_list_nth(viewer_play_data->insert_list, index);
2080 else if (index < total_count)
2081 media_info = eina_list_nth(viewer_play_data->attach_list, index-viewer_play_data->insert_count);
2083 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!", index);
2085 if (media_info ) // disable check status
2086 media_info->isChecked = FALSE;
2091 viewer_play_data->isSelectAll = FALSE;
2093 /* connect handler again*/
2094 msg_ui_viewer_connect_handler(viewer_play_data);
2096 /* play viewer again if previous status was PLAY */
2097 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2098 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2099 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2104 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2107 static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2109 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2110 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2111 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2113 int attach_count = 0;
2114 int insert_count = 0;
2115 int total_count = 0;
2116 int selected_count = 0;
2119 int insert_index = 0;
2120 int attach_index = 0;
2121 int failed_count = 0;
2122 int saved_count = 0;
2124 if (viewer_play_data->popup) {
2125 evas_object_del(viewer_play_data->save_button);
2126 viewer_play_data->save_button = NULL;
2127 evas_object_del(viewer_play_data->popup);
2128 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2129 viewer_play_data->popup = NULL;
2130 viewer_play_data->sa_check = NULL;
2133 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_Info = NULL;
2135 insert_count = eina_list_count(viewer_play_data->insert_list);
2136 attach_count = eina_list_count(viewer_play_data->attach_list);
2137 total_count = insert_count + attach_count;
2139 while (index < total_count) {
2140 if (index < insert_count)
2141 media_Info = eina_list_nth(viewer_play_data->insert_list , insert_index++);
2142 else if (index < total_count)
2143 media_Info = eina_list_nth(viewer_play_data->attach_list , attach_index++);
2146 bool saveCondition = (viewer_play_data->isSelectAll) ? TRUE : (media_Info->isChecked ? TRUE : FALSE);
2148 if (saveCondition) {
2151 /*get default file path*/
2152 MSG_BOOL result = FALSE;
2153 char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
2155 result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
2157 char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
2158 snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, media_Info->pfile_name);
2159 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
2160 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", media_Info->pfile_path);
2162 char *result_path = msg_ui_viewer_util_copy_file(media_Info->pfile_path, dst_path);
2167 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
2174 //release check status
2175 media_Info->isChecked = FALSE;
2176 if (viewer_play_data->isSelectAll)
2177 viewer_play_data->isSelectAll = FALSE;
2180 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
2188 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Selected(%d) / Total(%d) [inserted(%d),attached(%d)]", selected_count, total_count, insert_count, attach_count);
2189 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Saved(%d), Failed(%d)", saved_count, failed_count);
2191 /* show indicator status text */
2192 if (failed_count == selected_count) {
2193 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2195 if (selected_count == 1 && saved_count == 1) {
2196 status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
2198 char buf[DEF_BUF_LEN_S + 1] = {0, };
2199 snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, selected_count);
2200 status_message_post(buf);
2204 /* connect handler again*/
2205 msg_ui_viewer_connect_handler(viewer_play_data);
2207 /* play viewer again if previous status was PLAY */
2208 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2209 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2210 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2215 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2218 static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part)
2220 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2221 int index = (int)data;
2223 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2225 if (!strcmp(part, "elm.text")) {
2227 return strdup(dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
2229 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid index of select all(%d)", index);
2236 static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part)
2238 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2239 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2240 int index = (int)data;
2243 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2245 if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
2246 check = elm_check_add(obj);
2247 elm_check_state_pointer_set(check, &(viewer_play_data->isSelectAll));
2248 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2249 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
2250 evas_object_smart_callback_add(check, "changed", __msg_ui_viewer_save_attachments_sa_check_changed_cb, viewer_play_data);
2251 viewer_play_data->sa_check = check;
2259 static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
2261 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2262 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2264 Eina_List * realized_list;
2265 Elm_Object_Item *it;
2269 int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
2270 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "total Count = %d", total_count);
2271 checked = elm_check_state_get(obj);
2272 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "checked status = %d", checked);
2273 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2275 for (i = 0; i < total_count; i++) {
2276 if (i < viewer_play_data->insert_count) {
2277 media_info = eina_list_nth(viewer_play_data->insert_list, i);
2278 media_info->isChecked = checked;
2279 } else if (i < total_count) {
2280 media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2281 media_info->isChecked = checked;
2283 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2287 // Update realized items only
2288 realized_list = elm_genlist_realized_items_get(viewer_play_data->save_attachment_gl);
2289 EINA_LIST_FOREACH(realized_list, l, it) {
2290 elm_genlist_item_update(it);
2295 static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info)
2297 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2298 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2299 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2302 int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
2304 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
2305 MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
2308 index = (int)elm_object_item_data_get(item);
2309 elm_genlist_item_selected_set(item, EINA_FALSE);
2311 viewer_play_data->isSelectAll = !viewer_play_data->isSelectAll;
2313 //check state changed cb will be called
2314 elm_check_state_set(viewer_play_data->sa_check, viewer_play_data->isSelectAll);
2315 elm_genlist_item_update(item);
2317 if (total_count > 1) {
2318 for (i = 0; i < total_count; i++) {
2319 if (i < viewer_play_data->insert_count) {
2320 tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
2322 } else if (i < total_count) {
2323 tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2325 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2328 elm_check_state_set(tmp_media_info->check_item, (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE);
2329 tmp_media_info->isChecked = (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE;
2332 elm_object_disabled_set(viewer_play_data->save_button, (viewer_play_data->isSelectAll) ? EINA_FALSE : EINA_TRUE);
2336 static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part)
2338 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2339 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2340 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
2342 int index = (int) data;
2344 int insert_count = viewer_play_data->insert_count;
2345 int attach_count = viewer_play_data->attach_count;
2346 int total_count = insert_count + attach_count;
2347 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2349 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2351 realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item
2354 if (realIndex < 0 ) {
2355 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
2359 if (!strcmp(part, "elm.text")) {
2360 if (realIndex < insert_count) {
2361 media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
2362 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[INSERT MEDIA] name is = %s", media_info->pfile_name);
2363 } else if (realIndex < insert_count+attach_count) {
2364 media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
2365 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ATTACH MEDIA] name is = %s", media_info->pfile_name);
2368 return strdup(media_info->pfile_name);
2373 static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part)
2375 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2376 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2377 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
2378 MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
2379 int index = (int)data;
2381 int realIndex = index-1;
2382 int insert_count = viewer_play_data->insert_count;
2383 int attach_count = viewer_play_data->attach_count;
2384 int total_count = insert_count + attach_count;
2386 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
2388 realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item
2391 if (realIndex < 0 ) {
2392 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
2396 if (realIndex < insert_count) {
2397 media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
2398 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
2399 } else if (realIndex < total_count) {
2400 media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
2401 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
2404 if (strcmp(part, "elm.icon.1") == 0) {
2405 check = elm_check_add(obj);
2406 //set the State pointer to keep the current UI state of Checkbox.
2407 elm_check_state_pointer_set(check, &media_info->isChecked);
2408 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2409 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
2411 media_info->check_item = check;
2414 } else if (strcmp(part, "elm.icon.2") == 0) {
2415 Evas_Object *image = NULL;
2417 image = elm_icon_add(obj);
2419 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info->pfile_path = %s", media_info->pfile_path);
2421 /*set attach file icon*/
2422 if (media_info->media_type == MSG_VIEWER_MEDIA_IMG ||
2423 media_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
2424 elm_image_file_set(image, media_info->pfile_path, NULL);
2425 } else if (media_info->media_type == MSG_VIEWER_MEDIA_DRM) {
2426 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
2428 if (strlen(media_info->pfile_path)) {
2429 const char *icon_path = NULL;
2431 icon_path = msg_common_get_file_icon(media_info->pfile_path);
2433 elm_image_file_set(image, MSG_IMAGES_EDJ, icon_path);
2435 D_EMSG("icon_path is NULL");
2436 elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
2439 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
2445 evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
2449 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
2455 static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info)
2457 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2458 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
2459 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2464 int insert_count = viewer_play_data->insert_count;
2465 int attach_count = viewer_play_data->attach_count;
2466 int total_count = insert_count + attach_count;
2467 bool isAllSelected = TRUE;
2468 bool isNoneSelected = TRUE;
2470 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
2471 MSG_VIEWER_ATTACH_MEDIA_INFO_S *sel_media_info = NULL;
2472 MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
2475 index = (int)elm_object_item_data_get(item);
2476 realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item
2479 if (realIndex < 0 ) {
2480 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
2484 elm_genlist_item_selected_set(item, EINA_FALSE);
2486 if (realIndex < insert_count) {
2487 sel_media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
2488 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
2490 sel_media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
2491 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
2494 // toggle check status
2495 sel_media_info->isChecked = !sel_media_info->isChecked;
2497 elm_genlist_item_update(item);
2499 //check condition for set select all item
2500 if (total_count > 1 && sel_media_info->isChecked) {
2502 for (i = 0; i < total_count; i++) {
2503 if (i < viewer_play_data->insert_count) {
2504 tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
2505 if (!tmp_media_info->isChecked) {
2506 isAllSelected = FALSE;
2509 } else if (i < total_count) {
2510 tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2511 if (!tmp_media_info->isChecked) {
2512 isAllSelected = FALSE;
2516 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2520 if (isAllSelected) {
2521 elm_check_state_set(viewer_play_data->sa_check, EINA_TRUE);
2522 viewer_play_data->isSelectAll = EINA_TRUE;
2526 // check condition for release select all item
2527 if (total_count > 1 && !sel_media_info->isChecked && viewer_play_data->isSelectAll) {
2528 elm_check_state_set(viewer_play_data->sa_check, EINA_FALSE);
2529 viewer_play_data->isSelectAll = EINA_FALSE;
2532 // check condition for enable save button item
2533 for (i = 0; i < total_count; i++) {
2534 if (i < viewer_play_data->insert_count) {
2535 tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
2536 if (tmp_media_info->isChecked) {
2537 isNoneSelected = FALSE;
2540 } else if (i < total_count) {
2541 tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
2542 if (tmp_media_info->isChecked) {
2543 isNoneSelected = FALSE;
2547 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
2550 elm_object_disabled_set(viewer_play_data->save_button, (isNoneSelected) ? EINA_TRUE : EINA_FALSE);
2554 static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data)
2556 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2557 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
2558 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->attach_list == NULL);
2560 int attach_count = eina_list_count(viewer_play_data->attach_list);
2562 int attach_index = 0;
2563 int failed_count = 0;
2564 int saved_count = 0;
2566 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttachInfo = NULL;
2568 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attach_cnt = %d", attach_count);
2570 while (index < attach_count) {
2571 pAttachInfo = eina_list_nth(viewer_play_data->attach_list , attach_index++);
2574 /*get default file path*/
2575 MSG_BOOL result = FALSE;
2576 char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
2578 result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
2580 char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
2581 snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttachInfo->pfile_name);
2582 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
2583 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", pAttachInfo->pfile_path);
2585 char *result_path = msg_ui_viewer_util_copy_file(pAttachInfo->pfile_path, dst_path);
2590 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
2598 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
2607 /* show indicator status text */
2608 if (failed_count == attach_count) {
2609 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2611 if (attach_count == 1 && failed_count == 0) {
2612 status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
2614 char buf[DEF_BUF_LEN_S + 1] = {0, };
2615 snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, attach_count);
2616 status_message_post(buf);
2620 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2623 void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2625 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2626 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
2627 MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
2628 MSG_PLAY_DATA_S *viewer_play_data = pAttach_info->viewer_play_data;
2630 MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, "viewer_play_data is NULL");
2632 if (strlen(pAttach_info->pfile_path) == 0) {
2633 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pfile_path is NULL");
2634 if (pAttach_info->isSaveAll == FALSE) {
2635 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2637 __msg_ui_viewer_help_page_save_all_item(viewer_play_data);
2641 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pAttach_info->pfile_path);
2642 MSG_BOOL result = 0;
2643 MSG_BOOL issave = TRUE;
2644 char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
2646 /*get default file path*/
2647 result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
2649 char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
2650 snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttach_info->pfile_name);
2651 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path);
2653 char *result_path = msg_ui_viewer_util_copy_file(pAttach_info->pfile_path, dst_path);
2657 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed, [src] = %s, [dst] = %s", pAttach_info->pfile_path, dst_path);
2661 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed");
2662 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2667 status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
2669 status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
2672 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2675 static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info)
2677 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2678 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2679 const char *label = elm_object_item_text_get((Elm_Object_Item *)event_info);
2681 if (viewer_play_data->popup) {
2682 evas_object_del(viewer_play_data->popup);
2683 viewer_play_data->popup = NULL;
2684 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2687 if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB")) == 0) {
2688 msg_ui_viewer_copy_message_text_to_clipboard(viewer_play_data);
2690 /* play viewer again if previous status was PLAY */
2691 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2692 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2693 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2697 } else if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB")) == 0) {
2698 msg_ui_viewer_create_msg_detail_popup(viewer_play_data);
2700 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid list type");
2705 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2708 static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
2710 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2711 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2713 if (viewer_play_data->popup) {
2714 evas_object_del(viewer_play_data->popup);
2715 viewer_play_data->popup = NULL;
2716 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2719 /* play viewer again if previous status was PLAY */
2720 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2721 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2722 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2727 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
2730 static void __msg_ui_viewer_protection_cb(void *data, Evas_Object *obj, void *event_info)
2732 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
2733 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
2735 MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
2736 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
2737 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
2739 MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
2740 MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_main_data == NULL);
2742 msg_error_t err = MSG_SUCCESS;
2743 bool is_protected = false;
2745 msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
2747 /* get lock status and change status */
2748 err = msg_update_protected_status(viewer_play_data->msgHandle, viewer_play_data->msgID, ((is_protected) ? false : true));
2750 /* update message info */
2751 if (err != MSG_SUCCESS) {
2752 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_update_protected_status is failed");
2756 msg_set_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, !is_protected);
2758 /* delete ctx popup */
2759 if (viewer_play_data->popup) {
2760 evas_object_del(viewer_play_data->popup);
2761 viewer_play_data->popup = NULL;
2762 viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
2765 /* signal emit for showing/hiding lock icon */
2767 edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/hide", "*");
2769 edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/show", "*");
2771 /* play viewer again if previous status was PLAY */
2772 if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
2773 if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
2774 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
2779 /* send refresh conversation result to bubble-composer ug */
2780 char str_id[DEF_BUF_LEN] = {0,};
2781 service_h svc_handle = NULL;
2783 service_create(&svc_handle);
2784 if (svc_handle < 0 || svc_handle == NULL) {
2785 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
2789 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_REFRESH_CONV);
2791 snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
2792 service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
2794 ug_send_result(viewer_main_data->viewer_ug, svc_handle);
2796 service_destroy(svc_handle);
2798 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);