Apply latest codes migration
authorDowon Park <dowon.park@samsung.com>
Thu, 21 Mar 2013 09:56:30 +0000 (18:56 +0900)
committerDowon Park <dowon.park@samsung.com>
Thu, 21 Mar 2013 09:56:30 +0000 (18:56 +0900)
Change-Id: Id3b1cf74a1f0f222d256c80d86c8259f745466a2

29 files changed:
common/msg-ui-common-utility.c
viewer/CMakeLists.txt
viewer/include/msg-ui-viewer-play-view.h
viewer/include/msg-ui-viewer-utility.h
viewer/smil-player/include/msg-smil-event-manager.h
viewer/smil-player/include/msg-smil-player-interface.h
viewer/smil-player/include/msg-smil-player.h
viewer/smil-player/include/msg-smil-render.h
viewer/smil-player/include/msg-smil-types.h
viewer/smil-player/src/msg-smil-content-manager.c
viewer/smil-player/src/msg-smil-event-manager.c
viewer/smil-player/src/msg-smil-media-render.c
viewer/smil-player/src/msg-smil-player-interface.c
viewer/smil-player/src/msg-smil-player.c
viewer/smil-player/src/msg-smil-render.c
viewer/src/msg-ui-viewer-callback.c
viewer/src/msg-ui-viewer-drm-list.c
viewer/src/msg-ui-viewer-gadget.c
viewer/src/msg-ui-viewer-main.c
viewer/src/msg-ui-viewer-play-view-attachment.c [new file with mode: 0755]
viewer/src/msg-ui-viewer-play-view-callback.c [deleted file]
viewer/src/msg-ui-viewer-play-view-help-page.c [new file with mode: 0755]
viewer/src/msg-ui-viewer-play-view-main.c [moved from viewer/src/msg-ui-viewer-play-view.c with 58% similarity]
viewer/src/msg-ui-viewer-play-view-options.c [new file with mode: 0755]
viewer/src/msg-ui-viewer-play-view-play-controller.c [new file with mode: 0755]
viewer/src/msg-ui-viewer-play-view-volume-bar.c [new file with mode: 0755]
viewer/src/msg-ui-viewer-utility.c
viewer/theme/msg_viewer.edc
viewer/theme/msg_viewer_defines.edc [new file with mode: 0755]

index ce2e954..0e5af10 100755 (executable)
@@ -306,8 +306,11 @@ Eina_Strbuf *msg_common_get_markup_text(const char *src, char *fontcolor, char *
                Eina_Strbuf *font_buf = NULL;
                char *token = NULL;
                char *tmp_buf = NULL;
-               char *remained_string = NULL;
+               char *tmp_str = NULL;
+               int tmp_str_len = 0;
                int src_text_len = 0;
+               size_t start = 0;
+               size_t end = 0;
 
                src_text_len = strlen(src_text);
                D_MSG("src_text_len : %d", src_text_len);
@@ -352,33 +355,50 @@ Eina_Strbuf *msg_common_get_markup_text(const char *src, char *fontcolor, char *
 
                snprintf(tmp_buf, src_text_len + 1, "%s\n", (char *) src_text);
 
-               token = strtok_r(tmp_buf, "\n", &remained_string);
+               while (tmp_buf[start] != '\0') {
+                       end = strcspn(tmp_buf + start, "\n");
 
-               int token_len = 0;
+                       if (end == 0) {
+                               eina_strbuf_append(markup_text, "<br>");
+                               start += (tmp_buf[start + end] != '\0') ? end + 1 : end;
+                               continue;
+                       }
+
+                       token = (char *)calloc(1, sizeof(char) * (end + 1));
+                       if (token == NULL) {
+                               D_EMSG("calloc is failed");
+                               break;
+                       }
+
+                       strncpy(token, tmp_buf + start, end);
 
-               while (token) {
                        char *tmp_str = elm_entry_utf8_to_markup(token);
 
                        if (!tmp_str) {
                                D_EMSG("elm_entry_utf8_to_markup() is failed, [%s]. Stop parsing entry text", token);
+                               free(token);
                                break;
                        }
 
-                       token_len = strlen(tmp_str);
+                       tmp_str_len = strlen(tmp_str);
 
-                       if (tmp_str[token_len - 1] == 0x0D) { /* if Enter is added via Window system, CR+LF is added. */
+                       if (tmp_str[tmp_str_len - 1] == 0x0D) { /* if Enter is added via Window system, CR+LF is added. */
                                D_MSG("CR length is decreased");
-                               token_len = token_len - 1;
+                               tmp_str_len = tmp_str_len - 1;
                        }
 
-                       if (!__msg_common_make_normal_markup_text(markup_text, font_buf, tmp_str, token_len))
+                       if (!__msg_common_make_normal_markup_text(markup_text, font_buf, tmp_str, tmp_str_len))
                                D_MSG("__msg_common_make_normal_markup_text is failed");
 
                        if (tmp_str)
                                free(tmp_str);
 
-                       token = strtok_r(NULL, "\n", &remained_string);
                        if (token)
+                               free(token);
+
+                       start += (tmp_buf[start+end] != '\0') ? end + 1 : end;
+
+                       if (start != end)
                                eina_strbuf_append(markup_text, "<br>");
                }
 
@@ -1562,10 +1582,10 @@ char *msg_common_make_message_detail_text(msg_handle_t msgHandle, int msgId)
                        msg_struct_list_s report_list = {0,};
                        MSG_DETAIL_REPORT_LIST_S *report_data_list = NULL;
                        msg_struct_t mms_send_opt = NULL;
-                       msg_get_struct_handle(sendOpt, MSG_SEND_OPT_MMS_OPT_HND, &mms_send_opt);
 
-                       msg_get_bool_value(mms_send_opt, MSG_MMS_SENDOPT_DELIVERY_REPORT_BOOL, &delivery_flag);
-                       msg_get_bool_value(mms_send_opt, MSG_MMS_SENDOPT_READ_REPLY_BOOL, &read_flag);
+                       msg_get_bool_value(sendOpt, MSG_SEND_OPT_DELIVER_REQ_BOOL, &delivery_flag);
+                       msg_get_struct_handle(sendOpt, MSG_SEND_OPT_MMS_OPT_HND, &mms_send_opt);
+                       msg_get_bool_value(mms_send_opt, MSG_MMS_SENDOPTION_READ_REQUEST_BOOL, &read_flag);
 
                        // getting delivery & read report information
                        if (delivery_flag || read_flag) {
index ee3def3..ca5a357 100755 (executable)
@@ -2,6 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 PROJECT(ug-msg-viewer-efl C)
 
 SET (MSG_VIEWER  msg_viewer)
+SET (MSG_VIEWER_DEFINES  msg_viewer_defines)
 
 #################################
 #      Message Viewer  #
@@ -13,8 +14,12 @@ SET(VIEWER_SRCS
        ./src/msg-ui-viewer-callback.c
        ./src/msg-ui-viewer-drm-list.c
        ./src/msg-ui-viewer-drm-utility.c
-       ./src/msg-ui-viewer-play-view.c
-       ./src/msg-ui-viewer-play-view-callback.c
+       ./src/msg-ui-viewer-play-view-main.c
+       ./src/msg-ui-viewer-play-view-attachment.c
+       ./src/msg-ui-viewer-play-view-help-page.c
+       ./src/msg-ui-viewer-play-view-options.c
+       ./src/msg-ui-viewer-play-view-play-controller.c
+       ./src/msg-ui-viewer-play-view-volume-bar.c
        ./src/msg-ui-viewer-utility.c
        ./smil-player/src/msg-smil-player.c
        ./smil-player/src/msg-smil-content-manager.c
@@ -45,19 +50,28 @@ ADD_DEFINITIONS("-DTARGET")
 ADD_DEFINITIONS("-DSLP_PROF")
 
 ADD_CUSTOM_TARGET(${MSG_VIEWER}.edj
-                               COMMAND edje_cc -id
+                               COMMAND edje_cc ${EDJE_CC_DEFINITIONS} -id
                                ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image
                                ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edc ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edj
                                DEPENDS ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edc
 )
 
+ADD_CUSTOM_TARGET(${MSG_VIEWER_DEFINES}.edj
+                               COMMAND edje_cc ${EDJE_CC_DEFINITIONS} -id
+                               ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image
+                               ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER_DEFINES}.edc ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER_DEFINES}.edj
+                               DEPENDS ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER_DEFINES}.edc
+)
+
 ADD_LIBRARY(${PROJECT_NAME} SHARED ${VIEWER_SRCS})
 ADD_DEPENDENCIES(${PROJECT_NAME} ${MSG_VIEWER}.edj)
+ADD_DEPENDENCIES(${PROJECT_NAME} ${MSG_VIEWER_DEFINES}.edj)
 TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -L${CMAKE_SOURCE_COMMON_DIR} -lmsg-common)
 
 # Install executable and .edj files.
 #INSTALL(DIRECTORY ${CMAKE_SOURCE_VIEWER_DIR}/data/images/ DESTINATION ${IMGDIR} FILES_MATCHING PATTERN "*.png")
 INSTALL(FILES ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edj DESTINATION ${EDJDIR})
+INSTALL(FILES ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER_DEFINES}.edj DESTINATION ${EDJDIR})
 INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${UGDIR})
 
 #i18n
index 4104614..a4966c2 100755 (executable)
  *==================================================================================================*/
 #define VIEWER_BUFFER_SIZE_64 64
 #define VIEWER_TITLE_MENU_GENLIST_MAX_ITEM 3
-#define VIEWER_TITLE_MENU_LINE_HEIGHT 129
-#define VIEWER_ATTACH_GL_ITEM_HEIGHT 112
+#define VIEWER_TITLE_MENU_1TEXT_HEIGHT 112
+#define VIEWER_TITLE_MENU_2TEXT_HEIGHT 129
+#define VIEWER_ATTACH_GL_ITEM_HEIGHT 100
 #define VIEWER_TITLE_FONT_LEN 100
 #define VIEWER_NAVI_FRAME_HEIGHT 98
 #define VIEWER_NAVIFRAME_BOTTOM_H 114
 
-
 #define VIEWER_PLAY_CONTROLLER_LIFETIME (3.0)
 #define VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME (1.0)
 #define VIEWER_PLAY_CONTROLLER_HEIGHT 218
@@ -137,17 +137,29 @@ typedef enum {
        MSG_VIEWER_VOLUME_EVENT_DRAG_STOP,
 } MSG_VIEWER_VOLUME_BAR_EVENT_E;
 
+typedef enum {
+       VIEWER_HELP_PAGE_FONT_SMALL = 24,
+       VIEWER_HELP_PAGE_FONT_NORMAL= 30,
+       VIEWER_HELP_PAGE_FONT_LARGE = 44,
+       VIEWER_HELP_PAGE_FONT_HUGE = 60,
+       VIEWER_HELP_PAGE_FONT_GIANT = 76,
+       VIEWER_HELP_PAGE_FONT_MAX
+
+} MSG_VIEWER_HELP_PAGE_FONT_SIZE_E;
+
+
 typedef void (*MSG_VIEWER_VOLUMEBAR_CB)(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event);
+
 /*==================================================================================================
  *                                                                             STRUCTURES
  *==================================================================================================*/
-typedef struct _MSG_VIEWER_ADDR_INFO_S{
+typedef struct _MSG_VIEWER_ADDR_INFO_S {
        int contact_id;
        char address[MAX_ADDRESS_VAL_LEN+1];
        char name[MAX_DISPLAY_NAME_LEN+1];
 } MSG_VIEWER_ADDR_INFO;
 
-typedef struct _MSG_VIEWER_ADDR_LIST_S{
+typedef struct _MSG_VIEWER_ADDR_LIST_S {
        int addr_cnt;
        MSG_VIEWER_ADDR_INFO addr_info[MAX_TO_ADDRESS_CNT];
 } MSG_VIEWER_ADDR_LIST;
@@ -169,7 +181,6 @@ typedef struct _MSG_PLAY_DATA_S {
        Evas_Object *volumebar;                         /* volumebar */
        Evas_Object *volume_slider;             /* volumebar_slider */
 
-       Evas_Object *help_page_gl;                      /* help page genlist */
        Evas_Object *save_attachment_gl;                /* save attachments genlist(controlbar menu) */
        Evas_Object *render_entry;                      /* entry handle of SMIL render */
 
@@ -205,7 +216,6 @@ typedef struct _MSG_PLAY_DATA_S {
        Ecore_Timer *play_controller_timer;
        Ecore_Timer *play_controller_progressbar_timer;
        Ecore_Timer *volumebar_timer;
-
        MSG_VIEWER_VOLUMEBAR_CB volumebar_event_cb;
 
        int ctrl_start_x;               /* play controller mouse pointer */
@@ -224,6 +234,8 @@ typedef struct _MSG_PLAY_DATA_S {
        bool auto_resume_state;         /* check state of auto resume availablity */
        bool msg_box_viewer;    /* TRUE is viewer is launched from message box */
        bool drag_volume_slider; /* check do not navigate multiple page when volume bar is displayed */
+       bool is_rotated;                /* TRUE if horizontal or reverse horizontal */
+       bool drm_ro_check;              /* whether showing drm cotents popup or not - before SMIL START*/
 
        int totalProgressTime;          /* total progress time for all slide*/
        int elapsedProgressTime;                /*progress time from 1st slide to current slide*/
@@ -254,7 +266,6 @@ typedef struct {
        char pfile_name[MSG_VIEWER_FILENAME_MAX_LEN + 1];
        char pfile_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1];
        int pfile_size;
-       bool isSaveAll;                 /* for select all item */
        Eina_Bool isChecked;            /* check object status of save attachment genlist */
        Evas_Object *check_item;        /* check object for save attachments genlist */
        MSG_VIEWER_MEDIA_TYPE_E media_type;
@@ -262,99 +273,85 @@ typedef struct {
 } MSG_VIEWER_ATTACH_MEDIA_INFO_S;
 /*==================================================================================================
  *                                                                     FUNCTION DECLARATIONS
- *==================================================================================================*/
-MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data);
+ *=================================================================================================*/
 
-/*
- *@fn          msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data);
- *@brief               This function is used to show player view again when player view is already ready.
- * @param[in] data MSG_PLAY_DATA_S structure
- * @return     return TRUE if player view is playing, else FALSE
- */
+/* main */
+MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data);
 MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data);
-
 void msg_ui_viewer_play_view_init(void *data);
 void msg_ui_viewer_destroy_play_view(void *data);
 void msg_ui_viewer_connect_handler(void *data);
 void msg_ui_viewer_disconnect_handler(void *data);
-
-/*
- *@fn          msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status);
- *@brief               This function is used to enable/disable prev & next button
- * @param[in] data MSG_PLAY_DATA_S structure
- * @param[in] status viewer play status.
- */
-void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status);
-Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent);
-Evas_Object    *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_apply_font_size(void *data);
+Evas_Object *msg_ui_viewer_create_navigation_layout(MSG_PLAY_DATA_S *viewer_play_data, Evas_Object *parent);
+Evas_Object *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data);
 void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data);
-void msg_ui_viewer_open_title_menu_genlist(void *data);
-void msg_ui_viewer_close_title_menu_genlist(void *data);
 void msg_ui_viewer_show_popup(void *data, Evas_Object *parent, char *pcontent);
-void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data);
-void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data);
-void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx);
-void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data);
-void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data);
 void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data);
-void msg_ui_viewer_create_volume_bar(void *data);
-void msg_ui_viewer_destroy_volume_bar(void *data);
-
-/* ========================VIEWER  CALLBACK========================*/
-/*
- *@fn          msg_ui_viewer_smil_cb(SMIL_SLIDE_EVENT_PARAM_S *eventStatus, void *appUserData);
- *@brief               This function is SMIL callback function
- * @param[in] eventStatus  this is the slide info to be used by the application.
- * @param[in] appUserData appdata structure
- * @return MSG_SMIL_ERROR_E
- */
+MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E action_type);
 MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *appUserData);
-MSG_SMIL_ERROR_E msg_ui_viewer_set_entry_handle_cb(MSG_PLAY_DATA_S *data, void *entry);
 Eina_Bool msg_ui_viewer_focused_in_cb(void *data, int type, void *event);
 Eina_Bool msg_ui_viewer_focused_out_cb(void *data, int type, void *event);
+MSG_SMIL_ERROR_E msg_ui_viewer_set_entry_handle_cb(MSG_PLAY_DATA_S *data, void *entry);
 Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event);
 Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event);
 void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
 void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
 void msg_ui_viewer_play_layout_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
 void msg_ui_viewer_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info);
 void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_toolbar_call_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_toolbar_block_address_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_toolbar_unblock_address_cb(void *data, Evas_Object *obj, void *event_info);
+int msg_ui_viewer_get_thread_address_count(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_get_thread_address_nth_address(MSG_PLAY_DATA_S *data, int number, char **address, int *contact_id);
+void msg_ui_viewer_title_update(MSG_PLAY_DATA_S *data, MSG_VIEWER_OPTION_CHANGE_TYPE_E option_type);
+void msg_ui_viewer_set_font_size(MSG_PLAY_DATA_S *data, MSG_VIEWER_ENTRY_TYPE_E entry_type, MSG_VIEWER_FONT_CHANGE_TYPE_E change_type);
+void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_display_drm_list_popup(MSG_PLAY_DATA_S *data);
+
+/* options */
+void msg_ui_viewer_option_create_title_menu(void *data);
+void msg_ui_viewer_option_destroy_title_menu(void *data);
+void msg_ui_viewer_option_save_attachment_menu(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_create_more_popup(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_create_delete_popup(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_forward_menu_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_resend_menu_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_create_msg_detail_popup(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_option_email_menu(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_call_menu(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_vcall_menu(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_add_to_contact_menu(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_view_contact_menu(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_block_address_menu(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_viewer_option_unblock_address_menu(void *data, Evas_Object *obj, void *event_info);
 
 /* Play controller */
-void msg_ui_viewer_volume_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
-void msg_ui_viewer_prev_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
-void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
-void msg_ui_viewer_next_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
-Eina_Bool  msg_ui_viewer_play_controller_progressbar_timer_cb(void *data);
+void msg_ui_viewer_play_controller_create(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_play_controller_update(void *data, MSG_VIEWER_PLAY_STATUS_E status);
+void msg_ui_viewer_play_controller_volume_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+void msg_ui_viewer_play_controller_prev_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+void msg_ui_viewer_play_controller_play_pause_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+void msg_ui_viewer_play_controller_next_clicked_cb(void *data, Evas_Object *o, const char *emission, const char *source);
+void msg_ui_viewer_play_controller_create_timer(MSG_PLAY_DATA_S *data);
 Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data);
-MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E action_type);
+void msg_ui_viewer_play_controller_destroy_timer(MSG_PLAY_DATA_S *data);
+void msg_ui_viewer_play_controller_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx);
+Eina_Bool  msg_ui_viewer_play_controller_progressbar_timer_cb(void *data);
 
-/* help page create cb - called from SMIL renderer */
-MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box);
+/* volume bar */
+void msg_ui_viewer_grab_volume_key(void *data);
+void msg_ui_viewer_ungrab_volume_key(void *data);
+Eina_Bool msg_ui_viewer_volume_key_release_cb(void *data, int type, void *event);
+Eina_Bool msg_ui_viewer_volume_key_press_cb(void *data, int type, void *event);
+void msg_ui_viewer_create_volume_bar(void *data);
+void msg_ui_viewer_destroy_volume_bar(void *data);
+
+/* help page */
+MSG_SMIL_ERROR_E msg_ui_viewer_help_page_create_list(MSG_PLAY_DATA_S *data, void **attach_list, void *box);
+void msg_ui_viewer_help_page_save_all_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
 void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
 
-/* popup */
+/* attachment */
 void msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data);
-void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
 
-/* message info */
-int msg_ui_viewer_get_thread_address_count(MSG_PLAY_DATA_S *data);
-void msg_ui_viewer_get_thread_address_nth_address(MSG_PLAY_DATA_S *data, int number, char **address, int *contact_id);
-void msg_ui_viewer_title_update(MSG_PLAY_DATA_S *data, MSG_VIEWER_OPTION_CHANGE_TYPE_E option_type);
-MSG_BOOL msg_ui_viewer_check_address_is_blocked(void *data, char *address, int *filter_id);
-void msg_ui_viewer_set_font_size(MSG_PLAY_DATA_S *data, MSG_VIEWER_ENTRY_TYPE_E entry_type, MSG_VIEWER_FONT_CHANGE_TYPE_E change_type);
 #endif /* __MSG_UI_VIEWER_PLAY_VIEW_H__*/
index 93e1083..18c86dd 100755 (executable)
@@ -125,4 +125,11 @@ char *msg_ui_viewer_util_copy_file(const char *src_path, char *dst_path);
  *@Caution     Caller should free returned temp path after using it.
  */
 char *msg_ui_viewer_util_create_working_dir(void);
+
+/*
+ *@fn          msg_ui_viewer_check_address_is_blocked(void *data, char *address, int *filter_id)
+ *@brief       checking address block status with specific condition
+ */
+MSG_BOOL msg_ui_viewer_check_address_is_blocked(msg_handle_t msg_handle, char *address, int *filter_id);
+
 #endif
index eff5290..f28dcc5 100755 (executable)
@@ -48,7 +48,7 @@ typedef struct _SMIL_TIMER_CALLBACK_DATA_S {
 
 typedef struct _SMIL_EVENT_MGR_HANDLE_S {
        SMIL_TIMER_CALLBACK_DATA_S      *slideTimerCbData;
-       void    *smilhandle;
+       void *smilhandle;
 } SMIL_EVENT_MGR_HANDLE_S;
 
 /*==================================================================================================
@@ -73,6 +73,24 @@ MSG_SMIL_ERROR_E _msg_smil_create_event_mgr(void *cb, void *data, SMIL_EVENT_MGR
 void _msg_smil_destroy_event_mgr(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
 
 /**
+*@fn                   _msg_smil_event_mgr_ready(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+*@brief                        This function fetches the slide info from the Content Manager and wait for START event of UI signals
+*@return                       MSG_SUCCESS on success , else failure return code
+*@param[in]            smilEvntMgrHndle           This is the handler to the SMILEvent Manager.
+*@param[out]   None.
+*/
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_ready(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+
+/**
+*@fn                   _msg_smil_event_mgr_start(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+*@brief                        This function start the timer event of event manager for response of UI callback at the first launching SMIL
+*@return                       MSG_SUCCESS on success , else failure return code
+*@param[in]            smilEvntMgrHndle           This is the handler to the SMILEvent Manager.
+*@param[out]   None.
+*/
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_start(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
+
+/**
 *@fn                   _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx);
 *@brief                        This function fetches the slide info from the  Content Manager,sends to the Call Back from the Client
 *@return                       MSG_SUCCESS on success , else failure return code
@@ -160,8 +178,12 @@ MSG_BOOL _msg_smil_event_mgr_set_unsupported_content(SMIL_EVENT_MGR_HANDLE_S *sm
 MSG_BOOL _msg_smil_event_mgr_get_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
 MSG_BOOL _msg_smil_event_mgr_set_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isinvalid_ro);
 
+MSG_BOOL _msg_smil_event_mgr_get_last_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
 MSG_BOOL _msg_smil_event_mgr_set_last_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL islast_slide);
+
+MSG_BOOL _msg_smil_event_mgr_get_last_slide_is_help_page(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle);
 MSG_BOOL _msg_smil_event_mgr_set_last_slide_is_help_page(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL ishelp_page);
+
 MSG_BOOL _msg_smil_event_mgr_set_render_event(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_PLAYER_RENDER_EVENT_E render_event);
 
 #endif
index d2cd60b..e9dae1e 100755 (executable)
@@ -132,4 +132,13 @@ SMIL_SLIDE_INFO_S *msg_smil_get_current_slide_info(void *hSmilHandle);
 *@param[out]   None.
 */
 MSG_BOOL msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime);
+
+/**
+*@fn                   msg_smil_request_player_start(void *hSmilHandle);
+*@brief                        This API request PLAYER handle in page to start play media that they have
+*@return                       TRUE on success , else FALSE return
+*@param[in]            hSmilHandle     This is the handler to the SMILMessage.
+*@param[out]   None.
+*/
+MSG_BOOL msg_smil_request_player_start(void * hSmilHandle);
 #endif
index 4ef5ee6..17c806f 100755 (executable)
@@ -174,4 +174,13 @@ SMIL_SLIDE_INFO_S *_msg_smil_get_current_slide_info(void *hSmilHandle);
 */
 MSG_BOOL _msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime);
 
+/**
+*@fn                   _msg_smil_request_player_start(void *hSmilHandle);
+*@brief                        This API request PLAYER handle in page to start play media that they have
+*@return                       TRUE on success , else FALSE return
+*@param[in]            hSmilHandle     This is the handler to the SMILMessage.
+*@param[out]   None.
+*/
+MSG_BOOL _msg_smil_request_player_start(void *hSmilHandle);
+
 #endif
index 9a2fcb7..f2b34d8 100755 (executable)
@@ -111,6 +111,7 @@ typedef struct _SMIL_RENDERER_DATA_S {
        unsigned char *video_image_buffer;      /*Evas Object Image buffer*/
        Ecore_Timer *video_update_timer;
        MSG_BOOL is_skip_frame; /*it is used to skip 1 frame of videostream cb*/
+       MSG_BOOL render_status; /*status of rendering*/
        int video_width;
        int video_height;
        int video_duration;     /*video content's duration*/
@@ -151,6 +152,8 @@ MSG_BOOL _msg_smil_init_render(SMIL_RENDERER_DATA_S *viewerRenderData);
 /*Create and set layout to display viewer*/
 MSG_BOOL _msg_smil_render_create_layout(SMIL_RENDERER_DATA_S *viewerRenderData, Evas_Object *layout);
 MSG_BOOL _msg_smil_render_set_layout_size(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom);
+MSG_BOOL _msg_smil_render_get_status(SMIL_RENDERER_DATA_S *viewerRenderData);
+void _msg_smil_render_set_status(SMIL_RENDERER_DATA_S *viewerRenderData, MSG_BOOL status);
 MSG_BOOL _msg_smil_render_set_mute(SMIL_RENDERER_DATA_S *viewerRenderData, MSG_BOOL ismute);
 MSG_BOOL _msg_smil_render_set_help_page_cb(SMIL_RENDERER_DATA_S *viewerRenderData, void *callBack, void *userData);
 MSG_BOOL _msg_smil_render_set_entry_handle_cb(SMIL_RENDERER_DATA_S *viewerRenderData, void *callBack);
@@ -186,6 +189,14 @@ MSG_BOOL _msg_smil_render_pause(void *data, int mediaType);
 MSG_BOOL _msg_smil_render_resume(void *data, int mediaType);
 
 /**
+*@fn                   _msg_smil_render_mgr_request_player_start(void *data)
+*@brief                        This API shall request player to start its media
+*@return                       TRUE on success , else FALSE return code
+*@param[in]            data    This is the smil render structure
+*/
+MSG_BOOL _msg_smil_render_mgr_request_player_start(void *data);
+
+/**
 *@fn                   _msg_smil_render_stop_playing_file(void *data)
 *@brief                        This API shall stop and destroy mm player
 *@return                       TRUE on success , else FALSE return code
index 25d4b16..f7a8c15 100755 (executable)
@@ -57,8 +57,10 @@ typedef enum _MSG_SMIL_ERROR_E {
 typedef enum _SMIL_PLAYER_EVENT_E {
        PLAYER_EVENT_NONE = 0,
        PLAYER_EVENT_INIT,
+       PLAYER_EVENT_READY,                             /* ready to starting SMIL */
+       PLAYER_EVENT_PREVIEW_READY,             /* ready to starting SMIL for preview */
+       PLAYER_EVENT_START,                             /* play SMIL firstly after READY event */
        PLAYER_EVENT_PLAY,
-       PLAYER_EVENT_PREVIEW_PLAY,
        PLAYER_EVENT_STOP,
        PLAYER_EVENT_PAUSE,
        PLAYER_EVENT_RESUME,
index da88910..c4f1000 100755 (executable)
@@ -1072,8 +1072,9 @@ MSG_BOOL _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMg
                        double maximum_time = 0.0;
 
                        curSlide =_msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx);
-                       if (curSlide->pageInfo == NULL) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page of current slide is NULL!");
+
+                       if (curSlide == NULL || curSlide->pageInfo == NULL) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "curSlide is NULL or pageInfo in curSlide is NULL!");
                                return FALSE;
                        }
 
index 8d56815..1e22ba1 100755 (executable)
@@ -87,8 +87,8 @@ static void __msg_smil_event_mgr_change_media_time(msg_struct_t media_info, MmsS
 */
 static MSG_SMIL_ERROR_E __msg_smil_event_mgr_register_timer(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, void *cb, double duration);
 
-MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_idx(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int slideIdx);
-MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_count(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int pageCnt);
+static MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_idx(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int slideIdx);
+static MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_count(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int pageCnt);
 
 
 /*================================================================================================
@@ -168,6 +168,256 @@ void _msg_smil_destroy_event_mgr(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
 
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_ready(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_SLIDE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->smilhandle == NULL, MSG_ERR_SMIL_INVALID_SLIDE);
+
+       double timerDuration = 0;
+       SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData;
+       SMIL_SLIDE_INFO_S *singleSlideInfo = NULL;
+       SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_ERR_SMIL_INVALID_SLIDE);
+
+       /*fetching the slide data for the first slide*/
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Getting Slide info from content mgr");
+       singleSlideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, 0);
+       if (singleSlideInfo == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide info fetch failed.");
+               return MSG_ERR_SMIL_INVALID_SLIDE;
+       }
+       _msg_smil_event_mgr_set_current_slide(smilEvntMgrHndle, singleSlideInfo);
+
+       if (_msg_smil_cont_mgr_set_cur_slide_idx(smilContMgrHndle, 0) == FALSE)
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_cur_slide_idx is failed");
+
+       int pageCnt = _msg_smil_cont_mgr_get_total_slide_count(smilContMgrHndle);
+       __msg_smil_event_mgr_set_client_cb_page_idx(smilEvntMgrHndle, 0);
+       __msg_smil_event_mgr_set_client_cb_page_count(smilEvntMgrHndle, pageCnt);
+
+       /* READY event manage only actiontype for PLAY, (->)INTERNAL MEDIA, (->)END */
+       if (pageCnt > 0) {
+               while (1) {
+                       if (singleSlideInfo && singleSlideInfo->pageInfo) {
+                               int durTime = 0;
+                               int endTime = 0;
+                               SMIL_PLAYER_PAGE_EVENT_E actionTypeOnPage = _msg_smil_event_mgr_get_page_action_type(smilEvntMgrHndle);
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage);
+                               switch (actionTypeOnPage) {
+                               case PAGE_EVENT_PLAY:
+                                       /* Check for validity of Page Timer Values and Assign Default Values if required */
+                                       __msg_smil_event_mgr_set_page_time(smilEvntMgrHndle, singleSlideInfo);
+                                       _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_PLAY_START);
+
+                                       /* check current page is help page and skip internal media play */
+                                       if (_msg_smil_cont_mgr_is_cur_slide_help_page(singleSlideInfo)) {
+                                               /* set last page to play */
+                                               _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE);
+                                               _msg_smil_event_mgr_set_last_slide_is_help_page(smilEvntMgrHndle, TRUE);
+                                               break;
+                                       }
+
+                                       _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_INTERNAL_MEDIA);
+                                       continue;
+                               case PAGE_EVENT_INTERNAL_MEDIA:
+                                       /*Populate and sort Media Timer Info into the slideTimerInfo Array*/
+                                       __msg_smil_event_mgr_set_media_time_info(smilEvntMgrHndle, slideTimerCbData);
+                                       _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START);
+                                       /*Considering the fact that there can be less than three media, we need to perform a check for
+                                       *  if there is any media related information in the array for the sake of a boundary condition check.
+                                       *  Also we need to take the Begin and End time of the Page into consideration*/
+                                       _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_NONE);
+                                       __msg_smil_event_mgr_check_media_type(smilEvntMgrHndle, slideTimerCbData);
+                                       timerDuration = __msg_smil_event_mgr_fill_media_time_data(smilEvntMgrHndle, slideTimerCbData);
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "timerDuration =  %lf", timerDuration);
+
+                                       /*Get page handle - Do not null check, it is not needed from here*/
+                                       msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+                                       msg_struct_t page_info =_msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, singleSlideInfo->pageIdx);
+
+                                       durTime = _msg_smil_cont_mgr_get_page_time_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT);
+                                       if (timerDuration == 0) {
+                                               /* If there is no media Handle - Show the blank slide for the duration of the slide and then move to the next slide if the page->nDur is Valid. */
+                                               if (durTime != MSG_MMS_SMIL_TIMER_DUR_INDEFINITE) {
+                                                       timerDuration = durTime;
+                                               } else {
+                                               /* if the  page->nDur is Invalid do no timer interacton and wait for user action.*/
+                                               }
+                                       }
+
+                                       /* Calculation of timerDuration basing on the End Time/Duration of the page - This case arises if there is no media or in case the end time of all media > the end time of the slide. */
+                                       endTime = _msg_smil_cont_mgr_get_page_time_value(page_info, MSG_MMS_PAGE_END_TIME_INT);
+                                       if (endTime > 0) {
+                                               if (timerDuration > durTime) {
+                                                       timerDuration = durTime;
+                                               }
+                                       }
+
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "timerDuration =  %lf", timerDuration);
+
+                                       if (singleSlideInfo->nextSlide == NULL)/* If the current slide is the last slide */
+                                               _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE);
+
+                                       _msg_smil_event_mgr_set_slide_time(smilEvntMgrHndle, timerDuration);
+                                       _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_END);
+                                       break;
+                               case PAGE_EVENT_END:
+                                       break;
+                               default:
+                                       break;
+                               }
+                       } else {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "slide page is NULL");
+                       }
+                       break;
+               }
+       } else {
+               /*invalide message without page info or multipart.mixed message*/
+               _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_PLAY_START);
+               _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE);
+               _msg_smil_event_mgr_set_last_slide_is_help_page(smilEvntMgrHndle, TRUE);
+       }
+
+       if (slideTimerCbData->slideTimerInfo.actionTypeOnPage != PAGE_EVENT_NONE) {
+               MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
+               int slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle);
+
+               _msg_smil_cont_mgr_set_status(smilContMgrHndle, slideIdx, PLAYER_STATUS_PLAYING);
+
+               /*calling renderhandler to draw content*/
+               SMIL_RENDERER_DATA_S *smilRenderer = _msg_smil_get_renderder(smilEvntMgrHndle->smilhandle);
+               if (smilRenderer) {
+                       err = _msg_smil_render_on_slide_render_handler(smilRenderer, slideTimerCbData->curSlideParam);
+                       if (err != MSG_SMIL_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_on_slide_render_handler failed err = %d", err);
+                       }
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "smilRenderer is NULL");
+               }
+
+               SMIL_SLIDE_INFO_S *curSlideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx);
+               if (curSlideInfo && curSlideInfo->slideStatus == PLAYER_STATUS_PAUSED)
+                       _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_MOVE_PAGE_AFTER_PAUSED);
+
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Page event is error actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage);
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return MSG_SMIL_SUCCESS;
+}
+
+MSG_SMIL_ERROR_E _msg_smil_event_mgr_start(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+       SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData;
+
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->smilhandle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+       SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, EINA_FALSE);
+
+       int slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle);
+
+       /*Calling the callback function of Client.*/
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Calling the Client callback");
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current Slide Idx = %d", slideIdx);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "RENDEREVENT = %d", slideTimerCbData->curSlideParam->renderEvent);
+
+       MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN;
+
+       err = slideTimerCbData->appSmilCb(&(slideTimerCbData->curSlideParam->clientCbParam), slideTimerCbData->appUserData);
+       _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_NONE);
+
+       if (err != MSG_SMIL_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Client CB failed with error = %d", err);
+               _msg_smil_cont_mgr_set_status(smilContMgrHndle, slideIdx, PLAYER_STATUS_NONE);
+               return err;
+       }
+
+       double timerDuration = _msg_smil_event_mgr_get_slide_time(smilEvntMgrHndle);
+
+       /*Timer Registration -- needed for Multipart Related MMS only.*/
+       MSG_BOOL is_video_media = _msg_smil_event_mgr_get_is_video_media(smilEvntMgrHndle);
+       MSG_BOOL binvalid_ro = _msg_smil_event_mgr_get_invalid_video_ro(smilEvntMgrHndle);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "binvalid_ro = %d", binvalid_ro);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isVideoMedia = %d", is_video_media);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timerDuration = %lf", timerDuration);
+
+       //for UI progressbar. ceiling duration time to second
+       double ceiled_duration = ceil(timerDuration/1000)*1000;
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ceiling timerDuration = %lf", ceiled_duration);
+
+       if (is_video_media) {   /*video*/
+               SMIL_RENDERER_DATA_S *smilRenderer = _msg_smil_get_renderder(smilEvntMgrHndle->smilhandle);
+               if (!smilRenderer || !_msg_smil_render_get_status(smilRenderer)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for invalid case of video content or etc");
+                       if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+                               return err;
+                       }
+               } else if (binvalid_ro == TRUE) {       /*video is an invalid ro drm content*/
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for invalid ro drm video content");
+                       double time_dur = _msg_smil_event_mgr_get_slide_time(smilEvntMgrHndle);
+                       double ceiled_duration = ceil(time_dur/1000)*1000;
+                       if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+                               return err;
+                       }
+               } else {                //valid ro video file. now we insure page duration for at least video duration
+                       double remain_current_slide = 0.0;
+                       double remain_next_Slide = 0.0;
+                       double current_slide_time = 0.0;
+                       if (_msg_smil_cont_mgr_get_slide_time(smilContMgrHndle, slideIdx, FALSE, &remain_current_slide)) {
+                               if (_msg_smil_cont_mgr_get_slide_time(smilContMgrHndle, slideIdx+1, FALSE, &remain_next_Slide))
+                                       current_slide_time = remain_current_slide - remain_next_Slide;
+                               else
+                                       current_slide_time = remain_current_slide;
+                       }
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current slide(include video) time is %f", current_slide_time);
+
+                       double duration_time = (current_slide_time >= ceiled_duration) ? current_slide_time : ceiled_duration;
+
+                       if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, duration_time)) != MSG_SMIL_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+                               return err;
+                       }
+               }
+       } else if (timerDuration > 0) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for normal case");
+               if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+                       return err;
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timer is not created. PLAYSLIDEEVENT : timerDuration = %lf", timerDuration);
+
+               _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE);
+               _msg_smil_event_mgr_set_last_slide_is_help_page(smilEvntMgrHndle, TRUE);
+               if (_msg_smil_event_mgr_get_last_slide(smilEvntMgrHndle) && _msg_smil_event_mgr_get_last_slide_is_help_page(smilEvntMgrHndle)) {        /*for invalid page info message or multipart.mixed message*/
+                       _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_END);
+                       timerDuration = MSG_MMS_SMIL_TIMER_DEFAULT_DUR;
+                       if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, timerDuration)) != MSG_SMIL_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+                               return err;
+                       }
+               } else if (_msg_smil_event_mgr_get_unsupported_content(smilEvntMgrHndle)) {     /*if unsupported content has no duration time*/
+                       timerDuration = MSG_MMS_SMIL_TIMER_DEFAULT_DUR;
+                       if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, timerDuration)) != MSG_SMIL_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
+                               return err;
+                       }
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timer is not registerd actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage);
+               }
+       }
+
+       return err;
+}
 
 MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx)
 {
@@ -177,7 +427,6 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->smilhandle == NULL, MSG_ERR_SMIL_INVALID_SLIDE);
 
        double timerDuration = 0;
-       MSG_BOOL haspageinfo = TRUE;
        SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData;
        SMIL_SLIDE_INFO_S *singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle);
        SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
@@ -230,7 +479,6 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                                                /* set last page to play */
                                                _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE);
                                                _msg_smil_event_mgr_set_last_slide_is_help_page(smilEvntMgrHndle, TRUE);
-                                               haspageinfo = FALSE;
                                                break;
                                        }
 
@@ -335,7 +583,6 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_PLAY_START);
                _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE);
                _msg_smil_event_mgr_set_last_slide_is_help_page(smilEvntMgrHndle, TRUE);
-               haspageinfo = FALSE;
        }
 
        if (slideTimerCbData->slideTimerInfo.actionTypeOnPage != PAGE_EVENT_NONE) {
@@ -348,20 +595,23 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                        _msg_smil_cont_mgr_set_status(smilContMgrHndle, slideIdx, PLAYER_STATUS_PLAYING);
 
                /*calling renderhandler to draw content*/
-               MSG_BOOL rendering_failed = FALSE;
                SMIL_RENDERER_DATA_S *smilRenderer = _msg_smil_get_renderder(smilEvntMgrHndle->smilhandle);
                if (smilRenderer) {
                        err = _msg_smil_render_on_slide_render_handler(smilRenderer, slideTimerCbData->curSlideParam);
                        if (err != MSG_SMIL_SUCCESS) {
                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_on_slide_render_handler failed err = %d", err);
-                               rendering_failed = TRUE;
                        }
                } else {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "smilRenderer is NULL");
-                       rendering_failed = TRUE;
                }
 
                SMIL_SLIDE_INFO_S *curSlideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx);
+
+               if (!curSlideInfo) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_get_slide is failed");
+                       return MSG_ERR_SMIL_INVALID_SLIDE;
+               }
+
                if (curSlideInfo->slideStatus == PLAYER_STATUS_PAUSED)
                        _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_MOVE_PAGE_AFTER_PAUSED);
 
@@ -388,7 +638,8 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ceiling timerDuration = %lf", ceiled_duration);
 
                if (is_video_media) {   /*video*/
-                       if (rendering_failed) {
+                       SMIL_RENDERER_DATA_S *smilRenderer = _msg_smil_get_renderder(smilEvntMgrHndle->smilhandle);
+                       if (!smilRenderer || !_msg_smil_render_get_status(smilRenderer)) {
                                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for invalid case of video content or etc");
                                if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) {
                                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err);
@@ -429,7 +680,7 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                        }
                } else {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timer is not created. PLAYSLIDEEVENT : timerDuration = %lf", timerDuration);
-                       if (haspageinfo == FALSE) {     /*for invalid page info message or multipart.mixed message*/
+                       if (_msg_smil_event_mgr_get_last_slide(smilEvntMgrHndle) && _msg_smil_event_mgr_get_last_slide_is_help_page(smilEvntMgrHndle)) {        /*for invalid page info message or multipart.mixed message*/
                                _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_END);
                                timerDuration = MSG_MMS_SMIL_TIMER_DEFAULT_DUR;
                                if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, timerDuration)) != MSG_SMIL_SUCCESS) {
@@ -456,6 +707,7 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
        }
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
        return MSG_SMIL_SUCCESS;
 }
 
@@ -1285,6 +1537,15 @@ MSG_BOOL _msg_smil_event_mgr_set_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilE
        return TRUE;
 }
 
+MSG_BOOL _msg_smil_event_mgr_get_last_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+       return smilEvntMgrHndle->slideTimerCbData->curSlideParam->isLastSlide;
+}
 
 MSG_BOOL _msg_smil_event_mgr_set_last_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL islast_slide)
 {
@@ -1298,6 +1559,16 @@ MSG_BOOL _msg_smil_event_mgr_set_last_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgr
        return TRUE;
 }
 
+MSG_BOOL _msg_smil_event_mgr_get_last_slide_is_help_page(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE);
+
+       return smilEvntMgrHndle->slideTimerCbData->curSlideParam->isHelpSlide;
+}
+
 MSG_BOOL _msg_smil_event_mgr_set_last_slide_is_help_page(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL ishelp_page)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
index 748d305..6f10f4d 100755 (executable)
@@ -182,7 +182,6 @@ static MSG_BOOL __msg_smil_render_player_mgr_play(void *data)
        return TRUE;
 }
 
-
 static MSG_BOOL __msg_smil_render_player_mgr_pause(void *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -208,34 +207,22 @@ static MSG_BOOL __msg_smil_render_player_mgr_resume(void *data, int mediaType)
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
        SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
-       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if (viewerRenderData->player_state == MEDIA_PLAYER_STATE_INIT) {        //not ready status, in other words, page is started with paused state
-               if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData))
-                       return FALSE;
-
-               if (__msg_smil_render_player_mgr_play((void *)viewerRenderData)) {
-                       if (mediaType == MMS_SMIL_MEDIA_VIDEO) {
-                               SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
-                               SMIL_SLIDE_INFO_S *current_slide_data = _msg_smil_cont_mgr_get_cur_slide(smilContMgrHndle);
+       if (__msg_smil_render_player_mgr_play((void *)viewerRenderData)) {
+               if (mediaType == MMS_SMIL_MEDIA_VIDEO) {
+                       SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
+                       SMIL_SLIDE_INFO_S *current_slide_data = _msg_smil_cont_mgr_get_cur_slide(smilContMgrHndle);
 
-                               if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo)
-                                       __msg_smil_render_start_video_timer(viewerRenderData);
-                       }
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_play is failed");
-                       return FALSE;
+                       if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo)
+                               __msg_smil_render_start_video_timer(viewerRenderData);
                }
        } else {
-               if ((err = player_start(_player)) != PLAYER_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_start is failed err = %d", err);
-                       return FALSE;
-               }
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_play is failed");
+               return FALSE;
        }
-       viewerRenderData->player_state = MEDIA_PLAYER_STATE_PLAYING;
 
        return TRUE;
 }
@@ -719,21 +706,13 @@ static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRe
        if (!__msg_smil_render_player_mgr_set_player_cb((void *)viewerRenderData))
                return FALSE;
 
-       if (status == PLAYER_STATUS_PLAYING) {
-               if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData))
-                       return FALSE;
-
-               if (!__msg_smil_render_player_mgr_play((void *)viewerRenderData))
-                       return FALSE;
+       if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData))
+               return FALSE;
 
-               /*if silent and mute mode*/
-               if (viewerRenderData->ismute) {
-                       if (!__msg_smil_render_player_mgr_mute((void *)viewerRenderData))
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_mute is Fail");
-               }
-       }
+       /* Don't start PLAYER until UI Callback request is received */
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
        return TRUE;
 }
 
@@ -1089,24 +1068,13 @@ static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRe
                return FALSE;
        }
 
-       if (status == PLAYER_STATUS_PLAYING) {
-               if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_realize is failed");
-                       return FALSE;
-               }
-
-               if (__msg_smil_render_player_mgr_play((void *)viewerRenderData)) {
-                       SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
-                       SMIL_SLIDE_INFO_S *current_slide_data = _msg_smil_cont_mgr_get_cur_slide(smilContMgrHndle);
-
-                       if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo)
-                               __msg_smil_render_start_video_timer(viewerRenderData);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_play is failed");
-                       return FALSE;
-               }
+       if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_realize is failed");
+               return FALSE;
        }
 
+       /* Don't start PLAYER until UI Callback request is received */
+
        return TRUE;
 }
 
@@ -1390,3 +1358,31 @@ MSG_BOOL _msg_smil_render_show_inserted_image(SMIL_RENDERER_DATA_S *viewerRender
        return TRUE;
 }
 
+MSG_BOOL _msg_smil_render_mgr_request_player_start(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+
+       SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
+
+       if (__msg_smil_render_player_mgr_play(viewerRenderData)) {
+               SMIL_SLIDE_INFO_S *current_slide_data = _msg_smil_get_current_slide_info(viewerRenderData->smilhandle);
+
+               if (current_slide_data->pageInfo) {
+                       if (current_slide_data->pageInfo->hasVideo) {
+                               __msg_smil_render_start_video_timer(viewerRenderData);
+                       } else if (current_slide_data->pageInfo->hasAudio) {
+                               if (viewerRenderData->ismute) {
+                                       if (!__msg_smil_render_player_mgr_mute((void *)viewerRenderData))
+                                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_mute is Fail");
+                               }
+                       }
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_player_mgr_play is failed");
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
index d0ce9f3..ae47abb 100755 (executable)
@@ -78,3 +78,8 @@ MSG_BOOL msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcl
 {
        return _msg_smil_get_slide_time(hSmilHandle, slideIdx, bExcludeHp, slideTime);
 }
+
+MSG_BOOL msg_smil_request_player_start(void * hSmilHandle)
+{
+       return _msg_smil_request_player_start(hSmilHandle);
+}
\ No newline at end of file
index d192839..77898e6 100755 (executable)
@@ -239,44 +239,43 @@ MSG_SMIL_ERROR_E _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMI
                _msg_smil_render_rotate_video_window(smilPlayerHndle->smilRenderer);
                err = MSG_SMIL_SUCCESS;
                break;
-       case PLAYER_EVENT_PLAY:
-               _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
-               if (slideTimerCbData->timerHandle) {
-                       err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
-                       if (err != MSG_SMIL_SUCCESS) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PLAY_SLIDE");
-                               return err;
-                       }
-
-                       _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
-               }
+       case PLAYER_EVENT_READY:
+       case PLAYER_EVENT_PREVIEW_READY:
+               if (playerEvent == PLAYER_EVENT_PREVIEW_READY)
+                       _msg_smil_cont_mgr_delete_help_page(smilPlayerHndle->smilRenderer->msg_info_t, smilPlayerHndle->smilContMgrHndle);      //delete help page
 
                _msg_smil_event_mgr_set_current_slide(smilPlayerHndle->smilEvntMgrHndle, NULL);
                _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_PLAY);
-               err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
+               err = _msg_smil_event_mgr_ready(smilPlayerHndle->smilEvntMgrHndle);
                if (err != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PLAY");
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_READY");
                        return err;
                }
                break;
-       case PLAYER_EVENT_PREVIEW_PLAY:
+       case PLAYER_EVENT_START:
+               err = _msg_smil_event_mgr_start(smilPlayerHndle->smilEvntMgrHndle);
+               if (err != MSG_SMIL_SUCCESS) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_start_slide_event is failed: PLAYER_EVENT_START");
+                       return err;
+               }
+               break;
+       case PLAYER_EVENT_PLAY:
                _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE);
                if (slideTimerCbData->timerHandle) {
                        err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle);
                        if (err != MSG_SMIL_SUCCESS) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PLAY_SLIDE");
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PLAY");
                                return err;
                        }
 
                        _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
                }
 
-               _msg_smil_cont_mgr_delete_help_page(smilPlayerHndle->smilRenderer->msg_info_t, smilPlayerHndle->smilContMgrHndle);      //delete help page
                _msg_smil_event_mgr_set_current_slide(smilPlayerHndle->smilEvntMgrHndle, NULL);
                _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_PLAY);
                err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx);
                if (err != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PREVIEW_PLAY");
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PLAY");
                        return err;
                }
                break;
@@ -453,8 +452,17 @@ MSG_BOOL _msg_smil_set_smil_player_entry_handle_cb(void *hSmilHandle, void *call
 MSG_BOOL _msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE);
        SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
 
        return _msg_smil_cont_mgr_get_slide_time(smilPlayerHndle->smilContMgrHndle, slideIdx, bExcludeHp, slideTime);
+}
+
+MSG_BOOL _msg_smil_request_player_start(void *hSmilHandle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE);
+       SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle;
+
+       return _msg_smil_render_mgr_request_player_start((void *)smilPlayerHndle->smilRenderer);
 }
\ No newline at end of file
index df218de..14d1899 100755 (executable)
@@ -28,7 +28,7 @@
 /*==================================================================================================
  *                                                             FUNCTION DECLARATIONS
  *==================================================================================================*/
-static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderData);
+static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderData, bool is_helppage);
 static char *__msg_smil_render_get_cur_page_media_file_name(SMIL_RENDERER_DATA_S *viewerRenderData, int media_type);
 /*================================================================================================
  *                                                             FUNCTION IMPLEMENTATIONS
@@ -175,6 +175,21 @@ MSG_BOOL _msg_smil_render_set_layout_size(SMIL_RENDERER_DATA_S *viewerRenderData
        return TRUE;
 }
 
+MSG_BOOL _msg_smil_render_get_status(SMIL_RENDERER_DATA_S *viewerRenderData)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+
+       return viewerRenderData->render_status;
+}
+
+void _msg_smil_render_set_status(SMIL_RENDERER_DATA_S *viewerRenderData, MSG_BOOL status)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL);
+
+       viewerRenderData->render_status = status;
+}
 
 MSG_BOOL _msg_smil_render_create_layout(SMIL_RENDERER_DATA_S *viewerRenderData, Evas_Object *layout)
 {
@@ -360,6 +375,7 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                /*create smil rendering layout again*/
                if (_msg_smil_render_create_layout(viewerRenderData, viewerRenderData->layout_main) == FALSE) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_create_layout is failed");
+                       _msg_smil_render_set_status(viewerRenderData, FALSE);
                        return MSG_ERR_SMIL_UI_DISPLAY_FAIURE;
                }
 
@@ -401,7 +417,7 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                }
 
                /* set viewer bg color */
-               __msg_smil_render_set_bg_color(viewerRenderData);
+               __msg_smil_render_set_bg_color(viewerRenderData, false);
                break;
 
        case SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START:
@@ -410,6 +426,7 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                /*create smil rendering layout again*/
                if (_msg_smil_render_create_layout(viewerRenderData, viewerRenderData->layout_main) == FALSE) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_create_layout is failed");
+                       _msg_smil_render_set_status(viewerRenderData, FALSE);
                        return MSG_ERR_SMIL_UI_DISPLAY_FAIURE;
                }
 
@@ -451,7 +468,7 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                }
 
                /* set viewer bg color */
-               __msg_smil_render_set_bg_color(viewerRenderData);
+               __msg_smil_render_set_bg_color(viewerRenderData, false);
                /*move scroll to top*/
                elm_scroller_region_show(viewerRenderData->viewer_scroller, 0, 0, 0, 0);
                break;
@@ -459,10 +476,12 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
        case SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE:
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE");
                _msg_smil_render_stop_playing_file((void *)viewerRenderData);
+               _msg_smil_render_set_status(viewerRenderData, TRUE);
                return MSG_SMIL_SUCCESS;
 
        case SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE:
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE");
+               _msg_smil_render_set_status(viewerRenderData, TRUE);
                return MSG_SMIL_SUCCESS;
 
        case SMIL_RENDER_EVENT_DESTROY_SCREEN:
@@ -490,10 +509,14 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                        evas_object_del(viewerRenderData->insert_unsupported_icon);
                        viewerRenderData->insert_unsupported_icon = NULL;
                }
+
+               _msg_smil_render_set_status(viewerRenderData, TRUE);
+
                return MSG_SMIL_SUCCESS;
 
        default:
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "abnormal renderEvent : %d", eventStatus->renderEvent);
+               _msg_smil_render_set_status(viewerRenderData, FALSE);
                return MSG_ERR_SMIL_EVENT_NONE;
        }
 
@@ -514,8 +537,7 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
        if (pageCnt > 0) {                      //Multipart related
                if (_msg_smil_cont_mgr_is_cur_slide_help_page(eventStatus->singleSlideInfo)) {
                        char buf_font[VIEWER_TEXT_FONT_LEN + 1] = {0, };
-                       snprintf(buf_font, sizeof(buf_font), "<color=#6ca8c7>%s",
-                                                               ((nAttachCnt > 1) ? dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE") : dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE")));
+                       snprintf(buf_font, sizeof(buf_font), "<color=#808080>%s", ((nAttachCnt > 1) ? dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE") : dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE")));
 
                        _msg_smil_render_set_entry_handle(viewerRenderData);
 
@@ -534,9 +556,11 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                                elm_box_pack_end(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_bottom_padding);
                        }
 
+                       __msg_smil_render_set_bg_color(viewerRenderData, true);
                } else {
                        if (_msg_smil_render_reload_mms(viewerRenderData, eventStatus) == FALSE) {
                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_reload_mms is failed");
+                               _msg_smil_render_set_status(viewerRenderData, FALSE);
                                return MSG_ERR_SMIL_UI_DISPLAY_FAIURE;
                        }
                }
@@ -560,8 +584,7 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Attachment is not TEXT type, Display help page");
 
                                        char buf_font[VIEWER_TEXT_FONT_LEN + 1] = {0, };
-                                       snprintf(buf_font, sizeof(buf_font), "<color=#6ca8c7>%s",
-                                                                               dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"));
+                                       snprintf(buf_font, sizeof(buf_font), "<color=#808080>%s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE"));
 
                                        _msg_smil_render_set_entry_handle(viewerRenderData);
 
@@ -579,14 +602,14 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                                                elm_box_unpack(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_bottom_padding);
                                                elm_box_pack_end(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_bottom_padding);
                                        }
+
+                                       __msg_smil_render_set_bg_color(viewerRenderData, true);
                                }
                        } else {                //nAttachCnt > 1
                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Attachment count is over than 1, Display help page");
 
                                char buf_font[VIEWER_TEXT_FONT_LEN + 1] = {0, };
-                               snprintf(buf_font, sizeof(buf_font), "<font_size=%d color=#6ca8c7>%s",
-                                                                       MMS_SMIL_FONT_SIZE_NORMAL,
-                                                                       dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE"));
+                               snprintf(buf_font, sizeof(buf_font), "<color=#808080>%s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE"));
 
                                _msg_smil_render_set_entry_handle(viewerRenderData);
 
@@ -604,6 +627,8 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                                        elm_box_unpack(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_bottom_padding);
                                        elm_box_pack_end(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_bottom_padding);
                                }
+
+                               __msg_smil_render_set_bg_color(viewerRenderData, true);
                        }
                } else {
                        if (viewerRenderData->viewer_body)
@@ -611,6 +636,8 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                }
        }
 
+       _msg_smil_render_set_status(viewerRenderData, TRUE);
+
        return MSG_SMIL_SUCCESS;
 }
 
@@ -779,7 +806,7 @@ MSG_BOOL _msg_smil_render_reload_mms(SMIL_RENDERER_DATA_S *viewerRenderData, SMI
 }
 
 
-static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderData)
+static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderData, bool is_helppage)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL);
@@ -788,30 +815,35 @@ static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderDat
        SMIL_HANDLER_S *smilHandle = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
        MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilHandle == NULL);
 
-       /*Get contentMgr */
-       SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilHandle);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL);
+       if (!is_helppage) {
+               /*Get contentMgr */
+               SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilHandle);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL);
 
-       /*Get Mms body data */
-       msg_struct_t msgMmsBody = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle);
-       int bgColor = 0;
+               /*Get Mms body data */
+               msg_struct_t msgMmsBody = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle);
+               int bgColor = 0;
 
-       msg_list_handle_t page_list_t = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
+               msg_list_handle_t page_list_t = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle);
 
-       if (page_list_t)
-               msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor);
-       else    //Mixed msg
-               bgColor = 0xffffff;             // set WHITE directly
+               if (page_list_t)
+                       msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor);
+               else    //Mixed msg
+                       bgColor = 0xffffff;             // set WHITE directly
 
-       SMIL_RGB_UNION rgbUnion;
+               SMIL_RGB_UNION rgbUnion;
 
-       memset(&rgbUnion, 0x00, sizeof(SMIL_RGB_UNION));
-       rgbUnion.rgbColor = bgColor;
+               memset(&rgbUnion, 0x00, sizeof(SMIL_RGB_UNION));
+               rgbUnion.rgbColor = bgColor;
 
-       memset(&viewerRenderData->bgcolor, 0x00, sizeof(VIEWER_COLORREF));
-       viewerRenderData->bgcolor = bgColor;
+               memset(&viewerRenderData->bgcolor, 0x00, sizeof(VIEWER_COLORREF));
+               viewerRenderData->bgcolor = bgColor;
+
+               evas_object_color_set(viewerRenderData->viewer_bg_rect, rgbUnion.rgbQuad.rgbRed, rgbUnion.rgbQuad.rgbGreen, rgbUnion.rgbQuad.rgbBlue, 255);
+       } else {
+               evas_object_color_set(viewerRenderData->viewer_bg_rect, 248, 246, 239, 255);            //default BG
+       }
 
-       evas_object_color_set(viewerRenderData->viewer_bg_rect, rgbUnion.rgbQuad.rgbRed, rgbUnion.rgbQuad.rgbGreen, rgbUnion.rgbQuad.rgbBlue, 255);
        evas_object_show(viewerRenderData->viewer_bg_rect);
 }
 
index d0f1644..7506df8 100755 (executable)
@@ -105,14 +105,13 @@ void msg_ui_viewer_destroy_cb(ui_gadget_h ug, void *priv)
        if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
                if (viewer_main_data->player_view) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER view mode : %d", viewer_main_data->player_view->mode);
-
                        if (viewer_main_data->player_view->mode == MSG_VIEWER_LOAD_CONTACT_UG) {
                                /*update title button text after contact sync */
                                msg_ui_viewer_title_update(viewer_main_data->player_view, MSG_VIEWER_OPTION_CONTACT);
                        }
 
-                       bool isHelpText = (!viewer_main_data->player_view->smil_eventStatus) ? false : ((viewer_main_data->player_view->smil_eventStatus->isHelpSlide) ? true : false);
-                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_main_data->player_view->SmilHandle);
+                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
                        msg_ui_viewer_set_font_size(viewer_main_data->player_view, entry_type, MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE);
 
                        /*connect handler again*/
index 4b230d4..7aa5a40 100755 (executable)
@@ -39,7 +39,6 @@ static Elm_Genlist_Item_Class gdrm_list_itc;
  *                                                                     FUNCTION DECLARATIONS
  *==================================================================================================*/
 static void __drm_list_back_button_cb(void *data, Evas_Object *obj, void *event_info);
-static void __drm_list_play_button_cb(void *data, Evas_Object *obj, void *event_info);
 static char *__drm_list_genlist_text_get(void *data, Evas_Object *obj, const char *part);
 static Evas_Object *__drm_list_genlist_content_get(void *data, Evas_Object *obj, const char *part);
 static void __drm_list_genlist_del(void *data, Evas_Object *obj);
@@ -96,18 +95,6 @@ static void __drm_list_back_button_cb(void *data, Evas_Object *obj, void *event_
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
 
-static void __drm_list_play_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
-       MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data;
-
-       msg_ui_viewer_show_view_by_mode(drm_list_data->viewer_main, MSG_VIEWER_PLAYER_VIEW, MSG_VIEWER_VIEW_CMD_NONE);
-       elm_object_disabled_set(obj, TRUE);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
 static char *__drm_list_genlist_text_get(void *data, Evas_Object *obj, const char *part)
 {
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
index 17a9b86..6086e8b 100755 (executable)
@@ -84,6 +84,11 @@ static void __msg_ui_viewer_rotate_play_window(void *data, int rotate)
                if (viewer_main_data->player_view) {
                        MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
 
+                       if (rotate == 90 || rotate == 270)
+                               viewer_main_data->player_view->is_rotated = true;
+                       else
+                               viewer_main_data->player_view->is_rotated = false;
+
                        if ((Error = msg_smil_on_slide_event_handler(&(viewer_main_data->SmilHandle), PLAYER_EVENT_ROTATE_WINDOW)) != MSG_SMIL_SUCCESS)
                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "PLAYER_EVENT_ROTATE_WINDOW failed : %d", Error);
                }
@@ -242,6 +247,23 @@ static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void
 
        if (msg_ui_viewer_launch(viewer_main_data) == FALSE)
                ug_destroy_me(viewer_main_data->viewer_ug);
+
+       /* start SMIL PLAYER event after UG STARTED */
+       if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
+               if (viewer_main_data->player_view->drm_ro_check) {
+                       msg_ui_viewer_display_drm_list_popup(viewer_main_data->player_view);
+               } else {
+                       if (viewer_main_data->player_view && viewer_main_data->player_view->SmilHandle) {
+                               /* create play controller */
+                               msg_ui_viewer_play_controller_create(viewer_main_data->player_view);
+
+                               MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+                               err = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_START);
+                               if (err != MSG_SMIL_SUCCESS)
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler is failed! : %d", err);
+                       }
+               }
+       }
 }
 
 static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv)
@@ -290,8 +312,10 @@ static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void
                if (viewer_main_data->player_view) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Player view mode : %d", viewer_main_data->player_view->mode);
 
-                       bool isHelpText = (!viewer_main_data->player_view->smil_eventStatus) ? false : ((viewer_main_data->player_view->smil_eventStatus->isHelpSlide) ? true : false);
-                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                       msg_ui_viewer_apply_font_size(viewer_main_data->player_view);
+
+                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_main_data->player_view->SmilHandle);
+                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
                        msg_ui_viewer_set_font_size(viewer_main_data->player_view, entry_type, MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE);
                }
        } else if (viewer_main_data->view_mode == MSG_VIEWER_DRM_LIST_VIEW) {
@@ -473,7 +497,7 @@ static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event
                                        }
 
                                        viewer_main_data->player_view->status = MSG_VIEWER_STOP;
-                                       msg_ui_viewer_update_play_controller(viewer_main_data->player_view, MSG_VIEWER_STOP);
+                                       msg_ui_viewer_play_controller_update(viewer_main_data->player_view, MSG_VIEWER_STOP);
                                }
                        }
                } else {
index e0ffbd9..07dab7e 100755 (executable)
@@ -33,9 +33,8 @@ static MSG_BOOL __msg_ui_viewer_check_drm_content(void *data);
 static MSG_SMIL_ERROR_E __msg_ui_viewer_main_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data);
 static MSG_BOOL __msg_ui_vewer_get_smil_handle(void *data);
 static MSG_BOOL __msg_ui_viewer_launch_drm_list(void *data);
-static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data);
+static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data, bool invalid_drm);
 static MSG_BOOL __msg_ui_viewer_show_play_view(void *data);
-
 /*==================================================================================================
  *                                                     FUNCTION IMPLEMENTATIONS
  *================================================================================================*/
@@ -74,15 +73,13 @@ MSG_BOOL msg_ui_viewer_launch(void *data)
        }
 
        if (viewer_main_data->launchmode == MSG_VIEWER_FULLVIEW_MODE) {
-               if (__msg_ui_viewer_check_drm_content(viewer_main_data)) {
-                       ret = __msg_ui_viewer_launch_drm_list(viewer_main_data);
-                       viewer_main_data->view_mode = MSG_VIEWER_DRM_LIST_VIEW;
-               } else {
-                       ret = __msg_ui_viewer_launch_play_view(viewer_main_data);
-                       viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
-               }
+               if (__msg_ui_viewer_check_drm_content(viewer_main_data))
+                       ret = __msg_ui_viewer_launch_play_view(viewer_main_data, true);
+               else
+                       ret = __msg_ui_viewer_launch_play_view(viewer_main_data, false);
+               viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
        } else {
-               ret = __msg_ui_viewer_launch_play_view(viewer_main_data);
+               ret = __msg_ui_viewer_launch_play_view(viewer_main_data, false);
                viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
        }
 
@@ -103,7 +100,7 @@ void msg_ui_viewer_show_view_by_mode(void *data, MSG_VIEWER_VIEW_MODE_E viewMode
                        if (__msg_ui_viewer_show_play_view(viewer_main_data))
                                viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
                } else {
-                       __msg_ui_viewer_launch_play_view(viewer_main_data);
+                       __msg_ui_viewer_launch_play_view(viewer_main_data, false);
                        viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW;
                }
        } else if (viewMode == MSG_VIEWER_DRM_LIST_VIEW) {
@@ -201,7 +198,7 @@ static MSG_BOOL __msg_ui_viewer_show_play_view(void *data)
        return msg_ui_viewer_show_player_view(viewer_play_data);
 }
 
-static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data)
+static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data, bool invalid_drm)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
@@ -229,6 +226,7 @@ static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data)
        viewer_play_data->mms_t = viewer_main_data->mms_t;
        viewer_play_data->main_window = viewer_main_data->main_window;
        viewer_play_data->msg_box_viewer = viewer_main_data->msg_box_viewer;
+       viewer_play_data->drm_ro_check = invalid_drm;
 
        if (viewer_main_data->navi_frame)
                viewer_play_data->navi_frame = viewer_main_data->navi_frame;
@@ -309,8 +307,8 @@ Evas_Object *msg_ui_viewer_create_bg(void *data, Evas_Object *parent)
        if (viewer_main_data->bg == NULL) {
                bg = elm_bg_add(parent);
                MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, bg == NULL, NULL);
-               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               elm_win_resize_object_add(parent, bg);
+           evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+           elm_win_resize_object_add(parent, bg);
                evas_object_show(bg);
                viewer_main_data->bg = bg;
        } else {
@@ -423,16 +421,16 @@ void msg_ui_viewer_change_language(void *data)
                if (viewer_play_data->popup) {
                        switch (viewer_play_data->popup_type) {
                                case MSG_VIEWER_DELETE_POPUP:
-                                       msg_ui_viewer_delete_button_cb(viewer_play_data, NULL, NULL);
+                                       msg_ui_viewer_option_create_delete_popup(viewer_play_data, NULL, NULL);
                                        break;
                                case MSG_VIEWER_ATTACHMENTS_POPUP:
                                        msg_ui_viewer_create_save_attachments_popup(viewer_play_data);
                                        break;
                                case MSG_VIEWER_DETAILS_POPUP:
-                                       msg_ui_viewer_create_msg_detail_popup(viewer_play_data);
+                                       msg_ui_viewer_option_create_msg_detail_popup(viewer_play_data);
                                        break;
                                case MSG_VIEWER_MENU_CTX_POPUP:
-                                       msg_ui_viewer_more_button_cb(viewer_play_data, NULL, NULL);
+                                       msg_ui_viewer_option_create_more_popup(viewer_play_data, NULL, NULL);
                                        break;
                                case MSG_VIEWER_CUTLINK_POPUP:
                                case MSG_VIEWER_TITLE_MENU_POPUP:
@@ -448,8 +446,8 @@ void msg_ui_viewer_change_language(void *data)
 
                if (viewer_play_data->title_menu_opened) {
                        /* close and open again */
-                       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-                       msg_ui_viewer_open_title_menu_genlist(viewer_play_data);
+                       msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+                       msg_ui_viewer_option_create_title_menu(viewer_play_data);
                }
 
                if (viewer_play_data->render_entry && viewer_play_data->smil_eventStatus->isHelpSlide) {
diff --git a/viewer/src/msg-ui-viewer-play-view-attachment.c b/viewer/src/msg-ui-viewer-play-view-attachment.c
new file mode 100755 (executable)
index 0000000..06bff8d
--- /dev/null
@@ -0,0 +1,651 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://floralicense.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*==================================================================================================
+ *                                                                     INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-ui-viewer-play-view.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-viewer-utility.h"
+#include "msg-ui-common-utility.h"
+#include "msg-ui-image-resource.h"
+
+#include <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
+#include <status.h>
+
+/*==================================================================================================
+ *                                                                     FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/* save attachment popup */
+static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info);
+
+/*==================================================================================================
+ *                                                             FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+void msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       Evas_Object *popup = NULL;
+       Evas_Object *box = NULL;
+       Evas_Object *genlist = NULL;
+       Evas_Object *btn_save = NULL;
+       Evas_Object *btn_close = NULL;
+       int index = 0;
+       int total_media_count = 0;
+       int popup_height = 0;
+
+       /* destroy previous popup */
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       total_media_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
+
+       /* create popup */
+       popup = elm_popup_add(viewer_play_data->main_window);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       if (total_media_count > 3 )
+               elm_object_style_set(popup, "menustyle");
+       else
+               elm_object_style_set(popup, "min_menustyle");
+
+       /* set popup title */
+       elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_ATTACHMENTS"));
+
+       /* set select all genlist item style */
+       viewer_play_data->attach_sa_class.item_style = "1text.1icon.2";
+       viewer_play_data->attach_sa_class.func.text_get = __msg_ui_viewer_save_attachments_sa_gl_text_get;
+       viewer_play_data->attach_sa_class.func.content_get = __msg_ui_viewer_save_attachments_sa_gl_content_get;
+       viewer_play_data->attach_sa_class.func.state_get = NULL;
+       viewer_play_data->attach_sa_class.func.del = NULL;
+
+       /* set genlist style */
+       viewer_play_data->attach_item_class.item_style = "1text.2icon.2";
+       viewer_play_data->attach_item_class.func.text_get = __msg_ui_viewer_save_attachments_gl_text_get;
+       viewer_play_data->attach_item_class.func.content_get = __msg_ui_viewer_save_attachments_gl_content_get;
+       viewer_play_data->attach_item_class.func.state_get = NULL;
+       viewer_play_data->attach_item_class.func.del = NULL;
+
+       /* create genlist */
+       genlist = elm_genlist_add(viewer_play_data->main_window);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
+
+       /* add genlist item based on media count, if item's count is over 1 then 'select all' item should be inserted*/
+       if (total_media_count > 1) {
+               /* add Select all item */
+               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);
+
+               /* add each item (order is inserted + attached) */
+               for (index = 1; index < total_media_count+1; index++) {
+                       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);
+               }
+       } else {
+               /* add each item (order is inserted + attached) */
+               for (index = 0; index < total_media_count; index++) {
+                       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);
+               }
+       }
+
+       /* add save button */
+       btn_save = elm_button_add(popup);
+       elm_object_style_set(btn_save, "popup_button/default");
+       elm_object_text_set(btn_save, dgettext("sys_string", "IDS_COM_SK_SAVE"));
+       elm_object_part_content_set(popup, "button1", btn_save);
+       evas_object_smart_callback_add(btn_save, "clicked", __msg_ui_viewer_save_attachments_popup_save_clicked_cb, viewer_play_data);
+       viewer_play_data->save_button = btn_save;
+       elm_object_disabled_set(viewer_play_data->save_button, EINA_TRUE);
+
+       /* add close button */
+       btn_close = elm_button_add(popup);
+       elm_object_style_set(btn_close, "popup_button/default");
+       elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+       elm_object_part_content_set(popup, "button2", btn_close);
+       evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb, viewer_play_data);
+
+       /* set popup style */
+       box = elm_box_add(viewer_play_data->main_window);
+       popup_height = VIEWER_ATTACH_GL_ITEM_HEIGHT * ((total_media_count > 3) ? 4 : ((total_media_count > 1) ? total_media_count + 1 : total_media_count));
+       evas_object_size_hint_min_set(box, 0, popup_height * elm_config_scale_get());
+       evas_object_show(genlist);
+       elm_box_pack_end(box, genlist);
+       elm_object_content_set(popup, box);
+
+       /* show popup */
+       evas_object_show(popup);
+       viewer_play_data->save_attachment_gl= genlist;
+       viewer_play_data->popup = popup;
+       viewer_play_data->popup_type = MSG_VIEWER_ATTACHMENTS_POPUP;
+
+       /*disconnect mouse handler*/
+       msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       int index = 0;
+       int total_count = 0;
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->save_button);
+               viewer_play_data->save_button = NULL;
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+               viewer_play_data->popup = NULL;
+               viewer_play_data->sa_check = NULL;
+       }
+
+       total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
+
+       while (index < total_count) {
+               if (index < viewer_play_data->insert_count)
+                       media_info = eina_list_nth(viewer_play_data->insert_list, index);
+               else if (index < total_count)
+                       media_info = eina_list_nth(viewer_play_data->attach_list, index-viewer_play_data->insert_count);
+               else
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!", index);
+
+               if (media_info ) // disable check status
+                       media_info->isChecked = FALSE;
+
+               index++;
+       }
+
+       viewer_play_data->isSelectAll = FALSE;
+
+       /* connect handler again*/
+       msg_ui_viewer_connect_handler(viewer_play_data);
+
+       /* play viewer again if previous status was PLAY */
+       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
+
+       int attach_count = 0;
+       int insert_count = 0;
+       int total_count = 0;
+       int selected_count = 0;
+
+       int index = 0;
+       int insert_index = 0;
+       int attach_index = 0;
+       int failed_count = 0;
+       int saved_count = 0;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->save_button);
+               viewer_play_data->save_button = NULL;
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+               viewer_play_data->popup = NULL;
+               viewer_play_data->sa_check = NULL;
+       }
+
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_Info = NULL;
+
+       insert_count = eina_list_count(viewer_play_data->insert_list);
+       attach_count = eina_list_count(viewer_play_data->attach_list);
+       total_count = insert_count + attach_count;
+
+       while (index < total_count) {
+               if (index < insert_count)
+                       media_Info = eina_list_nth(viewer_play_data->insert_list , insert_index++);
+               else if (index < total_count)
+                       media_Info = eina_list_nth(viewer_play_data->attach_list , attach_index++);
+
+               if (media_Info) {
+                       bool saveCondition = (viewer_play_data->isSelectAll) ? TRUE : (media_Info->isChecked ? TRUE : FALSE);
+
+                       if (saveCondition) {
+                               selected_count++;
+
+                               /*get default file path*/
+                               MSG_BOOL result = FALSE;
+                               char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
+
+                               result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
+                               if (result) {
+                                       char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
+                                       snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, media_Info->pfile_name);
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", media_Info->pfile_path);
+
+                                       char *result_path = msg_ui_viewer_util_copy_file(media_Info->pfile_path, dst_path);
+                                       if (result_path) {
+                                               saved_count++;
+                                               free(result_path);
+                                       } else {
+                                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
+                                               failed_count++;
+                                       }
+                               } else {
+                                       failed_count++;
+                               }
+
+                               //release check status
+                               media_Info->isChecked = FALSE;
+                               if (viewer_play_data->isSelectAll)
+                                       viewer_play_data->isSelectAll = FALSE;
+                       }
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
+               }
+
+               media_Info = NULL;
+
+               index++;
+       }
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Selected(%d) / Total(%d) [inserted(%d),attached(%d)]", selected_count, total_count, insert_count, attach_count);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Saved(%d), Failed(%d)", saved_count, failed_count);
+
+       /* show indicator status text */
+       if (failed_count == selected_count) {
+               status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+       } else {
+               if (selected_count == 1 && saved_count == 1) {
+                       status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
+               } else {
+                       char buf[DEF_BUF_LEN_S + 1] = {0, };
+                       snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, selected_count);
+                       status_message_post(buf);
+               }
+       }
+
+       /* connect handler again*/
+       msg_ui_viewer_connect_handler(viewer_play_data);
+
+       /* play viewer again if previous status was PLAY */
+       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       int index = (int)data;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+       if (!strcmp(part, "elm.text")) {
+               if (index == 0) {
+                       return strdup(dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid index of select all(%d)", index);
+                       return NULL;
+               }
+       }
+       return NULL;
+}
+
+static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+       int index = (int)data;
+       Evas_Object *check;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+               check = elm_check_add(obj);
+               elm_check_state_pointer_set(check, &(viewer_play_data->isSelectAll));
+               evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_smart_callback_add(check, "changed", __msg_ui_viewer_save_attachments_sa_check_changed_cb, viewer_play_data);
+               viewer_play_data->sa_check = check;
+
+               return check;
+       }
+
+       return NULL;
+}
+
+static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       int i = 0;
+       Eina_List * realized_list;
+       Elm_Object_Item *it;
+       Eina_List *l;
+       Eina_Bool checked;
+
+       int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "total Count = %d", total_count);
+       checked = elm_check_state_get(obj);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "checked status = %d", checked);
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
+
+       for (i = 0; i < total_count; i++) {
+               if (i < viewer_play_data->insert_count) {
+                       media_info = eina_list_nth(viewer_play_data->insert_list, i);
+                       media_info->isChecked = checked;
+               } else if (i < total_count) {
+                       media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
+                       media_info->isChecked = checked;
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
+               }
+       }
+
+       // Update realized items only
+       realized_list = elm_genlist_realized_items_get(viewer_play_data->save_attachment_gl);
+       EINA_LIST_FOREACH(realized_list, l, it) {
+                elm_genlist_item_update(it);
+       }
+
+}
+
+static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
+       int index = 0;
+       int i = 0;
+       int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
+
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
+
+       if (item != NULL) {
+               index = (int)elm_object_item_data_get(item);
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+
+               viewer_play_data->isSelectAll = !viewer_play_data->isSelectAll;
+
+               //check state changed cb will be called
+               elm_check_state_set(viewer_play_data->sa_check, viewer_play_data->isSelectAll);
+               elm_genlist_item_update(item);
+
+               if (total_count > 1) {
+                       for (i = 0; i < total_count; i++) {
+                               if (i < viewer_play_data->insert_count) {
+                                       tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
+
+                               } else if (i < total_count) {
+                                       tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
+                               } else {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
+                                       continue;
+                               }
+                               elm_check_state_set(tmp_media_info->check_item, (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE);
+                               tmp_media_info->isChecked = (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE;
+                       }
+               }
+               elm_object_disabled_set(viewer_play_data->save_button, (viewer_play_data->isSelectAll) ? EINA_FALSE : EINA_TRUE);
+       }
+}
+
+static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
+
+       int index = (int) data;
+       int realIndex = 0;
+       int insert_count = viewer_play_data->insert_count;
+       int attach_count = viewer_play_data->attach_count;
+       int total_count = insert_count + attach_count;
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+       realIndex = (total_count > 1) ? index-1 : index;        // calculate item index considering 'select all' item
+
+       // check boundary
+       if (realIndex < 0 ) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
+               return NULL;
+       }
+
+       if (!strcmp(part, "elm.text")) {
+               if (realIndex < insert_count) {
+                       media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[INSERT MEDIA] name is  = %s", media_info->pfile_name);
+               } else if (realIndex < insert_count+attach_count) {
+                       media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ATTACH MEDIA] name is  = %s", media_info->pfile_name);
+               }
+
+               return strdup(media_info->pfile_name);
+       }
+       return NULL;
+}
+
+static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
+       int index = (int)data;
+       Evas_Object *check;
+       int realIndex = index-1;
+       int insert_count = viewer_play_data->insert_count;
+       int attach_count = viewer_play_data->attach_count;
+       int total_count = insert_count + attach_count;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+
+       realIndex = (total_count > 1) ? index-1 : index;        // calculate item index considering 'select all' item
+
+       // check boundary
+       if (realIndex < 0 ) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
+               return NULL;
+       }
+
+       if (realIndex < insert_count) {
+               media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
+       } else if (realIndex < total_count) {
+               media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
+       }
+
+       if (strcmp(part, "elm.icon.1") == 0) {
+               check = elm_check_add(obj);
+               //set the State pointer to keep the current UI state of Checkbox.
+               elm_check_state_pointer_set(check, &media_info->isChecked);
+               evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               media_info->check_item = check;
+
+               return check;
+       } else  if (strcmp(part, "elm.icon.2") == 0) {
+               Evas_Object *image = NULL;
+
+               image = elm_icon_add(obj);
+
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info->pfile_path = %s", media_info->pfile_path);
+
+               /*set attach file icon*/
+               if (media_info->media_type == MSG_VIEWER_MEDIA_IMG ||
+                               media_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
+                       elm_image_file_set(image, media_info->pfile_path, NULL);
+               } else if (media_info->media_type == MSG_VIEWER_MEDIA_DRM) {
+                       elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
+               } else {
+                       if (strlen(media_info->pfile_path)) {
+                               const char *icon_path = NULL;
+
+                               icon_path = msg_common_get_file_icon(media_info->pfile_path);
+                               if (icon_path) {
+                                       elm_image_file_set(image, MSG_IMAGES_EDJ, icon_path);
+                               } else {
+                                       D_EMSG("icon_path is NULL");
+                                       elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
+                               }
+                       } else {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
+                               return NULL;
+                       }
+               }
+
+               if (image)
+                       evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+               return image;
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
+       }
+
+       return NULL;
+}
+
+static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
+
+       int i = 0;
+       int index = 0;
+       int realIndex = 0;
+       int insert_count = viewer_play_data->insert_count;
+       int attach_count = viewer_play_data->attach_count;
+       int total_count = insert_count + attach_count;
+       bool isAllSelected = TRUE;
+       bool isNoneSelected = TRUE;
+
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *sel_media_info = NULL;
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
+
+       if (item != NULL) {
+               index = (int)elm_object_item_data_get(item);
+               realIndex = (total_count > 1) ? index-1 : index;                // calculate item index considering 'select all' item
+
+               // check boundary
+               if (realIndex < 0 ) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
+                       return;
+               }
+
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+
+               if (realIndex < insert_count) {
+                       sel_media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
+               } else {
+                       sel_media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
+               }
+
+               // toggle check status
+               sel_media_info->isChecked = !sel_media_info->isChecked;
+
+               elm_genlist_item_update(item);
+
+               //check condition for set select all item
+               if (total_count > 1 && sel_media_info->isChecked) {
+                       i =0;
+                       for (i = 0; i < total_count; i++) {
+                               if (i < viewer_play_data->insert_count) {
+                                       tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
+                                       if (!tmp_media_info->isChecked) {
+                                               isAllSelected = FALSE;
+                                               break;
+                                       }
+                               } else if (i < total_count) {
+                                       tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
+                                       if (!tmp_media_info->isChecked) {
+                                               isAllSelected = FALSE;
+                                               break;
+                                       }
+                               } else {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
+                               }
+                       }
+
+                       if (isAllSelected) {
+                               elm_check_state_set(viewer_play_data->sa_check, EINA_TRUE);
+                               viewer_play_data->isSelectAll = EINA_TRUE;
+                       }
+               }
+
+               // check condition for release select all item
+               if (total_count > 1 && !sel_media_info->isChecked && viewer_play_data->isSelectAll) {
+                       elm_check_state_set(viewer_play_data->sa_check, EINA_FALSE);
+                       viewer_play_data->isSelectAll = EINA_FALSE;
+               }
+
+               // check condition for enable save button item
+               for (i = 0; i < total_count; i++) {
+                       if (i < viewer_play_data->insert_count) {
+                               tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
+                               if (tmp_media_info->isChecked) {
+                                       isNoneSelected = FALSE;
+                                       break;
+                               }
+                       } else if (i < total_count) {
+                               tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
+                               if (tmp_media_info->isChecked) {
+                                       isNoneSelected = FALSE;
+                                       break;
+                               }
+                       } else {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
+                       }
+               }
+               elm_object_disabled_set(viewer_play_data->save_button, (isNoneSelected) ? EINA_TRUE : EINA_FALSE);
+       }
+}
diff --git a/viewer/src/msg-ui-viewer-play-view-callback.c b/viewer/src/msg-ui-viewer-play-view-callback.c
deleted file mode 100755 (executable)
index db3a3c0..0000000
+++ /dev/null
@@ -1,2813 +0,0 @@
-/*
- * Copyright 2012  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *    http://floralicense.org/license
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "msg-ui-viewer-play-view.h"
-#include "msg-ui-viewer-main.h"
-#include "msg-ui-viewer-utility.h"
-#include "msg-ui-common-utility.h"
-#include "msg-ui-image-resource.h"
-
-#include <contacts.h>
-#include "appsvc.h"
-#include <utilX.h>
-#include <app_service.h>
-#include <syspopup_caller.h>
-#include <status.h>
-
-/*==================================================================================================
- *                                                                     DEFINITIONS
- *==================================================================================================*/
-Elm_Genlist_Item_Class itc_popup = {0,};       /** itc for list style popup */
-
-/*==================================================================================================
- *                                                                     FUNCTION DECLARATIONS
- *==================================================================================================*/
-/* genlist for multirecipients in title button */
-static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part);
-static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part);
-static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_title_menu_del(void *data, Evas_Object *obj);
-static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_title_menu_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-
-/*attachment list for help page */
-static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data);
-
-/* controllbar toolbar option */
-static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
-
-/* save attachment popup */
-static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part);
-static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part);
-static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info);
-static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part);
-static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part);
-static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_protection_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-
-/*==================================================================================================
- *                                                             FUNCTION IMPLEMENTATIONS
- *================================================================================================*/
-Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
-       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
-       SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
-       int start_point = 0;
-       int end_point = 0;
-       int screen_width = 0;
-       int rotate = 0;
-
-       if (viewer_play_data->drag_volume_slider) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "volume slider is dragging, do not navigate page!");
-               return FALSE;
-       }
-
-       play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
-
-       /*get start and end point according to rotation*/
-       rotate = elm_win_rotation_get(viewer_play_data->main_window);
-       if (rotate == 0) {      /*PORTRAIT mode*/
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT mode");
-               start_point = viewer_play_data->m_x;
-               end_point = ev->x;
-               screen_width = viewer_play_data->window_width;
-       } else if (rotate == 180) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT reverse mode");
-               start_point = ev->x;
-               end_point = viewer_play_data->m_x;
-               screen_width = viewer_play_data->window_width;
-       } else if (rotate == 90) {      /*LANDSCAPE mode*/
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE mode");
-               start_point = ev->y;
-               end_point = viewer_play_data->m_y;
-               screen_width = viewer_play_data->window_height;
-       } else if (rotate == 270) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE reverse mode");
-               start_point = viewer_play_data->m_y;
-               end_point = ev->y;
-               screen_width = viewer_play_data->window_height;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
-               return FALSE;
-       }
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start_point = %d, end_point = %d, screen_width = %d", start_point, end_point, screen_width);
-
-       if (end_point - start_point > screen_width / 4) {
-               /* prev*/
-               int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
-               if (pageIdx >= 0) {
-                       if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
-                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
-                               if (err != MSG_SMIL_SUCCESS) {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
-                               } else {
-                                       /* hide menu title genlist if player status is changed to play */
-                                       if (viewer_play_data->title_menu_opened) {
-                                               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-                                               /* play viewer again if previous status was PLAY */
-                                               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-                                                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                                                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                                                               return EINA_FALSE;
-                                                       }
-                                               }
-                                       }
-                                       /* show play controller */
-                                       if (viewer_play_data->play_controller) {
-                                               elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
-                                               evas_object_show(viewer_play_data->play_controller);
-                                               viewer_play_data->playcontroller_opened = true;
-                                               elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
-
-                                               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-                                       }
-                                       /* set progressbar and progress text sync */
-                                       if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
-                                               msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
-                               }
-                       }
-               }
-       } else if (start_point - end_point > screen_width / 4) {
-               /*next*/
-               int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
-               int total_page = viewer_play_data->smil_eventStatus->pageCnt;
-               if (total_page >= pageIdx) {
-                       if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
-                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
-                               if (err != MSG_SMIL_SUCCESS) {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
-                               } else {
-                                       /* hide menu title genlist if player status is changed to play */
-                                       if (viewer_play_data->title_menu_opened) {
-                                               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-                                               /* play viewer again if previous status was PLAY */
-                                               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-                                                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                                                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                                                               return EINA_FALSE;
-                                                       }
-                                               }
-                                       }
-                                       /* show play controller */
-                                       if (viewer_play_data->play_controller) {
-                                               elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
-                                               evas_object_show(viewer_play_data->play_controller);
-                                               viewer_play_data->playcontroller_opened = true;
-                                               elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
-
-                                               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-                                       }
-                                       /* set progressbar and progress text sync */
-                                       if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
-                                               msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
-                               }
-                       }
-               }
-       }
-
-       return EINA_TRUE;
-}
-
-Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
-
-       viewer_play_data->m_x = ev->x;
-       viewer_play_data->m_y = ev->y;
-
-       if (viewer_play_data->mouse_up_event_handler) {
-               ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
-               viewer_play_data->mouse_up_event_handler = NULL;
-       }
-       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);
-
-       return EINA_TRUE;
-}
-
-void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       Evas_Event_Mouse_Down *ev = event_info;
-
-       viewer_play_data->ctrl_start_x = ev->canvas.x;
-       viewer_play_data->ctrl_start_y = ev->canvas.y;
-}
-
-void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       Evas_Event_Mouse_Up *ev = event_info;
-
-       viewer_play_data->ctrl_end_x = ev->canvas.x;
-       viewer_play_data->ctrl_end_y = ev->canvas.y;
-
-       int screen_width = 0;
-       int screen_height = 0;
-       int rotate = 0;
-
-       //get screen size
-       rotate = elm_win_rotation_get(viewer_play_data->main_window);
-       if (rotate == 0 || rotate == 180) {
-               screen_width = viewer_play_data->window_width;
-               screen_height = viewer_play_data->window_height;
-       } else if (rotate == 90 || rotate == 270) {
-               screen_width = viewer_play_data->window_height;
-               screen_height = viewer_play_data->window_width;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
-               return;
-       }
-
-       //check only case for playcontroller is not opened, the other case is checked within msg_ui_viewer_play_layout_clicked_cb
-       if (!viewer_play_data->playcontroller_opened && !viewer_play_data->title_menu_opened) {
-               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 ) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is tapped and play controller should be displayed");
-
-                       if (viewer_play_data->play_controller) {
-                               elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
-                               evas_object_show(viewer_play_data->play_controller);
-                               viewer_play_data->playcontroller_opened = true;
-                               elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
-                               //create play controller timer
-                               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-                       }
-               }
-       } else if (viewer_play_data->playcontroller_opened) {
-               /* up/down drag condition - close play controller */
-               if (abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) > screen_height / 5) {
-                       elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
-                       evas_object_hide(viewer_play_data->play_controller);
-                       viewer_play_data->playcontroller_opened = false;
-                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
-
-                       msg_ui_viewer_destroy_play_controller_timer(viewer_play_data);
-               }
-       }
-}
-
-void msg_ui_viewer_play_layout_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
-
-       if (viewer_play_data->title_menu_opened) {
-               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-               /* play viewer again if previous status was PLAY */
-               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                               return;
-                       }
-               }
-       } else if (viewer_play_data->playcontroller_opened) {
-               int screen_width = 0;
-               int screen_height = 0;
-               int rotate = 0;
-
-               //get screen size
-               rotate = elm_win_rotation_get(viewer_play_data->main_window);
-               if (rotate == 0 || rotate == 180) {
-                       screen_width = viewer_play_data->window_width;
-                       screen_height = viewer_play_data->window_height;
-               } else if (rotate == 90 || rotate == 270) {
-                       screen_width = viewer_play_data->window_height;
-                       screen_height = viewer_play_data->window_width;
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
-                       return;
-               }
-
-               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 &&
-                       viewer_play_data->ctrl_end_y < screen_height-(VIEWER_NAVIFRAME_BOTTOM_H+VIEWER_PLAY_CONTROLLER_HEIGHT)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is now displayed and play controller should be hided");
-
-                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
-                       elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
-                       evas_object_hide(viewer_play_data->play_controller);
-                       viewer_play_data->playcontroller_opened = false;
-                       //destroy play controller timer
-                       msg_ui_viewer_destroy_play_controller_timer(viewer_play_data);
-               }
-       }
-}
-
-Eina_Bool msg_ui_viewer_focused_in_cb(void *data, int type, void *event)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, EINA_FALSE, "viewer_play_data is NULL!");
-
-       Ecore_X_Event_Window_Focus_Out *ev = (Ecore_X_Event_Window_Focus_Out *)event;
-
-       if (viewer_play_data->main_window != NULL && ev->win == elm_win_xwindow_get(viewer_play_data->main_window)) {
-               if (!viewer_play_data->popup)
-                       msg_ui_viewer_connect_handler(viewer_play_data);
-
-               if (viewer_play_data->mode == MSG_VIEWER_HIDED_BY_OTHER_WINDOW) {
-                       /*reset viewer mode*/
-                       viewer_play_data->mode = MSG_VIEWER_DEFAULT_MODE;
-               }
-       }
-
-       return ECORE_CALLBACK_PASS_ON;
-}
-
-Eina_Bool msg_ui_viewer_focused_out_cb(void *data, int type, void *event)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, EINA_FALSE, "viewer_play_data is NULL!");
-
-       Ecore_X_Event_Window_Focus_Out *ev = (Ecore_X_Event_Window_Focus_Out *)event;
-
-       if ((viewer_play_data->main_window != NULL) && (ev->win == elm_win_xwindow_get(viewer_play_data->main_window))) {
-               msg_ui_viewer_disconnect_handler(viewer_play_data);
-               viewer_play_data->mode = MSG_VIEWER_HIDED_BY_OTHER_WINDOW;
-       }
-
-       return ECORE_CALLBACK_PASS_ON;
-}
-
-
-MSG_SMIL_ERROR_E msg_ui_viewer_set_entry_handle_cb(MSG_PLAY_DATA_S *data, void *entry)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ASSERT, data == NULL, MSG_ERR_SMIL_UNKNOWN);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       bool isHelpText = false;
-
-       viewer_play_data->render_entry = (Evas_Object *)entry;
-
-       if (viewer_play_data->render_entry) {
-               if (viewer_play_data->smil_eventStatus) {
-                       isHelpText = (viewer_play_data->smil_eventStatus->isHelpSlide) ? true : false;
-               } else {
-                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
-                       isHelpText = (!slide || !slide->commonData) ? false : ((slide->commonData->pageCnt == 0) ? true : false);
-               }
-               MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
-               msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE);
-       }
-
-       return MSG_SMIL_SUCCESS;
-}
-
-void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->mode : %d", viewer_play_data->mode);
-
-       /*prevent invalid double pressing button event after launching ug or app(like call, vtcall)*/
-       if (viewer_play_data->mode != MSG_VIEWER_DEFAULT_MODE)
-               return;
-
-       if (viewer_play_data->title_menu_opened)
-               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-       if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
-               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
-               if (err != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
-               }
-
-               viewer_play_data->status = MSG_VIEWER_STOP;
-               msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
-       }
-
-       msg_ui_viewer_disconnect_handler(viewer_play_data);
-
-       if (!viewer_play_data->del_idler)
-               viewer_play_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_play_data->viewer_main);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_title_button_clicked_cb(void * data, Evas_Object * obj, void * event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->title_menu_opened) {
-               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-               /* play viewer again if previous status was PLAY */
-               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                               return;
-                       }
-               }
-       } else {
-               msg_ui_viewer_open_title_menu_genlist(viewer_play_data);
-
-               viewer_play_data->previous_status = viewer_play_data->status;
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
-
-               /* set player state to pause and update icon */
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
-
-       /* check media count */
-       if (viewer_play_data->insert_count + viewer_play_data->attach_count == 0) {
-               msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_NO_ATTACHMENTS"));
-               return;
-       }
-
-       /* close title menu list if exist, else pause SMIL and save previous status */
-       if (viewer_play_data->title_menu_opened) {
-               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-       } else {
-               viewer_play_data->previous_status = viewer_play_data->status;
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
-
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) { // pause
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-
-       /* create popup for save attachments and insert items */
-       msg_ui_viewer_create_save_attachments_popup(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
-       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-       /* Add protection on/off menu */
-       bool is_protected = false;
-       msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
-       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"));
-
-       Evas_Object *btn_ok = elm_button_add(popup);
-       elm_object_style_set(btn_ok, "popup_button/default");
-       elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
-       elm_object_part_content_set(popup, "button1", btn_ok);
-       evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_delete_ok_clicked_cb, viewer_play_data);
-
-       Evas_Object *btn_cancel = elm_button_add(popup);
-       elm_object_style_set(btn_cancel, "popup_button/default");
-       elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
-       elm_object_part_content_set(popup, "button2", btn_cancel);
-       evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
-
-       evas_object_show(popup);
-       viewer_play_data->popup = popup;
-       viewer_play_data->popup_type = MSG_VIEWER_DELETE_POPUP;
-
-       /*disconnect mouse handler*/
-       msg_ui_viewer_disconnect_handler(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
-       char str_id[DEF_BUF_LEN] = {0,};
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete msg-id is %d", viewer_play_data->msgID);
-
-       if (viewer_play_data->msg_box_viewer) {
-               if (msg_delete_message(viewer_play_data->msgHandle, viewer_play_data->msgID) == MSG_SUCCESS) {
-                       status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED"));
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_message is failed");
-                       status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
-                       return;
-               }
-
-       } else {
-               service_h svc_handle = NULL;
-
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_DELETE_MSG);
-
-               snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
-               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
-
-               ug_send_result(viewer_main_data->viewer_ug, svc_handle);
-               service_destroy(svc_handle);
-       }
-
-       /*destroy viewer*/
-       ug_destroy_me(viewer_main_data->viewer_ug);
-
-       return;
-}
-
-static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       /* connect handler again*/
-       msg_ui_viewer_connect_handler(viewer_play_data);
-
-       /* play viewer again if previous status was PLAY */
-       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-}
-
-void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       char buf[DEF_BUF_LEN_S] = { 0, };
-       service_h svc_handle;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       /* create and call composer-ug */
-       if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
-       } else {
-               snprintf(buf, sizeof(buf), "%d", viewer_play_data->msgID);
-               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, buf);
-               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_FORWARD);
-               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FROM, MSG_BUNDLE_VALUE_INTERNAL);
-               ui_gadget_h loaded_ug;
-
-               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);
-
-               if (loaded_ug) {
-                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
-                       msg_ui_viewer_disconnect_handler(viewer_play_data);
-                       viewer_play_data->mode = MSG_VIEWER_LOAD_COMPOSER_UG;
-               }
-
-               service_destroy(svc_handle);
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
-       char str_id[DEF_BUF_LEN] = {0,};
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed msg-id is %d", viewer_play_data->msgID);
-
-       service_h svc_handle = NULL;
-       service_create(&svc_handle);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_RESEND);
-
-       snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
-       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
-
-       ug_send_result(viewer_main_data->viewer_ug, svc_handle);
-       service_destroy(svc_handle);
-
-       msg_ui_viewer_disconnect_handler(viewer_play_data);
-
-       /*destroy viewer*/
-       ug_destroy_me(viewer_main_data->viewer_ug);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
-
-       int thread_id;
-       msg_error_t err = MSG_SUCCESS;
-       service_h svc_handle;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       /* get thread id value to check whether viewer is launched from bubble-composer or other external app(ug) */
-       err = msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
-
-       /* back to bubble-composer and request to show keypad */
-       if (err == MSG_SUCCESS && thread_id > 0) {
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_REPLY);
-               ug_send_result(viewer_main_data->viewer_ug, svc_handle);
-
-               service_destroy(svc_handle);
-
-               msg_ui_viewer_disconnect_handler(viewer_play_data);
-
-               /*destroy viewer*/
-               ug_destroy_me(viewer_main_data->viewer_ug);
-       } else {        /* create new composer with reply number */
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               char *reply_addr = NULL;
-               int contact_id = 0;
-               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &reply_addr, &contact_id);
-
-               if (reply_addr) {
-                       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, reply_addr);
-                       free(reply_addr);
-               }
-
-               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);
-
-               if (loaded_ug) {
-                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
-                       msg_ui_viewer_disconnect_handler(viewer_play_data);
-                       viewer_play_data->mode = MSG_VIEWER_LOAD_COMPOSER_UG;
-               }
-
-               service_destroy(svc_handle);
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
-
-       MSG_BOOL hasText = FALSE;
-       int page_count = 0;
-       int media_count = 0;
-       int folder_id = MSG_MAX_FOLDER_ID;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       /* set current status to previous status */
-       viewer_play_data->previous_status = viewer_play_data->status;
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
-
-       /* set player state to pause*/
-       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-               return;
-       }
-
-       Evas_Object *ctx_popup = NULL;
-       ctx_popup = elm_ctxpopup_add(viewer_play_data->navi_frame);
-       evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_viewer_more_ctxpopup_dismissed_cb, (void *)viewer_play_data);
-
-       /* add delete menu */
-       elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_OPT_DELETE"), NULL, msg_ui_viewer_delete_button_cb, (void *)viewer_play_data);
-
-       /* Get folder ID and Add Resend / Reply menu */
-       msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
-
-       if (folder_id == MSG_OUTBOX_ID)
-               elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_SK_RESEND"), NULL, msg_ui_viewer_resend_button_cb, (void *)viewer_play_data);
-       else if (folder_id == MSG_INBOX_ID)
-               elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_SK_REPLY"), NULL, msg_ui_viewer_reply_button_cb, (void *)viewer_play_data);
-
-       /* Add FORWARD menu */
-       elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_BODY_FORWARD"), NULL, msg_ui_viewer_forward_button_cb, (void *)viewer_play_data);
-
-       /* Add protection on/off menu */
-       bool is_protected = false;
-       msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Lock status of current message %d", is_protected);
-
-       if (is_protected)
-               elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_OFF"), NULL, __msg_ui_viewer_protection_cb, (void *)viewer_play_data);
-       else
-               elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_ON"), NULL, __msg_ui_viewer_protection_cb, (void *)viewer_play_data);
-
-       /* Add Copy Message text menu */
-       if (viewer_play_data->smil_eventStatus != NULL) {
-               /* get msg body */
-               msg_list_handle_t pagelist_info = NULL;
-               msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
-               page_count = msg_list_length(pagelist_info);
-
-               msg_struct_t page_info = NULL;
-               page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, viewer_play_data->smil_eventStatus->pageIdx);
-               if (page_info) {
-                       int i = 0;
-                       msg_list_handle_t medialist_info = NULL;
-                       msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
-                       media_count = msg_list_length(medialist_info);
-
-                       for (i = 0; i < media_count; i++) {
-                               int mediaType;
-                               msg_struct_t media_info = NULL;
-                               media_info = (msg_struct_t)msg_list_nth_data(medialist_info, i);
-
-                               if (media_info == NULL) {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "getting media has failed");
-                                       continue;
-                               }
-
-                               msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
-                               if (mediaType != MMS_SMIL_MEDIA_TEXT)
-                                       continue;
-
-                               hasText = TRUE;
-                       }
-               }
-       }
-
-       if (hasText)
-               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);
-
-       /* Add view message details menu */
-       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);
-
-       // move ctx popup
-       Evas_Coord x, y, w, h;
-       evas_object_geometry_get(viewer_play_data->more_btn, &x, &y, &w, &h);
-       evas_object_move(ctx_popup, x, y);
-       evas_object_show(ctx_popup);
-
-       viewer_play_data->popup = ctx_popup;
-       viewer_play_data->popup_type = MSG_VIEWER_MENU_CTX_POPUP;
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_volume_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (!viewer_play_data->volumebar)
-               msg_ui_viewer_create_volume_bar((void *)viewer_play_data);
-       else
-               msg_ui_viewer_destroy_volume_bar((void *)viewer_play_data);
-
-       //create play controller timer repeatedly
-       msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-}
-
-void msg_ui_viewer_prev_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
-
-       play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
-
-       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
-
-       if (!strcmp(emission, "prev_clicked")) {
-               /* prev*/
-               int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
-               if (pageIdx >= 0) {
-                       if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
-                               MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
-                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
-                               if (err != MSG_SMIL_SUCCESS) {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
-                               } else {
-                                       //set progressbar and progress text sync
-                                       if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
-                                               msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1);
-                               }
-                       }
-               }
-
-               //create play controller timer repeatedly
-               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-
-               /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
-               if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-                       if (viewer_play_data->title_menu_opened)
-                               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-               }
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       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))
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_next_button_cb(void *data, Evas_Object * o, const char *emission, const char *source)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (!strcmp(emission, "next_clicked"))
-       {
-               SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
-               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
-
-               play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
-
-               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
-               /*next*/
-               int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
-               int total_page = viewer_play_data->smil_eventStatus->pageCnt;
-               if (total_page >= pageIdx) {
-                       if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
-                               MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
-                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
-                               if (err != MSG_SMIL_SUCCESS) {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
-                               } else {
-                                       //set progressbar and progress text sync
-                                       if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
-                                               msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx);
-                               }
-                       }
-               }
-
-               //create play controller timer repeatedly
-               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-
-               /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
-               if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-                       if (viewer_play_data->title_menu_opened)
-                               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-               }
-       }
-}
-
-void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
-
-       service_error_e err = SERVICE_ERROR_NONE;
-
-       msg_struct_list_s *addr_list = NULL;
-       msg_get_list_handle(viewer_play_data->msg_t, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
-
-       int addr_count = addr_list->nCount;     //get address count
-
-       if (addr_count == 1) {
-               service_h svc_handle = NULL;
-               msg_struct_t addr_info = NULL;
-               char szAddress[MAX_ADDRESS_VAL_LEN + 1] = {0,};
-               addr_info = addr_list->msg_struct_info[0];
-               msg_get_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, szAddress, MAX_ADDRESS_VAL_LEN);
-
-               char *address = (char*)calloc(1, strlen(szAddress)+1);
-               if (address == NULL) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
-                       return;
-               }
-
-               memcpy(address, szAddress, strlen(szAddress));
-
-               err = service_create(&svc_handle);
-               if (err != SERVICE_ERROR_NONE || svc_handle == NULL) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
-                       free(address);
-                       return;
-               }
-
-               service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
-               service_set_app_id(svc_handle, "email-composer-efl");
-               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
-               service_add_extra_data(svc_handle, SERVICE_DATA_TO, address);
-
-               Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
-               service_set_window(svc_handle, win_id);
-
-               if ((err = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed, err = %d", err);
-               }
-
-               free(address);
-               service_destroy(svc_handle);
-       }
-
-       /* close title menu list */
-       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_toolbar_call_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
-
-       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
-
-       if (addr_count == 1) {
-               char telnum[255] = {0,};
-               int err = 0;
-               service_h svc_handle = NULL;
-
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
-
-               char *address = NULL;
-               int contactid = 0;
-
-               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
-
-               if (address) {
-                       snprintf(telnum, sizeof(telnum), "tel:%s", address);     /* Number to make a call */
-                       service_set_uri(svc_handle, telnum);
-                       free(address);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
-                       service_destroy(svc_handle);
-                       return;
-               }
-
-               if ((err = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request failed, err = %d", err);
-               }
-
-               service_destroy(svc_handle);
-       }
-
-       /* close title menu list */
-       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
-
-       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
-
-       if (addr_count == 1) {
-               service_error_e err = SERVICE_ERROR_NONE;
-               service_h svc_handle = NULL;
-               char telnum[MAX_ADDRESS_VAL_LEN+5] = {0,};
-               char contact_id[VIEWER_BUFFER_SIZE_64] = {0,};
-
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-               char *address = NULL;
-               int contactid = 0;
-
-               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
-
-               if (address) {
-                       snprintf(telnum, sizeof(telnum), "tel:%s", address);
-                       snprintf(contact_id, sizeof(contact_id), "%d", contactid);
-                       free(address);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
-                       service_destroy(svc_handle);
-                       return;
-               }
-
-               service_set_operation(svc_handle, "http://tizen.org/appcontrol/operation/vt");
-               service_set_uri(svc_handle, telnum);
-               service_add_extra_data(svc_handle, "ctindex", contact_id);
-               if ((err = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed, err = %d", err);
-               }
-
-               service_destroy(svc_handle);
-       }
-
-       /* close title menu list */
-       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
-
-       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
-
-       if (addr_count == 1) {
-               ui_gadget_h loaded_ug = NULL;
-               char buf[DEF_BUF_LEN_D] = { 0, };
-
-               service_h svc_handle = NULL;
-
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               char *address = NULL;
-               int contactid = 0;
-
-               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
-
-               if (address) {
-                       if (strstr(address, "@")) {
-                               snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
-                               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
-                               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, address);
-                       } else {
-                               snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
-                               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
-                               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, address);
-                       }
-                       free(address);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
-                       service_destroy(svc_handle);
-                       return;
-               }
-
-               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);
-
-               if (loaded_ug) {
-                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
-                       msg_ui_viewer_disconnect_handler(viewer_play_data);
-                       viewer_play_data->mode = MSG_VIEWER_LOAD_CONTACT_UG;
-               }
-
-               service_destroy(svc_handle);
-       }
-
-       /* close title menu list */
-       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
-
-       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
-
-       if (addr_count == 1) {
-               ui_gadget_h loaded_ug = NULL;
-               char contactId[DEF_BUF_LEN_S] = { 0, };
-               char buf[DEF_BUF_LEN_D] = { 0, };
-               char *address = NULL;
-               int contact_id = 0;
-
-               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
-
-               if (contact_id > 0 ) {
-                       service_h svc_handle = NULL;
-                       service_create(&svc_handle);
-                       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-                       snprintf(contactId, sizeof(contactId), "%d", contact_id);
-                       snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
-
-                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
-                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
-
-                       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);
-
-                       if (loaded_ug) {
-                               msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
-                               msg_ui_viewer_disconnect_handler(viewer_play_data);
-                               viewer_play_data->mode = MSG_VIEWER_LOAD_CONTACT_UG;
-                       }
-
-                       service_destroy(svc_handle);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid contact_id = %d", contact_id);
-               }
-
-               if (address)
-                       free(address);
-       }
-
-       /* close title menu list */
-       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_toolbar_block_address_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
-
-       Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
-       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-       char *popup_text = NULL;
-       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
-       char *address = NULL;
-       int contactid = 0;
-
-       msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
-
-       if (address) {
-               popup_text = g_strdup_printf(szbuf, address);
-               free(address);
-               if (!popup_text) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
-                       return;
-               }
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
-               return;
-       }
-
-       elm_object_text_set(popup, popup_text);
-       free(popup_text);
-
-       Evas_Object *btn_ok = elm_button_add(popup);
-       elm_object_style_set(btn_ok, "popup_button/default");
-       elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
-       elm_object_part_content_set(popup, "button1", btn_ok);
-       evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_block_ok_clicked_cb, viewer_play_data);
-
-       Evas_Object *btn_cancel = elm_button_add(popup);
-       elm_object_style_set(btn_cancel, "popup_button/default");
-       elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
-       elm_object_part_content_set(popup, "button2", btn_cancel);
-       /* use same cb function with delete cancel button */
-       evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
-
-       evas_object_show(popup);
-       viewer_play_data->popup = popup;
-       viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
-
-       /*disconnect mouse handler*/
-       msg_ui_viewer_disconnect_handler(viewer_play_data);
-
-       /* close title menu list */
-       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_toolbar_unblock_address_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
-       int filter_id = 0;
-       char *address = NULL;
-       int contactid = 0;
-
-       msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
-
-       if (address) {
-               if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, address, &filter_id)) {
-                       msg_error_t err =  MSG_SUCCESS;
-                       err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
-                       if (err != MSG_SUCCESS) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
-                               free(address);
-                               return;
-                       }
-
-                       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
-                       char *message_text = g_strdup_printf(szbuf, address);
-                       if (!message_text) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
-                               free(address);
-                               return;
-                       }
-                       status_message_post(message_text);
-                       free(message_text);
-
-                       msg_ui_viewer_title_update(viewer_play_data, MSG_VIEWER_OPTION_BLOCK);
-               }
-               free(address);
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
-               return;
-       }
-
-       /* close title menu list */
-       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-       /* play viewer again if previous status was PLAY */
-       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
-
-       if (addr_count == 1) {
-               msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
-               msg_error_t err =  MSG_SUCCESS;
-
-               err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
-               if (err != MSG_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
-                       msg_release_struct(&filter);
-                       return;
-               }
-
-               char *address = NULL;
-               int contactid = 0;
-
-               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
-
-               if (address) {
-                       err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, address, strlen(address));
-                       if (err != MSG_SUCCESS) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
-                               msg_release_struct(&filter);
-                               free(address);
-                               return;
-                       }
-
-                       err = msg_add_filter(viewer_play_data->msgHandle, filter);
-                       if (err != MSG_SUCCESS) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
-                               msg_release_struct(&filter);
-                               free(address);
-                               return;
-                       }
-
-                       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
-                       char *message_text = g_strdup_printf(szbuf, address);
-                       if (!message_text) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
-                               msg_release_struct(&filter);
-                               free(address);
-                               return;
-                       }
-
-                       status_message_post(message_text);
-                       free(message_text);
-                       free(address);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
-                       msg_release_struct(&filter);
-                       return;
-               }
-
-               msg_release_struct(&filter);
-       }
-
-       /* play viewer again if previous status was PLAY */
-       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-
-       return;
-}
-
-
-void msg_ui_viewer_open_title_menu_genlist(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
-       MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
-       int i = 0;
-
-       /* create box (for setting min size of genlist)*/
-       Evas_Object *box = elm_box_add(viewer_play_data->play_layout);
-       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_show(box);
-
-       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.title.menu", box);
-
-       /* create genlist */
-       Evas_Object *genlist = elm_genlist_add(box);
-       elm_object_theme_set(genlist, viewer_play_data->title_th);
-       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
-       evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
-       evas_object_show(genlist);
-
-       elm_box_pack_end(box, genlist);
-
-       viewer_play_data->title_box_layout = box;
-
-       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
-
-       if (addr_count == 1) {
-               /* set genlist styles */
-               viewer_play_data->itc_title_single.item_style = "1text.custom";
-               viewer_play_data->itc_title_single.func.text_get = __msg_ui_viewer_title_menu_gl_text_get;
-               viewer_play_data->itc_title_single.func.content_get = NULL;
-               viewer_play_data->itc_title_single.func.state_get = NULL;
-               viewer_play_data->itc_title_single.func.del = NULL;
-
-               /* genlist list load */
-               char *address = NULL;
-               int contact_id = 0;
-
-               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
-
-               if (!address) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
-                       return;
-               }
-
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address = %s, contact_id = %d", address, contact_id);
-
-               if (msg_common_is_valid_phone_number(address)) {
-                       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);
-                       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);
-               } else if (msg_common_is_valid_email_addr(address)) {
-                       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);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
-               }
-
-               if (contact_id > 0)
-                       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);
-               else
-                       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);
-
-               if (msg_common_is_valid_phone_number(address)) {
-                       int filter_id = 0;
-                       if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, address, &filter_id))
-                               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);
-                       else
-                               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);
-               }
-
-               evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * elm_genlist_items_count(genlist));
-               free(address);
-       } else {
-               /* set genlist styles */
-               viewer_play_data->itc_title.item_style = "2text.1icon.2.custom";
-               viewer_play_data->itc_title.func.text_get = __msg_ui_viewer_title_menu_gl_text_get;
-               viewer_play_data->itc_title.func.content_get = __msg_ui_viewer_title_menu_gl_content_get;
-               viewer_play_data->itc_title.func.state_get = NULL;
-               viewer_play_data->itc_title.func.del = __msg_ui_viewer_title_menu_del;
-
-               /* genlist list load */
-               for (i = 0; i < addr_count; i++) {
-                       addrInfo = (MSG_VIEWER_ADDR_INFO *)calloc(1, sizeof(MSG_VIEWER_ADDR_INFO));
-                       if (!addrInfo) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "addrInfo calloc failed");
-                               return;
-                       }
-
-                       char *address = NULL;
-                       int contact_id = 0;
-
-                       msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, i, &address, &contact_id);
-
-                       if (!address) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is null");
-                               free(addrInfo);
-                               return;
-                       }
-                       strncpy(addrInfo->address, address, MAX_ADDRESS_VAL_LEN);
-                       free(address);
-
-                       char *display_name = msg_viewer_util_get_display_name_by_index(contact_id);
-                       if (display_name) {
-                               strncpy(addrInfo->name, display_name, MAX_DISPLAY_NAME_LEN);
-                               free(display_name);
-                       }
-
-                       addrInfo->contact_id = contact_id;
-
-                       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);
-               }
-
-               /* set genlist size */
-               if (addr_count >= VIEWER_TITLE_MENU_GENLIST_MAX_ITEM)
-                       evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * VIEWER_TITLE_MENU_GENLIST_MAX_ITEM * elm_config_scale_get());
-               else
-                       evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * addr_count * elm_config_scale_get());
-       }
-
-       /** emit signal for changing state of title menu list to open */
-       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,open", "");
-       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
-
-       viewer_play_data->title_menu_opened = true;
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_close_title_menu_genlist(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
-
-       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,close", "");
-
-       if (!viewer_play_data->playcontroller_opened)
-               elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
-
-       Evas_Object *layout = elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.title.menu");
-       if (layout) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete box layout");
-               evas_object_del(layout);
-       }
-
-       viewer_play_data->title_menu_opened = false;
-       viewer_play_data->title_box_layout = NULL;
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !addrInfo, NULL);
-
-       if (g_strcmp0(part, "elm.text") == 0) {
-               return strdup((char *)data);
-       } else if (g_strcmp0(part, "elm.text.1") == 0) {
-               if (addrInfo->contact_id > 0 && addrInfo->name[0] != '\0')
-                       return strdup(addrInfo->name);
-               else if (addrInfo->address[0] != '\0')
-                       return strdup (addrInfo->address);
-               else
-                       return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
-       } else if (g_strcmp0(part, "elm.text.2") == 0) {
-               if (addrInfo->address[0] != '\0')
-                       return strdup(addrInfo->address);
-               else
-                       return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-       return NULL;
-}
-
-
-static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part)
-{
-       // Currently, this function do nothing, caller_id concept is not determined
-       return NULL;
-}
-
-static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
-
-       Elm_Object_Item *item = NULL;
-       MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
-
-       item = (Elm_Object_Item *)event_info;
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !item, "Item is  NULL or Item is not Message item\n");
-
-       addrInfo = (MSG_VIEWER_ADDR_INFO *)elm_object_item_data_get(item);
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, addrInfo == NULL, "item_data is NULL");
-
-       elm_genlist_item_selected_set(item, 0);
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       Evas_Object *popup = NULL;
-       Evas_Object *list = NULL;
-       Evas_Object *btn_close = NULL;
-
-       popup = elm_popup_add(viewer_play_data->main_window);
-       elm_object_style_set(popup, "min_menustyle");
-       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-       btn_close = elm_button_add(popup);
-       elm_object_style_set(btn_close, "popup_button/default");
-       elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
-       elm_object_part_content_set(popup, "button1", btn_close);
-       evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_title_menu_popup_close_clicked_cb, viewer_play_data);
-
-       list = elm_list_add(popup);
-       elm_list_mode_set(list, ELM_LIST_EXPAND);
-
-       evas_object_data_set(list, "viewer_play_data", viewer_play_data);
-
-       if (msg_common_is_valid_phone_number(addrInfo->address)) {
-               elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
-               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);
-       } else if (msg_common_is_valid_email_addr(addrInfo->address)) {
-               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);
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
-       }
-
-       if (addrInfo->contact_id> 0) {
-               elm_object_part_text_set(popup, "title,text", addrInfo->name);
-               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);
-       } else {
-               elm_object_part_text_set(popup, "title,text", addrInfo->address);
-               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);
-       }
-
-       if (msg_common_is_valid_phone_number(addrInfo->address)) {
-               int filter_id = 0;
-               if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, addrInfo->address, &filter_id))
-                       elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
-               else
-                       elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo);
-       }
-
-       elm_list_go(list);
-       elm_object_content_set(popup, list);
-       evas_object_show(popup);
-
-       viewer_play_data->popup = popup;
-       viewer_play_data->popup_type = MSG_VIEWER_TITLE_MENU_POPUP;
-
-       /*disconnect mouse handler*/
-       msg_ui_viewer_disconnect_handler(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void  __msg_ui_viewer_title_menu_del(void *data, Evas_Object *obj)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL!");
-
-       if (addrInfo)
-               free(addrInfo);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       /* connect handler again*/
-       msg_ui_viewer_connect_handler(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL");
-       MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
-       addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL");
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info);
-
-       if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) {
-               char telnum[255] = {0,};
-               int err = 0;
-               service_h svc_handle = NULL;
-
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
-               snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address);   /* Number to make a call */
-               service_set_uri(svc_handle, telnum);
-               if ((err = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service failed, err = %d", err);
-               }
-
-               service_destroy(svc_handle);
-       } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) {
-               service_error_e err = SERVICE_ERROR_NONE;
-               service_h svc_handle = NULL;
-               char telnum[MAX_ADDRESS_VAL_LEN+5] = {0,};
-               char contact_id[VIEWER_BUFFER_SIZE_64] = {0,};
-
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address);
-               snprintf(contact_id, sizeof(contact_id), "%d", addrInfo->contact_id);
-
-               service_set_operation(svc_handle, "http://tizen.org/appcontrol/operation/vt");
-               service_set_uri(svc_handle, telnum);
-               service_add_extra_data(svc_handle, "ctindex", contact_id);
-               if ((err = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed, err = %d", err);
-               }
-
-               service_destroy(svc_handle);
-       } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */
-               ui_gadget_h loaded_ug = NULL;
-               char buf[DEF_BUF_LEN_D] = { 0, };
-               service_h svc_handle = NULL;
-
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               if (strstr(addrInfo->address, "@")) {
-                       snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
-                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
-                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, addrInfo->address);
-               } else {
-                       snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
-                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
-                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, addrInfo->address);
-               }
-
-               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);
-
-               if (loaded_ug) {
-                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
-                       msg_ui_viewer_disconnect_handler(viewer_play_data);
-                       viewer_play_data->mode = MSG_VIEWER_LOAD_CONTACT_UG;
-               }
-
-               service_destroy(svc_handle);
-       } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) {
-               ui_gadget_h loaded_ug = NULL;
-               char contactId[DEF_BUF_LEN_S] = { 0, };
-               char buf[DEF_BUF_LEN_D] = { 0, };
-               service_h svc_handle = NULL;
-
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               snprintf(contactId, sizeof(contactId), "%d", addrInfo->contact_id);
-               snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
-
-               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
-               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
-
-               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);
-
-               if (loaded_ug) {
-                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
-                       msg_ui_viewer_disconnect_handler(viewer_play_data);
-                       viewer_play_data->mode = MSG_VIEWER_LOAD_CONTACT_UG;
-               }
-
-               service_destroy(svc_handle);
-       } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) {
-               service_h svc_handle = NULL;
-               service_error_e err = SERVICE_ERROR_NONE;
-
-               service_create(&svc_handle);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
-
-               service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
-               service_set_app_id(svc_handle, "email-composer-efl");
-               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
-               service_add_extra_data(svc_handle, SERVICE_DATA_TO, addrInfo->address);
-
-               Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
-               service_set_window(svc_handle, win_id);
-
-               if ((err = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed, err = %d", err);
-               }
-
-               service_destroy(svc_handle);
-       } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK")) == 0) {
-               int filter_id = 0;
-               if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, addrInfo->address, &filter_id)) {
-                       msg_error_t err =  MSG_SUCCESS;
-                       err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
-                       if (err != MSG_SUCCESS) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
-                               return;
-                       }
-
-                       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
-
-                       char *message_text = g_strdup_printf(szbuf, addrInfo->address);
-                       if (!message_text) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
-                               return;
-                       }
-
-                       status_message_post(message_text);
-                       free(message_text);
-               }
-       } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK")) == 0) {
-               Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
-               evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-               char *popup_text = NULL;
-               char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
-
-               popup_text = g_strdup_printf(szbuf, addrInfo->address);
-               if (!popup_text) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
-                       return;
-               }
-               elm_object_text_set(popup, popup_text);
-               free(popup_text);
-
-               Evas_Object *btn_ok = elm_button_add(popup);
-               elm_object_style_set(btn_ok, "popup_button/default");
-               elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
-               elm_object_part_content_set(popup, "button1", btn_ok);
-               evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_title_menu_block_ok_clicked_cb, viewer_play_data);
-               evas_object_data_set(btn_ok, "addrInfo", addrInfo);
-
-               Evas_Object *btn_cancel = elm_button_add(popup);
-               elm_object_style_set(btn_cancel, "popup_button/default");
-               elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
-               elm_object_part_content_set(popup, "button2", btn_cancel);
-               evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data);
-
-               evas_object_show(popup);
-               viewer_play_data->popup = popup;
-               viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
-
-               /* disconnect mouse handler */
-               msg_ui_viewer_disconnect_handler(viewer_play_data);
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_title_menu_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)evas_object_data_get(obj, "addrInfo");
-       msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
-       msg_error_t err =  MSG_SUCCESS;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
-       if (err != MSG_SUCCESS) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
-               msg_release_struct(&filter);
-               return;
-       }
-
-       err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, addrInfo->address, strlen(addrInfo->address));
-       if (err != MSG_SUCCESS) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
-               msg_release_struct(&filter);
-               return;
-       }
-
-       err = msg_add_filter(viewer_play_data->msgHandle, filter);
-       if (err != MSG_SUCCESS) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
-               msg_release_struct(&filter);
-               return;
-       }
-
-       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
-       char *message_text = g_strdup_printf(szbuf, addrInfo->address);
-       if (!message_text) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
-               msg_release_struct(&filter);
-               return;
-       }
-
-       status_message_post(message_text);
-       free(message_text);
-
-       msg_release_struct(&filter);
-
-       /* close title menu popup */
-       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-
-       return;
-}
-
-void msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       Evas_Object *popup = NULL;
-       Evas_Object *box = NULL;
-       Evas_Object *genlist = NULL;
-       Evas_Object *btn_save = NULL;
-       Evas_Object *btn_close = NULL;
-       int index = 0;
-       int total_media_count = 0;
-       int popup_height = 0;
-
-       /* destroy previous popup */
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       total_media_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
-
-       /* create popup */
-       popup = elm_popup_add(viewer_play_data->main_window);
-       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
-       if (total_media_count > 3 )
-               elm_object_style_set(popup, "menustyle");
-       else
-               elm_object_style_set(popup, "min_menustyle");
-
-       /* set popup title */
-       elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_ATTACHMENTS"));
-
-       /* set select all genlist item style */
-       viewer_play_data->attach_sa_class.item_style = "1text.1icon.2";
-       viewer_play_data->attach_sa_class.func.text_get = __msg_ui_viewer_save_attachments_sa_gl_text_get;
-       viewer_play_data->attach_sa_class.func.content_get = __msg_ui_viewer_save_attachments_sa_gl_content_get;
-       viewer_play_data->attach_sa_class.func.state_get = NULL;
-       viewer_play_data->attach_sa_class.func.del = NULL;
-
-       /* set genlist style */
-       viewer_play_data->attach_item_class.item_style = "1text.2icon.2";
-       viewer_play_data->attach_item_class.func.text_get = __msg_ui_viewer_save_attachments_gl_text_get;
-       viewer_play_data->attach_item_class.func.content_get = __msg_ui_viewer_save_attachments_gl_content_get;
-       viewer_play_data->attach_item_class.func.state_get = NULL;
-       viewer_play_data->attach_item_class.func.del = NULL;
-
-       /* create genlist */
-       genlist = elm_genlist_add(viewer_play_data->main_window);
-       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
-
-       /* add genlist item based on media count, if item's count is over 1 then 'select all' item should be inserted*/
-       if (total_media_count > 1) {
-               /* add Select all item */
-               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);
-
-               /* add each item (order is inserted + attached) */
-               for (index = 1; index < total_media_count+1; index++) {
-                       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);
-               }
-       } else {
-               /* add each item (order is inserted + attached) */
-               for (index = 0; index < total_media_count; index++) {
-                       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);
-               }
-       }
-
-       /* add save button */
-       btn_save = elm_button_add(popup);
-       elm_object_style_set(btn_save, "popup_button/default");
-       elm_object_text_set(btn_save, dgettext("sys_string", "IDS_COM_SK_SAVE"));
-       elm_object_part_content_set(popup, "button1", btn_save);
-       evas_object_smart_callback_add(btn_save, "clicked", __msg_ui_viewer_save_attachments_popup_save_clicked_cb, viewer_play_data);
-       viewer_play_data->save_button = btn_save;
-       elm_object_disabled_set(viewer_play_data->save_button, EINA_TRUE);
-
-       /* add close button */
-       btn_close = elm_button_add(popup);
-       elm_object_style_set(btn_close, "popup_button/default");
-       elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
-       elm_object_part_content_set(popup, "button2", btn_close);
-       evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb, viewer_play_data);
-
-       /* set popup style */
-       box = elm_box_add(viewer_play_data->main_window);
-       popup_height = VIEWER_ATTACH_GL_ITEM_HEIGHT * ((total_media_count > 3) ? 4 : ((total_media_count > 1) ? total_media_count + 1 : total_media_count));
-       evas_object_size_hint_min_set(box, 0, popup_height * elm_config_scale_get());
-       evas_object_show(genlist);
-       elm_box_pack_end(box, genlist);
-       elm_object_content_set(popup, box);
-
-       /* show popup */
-       evas_object_show(popup);
-       viewer_play_data->save_attachment_gl= genlist;
-       viewer_play_data->popup = popup;
-       viewer_play_data->popup_type = MSG_VIEWER_ATTACHMENTS_POPUP;
-
-       /*disconnect mouse handler*/
-       msg_ui_viewer_disconnect_handler(viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       int index = 0;
-       int total_count = 0;
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->save_button);
-               viewer_play_data->save_button = NULL;
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-               viewer_play_data->popup = NULL;
-               viewer_play_data->sa_check = NULL;
-       }
-
-       total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
-
-       while (index < total_count) {
-               if (index < viewer_play_data->insert_count)
-                       media_info = eina_list_nth(viewer_play_data->insert_list, index);
-               else if (index < total_count)
-                       media_info = eina_list_nth(viewer_play_data->attach_list, index-viewer_play_data->insert_count);
-               else
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!", index);
-
-               if (media_info ) // disable check status
-                       media_info->isChecked = FALSE;
-
-               index++;
-       }
-
-       viewer_play_data->isSelectAll = FALSE;
-
-       /* connect handler again*/
-       msg_ui_viewer_connect_handler(viewer_play_data);
-
-       /* play viewer again if previous status was PLAY */
-       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
-
-       int attach_count = 0;
-       int insert_count = 0;
-       int total_count = 0;
-       int selected_count = 0;
-
-       int index = 0;
-       int insert_index = 0;
-       int attach_index = 0;
-       int failed_count = 0;
-       int saved_count = 0;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->save_button);
-               viewer_play_data->save_button = NULL;
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-               viewer_play_data->popup = NULL;
-               viewer_play_data->sa_check = NULL;
-       }
-
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_Info = NULL;
-
-       insert_count = eina_list_count(viewer_play_data->insert_list);
-       attach_count = eina_list_count(viewer_play_data->attach_list);
-       total_count = insert_count + attach_count;
-
-       while (index < total_count) {
-               if (index < insert_count)
-                       media_Info = eina_list_nth(viewer_play_data->insert_list , insert_index++);
-               else if (index < total_count)
-                       media_Info = eina_list_nth(viewer_play_data->attach_list , attach_index++);
-
-               if (media_Info) {
-                       bool saveCondition = (viewer_play_data->isSelectAll) ? TRUE : (media_Info->isChecked ? TRUE : FALSE);
-
-                       if (saveCondition) {
-                               selected_count++;
-
-                               /*get default file path*/
-                               MSG_BOOL result = FALSE;
-                               char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
-
-                               result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
-                               if (result) {
-                                       char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
-                                       snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, media_Info->pfile_name);
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", media_Info->pfile_path);
-
-                                       char *result_path = msg_ui_viewer_util_copy_file(media_Info->pfile_path, dst_path);
-                                       if (result_path) {
-                                               saved_count++;
-                                               free(result_path);
-                                       } else {
-                                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
-                                               failed_count++;
-                                       }
-                               } else {
-                                       failed_count++;
-                               }
-
-                               //release check status
-                               media_Info->isChecked = FALSE;
-                               if (viewer_play_data->isSelectAll)
-                                       viewer_play_data->isSelectAll = FALSE;
-                       }
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
-               }
-
-               media_Info = NULL;
-
-               index++;
-       }
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Selected(%d) / Total(%d) [inserted(%d),attached(%d)]", selected_count, total_count, insert_count, attach_count);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Saved(%d), Failed(%d)", saved_count, failed_count);
-
-       /* show indicator status text */
-       if (failed_count == selected_count) {
-               status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
-       } else {
-               if (selected_count == 1 && saved_count == 1) {
-                       status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
-               } else {
-                       char buf[DEF_BUF_LEN_S + 1] = {0, };
-                       snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, selected_count);
-                       status_message_post(buf);
-               }
-       }
-
-       /* connect handler again*/
-       msg_ui_viewer_connect_handler(viewer_play_data);
-
-       /* play viewer again if previous status was PLAY */
-       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       int index = (int)data;
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
-
-       if (!strcmp(part, "elm.text")) {
-               if (index == 0) {
-                       return strdup(dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL"));
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid index of select all(%d)", index);
-                       return NULL;
-               }
-       }
-       return NULL;
-}
-
-static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
-       int index = (int)data;
-       Evas_Object *check;
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
-
-       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
-               check = elm_check_add(obj);
-               elm_check_state_pointer_set(check, &(viewer_play_data->isSelectAll));
-               evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
-               evas_object_smart_callback_add(check, "changed", __msg_ui_viewer_save_attachments_sa_check_changed_cb, viewer_play_data);
-               viewer_play_data->sa_check = check;
-
-               return check;
-       }
-
-       return NULL;
-}
-
-static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       int i = 0;
-       Eina_List * realized_list;
-       Elm_Object_Item *it;
-       Eina_List *l;
-       Eina_Bool checked;
-
-       int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "total Count = %d", total_count);
-       checked = elm_check_state_get(obj);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "checked status = %d", checked);
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
-
-       for (i = 0; i < total_count; i++) {
-               if (i < viewer_play_data->insert_count) {
-                       media_info = eina_list_nth(viewer_play_data->insert_list, i);
-                       media_info->isChecked = checked;
-               } else if (i < total_count) {
-                       media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
-                       media_info->isChecked = checked;
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
-               }
-       }
-
-       // Update realized items only
-       realized_list = elm_genlist_realized_items_get(viewer_play_data->save_attachment_gl);
-       EINA_LIST_FOREACH(realized_list, l, it) {
-                elm_genlist_item_update(it);
-       }
-
-}
-
-static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
-       int index = 0;
-       int i = 0;
-       int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
-
-       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
-
-       if (item != NULL) {
-               index = (int)elm_object_item_data_get(item);
-               elm_genlist_item_selected_set(item, EINA_FALSE);
-
-               viewer_play_data->isSelectAll = !viewer_play_data->isSelectAll;
-
-               //check state changed cb will be called
-               elm_check_state_set(viewer_play_data->sa_check, viewer_play_data->isSelectAll);
-               elm_genlist_item_update(item);
-
-               if (total_count > 1) {
-                       for (i = 0; i < total_count; i++) {
-                               if (i < viewer_play_data->insert_count) {
-                                       tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
-
-                               } else if (i < total_count) {
-                                       tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
-                               } else {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
-                                       continue;
-                               }
-                               elm_check_state_set(tmp_media_info->check_item, (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE);
-                               tmp_media_info->isChecked = (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE;
-                       }
-               }
-               elm_object_disabled_set(viewer_play_data->save_button, (viewer_play_data->isSelectAll) ? EINA_FALSE : EINA_TRUE);
-       }
-}
-
-static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
-
-       int index = (int) data;
-       int realIndex = 0;
-       int insert_count = viewer_play_data->insert_count;
-       int attach_count = viewer_play_data->attach_count;
-       int total_count = insert_count + attach_count;
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
-
-       realIndex = (total_count > 1) ? index-1 : index;        // calculate item index considering 'select all' item
-
-       // check boundary
-       if (realIndex < 0 ) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
-               return NULL;
-       }
-
-       if (!strcmp(part, "elm.text")) {
-               if (realIndex < insert_count) {
-                       media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[INSERT MEDIA] name is  = %s", media_info->pfile_name);
-               } else if (realIndex < insert_count+attach_count) {
-                       media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ATTACH MEDIA] name is  = %s", media_info->pfile_name);
-               }
-
-               return strdup(media_info->pfile_name);
-       }
-       return NULL;
-}
-
-static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL;
-       int index = (int)data;
-       Evas_Object *check;
-       int realIndex = index-1;
-       int insert_count = viewer_play_data->insert_count;
-       int attach_count = viewer_play_data->attach_count;
-       int total_count = insert_count + attach_count;
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
-
-       realIndex = (total_count > 1) ? index-1 : index;        // calculate item index considering 'select all' item
-
-       // check boundary
-       if (realIndex < 0 ) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
-               return NULL;
-       }
-
-       if (realIndex < insert_count) {
-               media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
-       } else if (realIndex < total_count) {
-               media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
-       }
-
-       if (strcmp(part, "elm.icon.1") == 0) {
-               check = elm_check_add(obj);
-               //set the State pointer to keep the current UI state of Checkbox.
-               elm_check_state_pointer_set(check, &media_info->isChecked);
-               evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
-               media_info->check_item = check;
-
-               return check;
-       } else  if (strcmp(part, "elm.icon.2") == 0) {
-               Evas_Object *image = NULL;
-
-               image = elm_icon_add(obj);
-
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info->pfile_path = %s", media_info->pfile_path);
-
-               /*set attach file icon*/
-               if (media_info->media_type == MSG_VIEWER_MEDIA_IMG ||
-                               media_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
-                       elm_image_file_set(image, media_info->pfile_path, NULL);
-               } else if (media_info->media_type == MSG_VIEWER_MEDIA_DRM) {
-                       elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
-               } else {
-                       if (strlen(media_info->pfile_path)) {
-                               const char *icon_path = NULL;
-
-                               icon_path = msg_common_get_file_icon(media_info->pfile_path);
-                               if (icon_path) {
-                                       elm_image_file_set(image, MSG_IMAGES_EDJ, icon_path);
-                               } else {
-                                       D_EMSG("icon_path is NULL");
-                                       elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
-                               }
-                       } else {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
-                               return NULL;
-                       }
-               }
-
-               if (image)
-                       evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
-
-               return image;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
-       }
-
-       return NULL;
-}
-
-static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
-
-       int i = 0;
-       int index = 0;
-       int realIndex = 0;
-       int insert_count = viewer_play_data->insert_count;
-       int attach_count = viewer_play_data->attach_count;
-       int total_count = insert_count + attach_count;
-       bool isAllSelected = TRUE;
-       bool isNoneSelected = TRUE;
-
-       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *sel_media_info = NULL;
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL;
-
-       if (item != NULL) {
-               index = (int)elm_object_item_data_get(item);
-               realIndex = (total_count > 1) ? index-1 : index;                // calculate item index considering 'select all' item
-
-               // check boundary
-               if (realIndex < 0 ) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index);
-                       return;
-               }
-
-               elm_genlist_item_selected_set(item, EINA_FALSE);
-
-               if (realIndex < insert_count) {
-                       sel_media_info = eina_list_nth(viewer_play_data->insert_list, realIndex);
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex);
-               } else {
-                       sel_media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count);
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count);
-               }
-
-               // toggle check status
-               sel_media_info->isChecked = !sel_media_info->isChecked;
-
-               elm_genlist_item_update(item);
-
-               //check condition for set select all item
-               if (total_count > 1 && sel_media_info->isChecked) {
-                       i =0;
-                       for (i = 0; i < total_count; i++) {
-                               if (i < viewer_play_data->insert_count) {
-                                       tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
-                                       if (!tmp_media_info->isChecked) {
-                                               isAllSelected = FALSE;
-                                               break;
-                                       }
-                               } else if (i < total_count) {
-                                       tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
-                                       if (!tmp_media_info->isChecked) {
-                                               isAllSelected = FALSE;
-                                               break;
-                                       }
-                               } else {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
-                               }
-                       }
-
-                       if (isAllSelected) {
-                               elm_check_state_set(viewer_play_data->sa_check, EINA_TRUE);
-                               viewer_play_data->isSelectAll = EINA_TRUE;
-                       }
-               }
-
-               // check condition for release select all item
-               if (total_count > 1 && !sel_media_info->isChecked && viewer_play_data->isSelectAll) {
-                       elm_check_state_set(viewer_play_data->sa_check, EINA_FALSE);
-                       viewer_play_data->isSelectAll = EINA_FALSE;
-               }
-
-               // check condition for enable save button item
-               for (i = 0; i < total_count; i++) {
-                       if (i < viewer_play_data->insert_count) {
-                               tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i);
-                               if (tmp_media_info->isChecked) {
-                                       isNoneSelected = FALSE;
-                                       break;
-                               }
-                       } else if (i < total_count) {
-                               tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count);
-                               if (tmp_media_info->isChecked) {
-                                       isNoneSelected = FALSE;
-                                       break;
-                               }
-                       } else {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!");
-                       }
-               }
-               elm_object_disabled_set(viewer_play_data->save_button, (isNoneSelected) ? EINA_TRUE : EINA_FALSE);
-       }
-}
-
-static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->attach_list == NULL);
-
-       int attach_count = eina_list_count(viewer_play_data->attach_list);
-       int index = 0;
-       int attach_index = 0;
-       int failed_count = 0;
-       int saved_count = 0;
-
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttachInfo = NULL;
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attach_cnt = %d", attach_count);
-
-       while (index < attach_count) {
-               pAttachInfo = eina_list_nth(viewer_play_data->attach_list , attach_index++);
-
-               if (pAttachInfo) {
-                       /*get default file path*/
-                       MSG_BOOL result = FALSE;
-                       char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
-
-                       result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
-                       if (result) {
-                               char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
-                               snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttachInfo->pfile_name);
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", pAttachInfo->pfile_path);
-
-                               char *result_path = msg_ui_viewer_util_copy_file(pAttachInfo->pfile_path, dst_path);
-                               if (result_path) {
-                                       saved_count++;
-                                       free(result_path);
-                               } else {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
-                                       failed_count++;
-                               }
-                       } else {
-                               failed_count++;
-                       }
-
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
-                       failed_count++;
-               }
-
-               pAttachInfo = NULL;
-
-               index++;
-       }
-
-       /* show indicator status text */
-       if (failed_count == attach_count) {
-               status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
-       } else {
-               if (attach_count == 1 && failed_count == 0) {
-                       status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
-               } else {
-                       char buf[DEF_BUF_LEN_S + 1] = {0, };
-                       snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, attach_count);
-                       status_message_post(buf);
-               }
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
-       MSG_PLAY_DATA_S *viewer_play_data = pAttach_info->viewer_play_data;
-
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, "viewer_play_data is NULL");
-
-       if (strlen(pAttach_info->pfile_path) == 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pfile_path is NULL");
-               if (pAttach_info->isSaveAll == FALSE) {
-                       status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
-               } else {                //Save all
-                       __msg_ui_viewer_help_page_save_all_item(viewer_play_data);
-               }
-               return;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pAttach_info->pfile_path);
-               MSG_BOOL result = 0;
-               MSG_BOOL issave = TRUE;
-               char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
-
-               /*get default file path*/
-               result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
-               if (result) {
-                       char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
-                       snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttach_info->pfile_name);
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path);
-
-                       char *result_path = msg_ui_viewer_util_copy_file(pAttach_info->pfile_path, dst_path);
-                       if (result_path) {
-                               free(result_path);
-                       } else {
-                               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);
-                               issave = FALSE;
-                       }
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed");
-                       status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
-                       return;
-               }
-
-               if (issave)
-                       status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
-               else
-                       status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       const char *label = elm_object_item_text_get((Elm_Object_Item *)event_info);
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB")) == 0) {
-               msg_ui_viewer_copy_message_text_to_clipboard(viewer_play_data);
-
-               /* play viewer again if previous status was PLAY */
-               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                               return;
-                       }
-               }
-       } else if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB")) == 0) {
-               msg_ui_viewer_create_msg_detail_popup(viewer_play_data);
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid list type");
-               return;
-       }
-
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       /* play viewer again if previous status was PLAY */
-       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_protection_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
-
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
-
-       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_main_data == NULL);
-
-       msg_error_t err = MSG_SUCCESS;
-       bool is_protected = false;
-
-       msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
-
-       /* get lock status and change status */
-       err = msg_update_protected_status(viewer_play_data->msgHandle, viewer_play_data->msgID, ((is_protected) ? false : true));
-
-       /* update message info */
-       if (err != MSG_SUCCESS) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_update_protected_status is failed");
-               return;
-       }
-
-       msg_set_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, !is_protected);
-
-       /* delete ctx popup */
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       /* signal emit for showing/hiding lock icon */
-       if (is_protected)
-               edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/hide", "*");
-       else
-               edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/show", "*");
-
-       /* play viewer again if previous status was PLAY */
-       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-
-       /* send refresh conversation result to bubble-composer ug */
-       char str_id[DEF_BUF_LEN] = {0,};
-       service_h svc_handle = NULL;
-
-       service_create(&svc_handle);
-       if (svc_handle < 0 || svc_handle == NULL) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
-               return;
-       }
-
-       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_REFRESH_CONV);
-
-       snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
-       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
-
-       ug_send_result(viewer_main_data->viewer_ug, svc_handle);
-
-       service_destroy(svc_handle);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-
-}
diff --git a/viewer/src/msg-ui-viewer-play-view-help-page.c b/viewer/src/msg-ui-viewer-play-view-help-page.c
new file mode 100755 (executable)
index 0000000..955859d
--- /dev/null
@@ -0,0 +1,376 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://floralicense.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*==================================================================================================
+ *                                                                     INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-ui-viewer-play-view.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-image-resource.h"
+#include "msg-ui-viewer-utility.h"
+#include "msg-ui-common-utility.h"
+
+#include <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
+#include <status.h>
+
+/*==================================================================================================
+ *                                                                     FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/*attachment list for help page */
+static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data);
+
+/* help page genlist */
+static void __msg_ui_viewer_help_page_item_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+/*==================================================================================================
+ *                                                             FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+MSG_SMIL_ERROR_E msg_ui_viewer_help_page_create_list(MSG_PLAY_DATA_S *data, void **attach_list, void *box)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       Evas_Object *renderBox = (Evas_Object *)box;
+       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+       int attach_count = viewer_play_data->attach_count;
+       int attach_index = 0;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "attachment_count = %d", attach_count);
+
+       /* create box (for setting min size of genlist)*/
+       Evas_Object *box2 = elm_box_add(renderBox);
+       evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(box2);
+
+       if (attach_count > 0) {
+               if (attach_count > 1)
+                       evas_object_size_hint_min_set(box2, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * (attach_count + 1) * elm_config_scale_get());
+               else
+                       evas_object_size_hint_min_set(box2, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * attach_count * elm_config_scale_get());
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "No Attachment in message!");
+       }
+
+       if (attach_count > 1) {
+               Evas_Object *attach_item = elm_layout_add(box2);
+
+               elm_layout_file_set(attach_item, MSG_VIEWER_EDJ, "help_page_save_all");
+               evas_object_size_hint_weight_set(attach_item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(attach_item, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               /* add layout */
+               Evas_Object *attach_layout = elm_layout_add(box2);
+               elm_layout_theme_set(attach_layout, "layout", "application", "noindicator");
+               evas_object_size_hint_weight_set(attach_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(attach_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(attach_layout);
+               elm_object_part_content_set(attach_layout, "elm.swallow.content", attach_item);
+
+               elm_box_pack_end(box2, attach_layout);
+               evas_object_show(attach_layout);
+
+               /* Add file name - Save All */
+               edje_object_part_text_set(_EDJ(attach_item), "item.filename.text", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"));
+
+               /* add Save icon */
+               Evas_Object *button = elm_button_add(attach_item);
+               Evas_Object *icon = elm_icon_add(attach_item);
+
+               elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_SAVE_ICON);
+               elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+               elm_object_part_content_set(button, "icon", icon);
+               elm_object_style_set(button, "circle/empty");
+               elm_object_part_content_set(attach_item, "item.save.icon", button);
+
+               evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_help_page_save_all_button_clicked_cb, viewer_play_data);
+               evas_object_show(button);
+       }
+
+       /* add normal attach items */
+       for (attach_index = 0; attach_index < attach_count; attach_index++) {
+               MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
+               if (pAttach_info == NULL) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info is NULL");
+                       break;
+               } else {
+                       Evas_Object *attach_item = elm_layout_add(box2);
+
+                       elm_layout_file_set(attach_item, MSG_VIEWER_EDJ, "help_page_item");
+                       evas_object_size_hint_weight_set(attach_item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(attach_item, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+                       /* add layout */
+                       Evas_Object *attach_layout = elm_layout_add(box2);
+                       elm_layout_theme_set(attach_layout, "layout", "application", "noindicator");
+                       evas_object_size_hint_weight_set(attach_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(attach_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_show(attach_layout);
+                       elm_object_part_content_set(attach_layout, "elm.swallow.content", attach_item);
+
+                       elm_box_pack_end(box2, attach_layout);
+                       evas_object_show(attach_layout);
+
+                       /* Add file thumbnail */
+                       Evas_Object *thumb_nail = elm_icon_add(attach_item);
+
+                       /*set attach file icon*/
+                       if (pAttach_info->media_type == MSG_VIEWER_MEDIA_IMG || pAttach_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
+                               elm_image_file_set(thumb_nail, pAttach_info->pfile_path, NULL);
+                       } else if (pAttach_info->media_type == MSG_VIEWER_MEDIA_DRM) {
+                               elm_image_file_set(thumb_nail, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
+                       } else {
+                               if (strlen(pAttach_info->pfile_path)) {
+                                       const char *icon_path = NULL;
+
+                                       icon_path = msg_common_get_file_icon(pAttach_info->pfile_path);
+                                       if (icon_path) {
+                                               elm_image_file_set(thumb_nail, MSG_IMAGES_EDJ, icon_path);
+                                       } else {
+                                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "icon_path is NULL");
+                                               elm_image_file_set(thumb_nail, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
+                                       }
+                               } else {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
+                               }
+                       }
+
+                       if (thumb_nail) evas_object_size_hint_aspect_set(thumb_nail, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+                       elm_object_part_content_set(attach_item, "item.thumbnail.icon", thumb_nail);
+
+                       /* Add file name */
+                       edje_object_part_text_set(_EDJ(attach_item), "item.filename.text", pAttach_info->pfile_name);
+
+                       /* Total file size */
+                       Eina_Strbuf *text_buf = eina_strbuf_new();
+                       eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_LEFT_BRACE);
+
+                       char size[DEF_BUF_LEN] = {0,};
+                       long long sizeKB = 0;
+                       long long sizeB = 0;
+
+                       if (pAttach_info->pfile_size < VIEWER_DETAILS_TEXT_MSG_SIZE_KB) {
+                               snprintf(size, sizeof(size), "1 %s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
+                       } else {
+                               sizeKB = (long long)(pAttach_info->pfile_size)/VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
+                               sizeB = (long long)(pAttach_info->pfile_size)%VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
+
+                               if (sizeB >= (VIEWER_DETAILS_TEXT_MSG_SIZE_KB/2))
+                                       sizeKB++;
+
+                               snprintf(size, sizeof(size), "%lld %s", sizeKB, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
+                       }
+
+                       eina_strbuf_append(text_buf, size);
+                       eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
+
+                       char *size_text = strdup(eina_strbuf_string_get(text_buf));
+                       eina_strbuf_free(text_buf);
+
+                       edje_object_part_text_set(_EDJ(attach_item), "item.filesize.text", size_text);
+                       free(size_text);
+
+                       /* add Save icon */
+                       Evas_Object *button = elm_button_add(attach_item);
+                       Evas_Object *icon = elm_icon_add(attach_item);
+
+                       elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_SAVE_ICON);
+                       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+                       elm_object_part_content_set(button, "icon", icon);
+                       elm_object_style_set(button, "circle/empty");
+                       elm_object_part_content_set(attach_item, "item.save.icon", button);
+
+                       evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_help_page_save_button_clicked_cb, pAttach_info);
+                       evas_object_show(button);
+
+                       /* add signal */
+                       edje_object_signal_callback_add(_EDJ(attach_item), "clicked", "*", __msg_ui_viewer_help_page_item_selected_cb, pAttach_info);
+               }
+       }
+
+       elm_box_pack_end(renderBox, box2);
+
+       return err;
+}
+
+static void __msg_ui_viewer_help_page_item_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
+
+       service_h svc_handle = NULL;
+       service_error_e err = MSG_SUCCESS;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pAttach_info->pfile_name);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pAttach_info->pfile_path);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pAttach_info->media_type);
+
+       //Save all item
+       if (!strcmp(pAttach_info->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"))) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Save all item");
+               return;
+       }
+
+       if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
+               return;
+       }
+
+       service_set_operation(svc_handle, SERVICE_OPERATION_VIEW);
+       service_set_uri(svc_handle, pAttach_info->pfile_path);
+
+       err = service_send_launch_request(svc_handle, NULL, NULL);
+       if ( err == SERVICE_ERROR_NONE) {
+               if (pAttach_info->viewer_play_data) {
+                       /* set player state to pause and update icon */
+                       if (!msg_ui_viewer_command_play_pause(pAttach_info->viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                               return;
+                       }
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed, err = %d", err);
+       }
+
+       service_destroy(svc_handle);
+
+       return;
+}
+
+
+static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->attach_list == NULL);
+
+       int attach_count = eina_list_count(viewer_play_data->attach_list);
+       int index = 0;
+       int attach_index = 0;
+       int failed_count = 0;
+       int saved_count = 0;
+
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttachInfo = NULL;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attach_cnt = %d", attach_count);
+
+       while (index < attach_count) {
+               pAttachInfo = eina_list_nth(viewer_play_data->attach_list , attach_index++);
+
+               if (pAttachInfo) {
+                       /*get default file path*/
+                       MSG_BOOL result = FALSE;
+                       char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
+
+                       result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
+                       if (result) {
+                               char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
+                               snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttachInfo->pfile_name);
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path);
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", pAttachInfo->pfile_path);
+
+                               char *result_path = msg_ui_viewer_util_copy_file(pAttachInfo->pfile_path, dst_path);
+                               if (result_path) {
+                                       saved_count++;
+                                       free(result_path);
+                               } else {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index);
+                                       failed_count++;
+                               }
+                       } else {
+                               failed_count++;
+                       }
+
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
+                       failed_count++;
+               }
+
+               pAttachInfo = NULL;
+
+               index++;
+       }
+
+       /* show indicator status text */
+       if (failed_count == attach_count) {
+               status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+       } else {
+               if (attach_count == 1 && failed_count == 0) {
+                       status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
+               } else {
+                       char buf[DEF_BUF_LEN_S + 1] = {0, };
+                       snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, attach_count);
+                       status_message_post(buf);
+               }
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_help_page_save_all_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, "viewer_play_data is NULL");
+
+       __msg_ui_viewer_help_page_save_all_item(viewer_play_data);
+}
+
+void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
+       MSG_PLAY_DATA_S *viewer_play_data = pAttach_info->viewer_play_data;
+
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, "viewer_play_data is NULL");
+
+       if (strlen(pAttach_info->pfile_path) != 0) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pAttach_info->pfile_path);
+               MSG_BOOL result = 0;
+               MSG_BOOL issave = TRUE;
+               char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0};
+
+               /*get default file path*/
+               result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path));
+               if (result) {
+                       char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,};
+                       snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttach_info->pfile_name);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path);
+
+                       char *result_path = msg_ui_viewer_util_copy_file(pAttach_info->pfile_path, dst_path);
+                       if (result_path) {
+                               free(result_path);
+                       } else {
+                               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);
+                               issave = FALSE;
+                       }
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed");
+                       status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+                       return;
+               }
+
+               if (issave)
+                       status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_SAVED_IN_MY_FILES"));
+               else
+                       status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
similarity index 58%
rename from viewer/src/msg-ui-viewer-play-view.c
rename to viewer/src/msg-ui-viewer-play-view-main.c
index b3fcf82..abd2ec0 100755 (executable)
 #include <msg.h>
 #include <msg_storage.h>
 #include <msg_transport.h>
-
-#include <Ecore_X.h>
-#include <utilX.h>
-#include <glib.h>
 #include <contacts.h>
-#include "appsvc.h"
-#include <sound_manager.h>
 #include <status.h>
 
 /*==================================================================================================
 static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data);
 static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data);
 static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data);
-static void __msg_ui_viewer_init_font_size(MSG_PLAY_DATA_S *data);
-static void __msg_ui_viewer_vconf_changed_cb(keynode_t *key, void *data);
 
 /* create layout */
 static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data);
 static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data);
-static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data);
 static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data);
 static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom);
 
-/* help page genlist */
-static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part);
-static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part);
-static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj);
-
-/* message details */
-static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-
-/* volume key action related with volume bar */
-static void __msg_ui_viewer_grab_volume_key(void *data);
-static void __msg_ui_viewer_ungrab_volume_key(void *data);
-static void __msg_ui_viewer_volumebar_volume_up(Evas_Object *obj);
-static void __msg_ui_viewer_volumebar_volume_down(Evas_Object *obj);
-
-/* volume action with volume key and slide callback */
-static Eina_Bool __msg_ui_viewer_volume_key_release_cb(void *data, int type, void *event);
-static Eina_Bool __msg_ui_viewer_volume_key_press_cb(void *data, int type, void *event);
-static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data);
-static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data);
-static Eina_Bool __msg_ui_viewer_volumebar_timer_cb(void *data);
-
-/* volume action related with volumebar slider */
-static void __msg_ui_viewer_volumebar_drag_start_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_volumebar_drag_stop_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_volumebar_changed_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_volumebar_event_cb(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event);
-static void __msg_ui_viewer_volumebar_event_callback_add(Evas_Object *obj, MSG_VIEWER_VOLUMEBAR_CB event_cb);
-
-/* volume action related with SOUNDMANAGER */
-static int __msg_ui_viewer_get_max_volume(void);
-static int __msg_ui_viewer_get_current_volume(void);
-static bool __msg_ui_viewer_set_volume(int volume);
-
+/* drm check popup */
+static void __msg_ui_viewer_get_drm_ro_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_get_drm_ro_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
 /*==================================================================================================
  *                                                             FUNCTION IMPLEMENTATIONS
  *================================================================================================*/
@@ -106,7 +66,7 @@ MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus
 
        viewer_play_data->smil_eventStatus = eventStatus;
        /*update prev/next button*/
-       msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_UNKOWN);
+       msg_ui_viewer_play_controller_update(viewer_play_data, MSG_VIEWER_UNKOWN);
 
        /*for Multipart.Mixed "Slide" count info.*/
        if (eventStatus->pageCnt == 0 && eventStatus->clientCbEvent != SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START)
@@ -143,6 +103,8 @@ MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus
                }
        } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START ||
                                eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_PLAY_START) {      /*slide is playing*/
+               msg_ui_viewer_play_controller_create_progressbar(viewer_play_data, eventStatus->pageIdx);
+
                double current_slide_time = 0.0;
                double remain_slide_time = 0.0;
                double remain_next_slide_time = 0.0;
@@ -153,17 +115,26 @@ MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus
                                current_slide_time = remain_slide_time;
                }
 
-               if (current_slide_time <= 0) {          //for infinite duration slide, duration <= 0
-                       if (viewer_play_data->play_controller_progressbar_timer)
-                               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-               } else {
-                       if (viewer_play_data->play_controller_progressbar_timer)
-                               ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "current_slide_time = %d", current_slide_time);
+
+               if (current_slide_time <= 0)            //for infinite duration slide, duration <= 0
+                       ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+               else
+                       ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
+
+               SMIL_SLIDE_INFO_S *cur_slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+
+               // request PLAYER to start for video & audio media
+               if (cur_slide->slideStatus == PLAYER_STATUS_PLAYING) {
+                       if (cur_slide->pageInfo && (cur_slide->pageInfo->hasAudio || cur_slide->pageInfo->hasVideo))
+                               msg_smil_request_player_start(viewer_play_data->SmilHandle);
                }
 
                //set pause icon in play controller
-               if (viewer_play_data->play_controller)
+               if (viewer_play_data->play_controller) {
+                       msg_ui_viewer_play_controller_create_timer(viewer_play_data);
                        edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
+               }
 
                viewer_play_data->status = MSG_VIEWER_PLAY;
        } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE || eventStatus->clientCbEvent == SMIL_RENDER_EVENT_MOVE_PAGE_AFTER_PAUSED) {
@@ -181,7 +152,7 @@ MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus
                                edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
                                //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL
                        viewer_play_data->status = MSG_VIEWER_STOP;
-                       msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
+                       msg_ui_viewer_play_controller_update(viewer_play_data, MSG_VIEWER_STOP);
                } else {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler is failed");
                }
@@ -197,77 +168,443 @@ MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus
        return MSG_SMIL_SUCCESS;
 }
 
-void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status)
+Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event)
 {
-       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
        MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_BOOL bfisrt_page = FALSE;
-       MSG_BOOL blast_page = FALSE;
-       SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = viewer_play_data->smil_eventStatus;
-       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+       Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
+       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+       SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
+       int start_point = 0;
+       int end_point = 0;
+       int screen_width = 0;
+       int rotate = 0;
+
+       if (viewer_play_data->drag_volume_slider) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "volume slider is dragging, do not navigate page!");
+               return FALSE;
+       }
 
-       if (status == MSG_VIEWER_STOP) {
-               if (viewer_play_data->play_controller) {
-                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
-                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
-               }
+       play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
+
+       /*get start and end point according to rotation*/
+       rotate = elm_win_rotation_get(viewer_play_data->main_window);
+       if (rotate == 0) {      /*PORTRAIT mode*/
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT mode");
+               start_point = viewer_play_data->m_x;
+               end_point = ev->x;
+               screen_width = viewer_play_data->window_width;
+       } else if (rotate == 180) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT reverse mode");
+               start_point = ev->x;
+               end_point = viewer_play_data->m_x;
+               screen_width = viewer_play_data->window_width;
+       } else if (rotate == 90) {      /*LANDSCAPE mode*/
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE mode");
+               start_point = ev->y;
+               end_point = viewer_play_data->m_y;
+               screen_width = viewer_play_data->window_height;
+       } else if (rotate == 270) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE reverse mode");
+               start_point = viewer_play_data->m_y;
+               end_point = ev->y;
+               screen_width = viewer_play_data->window_height;
        } else {
-               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide == NULL);
-               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide->commonData == NULL);
-               if (slide->commonData->pageCnt > 0) {
-                       if (slide->pageIdx == 0)
-                               bfisrt_page = TRUE;
-
-                       if (slide->pageIdx + 1 == slide->commonData->pageCnt)
-                               blast_page = TRUE;
-
-                       if (bfisrt_page) {      /*first page*/
-                               if (viewer_play_data->play_controller) {
-                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
+               return FALSE;
+       }
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start_point = %d, end_point = %d, screen_width = %d", start_point, end_point, screen_width);
+
+       if (end_point - start_point > screen_width / 4) {
+               /* prev*/
+               int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
+               if (pageIdx > 0) {
+                       if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
+                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
+                               if (err != MSG_SMIL_SUCCESS) {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+                               } else {
+                                       /* hide menu title genlist if player status is changed to play */
+                                       if (viewer_play_data->title_menu_opened) {
+                                               msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+                                               /* play viewer again if previous status was PLAY */
+                                               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+                                                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                                                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                                                               return EINA_FALSE;
+                                                       }
+                                               }
+                                       }
+                                       /* show play controller */
+                                       if (viewer_play_data->play_controller) {
+                                               if (!viewer_play_data->is_rotated) {
+                                                       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
+                                                       evas_object_show(viewer_play_data->play_controller);
+                                                       viewer_play_data->playcontroller_opened = true;
+                                                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
+                                                       msg_ui_viewer_play_controller_create_timer(viewer_play_data);
+                                               }
+                                       }
+                                       /* set progressbar and progress text sync */
+                                       if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
+                                               msg_ui_viewer_play_controller_create_progressbar(viewer_play_data, pageIdx-1);
                                }
-                       } else {
-                               if (viewer_play_data->play_controller) {
-                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_enable", "*");
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable prev_button");
+                       }
+               }
+       } else if (start_point - end_point > screen_width / 4) {
+               /*next*/
+               int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
+               int total_page = viewer_play_data->smil_eventStatus->pageCnt;
+               if (total_page > pageIdx) {
+                       if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
+                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
+                               if (err != MSG_SMIL_SUCCESS) {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+                               } else {
+                                       /* hide menu title genlist if player status is changed to play */
+                                       if (viewer_play_data->title_menu_opened) {
+                                               msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+                                               /* play viewer again if previous status was PLAY */
+                                               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+                                                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                                                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                                                               return EINA_FALSE;
+                                                       }
+                                               }
+                                       }
+                                       /* show play controller */
+                                       if (viewer_play_data->play_controller) {
+                                               if (!viewer_play_data->is_rotated) {
+                                                       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
+                                                       evas_object_show(viewer_play_data->play_controller);
+                                                       viewer_play_data->playcontroller_opened = true;
+                                                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
+                                                       msg_ui_viewer_play_controller_create_timer(viewer_play_data);
+                                               }
+                                       }
+                                       /* set progressbar and progress text sync */
+                                       if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
+                                               msg_ui_viewer_play_controller_create_progressbar(viewer_play_data, pageIdx);
                                }
                        }
+               }
+       }
 
-                       if (blast_page) {        /*lastpage*/
-                               if (viewer_play_data->play_controller) {
-                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
-                               }
-                       } else {
-                               if (viewer_play_data->play_controller) {
-                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_enable", "*");
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable next_button");
+       return EINA_TRUE;
+}
+
+Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event;
+
+       viewer_play_data->m_x = ev->x;
+       viewer_play_data->m_y = ev->y;
+
+       if (viewer_play_data->mouse_up_event_handler) {
+               ecore_event_handler_del(viewer_play_data->mouse_up_event_handler);
+               viewer_play_data->mouse_up_event_handler = NULL;
+       }
+       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);
+
+       return EINA_TRUE;
+}
+
+void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       Evas_Event_Mouse_Down *ev = event_info;
+
+       viewer_play_data->ctrl_start_x = ev->canvas.x;
+       viewer_play_data->ctrl_start_y = ev->canvas.y;
+}
+
+void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       Evas_Event_Mouse_Up *ev = event_info;
+
+       viewer_play_data->ctrl_end_x = ev->canvas.x;
+       viewer_play_data->ctrl_end_y = ev->canvas.y;
+
+       int screen_width = 0;
+       int screen_height = 0;
+       int rotate = 0;
+
+       //get screen size
+       rotate = elm_win_rotation_get(viewer_play_data->main_window);
+       if (rotate == 0 || rotate == 180) {
+               screen_width = viewer_play_data->window_width;
+               screen_height = viewer_play_data->window_height;
+       } else if (rotate == 90 || rotate == 270) {
+               screen_width = viewer_play_data->window_height;
+               screen_height = viewer_play_data->window_width;
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
+               return;
+       }
+
+       //check only case for playcontroller is not opened, the other case is checked within msg_ui_viewer_play_layout_clicked_cb
+       if (!viewer_play_data->playcontroller_opened && !viewer_play_data->title_menu_opened) {
+               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 ) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is tapped and play controller should be displayed");
+
+                       if (viewer_play_data->play_controller) {
+                               if (!viewer_play_data->is_rotated) {
+                                       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
+                                       evas_object_show(viewer_play_data->play_controller);
+                                       viewer_play_data->playcontroller_opened = true;
+                                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
+                                       evas_object_show(viewer_play_data->play_layout);
+                                       msg_ui_viewer_play_controller_create_timer(viewer_play_data);
                                }
                        }
+               }
+       } else if (!viewer_play_data->is_rotated && viewer_play_data->playcontroller_opened) {
+               /* up/down drag condition - close play controller */
+               if (abs(viewer_play_data->ctrl_start_y-viewer_play_data->ctrl_end_y) > screen_height / 5) {
+                       elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
+                       evas_object_hide(viewer_play_data->play_controller);
+                       viewer_play_data->playcontroller_opened = false;
+                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
 
-                       /*smil player is finished*/
-                       if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE &&
-                                       eventStatus->isLastSlide == TRUE) {
-                               if (viewer_play_data->play_controller) {
-                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
-                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
-                               }
+                       msg_ui_viewer_play_controller_destroy_timer(viewer_play_data);
+               }
+       }
+}
+
+void msg_ui_viewer_play_layout_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
+
+       if (viewer_play_data->title_menu_opened) {
+               msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+               /* play viewer again if previous status was PLAY */
+               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                               return;
                        }
+               }
+       } else if (viewer_play_data->playcontroller_opened) {
+               int screen_width = 0;
+               int screen_height = 0;
+               int rotate = 0;
+
+               //get screen size
+               rotate = elm_win_rotation_get(viewer_play_data->main_window);
+               if (rotate == 0 || rotate == 180) {
+                       screen_width = viewer_play_data->window_width;
+                       screen_height = viewer_play_data->window_height;
+               } else if (rotate == 90 || rotate == 270) {
+                       screen_width = viewer_play_data->window_height;
+                       screen_height = viewer_play_data->window_width;
                } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart.mixed message");
-                       if (viewer_play_data->play_controller) {
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value");
+                       return;
+               }
+
+               if (!viewer_play_data->is_rotated) {
+                       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 &&
+                               viewer_play_data->ctrl_end_y < screen_height-(VIEWER_NAVIFRAME_BOTTOM_H+VIEWER_PLAY_CONTROLLER_HEIGHT)) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is now displayed and play controller should be hided");
+
+                               elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
+                               evas_object_hide(viewer_play_data->play_controller);
+                               viewer_play_data->playcontroller_opened = false;
+                               elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
+
+                               msg_ui_viewer_play_controller_destroy_timer(viewer_play_data);
                        }
                }
        }
+}
+
+Eina_Bool msg_ui_viewer_focused_in_cb(void *data, int type, void *event)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, EINA_FALSE, "viewer_play_data is NULL!");
+
+       Ecore_X_Event_Window_Focus_Out *ev = (Ecore_X_Event_Window_Focus_Out *)event;
+
+       if (viewer_play_data->main_window != NULL && ev->win == elm_win_xwindow_get(viewer_play_data->main_window)) {
+               if (!viewer_play_data->popup)
+                       msg_ui_viewer_connect_handler(viewer_play_data);
+
+               if (viewer_play_data->mode == MSG_VIEWER_HIDED_BY_OTHER_WINDOW) {
+                       /*reset launch_cmd and cmd_type*/
+                       viewer_play_data->mode = MSG_VIEWER_DEFAULT_MODE;
+               }
+       }
+
+       return ECORE_CALLBACK_PASS_ON;
+}
+
+Eina_Bool msg_ui_viewer_focused_out_cb(void *data, int type, void *event)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, EINA_FALSE, "viewer_play_data is NULL!");
+
+       Ecore_X_Event_Window_Focus_Out *ev = (Ecore_X_Event_Window_Focus_Out *)event;
+
+       if ((viewer_play_data->main_window != NULL) && (ev->win == elm_win_xwindow_get(viewer_play_data->main_window))) {
+               msg_ui_viewer_disconnect_handler(viewer_play_data);
+               viewer_play_data->mode = MSG_VIEWER_HIDED_BY_OTHER_WINDOW;
+       }
+
+       return ECORE_CALLBACK_PASS_ON;
+}
+
+void msg_ui_viewer_display_drm_list_popup(MSG_PLAY_DATA_S *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_object_text_set(popup, (char *)"This is DRM file. Buy it?");
+
+       /* Add protection on/off menu */
+       Evas_Object *btn_ok = elm_button_add(popup);
+       elm_object_style_set(btn_ok, "popup_button/default");
+       elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
+       elm_object_part_content_set(popup, "button1", btn_ok);
+       evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_get_drm_ro_ok_clicked_cb, viewer_play_data);
+
+       Evas_Object *btn_cancel = elm_button_add(popup);
+       elm_object_style_set(btn_cancel, "popup_button/default");
+       elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+       elm_object_part_content_set(popup, "button2", btn_cancel);
+       evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_get_drm_ro_cancel_clicked_cb, viewer_play_data);
+
+       evas_object_show(popup);
+       viewer_play_data->popup = popup;
+       viewer_play_data->popup_type = MSG_VIEWER_NORMAL_POPUP;
+
+       /*disconnect mouse handler*/
+       msg_ui_viewer_disconnect_handler(viewer_play_data);
+}
+
+static void __msg_ui_viewer_get_drm_ro_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       msg_ui_viewer_show_view_by_mode(viewer_main_data, MSG_VIEWER_DRM_LIST_VIEW, MSG_VIEWER_VIEW_CMD_NONE);
+}
+
+static void __msg_ui_viewer_get_drm_ro_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       /* connect handler again*/
+       msg_ui_viewer_connect_handler(viewer_play_data);
+
+       /* create play controller */
+       msg_ui_viewer_play_controller_create(viewer_play_data);
+
+       if (viewer_play_data->SmilHandle) {
+               MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+
+               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_START);
+
+               if (err != MSG_SMIL_SUCCESS)
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler is failed! : %d", err);
+       }
+}
+
+MSG_SMIL_ERROR_E msg_ui_viewer_set_entry_handle_cb(MSG_PLAY_DATA_S *data, void *entry)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ASSERT, data == NULL, MSG_ERR_SMIL_UNKNOWN);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       viewer_play_data->render_entry = (Evas_Object *)entry;
+
+       if (viewer_play_data->render_entry) {
+               SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+               MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+               msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE);
+       }
+
+       return MSG_SMIL_SUCCESS;
+}
+
+void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->mode : %d", viewer_play_data->mode);
+
+       /*prevent invalid double pressing button event after launching ug or app(like call, vtcall)*/
+       if (viewer_play_data->mode != MSG_VIEWER_DEFAULT_MODE)
+               return;
+
+       if (viewer_play_data->title_menu_opened)
+               msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+       if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) {
+               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP);
+               if (err != MSG_SMIL_SUCCESS) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+               }
+
+               viewer_play_data->status = MSG_VIEWER_STOP;
+               msg_ui_viewer_play_controller_update(viewer_play_data, MSG_VIEWER_STOP);
+       }
+
+       msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+       if (!viewer_play_data->del_idler)
+               viewer_play_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_play_data->viewer_main);
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
@@ -317,7 +654,7 @@ MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E a
                                } else {
                                        if (viewer_play_data->play_controller) {
                                                edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
-                                               msg_ui_viewer_create_progressbar(viewer_play_data, 0);
+                                               msg_ui_viewer_play_controller_create_progressbar(viewer_play_data, 0);
                                        }
                                        viewer_play_data->status = MSG_VIEWER_PLAY;
                                }
@@ -343,19 +680,19 @@ MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E a
 
        /* refreshing play controller timer by button action */
        if (action == MSG_VIEWER_ACTION_TOOLBAR_PLAY) {
-               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+               msg_ui_viewer_play_controller_create_timer(viewer_play_data);
                if (viewer_play_data->title_menu_opened)
-                       msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+                       msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
 
                viewer_play_data->auto_resume_state = true;
        } else if (action == MSG_VIEWER_ACTION_TOOLBAR_PAUSE) {
-               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+               msg_ui_viewer_play_controller_create_timer(viewer_play_data);
                viewer_play_data->auto_resume_state = false;
        } else {
                /* case for not button action */
                if (viewer_play_data->status == MSG_VIEWER_PLAY) {
                        if (viewer_play_data->title_menu_opened)
-                               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+                               msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
 
                        /* show play controller again to notify SMIL is resumed */
                        if (viewer_play_data->play_controller && !viewer_play_data->playcontroller_opened) {
@@ -363,7 +700,7 @@ MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E a
                                evas_object_show(viewer_play_data->play_controller);
                                viewer_play_data->playcontroller_opened = true;
                                elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
-                               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+                               msg_ui_viewer_play_controller_create_timer(viewer_play_data);
                        }
                } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) {
                        if (viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
@@ -373,7 +710,7 @@ MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E a
                                        evas_object_show(viewer_play_data->play_controller);
                                        viewer_play_data->playcontroller_opened = true;
                                        elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
-                                       msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+                                       msg_ui_viewer_play_controller_create_timer(viewer_play_data);
                                }
                        }
                }
@@ -400,7 +737,6 @@ void msg_ui_viewer_play_view_init(void *data)
        viewer_play_data->subject_index_layout = NULL;
        viewer_play_data->play_controller = NULL;
        viewer_play_data->play_layout = NULL;
-       viewer_play_data->help_page_gl = NULL;
        viewer_play_data->save_attachment_gl = NULL;
        viewer_play_data->render_entry = NULL;
        viewer_play_data->save_button = NULL;
@@ -430,6 +766,7 @@ void msg_ui_viewer_play_view_init(void *data)
        viewer_play_data->playcontroller_opened = 0;
        viewer_play_data->auto_resume_state = true;
        viewer_play_data->drag_volume_slider = false;
+       viewer_play_data->is_rotated = 0;
        viewer_play_data->volkey_release_handler = NULL;
        viewer_play_data->volkey_press_handler = NULL;
        viewer_play_data->vol_up_key_longpress = NULL;
@@ -463,13 +800,6 @@ void msg_ui_viewer_destroy_play_view(void *data)
                }
        }
 
-       if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb) < 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "unregister failed in vconf_notify_key_changed with key[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
-       }
-       if (vconf_ignore_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb) < 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "unregister failed in vconf_notify_key_changed with key[%s]", VCONFKEY_MSG_APP_FONT_SIZE);
-       }
-
        if (viewer_play_data->insert_list) {
                int index = 0;
                int ntotal = 0;
@@ -511,11 +841,6 @@ void msg_ui_viewer_destroy_play_view(void *data)
                viewer_play_data->del_idler = NULL;
        }
 
-       if (viewer_play_data->help_page_gl) {
-               evas_object_del(viewer_play_data->help_page_gl);
-               viewer_play_data->help_page_gl = NULL;
-       }
-
        if (viewer_play_data->play_controller_timer) {
                ecore_timer_del(viewer_play_data->play_controller_timer);
                viewer_play_data->play_controller_timer = NULL;
@@ -586,14 +911,14 @@ void msg_ui_viewer_connect_handler(void *data)
        if (!viewer_play_data->mouse_down_event_handler)
                viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data);
 
-       __msg_ui_viewer_grab_volume_key(viewer_play_data);
+       msg_ui_viewer_grab_volume_key(viewer_play_data);
 
        /* connect key handler for volume up/down */
        if (!viewer_play_data->volkey_release_handler)
-               viewer_play_data->volkey_release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, __msg_ui_viewer_volume_key_release_cb, (void *)viewer_play_data);
+               viewer_play_data->volkey_release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, msg_ui_viewer_volume_key_release_cb, (void *)viewer_play_data);
 
        if (!viewer_play_data->volkey_press_handler)
-               viewer_play_data->volkey_press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __msg_ui_viewer_volume_key_press_cb, (void *)viewer_play_data);
+               viewer_play_data->volkey_press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, msg_ui_viewer_volume_key_press_cb, (void *)viewer_play_data);
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
@@ -632,9 +957,9 @@ void msg_ui_viewer_disconnect_handler(void *data)
        if (viewer_play_data->vol_down_key_longpress) {
                ecore_timer_del(viewer_play_data->vol_down_key_longpress);
                viewer_play_data->vol_down_key_longpress = NULL;
-       }
+       }
 
-       __msg_ui_viewer_ungrab_volume_key(viewer_play_data);
+       msg_ui_viewer_ungrab_volume_key(viewer_play_data);
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
@@ -649,6 +974,7 @@ MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
        MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
        Evas_Object *layout = NULL;
        MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
+       int rotate = 0;
 
        viewer_play_data->xdisplay = ecore_x_display_get();
        if (viewer_play_data->xdisplay == NULL) {
@@ -661,12 +987,15 @@ MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
        if (__msg_ui_viewer_play_view_get_message_info(viewer_play_data) == FALSE)
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_viewer_play_view_get_content_count is failed");
 
+       rotate = elm_win_rotation_get(viewer_play_data->main_window);
+       viewer_play_data->is_rotated = (rotate == 90 || rotate == 270) ? true : false;
+
        layout = msg_ui_viewer_get_main_layout(viewer_play_data->viewer_main);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE);
 
        /* create naviframe */
        if (!viewer_play_data->navi_frame) {
-               viewer_play_data->navi_frame = msg_ui_viewer_create_navigation_layout(layout);
+               viewer_play_data->navi_frame = msg_ui_viewer_create_navigation_layout(viewer_play_data, layout);
                MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->navi_frame == NULL, FALSE);
                msg_ui_viewer_set_navi_frame(viewer_play_data->viewer_main, viewer_play_data->navi_frame);
        } else {
@@ -698,20 +1027,10 @@ MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
                msg_ui_viewer_set_navi_title_layout(viewer_play_data);
        }
 
-       /* register vconf notify */
-       if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb, viewer_play_data) < 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "register failed in vconf_notify_key_changed with key[%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE);
-       }
-       if (vconf_notify_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msg_ui_viewer_vconf_changed_cb, viewer_play_data) < 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "register failed in vconf_notify_key_changed with key[%s]", VCONFKEY_MSG_APP_FONT_SIZE);
-       }
-
        /* font size set */
-       __msg_ui_viewer_init_font_size(viewer_play_data);
+       msg_ui_viewer_apply_font_size(viewer_play_data);
        /* create subject & index layout */
        __msg_ui_viewer_create_subject_index_layout(viewer_play_data);
-       /* create page navigator */
-       __msg_ui_viewer_create_play_controller(viewer_play_data);
        /* create control toolbar */
        __msg_ui_viewer_create_control_toolbar(viewer_play_data);
        /* connect handlers */
@@ -733,7 +1052,7 @@ MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
                return FALSE;
 
        /*register help page show callback to renderer */
-       if (msg_smil_set_smil_player_help_page_cb(viewer_play_data->SmilHandle, msg_ui_viewer_help_page_smilrenderer_cb, (void *)viewer_play_data) == FALSE)
+       if (msg_smil_set_smil_player_help_page_cb(viewer_play_data->SmilHandle, msg_ui_viewer_help_page_create_list, (void *)viewer_play_data) == FALSE)
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_help_page_cb is failed");
 
        /*register change font size callback to render */
@@ -741,14 +1060,14 @@ MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_cutlink_cb is failed");
 
        if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
-               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREVIEW_PLAY);
+               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREVIEW_READY);
                if (err != MSG_SMIL_SUCCESS) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
                        if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
                                return FALSE;
                }
        } else {
-               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
+               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_READY);
                if (err != MSG_SMIL_SUCCESS) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
                        if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE)
@@ -808,7 +1127,7 @@ MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data)
        /*change command bar*/
        if (viewer_play_data->play_controller) {
                edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
-               msg_ui_viewer_create_progressbar(viewer_play_data, 0);
+               msg_ui_viewer_play_controller_create_progressbar(viewer_play_data, 0);
        }
 
        /*Set title string*/
@@ -828,9 +1147,10 @@ MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data)
        return TRUE;
 }
 
-Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent)
+Evas_Object *msg_ui_viewer_create_navigation_layout(MSG_PLAY_DATA_S *viewer_play_data, Evas_Object *parent)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
        Evas_Object *navi_frame = NULL;
 
@@ -842,7 +1162,7 @@ Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent)
        return navi_frame;
 }
 
-static void __msg_ui_viewer_init_font_size(MSG_PLAY_DATA_S *data)
+void msg_ui_viewer_apply_font_size(void *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
@@ -918,57 +1238,34 @@ void msg_ui_viewer_set_font_size(MSG_PLAY_DATA_S *data, MSG_VIEWER_ENTRY_TYPE_E
 
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "entry type = %d", entry_type);
 
-               if (entry_type == MSG_VIEWER_ENTRY_NORMAL_TEXT)
+               if (entry_type == MSG_VIEWER_ENTRY_NORMAL_TEXT) {
                        snprintf(font_size_str, sizeof(font_size_str), "DEFAULT='font_size=%d'", viewer_play_data->font_size);
-               else
-                       snprintf(font_size_str, sizeof(font_size_str), "DEFAULT='font_size=%d'", (viewer_play_data->font_size*4)/5);
+               } else {
+                       int hp_font_size = 0;
+
+                       if (index == 0) {
+                               hp_font_size = VIEWER_HELP_PAGE_FONT_SMALL;
+                       } else if (index == 1) {
+                               hp_font_size = VIEWER_HELP_PAGE_FONT_NORMAL;
+                       } else if (index == 2) {
+                               hp_font_size = VIEWER_HELP_PAGE_FONT_LARGE;
+                       } else if (index == 3) {
+                               hp_font_size = VIEWER_HELP_PAGE_FONT_HUGE;
+                       } else if (index == 4) {
+                               hp_font_size = VIEWER_HELP_PAGE_FONT_GIANT;
+                       } else {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "font index is invalid (%d), set normal font size (%d)", index, VIEWER_HELP_PAGE_FONT_NORMAL);
+                               hp_font_size = VIEWER_HELP_PAGE_FONT_NORMAL;
+                       }
+
+                       snprintf(font_size_str, sizeof(font_size_str), "DEFAULT='font_size=%d'", hp_font_size);
+               }
 
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font_size_str = (%s)", font_size_str);
                elm_entry_text_style_user_push(viewer_play_data->render_entry, font_size_str);
        }
 }
 
-static void __msg_ui_viewer_vconf_changed_cb(keynode_t *key, void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       int index = 0;
-       int font_size = 0;
-       char *key_name = NULL;
-
-       if ((key_name = vconf_keynode_get_name(key)) == NULL) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "key_name is NULL");
-               return;
-       }
-
-       if (!strcmp(key_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) {
-               index = vconf_keynode_get_int(key);
-               font_size = msg_common_get_font_size_from_index(index);
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font size updated with ACCESSIBILITY TYPE, index = %d, font size = %d", index, font_size);
-
-               viewer_play_data->font_size = font_size;
-
-               /* sync current font size as accessibility font index */
-               if (msg_common_set_font_size(index) == FALSE)
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_set_font_size(index = %d) is failed !!", index);
-
-               /* sync msg accessibility font size with accessibility font index */
-               if (msg_common_set_access_font_size(index) == FALSE)
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_set_int(VCONFKEY_MSG_APP_ACCESS_FONT_SIZE) is failed !!, [%d]", index);
-
-       } else if (!strcmp(key_name, VCONFKEY_MSG_APP_FONT_SIZE)) {
-               index = vconf_keynode_get_int(key);
-               font_size = msg_common_get_font_size_from_index(index);
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font size updated with MSG TYPE, index = %d, font size = %d", index, font_size);
-
-               viewer_play_data->font_size = font_size;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid key name");
-       }
-}
-
 static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -1031,46 +1328,13 @@ static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data)
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
 
-static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data)
+static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
        MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
-       elm_layout_file_set(layout, MSG_VIEWER_THEME, "play_controller");
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_show(layout);
-
-       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", layout);
-       viewer_play_data->play_controller = layout;
-       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
-
-       //add signal callbacks
-       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "volume_clicked", "", msg_ui_viewer_volume_button_cb, (void *)viewer_play_data);
-       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "prev_clicked", "", msg_ui_viewer_prev_button_cb, (void *)viewer_play_data);
-       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "play_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
-       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "pause_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data);
-       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "next_clicked", "", msg_ui_viewer_next_button_cb, (void *)viewer_play_data);
-
-       viewer_play_data->playcontroller_opened = true;
-
-       //register timer
-       msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-
-       //create progressbar
-       msg_ui_viewer_create_progressbar(viewer_play_data, 0);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
 
        Evas_Object *btn = NULL;
        MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
@@ -1092,7 +1356,7 @@ static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data)
                elm_object_item_part_content_set(viewer_play_data->navi_item, "toolbar_more_btn", btn);
                viewer_play_data->more_btn = btn;
 
-               evas_object_smart_callback_add(btn, "clicked", msg_ui_viewer_more_button_cb, data);
+               evas_object_smart_callback_add(btn, "clicked", msg_ui_viewer_option_create_more_popup, data);
        } else {
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid launch mode");
        }
@@ -1100,6 +1364,38 @@ static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data)
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
 
+void msg_ui_viewer_title_button_clicked_cb(void * data, Evas_Object * obj, void * event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->title_menu_opened) {
+               msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+               /* play viewer again if previous status was PLAY */
+               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                               return;
+                       }
+               }
+       } else {
+               msg_ui_viewer_option_create_title_menu(viewer_play_data);
+
+               viewer_play_data->previous_status = viewer_play_data->status;
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
+
+               /* set player state to pause and update icon */
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
 Evas_Object *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -1235,16 +1531,21 @@ void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data)
                Evas_Object *button = elm_button_add(viewer_play_data->navi_frame);
                elm_object_style_set(button, "naviframe/title_icon");
 
-               Evas_Object *icon = elm_icon_add(viewer_play_data->navi_frame);
+               Evas_Object *icon = elm_icon_add(button);
+
+               elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_LIST_ICON);
+               elm_image_resizable_set(icon, 1, 1);
+               evas_object_image_smooth_scale_set(icon, 0);
 
                if (viewer_play_data->insert_count + viewer_play_data->attach_count != 0)
                        elm_object_disabled_set(button, EINA_FALSE);
                else
                        elm_object_disabled_set(button, EINA_TRUE);
+
                elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_LIST_ICON);
 
                elm_object_content_set(button, icon);
-               evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_save_button_cb, viewer_play_data);
+               evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_option_save_attachment_menu, viewer_play_data);
 
                evas_object_show(button);
                elm_object_part_content_set(viewer_play_data->navi_title_layout, "attach_btn", button);
@@ -1803,446 +2104,6 @@ void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_in
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
 
-MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       Evas_Object *renderBox = (Evas_Object *)box;
-       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
-       int attach_count = viewer_play_data->attach_count;
-
-       /* create box (for setting min size of genlist)*/
-       Evas_Object *box2 = elm_box_add(renderBox);
-       evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_show(box2);
-
-       /* create genlist */
-       Evas_Object *genlist = elm_genlist_add(box2);
-       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
-       elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
-       evas_object_show(genlist);
-
-       elm_box_pack_end(box2, genlist);
-       evas_object_size_hint_min_set(box2, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * (attach_count + 1) * elm_config_scale_get());
-
-       viewer_play_data->hp_sa_class.item_style  = "dialogue/1text.1icon";
-       viewer_play_data->hp_sa_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
-       viewer_play_data->hp_sa_class.func.content_get  = __msg_ui_viewer_help_page_gl_content_get;
-       viewer_play_data->hp_sa_class.func.state_get = NULL;
-       viewer_play_data->hp_sa_class.func.del = __msg_ui_viewer_help_page_gl_del;
-
-       viewer_play_data->hp_class.item_style  = "dialogue/1text.2icon";
-       viewer_play_data->hp_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get;
-       viewer_play_data->hp_class.func.content_get  = __msg_ui_viewer_help_page_gl_content_get;
-       viewer_play_data->hp_class.func.state_get = NULL;
-       viewer_play_data->hp_class.func.del = __msg_ui_viewer_help_page_gl_del;
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "attachment_count = %d", attach_count);
-
-       if (attach_count > 0) {
-               int attach_index = 0;
-
-               if (attach_count > 1) {
-                       //make 'Save all' item
-                       MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
-                       memset(pItem, 0x00, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
-                       strncpy(pItem->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"), strlen(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL")));
-                       pItem->isSaveAll = TRUE;
-                       pItem->viewer_play_data = viewer_play_data;
-
-                       for (attach_index = 0; attach_index < attach_count; attach_index++) {
-                               MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
-                               if (pAttach_info == NULL) {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "(%d)th pAttach_info is NULL", attach_index);
-                               } else {
-                                       pItem->pfile_size += pAttach_info->pfile_size;
-                               }
-                       }
-
-                       Elm_Object_Item *item = NULL;
-                       item = elm_genlist_item_append(genlist, &(viewer_play_data->hp_sa_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, NULL);
-                       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-               }
-
-               for (attach_index = 0; attach_index < attach_count; attach_index++) {
-                       MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index);
-                       if (pAttach_info == NULL) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info is NULL");
-                       } else {
-                               MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
-                               memcpy(pItem, pAttach_info, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S));
-
-                               elm_genlist_item_append(genlist, &(viewer_play_data->hp_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, pItem);
-                       }
-               }
-       }
-
-       viewer_play_data->help_page_gl = genlist;
-
-       elm_box_pack_end(renderBox, box2);
-       *attach_list = genlist;
-
-       return err;
-}
-
-static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part)
-{
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
-
-       if (strcmp(part, "elm.text") == 0) {
-               if (pAttach_info) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_name = %s", pAttach_info->pfile_name);
-
-                       Eina_Strbuf *text_buf = eina_strbuf_new();
-                       eina_strbuf_append(text_buf, pAttach_info->pfile_name);
-                       eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_SPACE);
-                       eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_LEFT_BRACE);
-
-                       //get and convert size
-                       char size[DEF_BUF_LEN] = {0,};
-                       long long sizeKB = 0;
-                       long long sizeB = 0;
-
-                       if (pAttach_info->pfile_size < VIEWER_DETAILS_TEXT_MSG_SIZE_KB) {
-                               snprintf(size, sizeof(size), "1 %s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
-                       } else {
-                               sizeKB = (long long)(pAttach_info->pfile_size)/VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
-                               sizeB = (long long)(pAttach_info->pfile_size)%VIEWER_DETAILS_TEXT_MSG_SIZE_KB;
-
-                               if (sizeB >= (VIEWER_DETAILS_TEXT_MSG_SIZE_KB/2))
-                                       sizeKB++;
-
-                               snprintf(size, sizeof(size), "%lld %s", sizeKB, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB"));
-                       }
-
-                       eina_strbuf_append(text_buf, size);
-                       eina_strbuf_append(text_buf, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
-
-                       char *return_text = strdup(eina_strbuf_string_get(text_buf));
-                       eina_strbuf_free(text_buf);
-
-                       return return_text;
-               }
-       }
-
-       return NULL;
-}
-
-static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part)
-{
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, NULL);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL);
-
-       if (strcmp(part, "elm.icon.2") == 0 || strcmp(part, "elm.icon") == 0) {
-               Evas_Object *box = elm_box_add(obj);
-               Evas_Object *button = elm_button_add(obj);
-               Evas_Object *icon = elm_icon_add(obj);
-
-               evas_object_propagate_events_set(button, EINA_FALSE);
-               elm_box_pack_start(box, button);
-               elm_image_file_set(icon, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_SAVE_ICON);
-               elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
-               elm_object_part_content_set(button, "icon", icon);
-               elm_object_style_set(button, "circle/empty");
-               evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_help_page_save_button_clicked_cb, data);
-               evas_object_show(button);
-               evas_object_show(box);
-               return box;
-       } else if (strcmp(part, "elm.icon.1") == 0) {
-               MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
-               Evas_Object *image = NULL;
-
-               image = elm_icon_add(obj);
-
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_path = %s", pAttach_info->pfile_path);
-
-               /*set attach file icon*/
-               if (pAttach_info->media_type == MSG_VIEWER_MEDIA_IMG ||
-                               pAttach_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) {
-                       elm_image_file_set(image, pAttach_info->pfile_path, NULL);
-               } else if (pAttach_info->media_type == MSG_VIEWER_MEDIA_DRM) {
-                       elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_DRM_SMALL_ICON);
-               } else {
-                       if (strlen(pAttach_info->pfile_path)) {
-                               const char *icon_path = NULL;
-
-                               icon_path = msg_common_get_file_icon(pAttach_info->pfile_path);
-                               if (icon_path) {
-                                       elm_image_file_set(image, MSG_IMAGES_EDJ, icon_path);
-                               } else {
-                                       D_EMSG("icon_path is NULL");
-                                       elm_image_file_set(image, MSG_IMAGES_EDJ, MSG_VIEWER_IMAGE_ATTACH_ICON);
-                               }
-                       } else {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL");
-                               return NULL;
-                       }
-               }
-
-               if (image)
-                       evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
-
-               return image;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part);
-       }
-
-       return NULL;
-}
-
-static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL);
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
-       Elm_Object_Item *pselected_item = (Elm_Object_Item *)event_info;
-       service_h svc_handle = NULL;
-       service_error_e err = MSG_SUCCESS;
-
-       elm_genlist_item_selected_set(pselected_item, FALSE);
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pAttach_info->pfile_name);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pAttach_info->pfile_path);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pAttach_info->media_type);
-
-       //Save all item
-       if (!strcmp(pAttach_info->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"))) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Save all item");
-               return;
-       }
-
-       if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
-               return;
-       }
-
-       service_set_operation(svc_handle, SERVICE_OPERATION_VIEW);
-       service_set_uri(svc_handle, pAttach_info->pfile_path);
-
-       err = service_send_launch_request(svc_handle, NULL, NULL);
-       if (err == SERVICE_ERROR_NONE) {
-               if (pAttach_info->viewer_play_data) {
-                       /* set player state to pause and update icon */
-                       if (!msg_ui_viewer_command_play_pause(pAttach_info->viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                               return;
-                       }
-               }
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed, err = %d", err);
-       }
-
-       service_destroy(svc_handle);
-
-       return;
-}
-
-static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-
-       MSG_VIEWER_ATTACH_MEDIA_INFO_S *del_data = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data;
-       if (del_data) {
-               free(del_data);
-               del_data = NULL;
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       //register timer for disappear play_controller automatically when time elapsed after shown
-       if (viewer_play_data->play_controller_timer) {
-               ecore_timer_del(viewer_play_data->play_controller_timer);
-               viewer_play_data->play_controller_timer = NULL;
-       }
-
-       viewer_play_data->play_controller_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_LIFETIME, msg_ui_viewer_play_controller_timer_cb, (void *)viewer_play_data);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
-
-       Evas_Object *progressbar = NULL;
-       MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
-       MSG_BOOL bExcludeHp = FALSE;
-       double total_time = 0.0;
-       double remain_time = 0.0;
-       double elapse_time = 0.0;
-       int remain_second = 0.0;
-       int elapse_second = 0.0;
-       char strTimeBuf[10] = {0,};
-
-       if (slideIdx < 0 ) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d, slideIdx must be same or over 0", slideIdx);
-               return;
-       }
-
-       if (!viewer_play_data->progressbar) {
-               progressbar = elm_progressbar_add(viewer_play_data->play_controller);
-               elm_object_theme_set(progressbar, viewer_play_data->progress_th);
-               elm_object_style_set(progressbar, "list_progress");
-               elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
-               evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
-               evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               viewer_play_data->progressbar = progressbar;
-               evas_object_show(progressbar);
-               elm_object_part_content_set(viewer_play_data->play_controller,"progressbar", progressbar);
-       }
-
-       msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
-
-       //In preview mode, slide time for help page should not be considered to total slide time
-       bExcludeHp = (launchmode == MSG_VIEWER_PREVIEW_MODE) ? TRUE : FALSE;
-
-       if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, 0, bExcludeHp, &total_time)) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", 0, bExcludeHp);
-               return;
-       }
-       if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, slideIdx, bExcludeHp, &remain_time)) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", slideIdx, bExcludeHp);
-               return;
-       }
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total slide time is %f", total_time);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Remain slide time from current slide(%d) is %f", slideIdx, remain_time);
-       elapse_time = total_time-remain_time;
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Elapsed slide time from first slide(0) to current slide(%d) is %f", slideIdx, elapse_time);
-
-       viewer_play_data->totalProgressTime = remain_second = (int)total_time/1000;
-       elapse_second = (int)elapse_time/1000;
-       viewer_play_data->elapsedProgressTime = elapse_second;
-
-       // START timer text set
-       snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", elapse_second/60, elapse_second%60);
-       edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
-
-       bzero(strTimeBuf, sizeof(strTimeBuf));
-
-       // END timer text set
-       snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", remain_second/60, remain_second%60);
-       edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/end/time", strTimeBuf);
-
-       elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
-
-       if (viewer_play_data->play_controller_progressbar_timer) {
-               ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
-               viewer_play_data->play_controller_progressbar_timer = NULL;
-       }
-
-       viewer_play_data->play_controller_progressbar_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME, msg_ui_viewer_play_controller_progressbar_timer_cb, viewer_play_data);
-
-       if (msg_smil_get_current_slide_status(viewer_play_data->SmilHandle) == PLAYER_STATUS_PAUSED) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Pause progress timer because current slide status is PAUSED");
-               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-Eina_Bool  msg_ui_viewer_play_controller_progressbar_timer_cb(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       char strTimeBuf[10] = {0,};
-
-       viewer_play_data->elapsedProgressTime += VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME;
-
-       // update START timer text
-       snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", viewer_play_data->elapsedProgressTime/60, viewer_play_data->elapsedProgressTime%60);
-       edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
-
-       if (viewer_play_data->elapsedProgressTime == viewer_play_data->totalProgressTime) {
-               if (viewer_play_data->play_controller && evas_object_visible_get(viewer_play_data->play_controller) == EINA_FALSE) {
-                       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
-                       evas_object_show(viewer_play_data->play_controller);
-                       viewer_play_data->playcontroller_opened = true;
-                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
-                       msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-               } else {
-                       // create play controller timer again
-                       msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-               }
-
-               elm_progressbar_value_set(viewer_play_data->progressbar, 1.0);
-               viewer_play_data->play_controller_progressbar_timer = NULL;
-
-               return ECORE_CALLBACK_CANCEL;
-       }
-
-       elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
-
-       return ECORE_CALLBACK_RENEW;
-}
-
-void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->play_controller_progressbar_timer) {
-               ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
-               viewer_play_data->play_controller_progressbar_timer = NULL;
-               viewer_play_data->elapsedProgressTime = 0;
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       viewer_play_data->play_controller_timer = NULL;
-
-       if (viewer_play_data->playcontroller_opened) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play controller is hided after 3 seconds elapsed");
-               elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
-               evas_object_hide(viewer_play_data->play_controller);
-               viewer_play_data->playcontroller_opened = false;
-               if (!viewer_play_data->title_menu_opened)
-                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
-       }
-
-       return ECORE_CALLBACK_CANCEL;
-}
-
-void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->play_controller_timer) {
-               ecore_timer_del(viewer_play_data->play_controller_timer);
-               viewer_play_data->play_controller_timer = NULL;
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
 void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -2349,572 +2210,3 @@ void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data)
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
-
-void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       Evas_Object *popup = NULL;
-       Evas_Object *layout = NULL;
-       Evas_Object *bg = NULL;
-       Evas_Object *scroller = NULL;
-       Evas_Object *box = NULL;
-       Evas_Object *entry = NULL;
-       Evas_Object *btn_close = NULL;
-
-       /* delete previous popup */
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       /* create popup */
-       popup = elm_popup_add(viewer_play_data->main_window);
-       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_object_style_set(popup, "menustyle");
-       elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_MESSAGE_DETAILS"));
-
-       /* create layout */
-       layout = elm_layout_add(viewer_play_data->main_window);
-       elm_layout_file_set(layout, MSG_VIEWER_THEME, "msg/detail");
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_show(layout);
-
-       /* create bg */
-       bg = evas_object_rectangle_add(evas_object_evas_get(layout));
-       elm_object_part_content_set(layout,  "msg/detail/bg", bg);
-       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, 0.0);
-       evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, 0.0);
-       evas_object_show(bg);
-
-       /* create scroller */
-       scroller = elm_scroller_add(layout);
-       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_scroller_bounce_set(scroller, FALSE, TRUE);
-       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
-       elm_object_part_content_set(layout, "msg/detail/content", scroller);
-       evas_object_show(scroller);
-
-       /* create box */
-       box = elm_box_add(layout);
-       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_box_homogeneous_set(box, EINA_FALSE);
-       evas_object_show(box);
-       evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT*4);
-       elm_object_content_set(scroller, box);
-
-       /*create entry */
-       entry = elm_entry_add(layout);
-       evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_entry_single_line_set(entry, EINA_FALSE);
-       elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
-       elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
-       elm_entry_magnifier_disabled_set(entry, EINA_TRUE);
-       elm_entry_editable_set(entry, EINA_FALSE);
-
-       char *str = msg_common_make_message_detail_text(viewer_play_data->msgHandle, viewer_play_data->msgID);
-
-       if (str) {
-               elm_entry_entry_set(entry, str);
-               free(str);
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_make_message_detail_text is failed");
-               return;
-       }
-
-       elm_box_pack_end(box, entry);
-       evas_object_show(entry);
-
-       /* add close button */
-       btn_close = elm_button_add(popup);
-       elm_object_style_set(btn_close, "popup_button/default");
-       elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
-       elm_object_part_content_set(popup, "button1", btn_close);
-       evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_message_details_popup_close_clicked_cb, viewer_play_data);
-
-       viewer_play_data->popup = popup;
-       viewer_play_data->popup_type = MSG_VIEWER_DETAILS_POPUP;
-       elm_object_content_set(popup, layout);
-
-       msg_ui_viewer_disconnect_handler(viewer_play_data);
-
-       evas_object_show(popup);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->popup) {
-               evas_object_del(viewer_play_data->popup);
-               viewer_play_data->popup = NULL;
-               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
-       }
-
-       /* connect handler again*/
-       msg_ui_viewer_connect_handler(viewer_play_data);
-
-       /* play viewer again if previous status was PLAY */
-       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
-                       return;
-               }
-       }
-}
-
-MSG_BOOL msg_ui_viewer_check_address_is_blocked(void *data, char *address, int *filter_id)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       msg_error_t err = MSG_SUCCESS;
-       msg_struct_list_s filter_list;
-       int i = 0;
-       int total_cnt = 0;
-       char filter_val[MAX_FILTER_VALUE_LEN] = {0,};
-
-       err = msg_get_filter_list(viewer_play_data->msgHandle, &filter_list);
-       if (err != MSG_SUCCESS) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_filter_list() fail - err [%d]", err);
-               return FALSE;
-       }
-
-       total_cnt = filter_list.nCount;
-
-       for (i = 0; i < total_cnt; i++) {
-               /* get number */
-               bzero(filter_val, sizeof(filter_val));
-               err = msg_get_str_value(filter_list.msg_struct_info[i], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val));
-
-               if (err != MSG_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_str_value() fail - err [%d]", err);
-                       msg_release_list_struct(&filter_list);
-                       return FALSE;
-               }
-
-               if (!strcmp(address, filter_val)) {
-                       int filter_type;
-                       msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_TYPE_INT, &filter_type);
-                       if (filter_type == MSG_FILTER_BY_ADDRESS_SAME) {
-                               /* get filter id if address is exist in block list */
-                               msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_ID_INT, filter_id);
-                               msg_release_list_struct(&filter_list);
-                               return TRUE;
-                       }
-               }
-       }
-
-       msg_release_list_struct(&filter_list);
-       return FALSE;
-}
-
-static void __msg_ui_viewer_grab_volume_key(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       int ret = 0;
-
-       ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP, TOP_POSITION_GRAB);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_grab_key() ret = %d", ret);
-
-       ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN, TOP_POSITION_GRAB);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_grab_key() ret = %d", ret);
-}
-
-static void __msg_ui_viewer_ungrab_volume_key(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       int ret = 0;
-
-       ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_ungrab_key() ret = %d", ret);
-
-       ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_ungrab_key() ret = %d", ret);
-}
-
-static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       int use_volume_key = false;
-
-       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
-
-       if (use_volume_key) {
-               msg_common_increase_font_size();
-
-               if (viewer_play_data->render_entry) {
-                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
-                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
-                       msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
-               }
-       } else {
-               __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volume_slider);
-       }
-
-       return EINA_TRUE;
-}
-
-static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       int use_volume_key = false;
-
-       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
-
-       if (use_volume_key) {
-               msg_common_decrease_font_size();
-
-               if (viewer_play_data->render_entry) {
-                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
-                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
-                       msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
-               }
-       } else {
-               __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volume_slider);
-       }
-
-       return EINA_TRUE;
-}
-
-static Eina_Bool __msg_ui_viewer_volume_key_release_cb(void *data, int type, void *event)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       Ecore_Event_Key *ev = event;
-       int use_volume_key = false;
-
-       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
-
-       if (!use_volume_key) {
-               if (viewer_play_data->volumebar_timer) {
-                       ecore_timer_del(viewer_play_data->volumebar_timer);
-                       viewer_play_data->volumebar_timer = NULL;
-               }
-               viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
-       }
-
-       if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is released");
-
-               if (viewer_play_data->vol_up_key_longpress) {
-                       ecore_timer_del(viewer_play_data->vol_up_key_longpress);
-                       viewer_play_data->vol_up_key_longpress = NULL;
-               }
-       } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {   /* KEY_VOLUMEDOWN */
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is released");
-
-               if (viewer_play_data->vol_down_key_longpress) {
-                       ecore_timer_del(viewer_play_data->vol_down_key_longpress);
-                       viewer_play_data->vol_down_key_longpress = NULL;
-               }
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
-       }
-
-       return EINA_TRUE;
-}
-
-static Eina_Bool __msg_ui_viewer_volume_key_press_cb(void *data, int type, void *event)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-       Ecore_Event_Key *ev = event;
-       int use_volume_key = false;
-
-       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
-
-       if (use_volume_key) {
-               if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is pressed");
-
-                       msg_common_increase_font_size();
-
-                       if (viewer_play_data->render_entry) {
-                               SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
-                               MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
-                               msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
-                       }
-
-                       viewer_play_data->vol_up_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_up_key_long_press_cb, (void *)viewer_play_data);
-               } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {   /* KEY_VOLUMEDOWN */
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is pressed");
-
-                       msg_common_decrease_font_size();
-
-                       if (viewer_play_data->render_entry) {
-                               SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
-                               MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
-                               msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
-                       }
-
-                       viewer_play_data->vol_down_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_down_key_long_press_cb, (void *)viewer_play_data);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
-               }
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Use volume key setting is not activated. Do volume key action");
-
-               if (!viewer_play_data->volumebar || !viewer_play_data->volume_slider)
-                       msg_ui_viewer_create_volume_bar(viewer_play_data);
-
-               if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
-                       if (viewer_play_data->volumebar_timer) {
-                               ecore_timer_del(viewer_play_data->volumebar_timer);
-                               viewer_play_data->volumebar_timer = NULL;
-                       }
-                       __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volume_slider);
-
-                       viewer_play_data->vol_up_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_up_key_long_press_cb, (void *)viewer_play_data);
-               } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {   /* KEY_VOLUMEDOWN */
-                       if (viewer_play_data->volumebar_timer) {
-                               ecore_timer_del(viewer_play_data->volumebar_timer);
-                               viewer_play_data->volumebar_timer = NULL;
-                       }
-                       __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volume_slider);
-
-                       viewer_play_data->vol_down_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_down_key_long_press_cb, (void *)viewer_play_data);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
-               }
-       }
-
-       return EINA_TRUE;
-}
-
-void msg_ui_viewer_create_volume_bar(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       Evas_Object *layout = NULL;
-       Evas_Object *slider = NULL;
-       Evas_Object *icon_start = NULL;
-       Evas_Object *icon_end = NULL;
-
-       layout = elm_layout_add(viewer_play_data->play_layout);
-       elm_layout_file_set(layout, MSG_VIEWER_THEME, "volume_controller");
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_show(layout);
-
-       slider = elm_slider_add(layout);
-       elm_slider_indicator_show_set(slider, EINA_TRUE);
-       evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
-       evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
-       elm_slider_indicator_format_set(slider, "%1.0f");
-       evas_object_show(slider);
-
-       icon_start = elm_icon_add(layout);
-       elm_image_file_set(icon_start, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MIN);
-       evas_object_size_hint_aspect_set(icon_start, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
-
-       icon_end = elm_icon_add(layout);
-       elm_image_file_set(icon_end, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MAX);
-       evas_object_size_hint_aspect_set(icon_end, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
-
-       elm_object_content_set(slider,icon_start);
-       elm_object_part_content_set(slider, "end", icon_end);
-
-       elm_slider_min_max_set(slider, 0, __msg_ui_viewer_get_max_volume());
-       elm_slider_value_set(slider, __msg_ui_viewer_get_current_volume());
-
-       elm_object_part_content_set(layout, "slider", slider);
-
-       viewer_play_data->volumebar = layout;
-       viewer_play_data->volume_slider = slider;
-       elm_object_part_content_set(viewer_play_data->play_layout, "volume_layout", viewer_play_data->volumebar);
-
-       evas_object_data_set(slider, "viewer_play_data", viewer_play_data);
-
-       __msg_ui_viewer_volumebar_event_callback_add(slider, __msg_ui_viewer_volumebar_event_cb);
-
-       evas_object_smart_callback_add(slider, "slider,drag,start", __msg_ui_viewer_volumebar_drag_start_cb, viewer_play_data);
-       evas_object_smart_callback_add(slider, "slider,drag,stop", __msg_ui_viewer_volumebar_drag_stop_cb, viewer_play_data);
-       evas_object_smart_callback_add(slider, "changed", __msg_ui_viewer_volumebar_changed_cb, viewer_play_data);
-
-       //create timer
-       if (viewer_play_data->volumebar_timer) {
-               ecore_timer_del(viewer_play_data->volumebar_timer);
-               viewer_play_data->volumebar_timer = NULL;
-       }
-       viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
-
-}
-
-void msg_ui_viewer_destroy_volume_bar(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->volumebar_timer) {
-               ecore_timer_del(viewer_play_data->volumebar_timer);
-               viewer_play_data->volumebar_timer = NULL;
-       }
-
-       elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
-       evas_object_del(viewer_play_data->volumebar);
-       viewer_play_data->volumebar = NULL;
-}
-
-static Eina_Bool __msg_ui_viewer_volumebar_timer_cb(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
-       evas_object_del(viewer_play_data->volumebar);
-       viewer_play_data->volumebar = NULL;
-
-       return ECORE_CALLBACK_CANCEL;
-}
-
-static void __msg_ui_viewer_volumebar_drag_start_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->volumebar_event_cb)
-               viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_START);
-
-       viewer_play_data->drag_volume_slider = true;
-}
-
-static void __msg_ui_viewer_volumebar_drag_stop_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
-
-       if (viewer_play_data->volumebar_event_cb)
-               viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_STOP);
-
-       viewer_play_data->drag_volume_slider = false;
-}
-
-static void __msg_ui_viewer_volumebar_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       double val = elm_slider_value_get(obj);
-
-       if ((int)val != __msg_ui_viewer_get_current_volume())
-               __msg_ui_viewer_set_volume((int)val);
-}
-
-static void __msg_ui_viewer_volumebar_event_cb(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, user_data == NULL, "data is NULL");
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)user_data;
-
-       if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_START) {
-               if (viewer_play_data->volumebar_timer) {
-                       ecore_timer_del(viewer_play_data->volumebar_timer);
-                       viewer_play_data->volumebar_timer = NULL;
-               }
-       } else if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_STOP) {
-               viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
-       }
-}
-
-static void __msg_ui_viewer_volumebar_event_callback_add(Evas_Object *obj, MSG_VIEWER_VOLUMEBAR_CB event_cb)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, obj == NULL);
-       MSG_PLAY_DATA_S *viewer_play_data = evas_object_data_get(obj, "viewer_play_data");
-
-       viewer_play_data->volumebar_event_cb = event_cb;
-}
-
-static void __msg_ui_viewer_volumebar_volume_up(Evas_Object *obj)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       double max = 0.0;
-       elm_slider_min_max_get(obj, NULL, &max);
-
-       double current = elm_slider_value_get(obj);
-
-       if (current < max)
-               elm_slider_value_set(obj, (current + 1.0));
-
-       evas_object_smart_callback_call(obj, "changed", NULL);
-}
-
-static void __msg_ui_viewer_volumebar_volume_down(Evas_Object *obj)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       double min = 0.0;
-       elm_slider_min_max_get(obj, &min, NULL);
-
-       double current = elm_slider_value_get(obj);
-
-       if (current > min)
-               elm_slider_value_set(obj, (current - 1.0));
-
-       evas_object_smart_callback_call(obj, "changed", NULL);
-}
-
-static int __msg_ui_viewer_get_max_volume(void)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       int max_vol = 0;
-
-       int ret = sound_manager_get_max_volume(SOUND_TYPE_MEDIA, &max_vol);
-       if (ret != SOUND_MANAGER_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
-               return -1;
-       }
-
-       return max_vol;
-}
-
-static int __msg_ui_viewer_get_current_volume(void)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       int current = 0;
-
-       int ret = sound_manager_get_volume(SOUND_TYPE_MEDIA, &current);
-       if (ret != SOUND_MANAGER_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
-               return -1;
-       }
-
-       return current;
-}
-
-static bool __msg_ui_viewer_set_volume(int volume)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       int ret = sound_manager_set_volume(SOUND_TYPE_MEDIA, volume);
-       if (ret != SOUND_MANAGER_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_set_volume().. [0x%x]", ret);
-               return false;
-       }
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"set volume value = %d", volume);
-
-       return true;
-}
diff --git a/viewer/src/msg-ui-viewer-play-view-options.c b/viewer/src/msg-ui-viewer-play-view-options.c
new file mode 100755 (executable)
index 0000000..e9370b5
--- /dev/null
@@ -0,0 +1,1573 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://floralicense.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*==================================================================================================
+ *                                                                     INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-ui-viewer-play-view.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-viewer-utility.h"
+#include "msg-ui-common-utility.h"
+
+#include <msg.h>
+#include <msg_storage.h>
+#include <msg_transport.h>
+
+#include <contacts.h>
+#include "appsvc.h"
+#include <status.h>
+
+/*==================================================================================================
+ *                                                                     FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/* Title menu option */
+static char *__msg_ui_viewer_option_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object * __msg_ui_viewer_option_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static void __msg_ui_viewer_option_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_option_title_menu_del(void *data, Evas_Object *obj);
+static void __msg_ui_viewer_option_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_option_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_option_title_menu_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+
+/* Toolbar menu option */
+static void __msg_ui_viewer_option_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_option_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info);
+
+static void __msg_ui_viewer_option_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_option_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_option_protection_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_option_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_option_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+
+/*==================================================================================================
+ *                                                             FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+void msg_ui_viewer_option_save_attachment_menu(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
+
+       /* check media count */
+       if (viewer_play_data->insert_count + viewer_play_data->attach_count == 0) {
+               msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_NO_ATTACHMENTS"));
+               return;
+       }
+
+       /* close title menu list if exist, else pause SMIL and save previous status */
+       if (viewer_play_data->title_menu_opened) {
+               msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+       } else {
+               viewer_play_data->previous_status = viewer_play_data->status;
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
+
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) { // pause
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+
+       /* create popup for save attachments and insert items */
+       msg_ui_viewer_create_save_attachments_popup(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_create_delete_popup(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       /* Add protection on/off menu */
+       bool is_protected = false;
+       msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
+       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"));
+
+       Evas_Object *btn_ok = elm_button_add(popup);
+       elm_object_style_set(btn_ok, "popup_button/default");
+       elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
+       elm_object_part_content_set(popup, "button1", btn_ok);
+       evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_option_delete_ok_clicked_cb, viewer_play_data);
+
+       Evas_Object *btn_cancel = elm_button_add(popup);
+       elm_object_style_set(btn_cancel, "popup_button/default");
+       elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+       elm_object_part_content_set(popup, "button2", btn_cancel);
+       evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_option_delete_cancel_clicked_cb, viewer_play_data);
+
+       evas_object_show(popup);
+       viewer_play_data->popup = popup;
+       viewer_play_data->popup_type = MSG_VIEWER_DELETE_POPUP;
+
+       /*disconnect mouse handler*/
+       msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_option_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+       char str_id[DEF_BUF_LEN] = {0,};
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete msg-id is %d", viewer_play_data->msgID);
+
+       if (viewer_play_data->msg_box_viewer) {
+               if (msg_delete_message(viewer_play_data->msgHandle, viewer_play_data->msgID) == MSG_SUCCESS) {
+                       status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED"));
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_message is failed");
+                       status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE"));
+                       return;
+               }
+
+       } else {
+               service_h svc_handle = NULL;
+
+               service_create(&svc_handle);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_DELETE_MSG);
+
+               snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
+               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
+
+               ug_send_result(viewer_main_data->viewer_ug, svc_handle);
+               service_destroy(svc_handle);
+       }
+
+       /*destroy viewer*/
+       ug_destroy_me(viewer_main_data->viewer_ug);
+
+       return;
+}
+
+static void __msg_ui_viewer_option_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       /* connect handler again*/
+       msg_ui_viewer_connect_handler(viewer_play_data);
+
+       /* play viewer again if previous status was PLAY */
+       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+}
+
+void msg_ui_viewer_option_forward_menu_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       char buf[DEF_BUF_LEN_S] = { 0, };
+       service_h svc_handle;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       /* create and call composer-ug */
+       if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
+       } else {
+               snprintf(buf, sizeof(buf), "%d", viewer_play_data->msgID);
+               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, buf);
+               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_FORWARD);
+               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FROM, MSG_BUNDLE_VALUE_INTERNAL);
+
+               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_UNGRAB_KEY, MSG_BUNDLE_VALUE_YES);
+
+               /* disconnect handler first - due to key ungrab senario with composer */
+               msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+               ui_gadget_h loaded_ug;
+               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);
+
+               if (loaded_ug) {
+                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+                       viewer_play_data->mode = MSG_VIEWER_LOAD_COMPOSER_UG;
+               } else {
+                       msg_ui_viewer_connect_handler(viewer_play_data);
+               }
+
+               service_destroy(svc_handle);
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_resend_menu_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+       char str_id[DEF_BUF_LEN] = {0,};
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed msg-id is %d", viewer_play_data->msgID);
+
+       service_h svc_handle = NULL;
+       service_create(&svc_handle);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_RESEND);
+
+       snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
+       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
+
+       ug_send_result(viewer_main_data->viewer_ug, svc_handle);
+       service_destroy(svc_handle);
+
+       msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+       /*destroy viewer*/
+       ug_destroy_me(viewer_main_data->viewer_ug);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_drm_view_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       msg_ui_viewer_show_view_by_mode(viewer_main_data, MSG_VIEWER_DRM_LIST_VIEW, MSG_VIEWER_VIEW_CMD_NONE);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+
+void msg_ui_viewer_option_create_more_popup(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
+
+       MSG_BOOL hasText = FALSE;
+       int page_count = 0;
+       int media_count = 0;
+       int folder_id = MSG_MAX_FOLDER_ID;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       /* set current status to previous status */
+       viewer_play_data->previous_status = viewer_play_data->status;
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status);
+
+       /* set player state to pause*/
+       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+               return;
+       }
+
+       Evas_Object *ctx_popup = NULL;
+       ctx_popup = elm_ctxpopup_add(viewer_play_data->navi_frame);
+       evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_viewer_option_more_ctxpopup_dismissed_cb, (void *)viewer_play_data);
+
+       /* add delete menu */
+       elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_OPT_DELETE"), NULL, msg_ui_viewer_option_create_delete_popup, (void *)viewer_play_data);
+
+       /* Get folder ID and Add Resend / Reply menu */
+       msg_get_int_value(viewer_play_data->msg_t, MSG_MESSAGE_FOLDER_ID_INT, &folder_id);
+
+       if (folder_id == MSG_OUTBOX_ID)
+               elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_SK_RESEND"), NULL, msg_ui_viewer_option_resend_menu_cb, (void *)viewer_play_data);
+
+       /* Add FORWARD menu */
+       elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_BODY_FORWARD"), NULL, msg_ui_viewer_option_forward_menu_cb, (void *)viewer_play_data);
+
+       /* Add protection on/off menu */
+       bool is_protected = false;
+       msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Lock status of current message %d", is_protected);
+
+       if (is_protected)
+               elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_OFF"), NULL, __msg_ui_viewer_option_protection_cb, (void *)viewer_play_data);
+       else
+               elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_PROTECTION_ON"), NULL, __msg_ui_viewer_option_protection_cb, (void *)viewer_play_data);
+
+       /* Add Copy Message text menu */
+       if (viewer_play_data->smil_eventStatus != NULL) {
+               /* get msg body */
+               msg_list_handle_t pagelist_info = NULL;
+               msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+               page_count = msg_list_length(pagelist_info);
+
+               msg_struct_t page_info = NULL;
+               page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, viewer_play_data->smil_eventStatus->pageIdx);
+               if (page_info) {
+                       int i = 0;
+                       msg_list_handle_t medialist_info = NULL;
+                       msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
+                       media_count = msg_list_length(medialist_info);
+
+                       for (i = 0; i < media_count; i++) {
+                               int mediaType;
+                               msg_struct_t media_info = NULL;
+                               media_info = (msg_struct_t)msg_list_nth_data(medialist_info, i);
+
+                               if (media_info == NULL) {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "getting media has failed");
+                                       continue;
+                               }
+
+                               msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+                               if (mediaType != MMS_SMIL_MEDIA_TEXT)
+                                       continue;
+
+                               hasText = TRUE;
+                       }
+               }
+       }
+
+       if (hasText)
+               elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB"), NULL, __msg_ui_viewer_option_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
+
+       /* Add view message details menu */
+       elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB"), NULL, __msg_ui_viewer_option_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
+
+       // move ctx popup
+       Evas_Coord x, y, w, h;
+       evas_object_geometry_get(viewer_play_data->more_btn, &x, &y, &w, &h);
+       evas_object_move(ctx_popup, x, y);
+       evas_object_show(ctx_popup);
+
+       viewer_play_data->popup = ctx_popup;
+       viewer_play_data->popup_type = MSG_VIEWER_MENU_CTX_POPUP;
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_email_menu(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
+
+       service_error_e err = SERVICE_ERROR_NONE;
+
+       msg_struct_list_s *addr_list = NULL;
+       msg_get_list_handle(viewer_play_data->msg_t, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
+       int addr_count = addr_list->nCount;     //get address count
+
+       if (addr_count == 1) {
+               service_h svc_handle = NULL;
+               msg_struct_t addr_info = NULL;
+               char szAddress[MAX_ADDRESS_VAL_LEN + 1] = {0,};
+
+               addr_info = addr_list->msg_struct_info[0];
+
+               msg_get_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, szAddress, MAX_ADDRESS_VAL_LEN);
+
+               char *address = (char*)calloc(1, strlen(szAddress)+1);
+               if (address == NULL) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
+                       return;
+               }
+
+               memcpy(address, szAddress, strlen(szAddress));
+
+               err = service_create(&svc_handle);
+               if (err != SERVICE_ERROR_NONE || svc_handle == NULL) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
+                       free(address);
+                       return;
+               }
+
+               service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
+               service_set_app_id(svc_handle, "email-composer-efl");
+               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
+               service_add_extra_data(svc_handle, SERVICE_DATA_TO, address);
+
+               Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
+               service_set_window(svc_handle, win_id);
+
+               err = service_send_launch_request(svc_handle, NULL, NULL);
+
+               if (err != SERVICE_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed, err = %d", err);
+               }
+
+               free(address);
+               service_destroy(svc_handle);
+       }
+
+       /* close title menu list */
+       msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_call_menu(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+
+       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
+
+       if (addr_count == 1) {
+               char telnum[255] = {0,};
+               int err = 0;
+               service_h svc_handle = NULL;
+
+               service_create(&svc_handle);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+               service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
+
+               char *address = NULL;
+               int contactid = 0;
+
+               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
+
+               if (address) {
+                       snprintf(telnum, sizeof(telnum), "tel:%s", address);     /* Number to make a call */
+                       service_set_uri(svc_handle, telnum);
+                       free(address);
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
+                       service_destroy(svc_handle);
+                       return;
+               }
+
+               if ((err = service_send_launch_request(svc_handle, NULL, (void *)viewer_play_data)) != SERVICE_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request failed, err = %d", err);
+               }
+
+               service_destroy(svc_handle);
+       }
+
+       /* close title menu list */
+       msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_add_to_contact_menu(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+
+       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
+
+       if (addr_count == 1) {
+               ui_gadget_h loaded_ug = NULL;
+               char buf[DEF_BUF_LEN_D] = { 0, };
+
+               service_h svc_handle = NULL;
+
+               service_create(&svc_handle);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+               char *address = NULL;
+               int contactid = 0;
+
+               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
+
+               if (address) {
+                       if (strstr(address, "@")) {
+                               snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
+                               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
+                               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, address);
+                       } else {
+                               snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
+                               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
+                               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, address);
+                       }
+                       free(address);
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
+                       service_destroy(svc_handle);
+                       return;
+               }
+
+               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);
+
+               if (loaded_ug) {
+                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+                       msg_ui_viewer_disconnect_handler(viewer_play_data);
+                       viewer_play_data->mode = MSG_VIEWER_LOAD_CONTACT_UG;
+               }
+
+               service_destroy(svc_handle);
+       }
+
+       /* close title menu list */
+       msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_view_contact_menu(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+
+       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
+
+       if (addr_count == 1) {
+               ui_gadget_h loaded_ug = NULL;
+               char contactId[DEF_BUF_LEN_S] = { 0, };
+               char buf[DEF_BUF_LEN_D] = { 0, };
+               char *address = NULL;
+               int contact_id = 0;
+
+               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
+
+               if (contact_id > 0 ) {
+                       service_h svc_handle = NULL;
+                       service_create(&svc_handle);
+                       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+                       snprintf(contactId, sizeof(contactId), "%d", contact_id);
+                       snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
+
+                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
+                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
+
+                       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);
+
+                       if (loaded_ug) {
+                               msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+                               msg_ui_viewer_disconnect_handler(viewer_play_data);
+                               viewer_play_data->mode = MSG_VIEWER_LOAD_CONTACT_UG;
+                       }
+
+                       service_destroy(svc_handle);
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid contact_id = %d", contact_id);
+               }
+
+               if (address)
+                       free(address);
+       }
+
+       /* close title menu list */
+       msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_block_address_menu(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+
+       Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       char *popup_text = NULL;
+       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
+       char *address = NULL;
+       int contactid = 0;
+
+       msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
+
+       if (address) {
+               popup_text = g_strdup_printf(szbuf, address);
+               free(address);
+               if (!popup_text) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
+                       return;
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
+               return;
+       }
+
+       elm_object_text_set(popup, popup_text);
+       free(popup_text);
+
+       Evas_Object *btn_ok = elm_button_add(popup);
+       elm_object_style_set(btn_ok, "popup_button/default");
+       elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
+       elm_object_part_content_set(popup, "button1", btn_ok);
+       evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_option_block_ok_clicked_cb, viewer_play_data);
+
+       Evas_Object *btn_cancel = elm_button_add(popup);
+       elm_object_style_set(btn_cancel, "popup_button/default");
+       elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+       elm_object_part_content_set(popup, "button2", btn_cancel);
+       /* use same cb function with delete cancel button */
+       evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_option_delete_cancel_clicked_cb, viewer_play_data);
+
+       evas_object_show(popup);
+       viewer_play_data->popup = popup;
+       viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
+
+       /*disconnect mouse handler*/
+       msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+       /* close title menu list */
+       msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_unblock_address_menu(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
+       int filter_id = 0;
+       char *address = NULL;
+       int contactid = 0;
+
+       msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
+
+       if (address) {
+               if (msg_ui_viewer_check_address_is_blocked(viewer_play_data->msgHandle, address, &filter_id)) {
+                       msg_error_t err =  MSG_SUCCESS;
+                       err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
+                       if (err != MSG_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
+                               free(address);
+                               return;
+                       }
+
+                       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
+                       char *message_text = g_strdup_printf(szbuf, address);
+                       if (!message_text) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
+                               free(address);
+                               return;
+                       }
+                       status_message_post(message_text);
+                       free(message_text);
+
+                       msg_ui_viewer_title_update(viewer_play_data, MSG_VIEWER_OPTION_BLOCK);
+               }
+               free(address);
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
+               return;
+       }
+
+       /* close title menu list */
+       msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+       /* play viewer again if previous status was PLAY */
+       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_option_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
+
+       if (addr_count == 1) {
+               msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
+               msg_error_t err =  MSG_SUCCESS;
+
+               err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
+               if (err != MSG_SUCCESS) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
+                       msg_release_struct(&filter);
+                       return;
+               }
+
+               char *address = NULL;
+               int contactid = 0;
+
+               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contactid);
+
+               if (address) {
+                       err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, address, strlen(address));
+                       if (err != MSG_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
+                               msg_release_struct(&filter);
+                               free(address);
+                               return;
+                       }
+
+                       err = msg_add_filter(viewer_play_data->msgHandle, filter);
+                       if (err != MSG_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
+                               msg_release_struct(&filter);
+                               free(address);
+                               return;
+                       }
+
+                       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
+                       char *message_text = g_strdup_printf(szbuf, address);
+                       if (!message_text) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
+                               msg_release_struct(&filter);
+                               free(address);
+                               return;
+                       }
+
+                       status_message_post(message_text);
+                       free(message_text);
+                       free(address);
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL");
+                       msg_release_struct(&filter);
+                       return;
+               }
+
+               msg_release_struct(&filter);
+       }
+
+       /* play viewer again if previous status was PLAY */
+       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+
+       return;
+}
+
+void msg_ui_viewer_option_create_title_menu(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
+       MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
+       int i = 0;
+
+       /* create box (for setting min size of genlist)*/
+       Evas_Object *box = elm_box_add(viewer_play_data->play_layout);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(box);
+
+       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.title.menu", box);
+
+       /* create genlist */
+       Evas_Object *genlist = elm_genlist_add(box);
+       elm_object_theme_set(genlist, viewer_play_data->title_th);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       evas_object_data_set(genlist, "viewer_play_data", viewer_play_data);
+       evas_object_show(genlist);
+
+       elm_box_pack_end(box, genlist);
+
+       viewer_play_data->title_box_layout = box;
+
+       int addr_count = msg_ui_viewer_get_thread_address_count(viewer_play_data);
+
+       if (addr_count == 1) {
+               /* set genlist styles */
+               viewer_play_data->itc_title_single.item_style = "1text.custom";
+               viewer_play_data->itc_title_single.func.text_get = __msg_ui_viewer_option_title_menu_gl_text_get;
+               viewer_play_data->itc_title_single.func.content_get = NULL;
+               viewer_play_data->itc_title_single.func.state_get = NULL;
+               viewer_play_data->itc_title_single.func.del = NULL;
+
+               /* genlist list load */
+               char *address = NULL;
+               int contact_id = 0;
+
+               msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, 0, &address, &contact_id);
+
+               if (!address) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is NULL");
+                       return;
+               }
+
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address = %s, contact_id = %d", address, contact_id);
+
+               if (msg_common_is_valid_phone_number(address)) {
+                       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_option_call_menu, viewer_play_data);
+               } else if (msg_common_is_valid_email_addr(address)) {
+                       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_option_email_menu, viewer_play_data);
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
+               }
+
+               if (contact_id > 0)
+                       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_option_view_contact_menu, viewer_play_data);
+               else
+                       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_option_add_to_contact_menu, viewer_play_data);
+
+               if (msg_common_is_valid_phone_number(address)) {
+                       int filter_id = 0;
+                       if (msg_ui_viewer_check_address_is_blocked(viewer_play_data->msgHandle, address, &filter_id))
+                               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_option_unblock_address_menu, viewer_play_data);
+                       else
+                               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_option_block_address_menu, viewer_play_data);
+               }
+
+               evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_1TEXT_HEIGHT * elm_genlist_items_count(genlist));
+               free(address);
+       } else {
+               /* set genlist styles */
+               viewer_play_data->itc_title.item_style = "2text.1icon.2.custom";
+               viewer_play_data->itc_title.func.text_get = __msg_ui_viewer_option_title_menu_gl_text_get;
+               viewer_play_data->itc_title.func.content_get = __msg_ui_viewer_option_title_menu_gl_content_get;
+               viewer_play_data->itc_title.func.state_get = NULL;
+               viewer_play_data->itc_title.func.del = __msg_ui_viewer_option_title_menu_del;
+
+               /* genlist list load */
+               for (i = 0; i < addr_count; i++) {
+                       addrInfo = (MSG_VIEWER_ADDR_INFO *)calloc(1, sizeof(MSG_VIEWER_ADDR_INFO));
+                       if (!addrInfo) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "addrInfo calloc failed");
+                               return;
+                       }
+
+                       char *address = NULL;
+                       int contact_id = 0;
+
+                       msg_ui_viewer_get_thread_address_nth_address(viewer_play_data, i, &address, &contact_id);
+
+                       if (!address) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address is null");
+                               free(addrInfo);
+                               return;
+                       }
+                       strncpy(addrInfo->address, address, MAX_ADDRESS_VAL_LEN);
+                       free(address);
+
+                       char *display_name = msg_viewer_util_get_display_name_by_index(contact_id);
+                       if (display_name) {
+                               strncpy(addrInfo->name, display_name, MAX_DISPLAY_NAME_LEN);
+                               free(display_name);
+                       }
+
+                       addrInfo->contact_id = contact_id;
+
+                       elm_genlist_item_append(genlist, &(viewer_play_data->itc_title), addrInfo, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_option_title_menu_gl_sel, viewer_play_data);
+               }
+
+               /* set genlist size */
+               if (addr_count >= VIEWER_TITLE_MENU_GENLIST_MAX_ITEM)
+                       evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_2TEXT_HEIGHT * VIEWER_TITLE_MENU_GENLIST_MAX_ITEM * elm_config_scale_get());
+               else
+                       evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_2TEXT_HEIGHT * addr_count * elm_config_scale_get());
+       }
+
+       /** emit signal for changing state of title menu list to open */
+       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,open", "");
+       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
+
+       viewer_play_data->title_menu_opened = true;
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_option_destroy_title_menu(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
+
+       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlemenu,close", "");
+
+       if (viewer_play_data->is_rotated || !viewer_play_data->playcontroller_opened) {
+               elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
+       }
+
+       Evas_Object *layout = elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.title.menu");
+       if (layout) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete box layout");
+               evas_object_del(layout);
+       }
+
+       viewer_play_data->title_menu_opened = false;
+       viewer_play_data->title_box_layout = NULL;
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static char *__msg_ui_viewer_option_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !addrInfo, NULL);
+
+       if (g_strcmp0(part, "elm.text") == 0) {
+               return strdup((char *)data);
+       } else if (g_strcmp0(part, "elm.text.1") == 0) {
+               if (addrInfo->contact_id > 0 && addrInfo->name[0] != '\0')
+                       return strdup(addrInfo->name);
+               else if (addrInfo->address[0] != '\0')
+                       return strdup (addrInfo->address);
+               else
+                       return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+       } else if (g_strcmp0(part, "elm.text.2") == 0) {
+               if (addrInfo->address[0] != '\0')
+                       return strdup(addrInfo->address);
+               else
+                       return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+       return NULL;
+}
+
+
+static Evas_Object * __msg_ui_viewer_option_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       // Currently, this function do nothing, caller_id concept is not determined
+       return NULL;
+}
+
+static void __msg_ui_viewer_option_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
+
+       Elm_Object_Item *item = NULL;
+       MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
+
+       item = (Elm_Object_Item *)event_info;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !item, "Item is  NULL or Item is not Message item\n");
+
+       addrInfo = (MSG_VIEWER_ADDR_INFO *)elm_object_item_data_get(item);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, addrInfo == NULL, "item_data is NULL");
+
+       elm_genlist_item_selected_set(item, 0);
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       Evas_Object *popup = NULL;
+       Evas_Object *list = NULL;
+       Evas_Object *btn_close = NULL;
+
+       popup = elm_popup_add(viewer_play_data->main_window);
+       elm_object_style_set(popup, "min_menustyle");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn_close = elm_button_add(popup);
+       elm_object_style_set(btn_close, "popup_button/default");
+       elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
+       elm_object_part_content_set(popup, "button1", btn_close);
+       evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_option_title_menu_popup_close_clicked_cb, viewer_play_data);
+
+       list = elm_list_add(popup);
+       elm_list_mode_set(list, ELM_LIST_EXPAND);
+
+       evas_object_data_set(list, "viewer_play_data", viewer_play_data);
+
+       if (msg_common_is_valid_phone_number(addrInfo->address)) {
+               elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, NULL, __msg_ui_viewer_option_title_menu_popup_selected_cb, (void *)addrInfo);
+       } else if (msg_common_is_valid_email_addr(addrInfo->address)) {
+               elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL"), NULL, NULL, __msg_ui_viewer_option_title_menu_popup_selected_cb, (void *)addrInfo);
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"address is invalid type");
+       }
+
+       if (addrInfo->contact_id> 0) {
+               elm_object_part_text_set(popup, "title,text", addrInfo->name);
+               elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT"), NULL, NULL, __msg_ui_viewer_option_title_menu_popup_selected_cb, (void *)addrInfo);
+       } else {
+               elm_object_part_text_set(popup, "title,text", addrInfo->address);
+               elm_list_item_append(list, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, NULL, __msg_ui_viewer_option_title_menu_popup_selected_cb, (void *)addrInfo);
+       }
+
+       if (msg_common_is_valid_phone_number(addrInfo->address)) {
+               int filter_id = 0;
+               if (msg_ui_viewer_check_address_is_blocked(viewer_play_data->msgHandle, addrInfo->address, &filter_id))
+                       elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK"), NULL, NULL, __msg_ui_viewer_option_title_menu_popup_selected_cb, (void *)addrInfo);
+               else
+                       elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK"), NULL, NULL, __msg_ui_viewer_option_title_menu_popup_selected_cb, (void *)addrInfo);
+       }
+
+       elm_list_go(list);
+       elm_object_content_set(popup, list);
+       evas_object_show(popup);
+
+       viewer_play_data->popup = popup;
+       viewer_play_data->popup_type = MSG_VIEWER_TITLE_MENU_POPUP;
+
+       /*disconnect mouse handler*/
+       msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void  __msg_ui_viewer_option_title_menu_del(void *data, Evas_Object *obj)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL!");
+
+       if (addrInfo)
+               free(addrInfo);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_option_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       /* connect handler again*/
+       msg_ui_viewer_connect_handler(viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_option_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data");
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL");
+       MSG_VIEWER_ADDR_INFO *addrInfo = NULL;
+       addrInfo = (MSG_VIEWER_ADDR_INFO *)data;
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL");
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info);
+
+       if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) {
+               char telnum[255] = {0,};
+               int err = 0;
+               service_h svc_handle = NULL;
+
+               service_create(&svc_handle);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+               service_set_operation(svc_handle, SERVICE_OPERATION_CALL);
+               snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address);   /* Number to make a call */
+               service_set_uri(svc_handle, telnum);
+               if ((err = service_send_launch_request(svc_handle, NULL, (void *)viewer_play_data)) != SERVICE_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service failed, err = %d", err);
+               }
+
+               service_destroy(svc_handle);
+       } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */
+               ui_gadget_h loaded_ug = NULL;
+               char buf[DEF_BUF_LEN_D] = { 0, };
+               service_h svc_handle = NULL;
+
+               service_create(&svc_handle);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+               if (strstr(addrInfo->address, "@")) {
+                       snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_EMAIL);
+                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
+                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_EMAIL, addrInfo->address);
+               } else {
+                       snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_UPDATE_WITH_NUM);
+                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
+                       service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_NUM, addrInfo->address);
+               }
+
+               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);
+
+               if (loaded_ug) {
+                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+                       msg_ui_viewer_disconnect_handler(viewer_play_data);
+                       viewer_play_data->mode = MSG_VIEWER_LOAD_CONTACT_UG;
+               }
+
+               service_destroy(svc_handle);
+       } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) {
+               ui_gadget_h loaded_ug = NULL;
+               char contactId[DEF_BUF_LEN_S] = { 0, };
+               char buf[DEF_BUF_LEN_D] = { 0, };
+               service_h svc_handle = NULL;
+
+               service_create(&svc_handle);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+               snprintf(contactId, sizeof(contactId), "%d", addrInfo->contact_id);
+               snprintf(buf, sizeof(buf), "%d", MSG_CT_UG_REQUEST_DETAIL);
+
+               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_TYPE, buf);
+               service_add_extra_data(svc_handle, MSG_CT_UG_BUNDLE_ID, contactId);
+
+               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);
+
+               if (loaded_ug) {
+                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+                       msg_ui_viewer_disconnect_handler(viewer_play_data);
+                       viewer_play_data->mode = MSG_VIEWER_LOAD_CONTACT_UG;
+               }
+
+               service_destroy(svc_handle);
+       } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) {
+               service_h svc_handle = NULL;
+               service_error_e err = SERVICE_ERROR_NONE;
+
+               service_create(&svc_handle);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+
+               service_set_operation(svc_handle, SERVICE_OPERATION_SEND);
+               service_set_app_id(svc_handle, "email-composer-efl");
+               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE);
+               service_add_extra_data(svc_handle, SERVICE_DATA_TO, addrInfo->address);
+
+               Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
+               service_set_window(svc_handle, win_id);
+
+               if ((err = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed, err = %d", err);
+               }
+
+               service_destroy(svc_handle);
+       } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_UNBLOCK")) == 0) {
+               int filter_id = 0;
+               if (msg_ui_viewer_check_address_is_blocked(viewer_play_data->msgHandle, addrInfo->address, &filter_id)) {
+                       msg_error_t err =  MSG_SUCCESS;
+                       err = msg_delete_filter(viewer_play_data->msgHandle, (msg_filter_id_t)filter_id);
+                       if (err != MSG_SUCCESS) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_filter is failed err : %d", err);
+                               return;
+                       }
+
+                       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_UNBLOCKED");
+
+                       char *message_text = g_strdup_printf(szbuf, addrInfo->address);
+                       if (!message_text) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
+                               return;
+                       }
+
+                       status_message_post(message_text);
+                       free(message_text);
+               }
+       } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK")) == 0) {
+               Evas_Object *popup = elm_popup_add(viewer_play_data->main_window);
+               evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+               char *popup_text = NULL;
+               char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
+
+               popup_text = g_strdup_printf(szbuf, addrInfo->address);
+               if (!popup_text) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "popup_text is null");
+                       return;
+               }
+               elm_object_text_set(popup, popup_text);
+               free(popup_text);
+
+               Evas_Object *btn_ok = elm_button_add(popup);
+               elm_object_style_set(btn_ok, "popup_button/default");
+               elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK"));
+               elm_object_part_content_set(popup, "button1", btn_ok);
+               evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_option_title_menu_block_ok_clicked_cb, viewer_play_data);
+               evas_object_data_set(btn_ok, "addrInfo", addrInfo);
+
+               Evas_Object *btn_cancel = elm_button_add(popup);
+               elm_object_style_set(btn_cancel, "popup_button/default");
+               elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
+               elm_object_part_content_set(popup, "button2", btn_cancel);
+               evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_option_delete_cancel_clicked_cb, viewer_play_data);
+
+               evas_object_show(popup);
+               viewer_play_data->popup = popup;
+               viewer_play_data->popup_type = MSG_VIEWER_BLOCK_POPOP;
+
+               /* disconnect mouse handler */
+               msg_ui_viewer_disconnect_handler(viewer_play_data);
+       }
+
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_option_title_menu_block_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)evas_object_data_get(obj, "addrInfo");
+       msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
+       msg_error_t err =  MSG_SUCCESS;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value failed err : %d", err);
+               msg_release_struct(&filter);
+               return;
+       }
+
+       err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, addrInfo->address, strlen(addrInfo->address));
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value failed err : %d", err);
+               msg_release_struct(&filter);
+               return;
+       }
+
+       err = msg_add_filter(viewer_play_data->msgHandle, filter);
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_add_filter failed err : %d", err);
+               msg_release_struct(&filter);
+               return;
+       }
+
+       char *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_PS_BLOCKED");
+       char *message_text = g_strdup_printf(szbuf, addrInfo->address);
+       if (!message_text) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
+               msg_release_struct(&filter);
+               return;
+       }
+
+       status_message_post(message_text);
+       free(message_text);
+
+       msg_release_struct(&filter);
+
+       /* close title menu popup */
+       msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+
+       return;
+}
+
+static void __msg_ui_viewer_option_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       const char *label = elm_object_item_text_get((Elm_Object_Item *)event_info);
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB")) == 0) {
+               msg_ui_viewer_copy_message_text_to_clipboard(viewer_play_data);
+
+               /* play viewer again if previous status was PLAY */
+               if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+                       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                               return;
+                       }
+               }
+       } else if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB")) == 0) {
+               msg_ui_viewer_option_create_msg_detail_popup(viewer_play_data);
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid list type");
+               return;
+       }
+
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_option_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       /* play viewer again if previous status was PLAY */
+       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_option_protection_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data);
+
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->msg_t == NULL);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->mms_t == NULL);
+
+       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_main_data == NULL);
+
+       msg_error_t err = MSG_SUCCESS;
+       bool is_protected = false;
+
+       msg_get_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, &is_protected);
+
+       /* get lock status and change status */
+       err = msg_update_protected_status(viewer_play_data->msgHandle, viewer_play_data->msgID, ((is_protected) ? false : true));
+
+       /* update message info */
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_update_protected_status is failed");
+               return;
+       }
+
+       msg_set_bool_value(viewer_play_data->msg_t, MSG_MESSAGE_PROTECTED_BOOL, !is_protected);
+
+       /* delete ctx popup */
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       /* signal emit for showing/hiding lock icon */
+       if (is_protected)
+               edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/hide", "*");
+       else
+               edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), "lock/icon/show", "*");
+
+       /* play viewer again if previous status was PLAY */
+       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+
+       /* send refresh conversation result to bubble-composer ug */
+       char str_id[DEF_BUF_LEN] = {0,};
+       service_h svc_handle = NULL;
+
+       service_create(&svc_handle);
+       if (svc_handle < 0 || svc_handle == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create is failed");
+               return;
+       }
+
+       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_REFRESH_CONV);
+
+       snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
+       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, str_id);
+
+       ug_send_result(viewer_main_data->viewer_ug, svc_handle);
+
+       service_destroy(svc_handle);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+}
+
+void msg_ui_viewer_option_create_msg_detail_popup(MSG_PLAY_DATA_S *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       Evas_Object *popup = NULL;
+       Evas_Object *layout = NULL;
+       Evas_Object *box = NULL;
+       Evas_Object *entry = NULL;
+       Evas_Object *btn_close = NULL;
+
+       /* delete previous popup */
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       /* create popup */
+       popup = elm_popup_add(viewer_play_data->main_window);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_style_set(popup, "menustyle");
+       elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_MESSAGE_DETAILS"));
+
+       /* create layout */
+       layout = elm_layout_add(viewer_play_data->main_window);
+       elm_layout_file_set(layout, MSG_VIEWER_THEME, "msg/detail");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       /* create box */
+       box = elm_box_add(layout);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_box_homogeneous_set(box, EINA_FALSE);
+       evas_object_show(box);
+       evas_object_size_hint_min_set(box, -1, 400);
+       elm_object_part_content_set(layout, "msg/detail/content", box);
+
+       /*create entry */
+       entry = elm_entry_add(layout);
+       evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_entry_single_line_set(entry, EINA_FALSE);
+       elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
+       elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
+       elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_NO_IMAGE);
+       elm_entry_magnifier_disabled_set(entry, EINA_TRUE);
+       elm_entry_editable_set(entry, EINA_FALSE);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+
+       char *str = msg_common_make_message_detail_text(viewer_play_data->msgHandle, viewer_play_data->msgID);
+
+       if (str) {
+               elm_entry_entry_set(entry, str);
+               free(str);
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_make_message_detail_text is failed");
+               return;
+       }
+
+       elm_box_pack_end(box, entry);
+       evas_object_show(entry);
+
+       /* add close button */
+       btn_close = elm_button_add(popup);
+       elm_object_style_set(btn_close, "popup_button/default");
+       elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE"));
+       elm_object_part_content_set(popup, "button1", btn_close);
+       evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_option_details_popup_close_clicked_cb, viewer_play_data);
+
+       viewer_play_data->popup = popup;
+       viewer_play_data->popup_type = MSG_VIEWER_DETAILS_POPUP;
+       elm_object_content_set(popup, layout);
+
+       msg_ui_viewer_disconnect_handler(viewer_play_data);
+
+       evas_object_show(popup);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+static void __msg_ui_viewer_option_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+               viewer_play_data->popup_type = MSG_VIEWER_POPUP_NONE;
+       }
+
+       /* connect handler again*/
+       msg_ui_viewer_connect_handler(viewer_play_data);
+
+       /* play viewer again if previous status was PLAY */
+       if (viewer_play_data->auto_resume_state && viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+               if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PLAY)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+                       return;
+               }
+       }
+}
+
diff --git a/viewer/src/msg-ui-viewer-play-view-play-controller.c b/viewer/src/msg-ui-viewer-play-view-play-controller.c
new file mode 100755 (executable)
index 0000000..bfe25a1
--- /dev/null
@@ -0,0 +1,439 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://floralicense.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*==================================================================================================
+ *                                                                     INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-ui-viewer-play-view.h"
+#include "msg-ui-viewer-main.h"
+#include "msg-ui-image-resource.h"
+#include "msg-ui-viewer-utility.h"
+
+/*==================================================================================================
+ *                                                                     FUNCTION DECLARATIONS
+ *==================================================================================================*/
+
+/*==================================================================================================
+ *                                                             FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+void msg_ui_viewer_play_controller_create(MSG_PLAY_DATA_S *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame);
+       elm_layout_file_set(layout, MSG_VIEWER_THEME, "play_controller");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", layout);
+       viewer_play_data->play_controller = layout;
+       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
+
+       //add signal callbacks
+       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "volume_clicked", "", msg_ui_viewer_play_controller_volume_clicked_cb, (void *)viewer_play_data);
+       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "prev_clicked", "", msg_ui_viewer_play_controller_prev_clicked_cb, (void *)viewer_play_data);
+       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "play_clicked", "", msg_ui_viewer_play_controller_play_pause_clicked_cb, (void *)viewer_play_data);
+       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "pause_clicked", "", msg_ui_viewer_play_controller_play_pause_clicked_cb, (void *)viewer_play_data);
+       edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "next_clicked", "", msg_ui_viewer_play_controller_next_clicked_cb, (void *)viewer_play_data);
+
+       viewer_play_data->playcontroller_opened = true;
+
+       //register timer
+       msg_ui_viewer_play_controller_create_timer(viewer_play_data);
+
+       //create progressbar
+       msg_ui_viewer_play_controller_create_progressbar(viewer_play_data, 0);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_play_controller_update(void *data, MSG_VIEWER_PLAY_STATUS_E status)
+{
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_BOOL bfisrt_page = FALSE;
+       MSG_BOOL blast_page = FALSE;
+       SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = viewer_play_data->smil_eventStatus;
+       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+
+       if (status == MSG_VIEWER_STOP) {
+               if (viewer_play_data->play_controller) {
+                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
+                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+               }
+       } else {
+               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide == NULL);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide->commonData == NULL);
+               if (slide->commonData->pageCnt > 0) {
+                       if (slide->pageIdx == 0)
+                               bfisrt_page = TRUE;
+
+                       if (slide->pageIdx + 1 == slide->commonData->pageCnt)
+                               blast_page = TRUE;
+
+                       if (bfisrt_page) {      /*first page*/
+                               if (viewer_play_data->play_controller) {
+                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+                               }
+                       } else {
+                               if (viewer_play_data->play_controller) {
+                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_enable", "*");
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable prev_button");
+                               }
+                       }
+
+                       if (blast_page) {        /*lastpage*/
+                               if (viewer_play_data->play_controller) {
+                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
+                               }
+                       } else {
+                               if (viewer_play_data->play_controller) {
+                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_enable", "*");
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable next_button");
+                               }
+                       }
+
+                       /*smil player is finished*/
+                       if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE &&
+                                       eventStatus->isLastSlide == TRUE) {
+                               if (viewer_play_data->play_controller) {
+                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
+                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+                               }
+                       }
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart.mixed message");
+                       if (viewer_play_data->play_controller) {
+                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "next_disable", "*");
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
+                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "prev_disable", "*");
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+                       }
+               }
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_play_controller_create_timer(MSG_PLAY_DATA_S *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       //register timer for disappear play_controller automatically when time elapsed after shown
+       if (viewer_play_data->play_controller_timer) {
+               ecore_timer_del(viewer_play_data->play_controller_timer);
+               viewer_play_data->play_controller_timer = NULL;
+       }
+
+       viewer_play_data->play_controller_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_LIFETIME, msg_ui_viewer_play_controller_timer_cb, (void *)viewer_play_data);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_play_controller_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
+
+       Evas_Object *progressbar = NULL;
+       MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
+       MSG_BOOL bExcludeHp = FALSE;
+       double total_time = 0.0;
+       double remain_time = 0.0;
+       double elapse_time = 0.0;
+       int remain_second = 0.0;
+       int elapse_second = 0.0;
+       char strTimeBuf[10] = {0,};
+
+       if (slideIdx < 0 ) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d, slideIdx must be same or over 0", slideIdx);
+               return;
+       }
+
+       if (!viewer_play_data->progressbar) {
+               progressbar = elm_progressbar_add(viewer_play_data->play_controller);
+               elm_object_theme_set(progressbar, viewer_play_data->progress_th);
+               elm_object_style_set(progressbar, "list_progress");
+               elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+               evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               viewer_play_data->progressbar = progressbar;
+               evas_object_show(progressbar);
+               elm_object_part_content_set(viewer_play_data->play_controller,"progressbar", progressbar);
+       }
+
+       msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
+
+       //In preview mode, slide time for help page should not be considered to total slide time
+       bExcludeHp = (launchmode == MSG_VIEWER_PREVIEW_MODE) ? TRUE : FALSE;
+
+       if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, 0, bExcludeHp, &total_time)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", 0, bExcludeHp);
+               return;
+       }
+       if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, slideIdx, bExcludeHp, &remain_time)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", slideIdx, bExcludeHp);
+               return;
+       }
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total slide time is %f", total_time);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Remain slide time from current slide(%d) is %f", slideIdx, remain_time);
+       elapse_time = total_time-remain_time;
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Elapsed slide time from first slide(0) to current slide(%d) is %f", slideIdx, elapse_time);
+
+       viewer_play_data->totalProgressTime = remain_second = (int)total_time/1000;
+       elapse_second = (int)elapse_time/1000;
+       viewer_play_data->elapsedProgressTime = elapse_second;
+
+       // START timer text set
+       snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", elapse_second/60, elapse_second%60);
+       edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
+
+       bzero(strTimeBuf, sizeof(strTimeBuf));
+
+       // END timer text set
+       snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", remain_second/60, remain_second%60);
+       edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/end/time", strTimeBuf);
+
+       elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
+
+       if (viewer_play_data->play_controller_progressbar_timer) {
+               ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
+               viewer_play_data->play_controller_progressbar_timer = NULL;
+       }
+
+       viewer_play_data->play_controller_progressbar_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME, msg_ui_viewer_play_controller_progressbar_timer_cb, viewer_play_data);
+
+       if (msg_smil_get_current_slide_status(viewer_play_data->SmilHandle) == PLAYER_STATUS_PAUSED) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Pause progress timer because current slide status is PAUSED");
+               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Eina_Bool  msg_ui_viewer_play_controller_progressbar_timer_cb(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       char strTimeBuf[10] = {0,};
+
+       viewer_play_data->elapsedProgressTime += VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME;
+
+       // update START timer text
+       snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", viewer_play_data->elapsedProgressTime/60, viewer_play_data->elapsedProgressTime%60);
+       edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf);
+
+       if (viewer_play_data->elapsedProgressTime == viewer_play_data->totalProgressTime) {
+               if (viewer_play_data->play_controller && evas_object_visible_get(viewer_play_data->play_controller) == EINA_FALSE) {
+                       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller);
+                       evas_object_show(viewer_play_data->play_controller);
+                       viewer_play_data->playcontroller_opened = true;
+                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,open", "");
+                       msg_ui_viewer_play_controller_create_timer(viewer_play_data);
+               } else {
+                       // create play controller timer again
+                       msg_ui_viewer_play_controller_create_timer(viewer_play_data);
+               }
+
+               elm_progressbar_value_set(viewer_play_data->progressbar, 1.0);
+               viewer_play_data->play_controller_progressbar_timer = NULL;
+
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime));
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->play_controller_progressbar_timer) {
+               ecore_timer_del(viewer_play_data->play_controller_progressbar_timer);
+               viewer_play_data->play_controller_progressbar_timer = NULL;
+               viewer_play_data->elapsedProgressTime = 0;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       viewer_play_data->play_controller_timer = NULL;
+
+       if (viewer_play_data->playcontroller_opened) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play controller is hided after 3 seconds elapsed");
+               elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller");
+               evas_object_hide(viewer_play_data->play_controller);
+               viewer_play_data->playcontroller_opened = false;
+               if (!viewer_play_data->title_menu_opened)
+                       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,blockrect,close", "");
+       }
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void msg_ui_viewer_play_controller_destroy_timer(MSG_PLAY_DATA_S *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->play_controller_timer) {
+               ecore_timer_del(viewer_play_data->play_controller_timer);
+               viewer_play_data->play_controller_timer = NULL;
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_play_controller_volume_clicked_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (!viewer_play_data->volumebar)
+               msg_ui_viewer_create_volume_bar((void *)viewer_play_data);
+       else
+               msg_ui_viewer_destroy_volume_bar((void *)viewer_play_data);
+
+       //create play controller timer repeatedly
+       msg_ui_viewer_play_controller_create_timer(viewer_play_data);
+}
+
+void msg_ui_viewer_play_controller_prev_clicked_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
+
+       play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
+
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
+
+       if (!strcmp(emission, "prev_clicked")) {
+               /* prev*/
+               int pageIdx = viewer_play_data->smil_eventStatus->pageIdx;
+               if (pageIdx >= 0) {
+                       if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
+                               MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE);
+                               if (err != MSG_SMIL_SUCCESS) {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+                               } else {
+                                       //set progressbar and progress text sync
+                                       if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
+                                               msg_ui_viewer_play_controller_create_progressbar(viewer_play_data, pageIdx-1);
+                               }
+                       }
+               }
+
+               //create play controller timer repeatedly
+               msg_ui_viewer_play_controller_create_timer(viewer_play_data);
+
+               /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
+               if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+                       if (viewer_play_data->title_menu_opened)
+                               msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+               }
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_play_controller_play_pause_clicked_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       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))
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_command_play_pause is failed");
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+}
+
+void msg_ui_viewer_play_controller_next_clicked_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (!strcmp(emission, "next_clicked"))
+       {
+               SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE;
+               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL);
+
+               play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
+
+               MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL);
+               /*next*/
+               int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1;
+               int total_page = viewer_play_data->smil_eventStatus->pageCnt;
+               if (total_page >= pageIdx) {
+                       if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) {
+                               MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE);
+                               if (err != MSG_SMIL_SUCCESS) {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+                               } else {
+                                       //set progressbar and progress text sync
+                                       if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer)
+                                               msg_ui_viewer_play_controller_create_progressbar(viewer_play_data, pageIdx);
+                               }
+                       }
+               }
+
+               //create play controller timer repeatedly
+               msg_ui_viewer_play_controller_create_timer(viewer_play_data);
+
+               /* close title menu list if current viewer status has changed to MSG_VIEWER_PLAY */
+               if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+                       if (viewer_play_data->title_menu_opened)
+                               msg_ui_viewer_option_destroy_title_menu(viewer_play_data);
+               }
+       }
+}
+
diff --git a/viewer/src/msg-ui-viewer-play-view-volume-bar.c b/viewer/src/msg-ui-viewer-play-view-volume-bar.c
new file mode 100755 (executable)
index 0000000..8298f56
--- /dev/null
@@ -0,0 +1,459 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://floralicense.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*==================================================================================================
+ *                                                                     INCLUDE HEADERS
+ *==================================================================================================*/
+#include "msg-ui-viewer-play-view.h"
+#include "msg-ui-image-resource.h"
+#include "msg-ui-viewer-utility.h"
+#include "msg-ui-common-utility.h"
+
+#include <utilX.h>
+#include <sound_manager.h>
+
+/*==================================================================================================
+ *                                                                     FUNCTION DECLARATIONS
+ *==================================================================================================*/
+/* volume key action related with volume bar */
+static void __msg_ui_viewer_volumebar_volume_up(Evas_Object *obj);
+static void __msg_ui_viewer_volumebar_volume_down(Evas_Object *obj);
+
+/* volume action with volume key and slide callback */
+static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data);
+static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data);
+static Eina_Bool __msg_ui_viewer_volumebar_timer_cb(void *data);
+
+/* volume action related with volumebar slider */
+static void __msg_ui_viewer_volumebar_drag_start_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_volumebar_drag_stop_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_volumebar_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_volumebar_event_cb(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event);
+static void __msg_ui_viewer_volumebar_event_callback_add(Evas_Object *obj, MSG_VIEWER_VOLUMEBAR_CB event_cb);
+
+/* volume action related with SOUNDMANAGER */
+static int __msg_ui_viewer_get_max_volume(void);
+static int __msg_ui_viewer_get_current_volume(void);
+static bool __msg_ui_viewer_set_volume(int volume);
+
+/*==================================================================================================
+ *                                                             FUNCTION IMPLEMENTATIONS
+ *================================================================================================*/
+void msg_ui_viewer_grab_volume_key(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       int ret = 0;
+
+       ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP, TOP_POSITION_GRAB);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_grab_key() ret = %d", ret);
+
+       ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN, TOP_POSITION_GRAB);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_grab_key() ret = %d", ret);
+}
+
+void msg_ui_viewer_ungrab_volume_key(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       int ret = 0;
+
+       ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_ungrab_key() ret = %d", ret);
+
+       ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_ungrab_key() ret = %d", ret);
+}
+
+Eina_Bool msg_ui_viewer_volume_key_release_cb(void *data, int type, void *event)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       Ecore_Event_Key *ev = event;
+       int use_volume_key = false;
+
+       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
+
+       if (!use_volume_key) {
+               if (viewer_play_data->volumebar_timer) {
+                       ecore_timer_del(viewer_play_data->volumebar_timer);
+                       viewer_play_data->volumebar_timer = NULL;
+               }
+               viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
+       }
+
+       if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is released");
+
+               if (viewer_play_data->vol_up_key_longpress) {
+                       ecore_timer_del(viewer_play_data->vol_up_key_longpress);
+                       viewer_play_data->vol_up_key_longpress = NULL;
+               }
+       } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {   /* KEY_VOLUMEDOWN */
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is released");
+
+               if (viewer_play_data->vol_down_key_longpress) {
+                       ecore_timer_del(viewer_play_data->vol_down_key_longpress);
+                       viewer_play_data->vol_down_key_longpress = NULL;
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
+       }
+
+       return EINA_TRUE;
+}
+
+Eina_Bool msg_ui_viewer_volume_key_press_cb(void *data, int type, void *event)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       Ecore_Event_Key *ev = event;
+       int use_volume_key = false;
+
+       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
+
+       if (use_volume_key) {
+               if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP) || !g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {
+                       if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is pressed");
+
+                               msg_common_increase_font_size();
+
+                               if (viewer_play_data->render_entry) {
+                                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+                                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                                       msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
+                               }
+
+                               viewer_play_data->vol_up_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_up_key_long_press_cb, (void *)viewer_play_data);
+                       } else {        /* KEY_VOLUMEDOWN */
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is pressed");
+
+                               msg_common_decrease_font_size();
+
+                               if (viewer_play_data->render_entry) {
+                                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+                                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                                       msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
+                               }
+
+                               viewer_play_data->vol_down_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_down_key_long_press_cb, (void *)viewer_play_data);
+                       }
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ev->keyname[%s] is not applicable!", ev->keyname);
+               }
+       } else {
+               if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP) || !g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Use volume key setting is not activated. Do volume key action");
+
+                       if (!viewer_play_data->volumebar)
+                               msg_ui_viewer_create_volume_bar(viewer_play_data);
+
+                       if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
+                               if (viewer_play_data->volumebar_timer) {
+                                       ecore_timer_del(viewer_play_data->volumebar_timer);
+                                       viewer_play_data->volumebar_timer = NULL;
+                               }
+                               __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volumebar);
+
+                               viewer_play_data->vol_up_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_up_key_long_press_cb, (void *)viewer_play_data);
+                       } else {        /* KEY_VOLUMEDOWN */
+                               if (viewer_play_data->volumebar_timer) {
+                                       ecore_timer_del(viewer_play_data->volumebar_timer);
+                                       viewer_play_data->volumebar_timer = NULL;
+                               }
+                               __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volumebar);
+
+                               viewer_play_data->vol_down_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_down_key_long_press_cb, (void *)viewer_play_data);
+                       }
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ev->keyname[%s] is not applicable!", ev->keyname);
+               }
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       int use_volume_key = false;
+
+       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
+
+       if (use_volume_key) {
+               msg_common_increase_font_size();
+
+               if (viewer_play_data->render_entry) {
+                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                       msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
+               }
+       } else {
+               __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volume_slider);
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       int use_volume_key = false;
+
+       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
+
+       if (use_volume_key) {
+               msg_common_decrease_font_size();
+
+               if (viewer_play_data->render_entry) {
+                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                       msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
+               }
+       } else {
+               __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volume_slider);
+       }
+
+       return EINA_TRUE;
+}
+
+void msg_ui_viewer_create_volume_bar(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       Evas_Object *layout = NULL;
+       Evas_Object *slider = NULL;
+       Evas_Object *icon_start = NULL;
+       Evas_Object *icon_end = NULL;
+
+       layout = elm_layout_add(viewer_play_data->play_layout);
+       elm_layout_file_set(layout, MSG_VIEWER_THEME, "volume_controller");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       slider = elm_slider_add(layout);
+       elm_slider_indicator_show_set(slider, EINA_TRUE);
+       evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
+       elm_slider_indicator_format_set(slider, "%1.0f");
+       evas_object_show(slider);
+
+       icon_start = elm_icon_add(layout);
+       elm_image_file_set(icon_start, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MIN);
+       evas_object_size_hint_aspect_set(icon_start, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+       icon_end = elm_icon_add(layout);
+       elm_image_file_set(icon_end, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MAX);
+       evas_object_size_hint_aspect_set(icon_end, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+       elm_object_content_set(slider,icon_start);
+       elm_object_part_content_set(slider, "end", icon_end);
+
+       elm_slider_min_max_set(slider, 0, __msg_ui_viewer_get_max_volume());
+       elm_slider_value_set(slider, __msg_ui_viewer_get_current_volume());
+
+       elm_object_part_content_set(layout, "slider", slider);
+
+       viewer_play_data->volumebar = layout;
+       viewer_play_data->volume_slider = slider;
+       elm_object_part_content_set(viewer_play_data->play_layout, "volume_layout", viewer_play_data->volumebar);
+
+       evas_object_data_set(slider, "viewer_play_data", viewer_play_data);
+
+       __msg_ui_viewer_volumebar_event_callback_add(slider, __msg_ui_viewer_volumebar_event_cb);
+
+       evas_object_smart_callback_add(slider, "slider,drag,start", __msg_ui_viewer_volumebar_drag_start_cb, viewer_play_data);
+       evas_object_smart_callback_add(slider, "slider,drag,stop", __msg_ui_viewer_volumebar_drag_stop_cb, viewer_play_data);
+       evas_object_smart_callback_add(slider, "changed", __msg_ui_viewer_volumebar_changed_cb, viewer_play_data);
+
+       //create timer
+       if (viewer_play_data->volumebar_timer) {
+               ecore_timer_del(viewer_play_data->volumebar_timer);
+               viewer_play_data->volumebar_timer = NULL;
+       }
+       viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
+
+}
+
+void msg_ui_viewer_destroy_volume_bar(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->volumebar_timer) {
+               ecore_timer_del(viewer_play_data->volumebar_timer);
+               viewer_play_data->volumebar_timer = NULL;
+       }
+
+       elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
+       evas_object_del(viewer_play_data->volumebar);
+       viewer_play_data->volumebar = NULL;
+}
+
+static Eina_Bool __msg_ui_viewer_volumebar_timer_cb(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL");
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
+       evas_object_del(viewer_play_data->volumebar);
+       viewer_play_data->volumebar = NULL;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void __msg_ui_viewer_volumebar_drag_start_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->volumebar_event_cb)
+               viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_START);
+
+       viewer_play_data->drag_volume_slider = true;
+}
+
+static void __msg_ui_viewer_volumebar_drag_stop_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL");
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->volumebar_event_cb)
+               viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_STOP);
+
+       viewer_play_data->drag_volume_slider = false;
+}
+
+static void __msg_ui_viewer_volumebar_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       double val = elm_slider_value_get(obj);
+
+       if ((int)val != __msg_ui_viewer_get_current_volume())
+               __msg_ui_viewer_set_volume((int)val);
+}
+
+static void __msg_ui_viewer_volumebar_event_cb(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, user_data == NULL, "data is NULL");
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)user_data;
+
+       if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_START) {
+               if (viewer_play_data->volumebar_timer) {
+                       ecore_timer_del(viewer_play_data->volumebar_timer);
+                       viewer_play_data->volumebar_timer = NULL;
+               }
+       } else if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_STOP) {
+               viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
+       }
+}
+
+static void __msg_ui_viewer_volumebar_event_callback_add(Evas_Object *obj, MSG_VIEWER_VOLUMEBAR_CB event_cb)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, obj == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = evas_object_data_get(obj, "viewer_play_data");
+
+       viewer_play_data->volumebar_event_cb = event_cb;
+}
+
+static void __msg_ui_viewer_volumebar_volume_up(Evas_Object *obj)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       double max = 0.0;
+       elm_slider_min_max_get(obj, NULL, &max);
+
+       double current = elm_slider_value_get(obj);
+
+       if (current < max)
+               elm_slider_value_set(obj, (current + 1.0));
+
+       evas_object_smart_callback_call(obj, "changed", NULL);
+}
+
+static void __msg_ui_viewer_volumebar_volume_down(Evas_Object *obj)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       double min = 0.0;
+       elm_slider_min_max_get(obj, &min, NULL);
+
+       double current = elm_slider_value_get(obj);
+
+       if (current > min)
+               elm_slider_value_set(obj, (current - 1.0));
+
+       evas_object_smart_callback_call(obj, "changed", NULL);
+}
+
+static int __msg_ui_viewer_get_max_volume(void)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       int max_vol = 0;
+
+       int ret = sound_manager_get_max_volume(SOUND_TYPE_MEDIA, &max_vol);
+       if (ret != SOUND_MANAGER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
+               return -1;
+       }
+
+       return max_vol;
+}
+
+static int __msg_ui_viewer_get_current_volume(void)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       int current = 0;
+
+       int ret = sound_manager_get_volume(SOUND_TYPE_MEDIA, &current);
+       if (ret != SOUND_MANAGER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
+               return -1;
+       }
+
+       return current;
+}
+
+static bool __msg_ui_viewer_set_volume(int volume)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       int ret = sound_manager_set_volume(SOUND_TYPE_MEDIA, volume);
+       if (ret != SOUND_MANAGER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_set_volume().. [0x%x]", ret);
+               return false;
+       }
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"set volume value = %d", volume);
+
+       return true;
+}
index f0f1325..b395d85 100755 (executable)
@@ -304,6 +304,7 @@ char *msg_ui_viewer_util_copy_file(const char *src_path, char *dst_path)
        char file_name_without_ext[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0};
        char new_file_name[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0};
        MSG_BOOL result = FALSE;
+       int ret = 0;
        int ncount = 0;
        Eina_Bool is_exists = FALSE;
 
@@ -339,22 +340,30 @@ char *msg_ui_viewer_util_copy_file(const char *src_path, char *dst_path)
 
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "new_file_name = %s", new_file_name);
 
-       media_content_connect();
+       ret = media_content_connect();
 
-       if (ecore_file_cp(src_path, new_file_name) == EINA_FALSE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_file_cp is failed");
-               media_content_disconnect();
-               return NULL;
-       }
+       if (!ret) {
+               if (ecore_file_cp(src_path, new_file_name) == EINA_FALSE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_file_cp is failed");
+                       media_content_disconnect();
+                       return NULL;
+               }
+
+               if (media_content_scan_file(new_file_name) != MEDIA_CONTENT_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_content_scan_file() is failed");
+                       media_content_disconnect();
+                       return NULL;
+               }
 
-       if (media_content_scan_file(new_file_name) != MEDIA_CONTENT_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_content_scan_file() is failed");
-               media_content_disconnect();
+               ret = media_content_disconnect();
+
+               if (!ret)
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_content_disconnect is failed");
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_content_connect is failed");
                return NULL;
        }
 
-       media_content_disconnect();
-
        return strdup(new_file_name);
 }
 
@@ -390,3 +399,48 @@ char *msg_ui_viewer_util_create_working_dir(void)
 
        return NULL;
 }
+
+MSG_BOOL msg_ui_viewer_check_address_is_blocked(msg_handle_t msg_handle, char *address, int *filter_id)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       msg_error_t err = MSG_SUCCESS;
+       msg_struct_list_s filter_list;
+       int i = 0;
+       int total_cnt = 0;
+       char filter_val[MAX_FILTER_VALUE_LEN] = {0,};
+
+       err = msg_get_filter_list(msg_handle, &filter_list);
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_filter_list() fail - err [%d]", err);
+               return FALSE;
+       }
+
+       total_cnt = filter_list.nCount;
+
+       for (i = 0; i < total_cnt; i++) {
+               /* get number */
+               bzero(filter_val, sizeof(filter_val));
+               err = msg_get_str_value(filter_list.msg_struct_info[i], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val));
+
+               if (err != MSG_SUCCESS) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_str_value() fail - err [%d]", err);
+                       msg_release_list_struct(&filter_list);
+                       return FALSE;
+               }
+
+               if (!strcmp(address, filter_val)) {
+                       int filter_type;
+                       msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_TYPE_INT, &filter_type);
+                       if (filter_type == MSG_FILTER_BY_ADDRESS_SAME) {
+                               /* get filter id if address is exist in block list */
+                               msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_ID_INT, filter_id);
+                               msg_release_list_struct(&filter_list);
+                               return TRUE;
+                       }
+               }
+       }
+
+       msg_release_list_struct(&filter_list);
+       return FALSE;
+}
+
index 9de78ad..b71e4d6 100755 (executable)
@@ -1,65 +1,4 @@
-#define MAIN_W 720
-#define BODY_PADDING_MIN_H 34
-#define BODY_PADDING_MID_MIN_H 16
-#define SUBJECT_MIN_H 50
-#define SUBJECT_BG_H 12
-#define AUDIO_PANEL_H 80
-#define PAGE_INDEX_MIN_W 96
-#define DETAIL_PADDING_V_MIN 20
-#define DETAIL_PADDING_H_MIN 20
-
-//colors
-#define COLOR_SUBJECT_BG 216 226 232 255
-#define COLOR_SUBJECT_INDEX 128 128 128 255 //winset guide font 'index list'
-#define COLOR_DETAIL_INFO_TEXT 108 168 199 255
-#define COLOR_PROGRESS_START_TEXT 255 255 255 255
-#define COLOR_PROGRESS_END_TEXT 142 142 142 255
-
-//play controllbar attributes
-#define PLAY_CTRBAR_MIN_H 218
-#define PLAY_CTRBAR_TOP_PADDING_MIN_H 50
-#define PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H 30
-#define PLAY_CTRBAR_MIDDLE_PADDING_MIN_H 41
-#define PLAY_CTRBAR_BOTTOM_PADDING_MIN_H 17
-
-#define PLAY_CTRBAR_PROGRESS_BAR_W 486
-#define PLAY_CTRBAR_PROGRESS_PADDING_W 20
-
-#define PLAY_CTRBAR_VOL_BUTTON_W 104
-#define PLAY_CTRBAR_VOL_BUTTON_PADDING_W 30
-
-#define PLAY_CTRBAR_NAVI_BUTTON_W 122
-#define PLAY_CTRBAR_NAVI_BUTTON_PADDING_W 22
-
-#define PLAY_CTRBAR_BUTTON_VOLUME_START_X 20
-#define PLAY_CTRBAR_BUTTON_PREV_START_X (PLAY_CTRBAR_BUTTON_VOLUME_START_X+PLAY_CTRBAR_VOL_BUTTON_W+PLAY_CTRBAR_VOL_BUTTON_PADDING_W)
-#define PLAY_CTRBAR_BUTTON_PLAY_START_X (PLAY_CTRBAR_BUTTON_PREV_START_X+PLAY_CTRBAR_NAVI_BUTTON_W+PLAY_CTRBAR_NAVI_BUTTON_PADDING_W)
-#define PLAY_CTRBAR_BUTTON_NEXT_START_X (PLAY_CTRBAR_BUTTON_PLAY_START_X+PLAY_CTRBAR_NAVI_BUTTON_W+PLAY_CTRBAR_NAVI_BUTTON_PADDING_W)
-
-#define PLAY_VOLUMEBAR_H       112
-
-//edc images
-#define PLAYER_BG "M01_player_bg.png"
-#define VOL_BTN "M01_controller_icon_volume.png"
-#define VOL_BTN_PRESS "M01_controller_icon_volume_press.png"
-#define PREV_BTN "M01_play_btn_previous.png"
-#define PREV_BTN_PRESS "M01_play_btn_previous_press.png"
-#define PREV_BTN_DIM "M01_Play_btn_previous_dim.png"
-#define PLAY_BTN "M01_Play_btn__play.png"
-#define PLAY_BTN_PRESS "M01_Play_btn__play_press.png"
-#define PAUSE_BTN "M01_play_btn_pause.png"
-#define PAUSE_BTN_PRESS "M01_play_btn_pause_press.png"
-#define NEXT_BTN "M01_play_btn_next.png"
-#define NEXT_BTN_PRESS "M01_play_btn_next_press.png"
-#define NEXT_BTN_DIM "M01_Play_btn_next_dim.png"
-#define PROGRESS_BAR "M01_player_progress_bar.png"
-#define PROGRESS_BG "M01_player_progress_bg.png"
-
-#define LOCK_ICON "M01_icon_locked.png"
-#define SUBJECT_INDEX_BG "M01_subject_bg.png"
-
-#define TITLE_LIST_BG "M01_popup_bubble_bg.png"
-#define AUDIO_ICON "myfile_icon_music.png"
+#include "msg_viewer_defines.edc"
 
 collections {
        group {
@@ -817,7 +756,6 @@ collections {
                name: "subject/pageindex";
                images {
                        image: LOCK_ICON COMP;
-                       image: SUBJECT_INDEX_BG COMP;
                }
                parts {
                        part {
@@ -826,7 +764,7 @@ collections {
                                scale: 1;
                                description {
                                        state: "default" 0.0;
-                                       min: 0 SUBJECT_MIN_H+SUBJECT_BG_H;
+                                       min: 0 SUBJECT_MIN_H;
                                }
                        }
                        part {
@@ -841,22 +779,6 @@ collections {
                                }
                        }
                        part {
-                               name: "rect/bg/image";
-                               type: IMAGE;
-                               scale: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       visible: 1;
-                                       min: 0 SUBJECT_BG_H;
-                                       align: 0.5 1.0;
-                                       rel1{to:"rect"; relative:0.0 1.0;}
-                                       rel2{to:"rect"; relative:1.0 1.0;}
-                                       image {
-                                               normal: SUBJECT_INDEX_BG;
-                                       }
-                               }
-                       }
-                       part {
                                name: "subject/text";
                                type: TEXT;
                                scale: 1;
@@ -868,8 +790,8 @@ collections {
                                        align: 0.0 0.5;
                                        color: COLOR_SUBJECT_INDEX;
                                        text {
-                                               font: "SLP:style=Bold";
-                                               text_class: "slp_medium";
+                                               font: "Tizen:style=Bold";
+                                               text_class: "tizen";
                                                size: 32;
                                                align: 0.0 0.5;
                                        }
@@ -888,9 +810,10 @@ collections {
                                        rel2{to:"rect"; relative:1.0 1.0;}
                                        color: COLOR_SUBJECT_INDEX;
                                        text {
-                                               font: "SLP:style=Bold";
-                                               text_class: "slp_medium";
+                                               font: "Tizen:style=Bold";
+                                               text_class: "tizen";
                                                size: 32;
+                                               align: 0.5 0.5;
                                        }
                                }
                        }
@@ -963,8 +886,8 @@ collections {
                                        align: 0.0 0.5;
                                        color: COLOR_SUBJECT_INDEX;
                                        text {
-                                               font: "SLP:style=Bold";
-                                               text_class: "slp_medium";
+                                               font: "Tizen:style=Bold";
+                                               text_class: "tizen";
                                                size: 36;
                                                align: 0.0 0.5;
                                        }
@@ -1314,17 +1237,6 @@ collections {
                                }
                        }
                        part {
-                               name: "msg/detail/bg";
-                               type: SWALLOW;
-                               scale: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       color: 0 0 0 0;
-                                       rel1{to: "rect"; relative: 0.0 0.0;}
-                                       rel2{to: "rect"; relative: 1.0 1.0;}
-                               }
-                       }
-                       part {
                                name: "rect/padding/top";
                                type: RECT;
                                scale: 1;
@@ -1498,4 +1410,173 @@ collections {
                        }
                }
        }
+
+       group {
+               name: "help_page_save_all";
+               parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 100;
+                                       color: 235 233 225 255;
+                               }
+                       }
+
+                       PART_PADDING_LEFT("pad.left", 26, "bg");
+                       PART_PADDING_RIGHT("pad.right", 26, "bg");
+
+                       part {
+                               name: "item.filename.rect";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.5;
+                                       rel1 { relative: 1.0 0.0; to_x: "pad.left"; to_y: "bg"; }
+                                       rel2 { relative: 0.0 1.0; to_x: "pad.filename.right"; to_y: "bg"; }
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       PART_TEXT("item.filename.text", "item.filename.rect", "", "Tizen:style=Regular", "tizen", 34, 0.0, 0.5, 0, 0, 0, 255)
+                       PART_H_PIXEL_RECT("pad.filename.right", 12, 1.0, 0.0, "item.save.rect")
+
+                       part {
+                               name: "item.save.rect";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 1;
+                                       fixed: 1 1;
+                                       min: 72 72;
+                                       rel1 { relative: 0.0 0.0; to_x: "pad.right"; to_y: "bg"; }
+                                       rel2 { relative: 0.0 1.0; to_x: "pad.right"; to_y: "bg"; }
+                                       align: 1.0 0.5;
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       PART_SWALLOW("item.save.icon", "item.save.rect")
+
+                       PART_RECT("over", 0.0, 0.0, "bg", "bg", 0.0, 1.0, "item.save.rect", "item.save.rect")
+                       PART_EVENT_RECT("over_event", "over")
+
+                       PART_BOTTOM_LINE_DOUBLE("line.bottom", "bg")
+               }
+       }
+
+       group {
+               name: "help_page_item";
+               parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 100;
+                                       color: 235 233 225 255;
+                               }
+                       }
+
+                       PART_PADDING_LEFT("pad.left", 26, "bg");
+                       PART_PADDING_RIGHT("pad.right", 26, "bg");
+
+                       part {
+                               name: "item.thumbnail.rect";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 1;
+                                       fixed: 1 1;
+                                       min: 74 74;
+                                       max: 74 74;
+                                       rel1 { relative: 1.0 0.0; to_x: "pad.left"; to_y: "bg"; }
+                                       rel2 { relative: 1.0 1.0; to_x: "pad.left"; to_y: "bg"; }
+                                       align: 0.0 0.5;
+                                       color: 0 0 0 0;
+                               }
+                       }
+
+                       PART_PADDING_TOP("thumbnail.icon.line.top", 1, "item.thumbnail.rect")
+                       PART_PADDING_LEFT("thumbnail.icon.line.left", 1, "item.thumbnail.rect")
+                       PART_PADDING_RIGHT("thumbnail.icon.line.right", 1, "item.thumbnail.rect")
+                       PART_PADDING_BOTTOM("thumbnail.icon.line.bottom", 1, "item.thumbnail.rect")
+
+                       PART_SWALLOW("item.thumbnail.icon", "item.thumbnail.rect")
+                       PART_H_PIXEL_RECT("pad.thumbnail.icon.right", 16, 0.0, 1.0, "item.thumbnail.icon")
+
+                       part {
+                               name: "item.filename.rect";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.5;
+                                       rel1 { relative: 1.0 0.0; to_x: "pad.thumbnail.icon.right"; to_y: "bg"; }
+                                       rel2 { relative: 0.0 1.0; to_x: "pad.filename.right"; to_y: "bg"; }
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       PART_TEXT("item.filename.text", "item.filename.rect", "", "Tizen:style=Regular", "tizen", 34, 0.0, 0.5, 0, 0, 0, 255)
+                       PART_H_PIXEL_RECT("pad.filename.right", 12, 1.0, 0.0, "item.filesize.rect")
+
+                       part {
+                               name: "item.filesize.rect";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 120 0;
+                                       max: 120 0;
+                                       align: 1.0 0.5;
+                                       rel1 { relative: 0.0 0.0; to_x: "pad.filesize.right"; to_y: "bg"; }
+                                       rel2 { relative: 0.0 1.0; to_x: "pad.filesize.right"; to_y: "bg"; }
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       PART_TEXT("item.filesize.text", "item.filesize.rect", "", "Tizen:style=Regular", "tizen", 28, 1.0, 0.5, 102, 102, 102, 255)
+                       PART_H_PIXEL_RECT("pad.filesize.right", 10, 1.0, 0.0, "item.save.icon")
+
+                       part {
+                               name: "item.save.rect";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 1;
+                                       fixed: 1 1;
+                                       min: 72 72;
+                                       rel1 { relative: 0.0 0.0; to_x: "pad.right"; to_y: "bg"; }
+                                       rel2 { relative: 0.0 1.0; to_x: "pad.right"; to_y: "bg"; }
+                                       align: 1.0 0.5;
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       PART_SWALLOW("item.save.icon", "item.save.rect")
+
+                       PART_RECT("over", 0.0, 0.0, "bg", "bg", 0.0, 1.0, "item.save.rect", "item.save.rect")
+                       PART_EVENT_RECT("over_event", "over")
+
+                       PART_BOTTOM_LINE_DOUBLE("line.bottom", "bg")
+               }
+
+               programs {
+                       program {
+                               name: "mouse_clicked";
+                               signal: "mouse,clicked,1";
+                               source: "over_event";
+                               action: SIGNAL_EMIT "clicked" "";
+                       }
+               }
+       }
 }
diff --git a/viewer/theme/msg_viewer_defines.edc b/viewer/theme/msg_viewer_defines.edc
new file mode 100755 (executable)
index 0000000..d9f38c3
--- /dev/null
@@ -0,0 +1,443 @@
+//Layout
+#define MAIN_W 720
+
+//Body attributes
+#define BODY_PADDING_MIN_H 34
+#define BODY_PADDING_MID_MIN_H 16
+#define SUBJECT_MIN_H 50
+#define AUDIO_PANEL_H 80
+#define PAGE_INDEX_MIN_W 96
+#define DETAIL_PADDING_V_MIN 20
+#define DETAIL_PADDING_H_MIN 20
+
+//colors
+#define COLOR_SUBJECT_BG 216 226 232 255
+#define COLOR_SUBJECT_INDEX 128 128 128 255
+#define COLOR_DETAIL_INFO_TEXT 108 168 199 255
+#define COLOR_PROGRESS_START_TEXT 255 255 255 255
+#define COLOR_PROGRESS_END_TEXT 142 142 142 255
+
+//play controllbar attributes
+#define PLAY_CTRBAR_MIN_H 218
+#define PLAY_CTRBAR_TOP_PADDING_MIN_H 50
+#define PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H 30
+#define PLAY_CTRBAR_MIDDLE_PADDING_MIN_H 41
+#define PLAY_CTRBAR_BOTTOM_PADDING_MIN_H 17
+
+#define PLAY_CTRBAR_PROGRESS_BAR_W 486
+#define PLAY_CTRBAR_PROGRESS_PADDING_W 20
+
+#define PLAY_CTRBAR_VOL_BUTTON_W 104
+#define PLAY_CTRBAR_VOL_BUTTON_PADDING_W 30
+
+#define PLAY_CTRBAR_NAVI_BUTTON_W 122
+#define PLAY_CTRBAR_NAVI_BUTTON_PADDING_W 22
+
+#define PLAY_CTRBAR_BUTTON_VOLUME_START_X 20
+#define PLAY_CTRBAR_BUTTON_PREV_START_X (PLAY_CTRBAR_BUTTON_VOLUME_START_X+PLAY_CTRBAR_VOL_BUTTON_W+PLAY_CTRBAR_VOL_BUTTON_PADDING_W)
+#define PLAY_CTRBAR_BUTTON_PLAY_START_X (PLAY_CTRBAR_BUTTON_PREV_START_X+PLAY_CTRBAR_NAVI_BUTTON_W+PLAY_CTRBAR_NAVI_BUTTON_PADDING_W)
+#define PLAY_CTRBAR_BUTTON_NEXT_START_X (PLAY_CTRBAR_BUTTON_PLAY_START_X+PLAY_CTRBAR_NAVI_BUTTON_W+PLAY_CTRBAR_NAVI_BUTTON_PADDING_W)
+
+#define PLAY_VOLUMEBAR_H       112
+
+//edc images
+#define PLAYER_BG "M01_player_bg.png"
+#define VOL_BTN "M01_controller_icon_volume.png"
+#define VOL_BTN_PRESS "M01_controller_icon_volume_press.png"
+#define PREV_BTN "M01_play_btn_previous.png"
+#define PREV_BTN_PRESS "M01_play_btn_previous_press.png"
+#define PREV_BTN_DIM "M01_Play_btn_previous_dim.png"
+#define PLAY_BTN "M01_Play_btn__play.png"
+#define PLAY_BTN_PRESS "M01_Play_btn__play_press.png"
+#define PAUSE_BTN "M01_play_btn_pause.png"
+#define PAUSE_BTN_PRESS "M01_play_btn_pause_press.png"
+#define NEXT_BTN "M01_play_btn_next.png"
+#define NEXT_BTN_PRESS "M01_play_btn_next_press.png"
+#define NEXT_BTN_DIM "M01_Play_btn_next_dim.png"
+#define PROGRESS_BAR "M01_player_progress_bar.png"
+#define PROGRESS_BG "M01_player_progress_bg.png"
+
+#define LOCK_ICON "M01_icon_locked.png"
+#define SUBJECT_INDEX_BG "M01_subject_bg.png"
+
+#define TITLE_LIST_BG "M01_popup_bubble_bg.png"
+#define AUDIO_ICON "myfile_icon_music.png"
+
+//MACROS
+#define PART_BG(pName) \
+       part { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       color: 0 0 0 0; \
+               } \
+       }
+
+#define PART_RECT(pName, pR1x, pR1y, pR1xt, pR1yt, pR2x, pR2y, pR2xt, pR2yt) \
+       part { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       rel1 { relative: pR1x pR1y; to_x: pR1xt; to_y: pR1yt; } \
+                       rel2 { relative: pR2x pR2y; to_x: pR2xt; to_y: pR2yt; } \
+                       color: 0 0 0 0; \
+               } \
+       }
+
+#define PART_PIXEL_RECT(pName, pX, pY, pAx, pAy, pRx, pRy, pRt) \
+       part { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       min: pX pY; \
+                       align: pAx pAy; \
+                       rel1 { relative: pRx pRy; to: pRt; } \
+                       rel2 { relative: pRx pRy; to: pRt; } \
+                       color: 0 0 0 0; \
+               } \
+       }
+
+#define PART_PIXEL_RECT_EX(pName, pX, pY, pAx, pAy, pR1x, pR1y, pR2x, pR2y, pRt) \
+       part { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       min: pX pY; \
+                       max: pX pY; \
+                       align: pAx pAy; \
+                       rel1 { relative: pR1x pR1y; to: pRt; } \
+                       rel2 { relative: pR2x pR2y; to: pRt; } \
+                       color: 0 0 0 0; \
+               } \
+       }
+
+
+#define PART_V_PIXEL_RECT(pName, pY, pAy, pRy, pRt) \
+       part { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       min: 0 pY; \
+                       fixed: 0 1; \
+                       align: 0.5 pAy; \
+                       rel1 { relative: 0.0 pRy; to: pRt; } \
+                       rel2 { relative: 1.0 pRy; to: pRt; } \
+                       color: 0 0 0 0; \
+               } \
+       }
+
+#define PART_H_PIXEL_RECT(pName, pX, pAx, pRx, pRt) \
+       part { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       min: pX 0; \
+                       fixed: 1 0; \
+                       align: pAx 0.5; \
+                       rel1 { relative: pRx 0.0; to: pRt; } \
+                       rel2 { relative: pRx 1.0; to: pRt; } \
+                       color: 0 0 0 0; \
+               } \
+       }
+
+#define PART_SWALLOW(pName, pTo) \
+       part { \
+               name: pName; \
+               type: SWALLOW; \
+               mouse_events: 1; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       fixed: 1 1; \
+                       rel1 { relative: 0.0 0.0; to: pTo; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; } \
+               } \
+       }
+
+#define PART_EVENT_RECT(pName, pTo) \
+       part { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 1; \
+               repeat_events: 1; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       rel1 { relative: 0.0 0.0; to: pTo; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; } \
+                       color: 0 0 0 0; \
+                       visible: 1; \
+               } \
+               description { \
+                       state: "disabled" 0.0; \
+                       inherit: "default" 0.0; \
+                       visible: 0; \
+               } \
+       }
+
+#define PART_COLOR_RECT(pName, pCr, pCg, pCb, pCa, pTo) \
+       part { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       rel1 { relative: 0.0 0.0; to: pTo; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; } \
+                       color: pCr pCg pCb pCa; \
+               } \
+       }
+
+#define PART_SWALLOW_RECT_BAR(pName, pTo, pRx1, pRy1, pRx2, pRy2)\
+       part{\
+               name: pName;\
+               type: SWALLOW;\
+               mouse_events: 0; \
+               scale: 1;\
+               description{\
+                       state: "default" 0.0;\
+                       rel1 { relative: pRx1 pRy1; to: pTo;}\
+                       rel2 { relative: pRx2 pRy2; to: pTo;}\
+               }\
+       }
+
+#define PART_TEXT(pName, pTo, pString, pFont, pClass, pSize, pAx, pAy, pCr, pCg, pCb, pCa) \
+       part { \
+               name: pName; \
+               type: TEXT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       rel1 { relative: 0.0 0.0; to: pTo; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; } \
+                       text { \
+                               text: pString; \
+                               font: pFont; \
+                               text_class: pClass; \
+                               size: pSize; \
+                               align: pAx pAy; \
+                               ellipsis: 0.0; \
+                       } \
+                       color: pCr pCg pCb pCa; \
+               } \
+       }
+
+#define PART_IMAGE(pName, pTo, pImage) \
+       part { \
+               name: pName; \
+               type: IMAGE; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       rel1 { relative: 0.0 0.0; to: pTo; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; } \
+                       image.normal: pImage; \
+               } \
+       }
+
+#define PART_BORDER_IMAGE(pName, pTo, pImage, pL, pR, pT, pB) \
+       part { \
+               name: pName; \
+               type: IMAGE; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       rel1 { relative: 0.0 0.0; to: pTo; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; } \
+                       image.normal: pImage; \
+                       image.border: pL pR pT pB; \
+               } \
+       }
+
+#define PART_TOP_LINE(pName, pTo) \
+       part \
+       { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               description { \
+                       state: "default" 0.0; \
+                       min: 0 1; \
+                       fixed: 0 1; \
+                       visible: 1; \
+                       color: 187 187 187 255; \
+                       rel1 { relative: 0.0 0.0; to: pTo; offset: 0 0; } \
+                       rel2 { relative: 1.0 0.0; to: pTo; offset: 0 0; } \
+               } \
+       } \
+
+#define PART_LEFT_LINE(pName, pTo) \
+       part \
+       { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               description { \
+                       state: "default" 0.0; \
+                       min: 1 0; \
+                       fixed: 1 0; \
+                       visible: 1; \
+                       color: 187 187 187 255; \
+                       rel1 { relative: 0.0 0.0; to: pTo; offset: 0 0; } \
+                       rel2 { relative: 0.0 1.0; to: pTo; offset: 0 0; } \
+               } \
+       } \
+
+#define PART_RIGHT_LINE(pName, pTo) \
+       part \
+       { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               description { \
+                       state: "default" 0.0; \
+                       min: 1 0; \
+                       fixed: 1 0; \
+                       visible: 1; \
+                       color: 187 187 187 255; \
+                       rel1 { relative: 1.0 0.0; to: pTo; offset: 0 0; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; offset: 0 0; } \
+               } \
+       } \
+
+#define PART_BOTTOM_LINE(pName, pTo) \
+       part \
+       { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               description { \
+                       state: "default" 0.0; \
+                       min: 0 1; \
+                       fixed: 0 1; \
+                       visible: 1; \
+                       color: 187 187 187 255; \
+                       rel1 { relative: 0.0 1.0; to: pTo; offset: 0 0; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; offset: 0 0; } \
+               } \
+       } \
+
+#define PART_BOTTOM_LINE_DOUBLE(pName, pTo) \
+       part \
+       { \
+               name: pName; \
+               type: RECT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       min: 0 1; \
+                       fixed: 0 1; \
+                       visible: 1; \
+                       color: 211 209 203 255; \
+                       rel1 { relative: 0.0 1.0; to: pTo; offset: 0 -1; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; offset: 0 -1; } \
+               } \
+       } \
+       part \
+       { \
+               name: pName##"2"; \
+               type: RECT; \
+               mouse_events: 0; \
+               scale: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       min: 0 1; \
+                       fixed: 0 1; \
+                       visible: 1; \
+                       color: 255 255 255 255; \
+                       rel1 { relative: 0.0 1.0; to: pTo; offset: 0 0; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; offset: 0 0; } \
+               } \
+       } \
+
+#define PART_ACCESS_RECT(pTo) \
+       part \
+       { \
+               name: "access"; \
+               type: RECT; \
+               repeat_events: 1; \
+               description { \
+                       state: "default" 0.0; \
+                       fixed: 1 1; \
+                       color: 0 0 0 0; \
+                       rel1 { relative: 0.0 1.0; to: pTo; offset: 0 0; } \
+                       rel2 { relative: 1.0 1.0; to: pTo; offset: 0 0; } \
+               } \
+       } \
+
+#define PART_PADDING_TOP(pName, pSize, pTo) \
+       PART_V_PIXEL_RECT(pName, pSize, 0.0, 0.0, pTo)
+
+#define PART_PADDING_BOTTOM(pName, pSize, pTo) \
+       PART_V_PIXEL_RECT(pName, pSize, 1.0, 1.0, pTo)
+
+#define PART_PADDING_LEFT(pName, pSize, pTo) \
+       PART_H_PIXEL_RECT(pName, pSize, 0.0, 0.0, pTo)
+
+#define PART_PADDING_RIGHT(pName, pSize, pTo) \
+       PART_H_PIXEL_RECT(pName, pSize, 1.0, 1.0, pTo)
+
+#define SCRIPT_CUSTOM_PART(pPart) \
+       custom_state(PART:pPart, "default", 0.0); \
+       set_state(PART:pPart, "custom", 0.0);
+
+#define SCRIPT_SET_IMAGE(pPart, pVal) \
+       set_state_val(PART:pPart, STATE_IMAGE, IMAGE:pVal);
+
+#define SCRIPT_SET_VISIBLE(pPart, pVal) \
+       set_state_val(PART:pPart, STATE_VISIBLE, pVal);
+
+#define SCRIPT_SET_STATE_DISABLED(pPart) \
+       set_state(PART:pPart, "disabled", 0.0);
+
+#define SCRIPT_SET_STATE_DEFAULT(pPart) \
+       set_state(PART:pPart, "default", 0.0);
+
+#define SCRIPT_SET_STATE_SHOW(pPart) \
+       set_state(PART:pPart, "show", 0.0);
+
+#define SCRIPT_SET_STATE_HIDE(pPart) \
+       set_state(PART:pPart, "hide", 0.0);
+
+#define PROGRAM_SET_VISIBLE(pName, pSignal, pSource, pPart) \
+       program { \
+               name: pName; \
+               signal: pSignal; \
+               source: pSource; \
+               script { \
+                       SCRIPT_SET_STATE_SHOW(pPart) \
+               } \
+       }
+
+#define PROGRAM_SET_INVISIBLE(pName, pSignal, pSource, pPart) \
+       program { \
+               name: pName; \
+               signal: pSignal; \
+               source: pSource; \
+               script { \
+                       SCRIPT_SET_STATE_HIDE(pPart) \
+               } \
+       }
\ No newline at end of file