Apply Viewer options and more functions
authorDowon Park <dowon.park@samsung.com>
Thu, 25 Oct 2012 08:53:13 +0000 (17:53 +0900)
committerDowon Park <dowon.park@samsung.com>
Thu, 25 Oct 2012 08:53:13 +0000 (17:53 +0900)
- Block/Unblock address
- Protection On/Off
- View message details
- Forward/Resend/Reply
- Auto resuming SMIL after user action leads to stop SMIL

Change-Id: Id721aaaf00bf32a00de2a0c87ad0e729bc878449

22 files changed:
viewer/CMakeLists.txt
viewer/include/msg-ui-viewer-item-list.h [deleted file]
viewer/include/msg-ui-viewer-main.h
viewer/include/msg-ui-viewer-play-view.h
viewer/include/msg-ui-viewer-utility.h
viewer/smil-player/include/msg-smil-content-manager.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.c
viewer/smil-player/src/msg-smil-render.c
viewer/smil-player/src/msg-smil-text-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-item-list.c [deleted file]
viewer/src/msg-ui-viewer-main.c
viewer/src/msg-ui-viewer-play-view-callback.c
viewer/src/msg-ui-viewer-play-view.c
viewer/theme/msg_viewer.edc

index 90f71c9..ee3def3 100755 (executable)
@@ -15,7 +15,6 @@ SET(VIEWER_SRCS
        ./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-item-list.c
        ./src/msg-ui-viewer-utility.c
        ./smil-player/src/msg-smil-player.c
        ./smil-player/src/msg-smil-content-manager.c
@@ -46,10 +45,10 @@ ADD_DEFINITIONS("-DTARGET")
 ADD_DEFINITIONS("-DSLP_PROF")
 
 ADD_CUSTOM_TARGET(${MSG_VIEWER}.edj
-                COMMAND edje_cc -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
+                               COMMAND edje_cc -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_LIBRARY(${PROJECT_NAME} SHARED ${VIEWER_SRCS})
diff --git a/viewer/include/msg-ui-viewer-item-list.h b/viewer/include/msg-ui-viewer-item-list.h
deleted file mode 100755 (executable)
index 8671b82..0000000
+++ /dev/null
@@ -1,101 +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://www.tizenopensource.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.
- */
-
-#ifndef __MSG_VIEWER_ITEM_LIST_H__
-#define __MSG_VIEWER_ITEM_LIST_H__
-/*==================================================================================================
- *                                                                     INCLUDE HEADERS
- *==================================================================================================*/
-#include <msg.h>
-#include "msg-ui-viewer-types.h"
-
-#include <Ecore.h>
-#include <Elementary.h>
-#include <ui-gadget-module.h>
-
-/*==================================================================================================
- *                                                                             DEFINITIONS
- *==================================================================================================*/
-#define MSG_MAX_GROUP_LABEL 2
-#define MSG_BUFFER_SIZE_64 64
-/*==================================================================================================
- *                                                                             ENUMERATIONS
- *==================================================================================================*/
-typedef enum {
-       MSG_MEDIA_INVALID = 0,
-       MSG_MEDIA_IMG,
-       MSG_MEDIA_AUDIO,
-       MSG_MEDIA_VIDEO,
-       MSG_MEDIA_TEXT,
-       MSG_MEDIA_ANIMATE,
-       MSG_MEDIA_IMG_OR_VIDEO,
-       MSG_MEDIA_ATTACH,       /*for attachment*/
-       MSG_MEDIA_DRM,          /*for DRM content*/
-} MSG_MEDIA_TYPE_E;
-
-typedef enum {
-       ITEM_LIST_INFO_INVALID = 0,
-       ITEM_LIST_INFO_INSERT_FILE,
-       ITEM_LIST_INFO_ATTACH_FILE,
-} MSG_ITEM_LIST_INFO_E;
-
-/*==================================================================================================
- *                                                                             STRUCTURES
- *==================================================================================================*/
-typedef struct {
-       int     index;
-       char    *group_label;
-} MSG_GROUP_LABEL_S;
-
-typedef struct {
-       void    *viewer_main;
-       Evas_Object     *main_window;
-       Evas_Object     *navi_frame;
-       Evas_Object     *popup;
-       Evas_Object     *genlist;
-
-       msg_handle_t    msgHandle;      /*ipc handler between viewer and MF*/
-       msg_message_id_t        msgID;
-       msg_struct_t    mms_t;
-
-       int     insert_item_count;      /*inserted content's count, image, sound, video and etc.*/
-       int     attach_item_count;
-       Eina_List       *insert_list;
-       Eina_List       *attach_list;
-
-       Elm_Object_Item *group_item_class;
-       Elm_Genlist_Item_Class  item_class;
-       Elm_Genlist_Item_Class  title_class;
-
-       MSG_GROUP_LABEL_S       group_list[MSG_MAX_GROUP_LABEL];
-} MSG_ITEM_LIST_DATA_S;
-
-typedef struct {
-       char    pfile_name[MSG_VIEWER_FILENAME_MAX_LEN + 1];
-       char    pfile_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1];
-       MSG_MEDIA_TYPE_E        emedia_type;
-       MSG_ITEM_LIST_DATA_S    *item_list_data;
-} MSG_MEDIA_INFO_S;
-
-/*==================================================================================================
- *                                                                     FUNCTION DECLARATIONS
- *==================================================================================================*/
-void msg_ui_viewer_init_item_list(void *data);
-MSG_BOOL msg_ui_viewer_create_item_list_view(void *data);
-void msg_ui_viewer_destroy_item_list(void *data);
-
-#endif
-
index 14aa7f0..7735c7a 100755 (executable)
@@ -24,7 +24,6 @@
 #include "msg-ui-viewer-types.h"
 #include "msg-ui-util.h"
 
-#include "msg-ui-viewer-item-list.h"
 #include "msg-ui-viewer-drm-list.h"
 #include "msg-ui-viewer-play-view.h"
 
@@ -34,8 +33,6 @@
 /*==================================================================================================
  *                                                                             DEFINITIONS
  *==================================================================================================*/
-#define MSG_VIEWER_THEME       EDJDIR"/msg_viewer.edj"
-
 /*View control CMD defines*/
 #define MSG_VIEWER_VIEW_CMD_NONE       0
 #define MSG_VIEWER_VIEW_CMD_PLAY       0x01
@@ -46,7 +43,6 @@
 typedef enum {
        MSG_VIEWER_PLAYER_VIEW,
        MSG_VIEWER_DRM_LIST_VIEW,
-       MSG_VIEWER_ITEM_LIST_VIEW
 } MSG_VIEWER_VIEW_MODE_E;
 
 typedef enum {
@@ -56,7 +52,7 @@ typedef enum {
 } MSG_UG_LAUNCH_MODE_E;
 
 typedef enum {
-       MSG_VIEWER_FULLVIEW_MODE = 0,   /*full view mode include item list*/
+       MSG_VIEWER_FULLVIEW_MODE = 0,   /*full view mode*/
        MSG_VIEWER_PREVIEW_MODE,                /*preview mode from composer*/
        MSG_VIEWER_INVALID_MODE,
 } MSG_VIEWER_LAUNCH_VIEW_MODE_E;
@@ -86,9 +82,10 @@ typedef struct _MSG_VIEWER_MAIN_DATA {
 
        MSG_VIEWER_VIEW_MODE_E  view_mode;
        MSG_DRM_LIST_DATA_S     *drm_list_view;
-       MSG_ITEM_LIST_DATA_S    *item_list_view;
        MSG_PLAY_DATA_S *player_view;
 
+       bool msg_box_viewer;    /* TRUE if viewer is launched from message box */
+
        Ecore_Idler     *del_idler;
        Eina_List* drm_list;/*set invalid ro drm content*/
 } MSG_VIEWER_MAIN_DATA_S;
@@ -167,7 +164,7 @@ Evas_Object *msg_ui_viewer_get_main_layout(void *data);
 Evas_Object *msg_ui_viewer_get_bg_layout(void *data);
 
 Evas_Object *msg_ui_viewer_create_bg(void *data, Evas_Object *parent);
-Evas_Object *msg_ui_viewer_create_layout_main(Evas_Object *parent);
+Evas_Object *msg_ui_viewer_create_layout_main(Evas_Object *parent, bool indicator);
 /* VIEWER  CALLBACK */
 Eina_Bool msg_ui_viewer_ug_quit(void *data);
 void msg_ui_viewer_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv);
index cdac2a6..27b561a 100755 (executable)
 /*==================================================================================================
  *                                                                     DEFINITIONS
  *==================================================================================================*/
+#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 114
-#define VIEWER_ATTACH_POPUP_WIDTH 620
+#define VIEWER_ATTACH_GL_ITEM_HEIGHT 112
 #define VIEWER_TITLE_FONT_LEN 100
-#define VIEWER_TITLE_FONT_STYLE_LEN 60
-#define VIEWER_SUBJECT_MAX_LEN 40
-#define VIEWER_SUBJECT_LINE_WRAP_LENGTH 560
-#define VIEWER_NAVI_FRAME_HEIGHT       98
-#define VIEWER_PAGE_NAVI_ICON_WIDTH    38
-#define VIEWER_PAGE_NAVI_ICON_HEIGHT   38
-#define VIEWER_COLOR_128 128
-#define VIEWER_COLOR_255 255
+#define VIEWER_NAVI_FRAME_HEIGHT 98
+#define VIEWER_NAVIFRAME_BOTTOM_H 114
 
 #define VIEWER_PLAY_CONTROLLER_LIFETIME 3
 #define VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME 1
-#define VIEWER_PLAY_CONTROLLER_HEIGHT 120
-#define VIEWER_NAVIFRAME_BOTTOM_H 114
+#define VIEWER_PLAY_CONTROLLER_HEIGHT 218
 
 #define VIEWER_DETAILS_TEXT_SPACE " "
 #define VIEWER_DETAILS_TEXT_COMMA ", "
 #define VIEWER_DETAILS_TEXT_DASH " - "
+#define VIEWER_DETAILS_TEXT_COLLON " : "
 #define VIEWER_DETAILS_TEXT_LEFT_BRACE "("
 #define VIEWER_DETAILS_TEXT_RIGHT_BRACE ")"
-#define VIEWER_DETAILS_TEXT_LINE_FEED "<br>"
+#define VIEWER_DETAILS_TEXT_NEW_LINE "<br>"
 #define VIEWER_DETAILS_TEXT_MSG_SIZE_KB 1024
 
 #define MSG_VIEWER_EDJ EDJDIR"/msg_viewer.edj"
@@ -71,6 +65,14 @@ typedef enum {
 } MSG_VIEWER_PLAY_STATUS_E;
 
 typedef enum {
+       MSG_VIEWER_ACTION_NONE = 0,
+       MSG_VIEWER_ACTION_TOOLBAR_PLAY,         /* action tapping play button in play toolbar */
+       MSG_VIEWER_ACTION_TOOLBAR_PAUSE,        /* action tapping pause button in play toolbar */
+       MSG_VIEWER_ACTION_AUTO_PLAY,            /* action auto play by related UX flow */
+       MSG_VIEWER_ACTION_AUTO_PAUSE,           /* action auto pause by related UX flow */
+} MSG_VIEWER_ACTION_TYPE_E;
+
+typedef enum {
        MSG_VIEWER_DEFAULT_MODE = 0,
        MSG_VIEWER_LOAD_OTHER_UG_MODE,  /*launch other ug mode like calling contact ug*/
        MSG_VIEWER_LOAD_OTHER_APP_MODE, /*launch other application mode like calling voice call*/
@@ -78,7 +80,7 @@ typedef enum {
 
 typedef enum {
        MSG_VIEWER_CMD_NONE = 0,
-       MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT,
+       MSG_VIEWER_CMD_LOAD_CONTACT,
        MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER,
        MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER,
        MSG_VIEWER_CMD_LOAD_CALL,
@@ -94,7 +96,6 @@ typedef enum {
 
 typedef enum {
        VIEWER_NORMAL_POPUP,
-       VIEWER_SAVE_MODE_POPUP,
        VIEWER_DELETE_MSG_MODE_POPUP,
 } MSG_VIEWER_POPUP_MODE_E;
 
@@ -110,6 +111,11 @@ typedef enum {
        MSG_VIEWER_MEDIA_DRM,
 } MSG_VIEWER_MEDIA_TYPE_E;
 
+typedef enum {
+       MSG_VIEWER_OPTION_CONTACT = 0,
+       MSG_VIEWER_OPTION_BLOCK,
+} MSG_VIEWER_OPTION_CHANGE_TYPE_E;
+
 /*==================================================================================================
  *                                                                             STRUCTURES
  *==================================================================================================*/
@@ -133,7 +139,6 @@ typedef struct _MSG_PLAY_DATA_S {
        Evas_Object *title_button;                              /* navi title button */
        Evas_Object *ctrl_toolbar;                              /* control toolbar */
        Evas_Object *title_toolbar;                     /* title tolbar(optionheader) */
-
        Evas_Object *title_box_layout;                  /* title box layout for genlist */
        Evas_Object *title_genlist;                             /* title genlist for multirecipients */
        Evas_Object *play_layout;                               /* play viewer main layout */
@@ -150,7 +155,7 @@ typedef struct _MSG_PLAY_DATA_S {
        Eina_Bool isSelectAll;                                  /* check if save attachments select all mode is enable */
 
        Elm_Object_Item *navi_item;                     /* naviframe item */
-       Elm_Object_Item *toolbar_item[3];               /* title button toolbar items */
+       Elm_Object_Item *toolbar_item[4];               /* title button toolbar items */
        Elm_Object_Item *ctrltoolbar_item[4];   /* control toolbar items */
 
        Evas_Object *popup;                                     /*simple popup*/
@@ -170,13 +175,10 @@ typedef struct _MSG_PLAY_DATA_S {
        msg_struct_t mms_t;
        int     msgID;
        MSG_VIEWER_LAUNCH_CMD_TYPE_E    launch_cmd;
-
        void    *SmilHandle;
-
        MSG_VIEWER_PLAY_STATUS_E status;
        MSG_VIEWER_PLAY_STATUS_E previous_status;
        MSG_VIEWER_CMD_TYPE_E cmd_type;
-
        int bgcolor;
        Ecore_Idler *del_idler;
        Ecore_Timer *play_controller_timer;
@@ -193,6 +195,8 @@ typedef struct _MSG_PLAY_DATA_S {
 
        bool title_optionheader_opened; /* check if title button option is opened*/
        bool playcontroller_opened;             /*check play controller is shown or not */
+       bool auto_resume_state;         /* check state of auto resume availablity */
+       bool msg_box_viewer;    /* TRUE is viewer is launched from message box */
 
        int totalProgressTime;          /* total progress time for all slide*/
        int elapsedProgressTime;                /*progress time from 1st slide to current slide*/
@@ -219,6 +223,17 @@ typedef struct {
        MSG_VIEWER_MEDIA_TYPE_E media_type;
        MSG_PLAY_DATA_S *viewer_play_data;
 } MSG_VIEWER_ATTACH_MEDIA_INFO_S;
+
+typedef struct {
+       int     status;
+       time_t time;
+} MSG_VIEWER_REPORT_TYPE_S;
+
+typedef struct {
+       char address[MAX_ADDRESS_VAL_LEN+1];
+       MSG_VIEWER_REPORT_TYPE_S delivery;
+       MSG_VIEWER_REPORT_TYPE_S read;
+} MSG_VIEWER_REPORT_LIST_S;
 /*==================================================================================================
  *                                                                     FUNCTION DECLARATIONS
  *==================================================================================================*/
@@ -279,13 +294,14 @@ void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_i
 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_stop_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);
 
 /* Play controller */
 void msg_ui_viewer_volume_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
@@ -294,8 +310,7 @@ void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object *o, const char *
 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);
 Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data);
-void msg_ui_viewer_command_play_pause(void *data);
-void msg_ui_viewer_update_player_state_after_save(void *data);
+MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E action_type);
 
 /* 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);
@@ -306,5 +321,6 @@ void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *ev
 void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
 
 /* message info */
-void msg_ui_viewer_contact_info_update(MSG_PLAY_DATA_S *data);
+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);
 #endif /* __MSG_UI_VIEWER_PLAY_VIEW_H__*/
index 9dd6f26..154509d 100755 (executable)
@@ -32,6 +32,7 @@
 #define MSG_VIEWER_DEFAULT_FILE_NUMBER 1
 #define MSG_VIEWER_INVALID_FILE_NUMBER -1
 
+#define MSG_VIEWER_THEME       EDJDIR"/msg_viewer.edj"
 /*==================================================================================================
  *                                                                             STRUCTURES
  *==================================================================================================*/
index 7b0f366..19628a3 100755 (executable)
@@ -67,6 +67,16 @@ void _msg_smil_destroy_content_mgr(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
 MSG_BOOL _msg_smil_cont_mgr_set_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, SMIL_PLAYER_STATUS_E event);
 
 /**
+*@fn                   _msg_smil_cont_mgr_get_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx);
+*@brief                        This function will allow getting the slideIdx's slide status to the Content Manager.
+*@return                       current slide's status.
+*@param[in]            smilContMgrHndle           This is the handler to the SMILMessage Content Manager.
+*@param[in]            slideIdx           This is slide index to get
+*@param[out]   None.
+*/
+SMIL_PLAYER_STATUS_E _msg_smil_cont_mgr_get_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx);
+
+/**
 *@fn                   _msg_smil_cont_mgr_get_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle);
 *@brief                        This function returns the Current Slide index.
 *@return                       The Current Slide index on success , else failure return code
index 2581e83..c3c579d 100755 (executable)
@@ -90,44 +90,52 @@ typedef struct _SMIL_FONT_SYTLE_S {
 } SMIL_FONT_SYTLE_S;
 
 typedef struct _SMIL_RENDERER_DATA_S {
-       void    *smilhandle;
-       msg_struct_t    msg_info_t;
-       Evas_Object     *main_window;
-       Evas_Object     *layout_main;
-       Evas_Object     *viewer_scroller;
-       Evas_Object     *viewer_content_box;    /*it contans text(entry) and image*/
-       Evas_Object     *viewer_bg_rect;
-       Evas_Object     *viewer_body;   /*it shows text , entry*/
-
-       char    *viewer_body_text;      /*set page text*/
-       Evas_Object     *insert_image;
-       Evas_Object     *insert_sound_icon;     /*display invalid drm sound icon*/
-       Evas_Object     *insert_unsupported_icon;       /*display unsupported icon*/
-       Evas_Object     *video_image;
-       Evas_Object     *attach_list;           /* attach list for help page */
-       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*/
-       int     video_width;
-       int     video_height;
-       int     video_duration; /*video content's duration*/
-       Ecore_Idler     *video_resize_idle;
-       Ecore_Idler     *video_duration_idle;
-       Ecore_Idler     *video_eos_idle;
-
-       int     player_state;
-       int     viewer_width;
-       int     viewer_height;
-       int     viewer_landscape_width;
-       int     viewer_landscape_height;
-       int     button_height;
-       int     main_win_rotate;        /*current rotation value of main window*/
+       void *smilhandle;
+       msg_struct_t msg_info_t;
+       Evas_Object *main_window;
+       Evas_Object *layout_main;
+       Evas_Object *viewer_scroller;
+       Evas_Object *viewer_content_box;                /*it contans text(entry) and image*/
+       Evas_Object *viewer_bg_rect;                    /* bg color */
+       Evas_Object *viewer_body;                               /* it shows text , entry*/
+       Evas_Object *viewer_audio_name_rect;    /* rect area for displaying audio file name */
+       Evas_Object *viewer_body_top_padding;   /* padding rect area for top of content box */
+       Evas_Object *viewer_body_mid_padding;   /* padding rect area between image and text */
+       Evas_Object *viewer_body_bottom_padding;        /* padding rect area for bottom of content box */
+
+       char *viewer_body_text;         /*set page text*/
+       Evas_Object *insert_image;
+       Evas_Object *insert_sound_icon; /*display invalid drm sound icon*/
+       Evas_Object *insert_unsupported_icon;   /*display unsupported icon*/
+       Evas_Object *video_image;
+       Evas_Object *attach_list;       /* attach list for help page */
+       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*/
+       int video_width;
+       int video_height;
+       int video_duration;     /*video content's duration*/
+
+       int resized_width;
+       int resized_height;
+
+       Ecore_Idler *video_resize_idle;
+       Ecore_Idler *video_duration_idle;
+       Ecore_Idler *video_eos_idle;
+
+       int player_state;
+       int viewer_width;
+       int viewer_height;
+       int viewer_landscape_width;
+       int viewer_landscape_height;
+       int button_height;
+       int main_win_rotate;    /*current rotation value of main window*/
 
        pfnSMILHelpPageCb appSmilHelpPageCb;
-       void    *appUserData;
+       void *appUserData;
 
-       VIEWER_COLORREF bgcolor;
-       MSG_BOOL        ismute; /*sound, video mute mode when silent mode*/
+       VIEWER_COLORREF bgcolor;
+       MSG_BOOL ismute;        /*sound, video mute mode when silent mode*/
 
        char *working_path;
 } SMIL_RENDERER_DATA_S;
@@ -166,9 +174,9 @@ MSG_BOOL _msg_smil_render_show_help_page_attach_list(SMIL_RENDERER_DATA_S *viewe
 /*==================================================================================================
  *                                                                             Media related functions
  *==================================================================================================*/
-MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
+MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_PLAYER_STATUS_E status);
 MSG_BOOL _msg_smil_render_show_inserted_image(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
-MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
+MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_PLAYER_STATUS_E status);
 
 /*smil player sound and video related functions*/
 MSG_BOOL _msg_smil_render_pause(void *data, int mediaType);
index 6cfada9..aea531c 100755 (executable)
@@ -72,7 +72,8 @@ typedef enum _SMIL_PLAYER_EVENT_E {
 typedef enum _SMIL_PLAYER_STATUS_E {
        PLAYER_STATUS_NONE = 0,
        PLAYER_STATUS_PLAYING,
-       PLAYER_STATUS_PLAY_END,
+       PLAYER_STATUS_PLAY_END,         /* End status while playing */
+       PLAYER_STATUS_PAUSED_END,       /* End status while paused */
        PLAYER_STATUS_STOPPED,
        PLAYER_STATUS_PAUSED,
        PLAYER_STATUS_INVALID,
@@ -97,7 +98,8 @@ typedef enum _SMIL_PLAYER_RENDER_EVENT_E {
        SMIL_RENDER_EVENT_NONE = -1,
        SMIL_RENDER_EVENT_PAGE_PLAY_START = 0,  /* Start playing the Page */
        SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START,        /* Start Playing both Page and  Media at the same time*/
-       SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE,   /*Puase player by interrupted earjack off*/
+       SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE,   /*Pause player by interrupted earjack off*/
+       SMIL_RENDER_EVENT_MOVE_PAGE_AFTER_PAUSED,       /*Pause player automatically after moving to prev or next page to keep up with prevous player status(paused)*/
        SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE,      /* For notifying the Client about the last slide */
        SMIL_RENDER_EVENT_DESTROY_SCREEN,       /*This Event is called to destroy current screen*/
        SMIL_RENDER_EVENT_ERROR,        /* Stop playing because of Error*/
index 0f956de..e644a34 100755 (executable)
@@ -17,8 +17,7 @@
 /*==================================================================================================
  *                                                                     INCLUDE HEADERS
  *==================================================================================================*/
-#include <mm_file.h>
-#include <mmf/mm_error.h>
+#include <metadata_extractor.h>
 #include "msg-smil-content-manager.h"
 #include "msg-smil-player.h"
 
@@ -588,6 +587,7 @@ static MSG_BOOL __msg_smil_cont_mgr_is_valid_slide(SMIL_MASTER_SLIDE_INFO_S *com
 
 MSG_BOOL _msg_smil_cont_mgr_set_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, SMIL_PLAYER_STATUS_E event)
 {
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, FALSE);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent->commonData == NULL, FALSE);
@@ -611,6 +611,29 @@ MSG_BOOL _msg_smil_cont_mgr_set_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHnd
        return TRUE;
 }
 
+SMIL_PLAYER_STATUS_E _msg_smil_cont_mgr_get_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, PLAYER_STATUS_INVALID);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, PLAYER_STATUS_INVALID);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent->commonData == NULL, PLAYER_STATUS_INVALID);
+       SMIL_SLIDE_INFO_S *findSlide = smilContMgrHndle->smilContent;
+       int count = 0;
+
+       if (__msg_smil_cont_mgr_is_valid_slide(findSlide->commonData, slideIdx) == FALSE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide index is invalid");
+               return PLAYER_STATUS_INVALID;
+       }
+
+       while (count < slideIdx) {
+               findSlide = findSlide->nextSlide;
+               count++;
+       }
+
+       return findSlide->slideStatus;
+}
+
+
 
 SMIL_PLAYER_STATUS_E _msg_smil_cont_mgr_get_cur_slide_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle)
 {
@@ -1009,10 +1032,6 @@ msg_struct_t     _msg_smil_cont_mgr_get_mms_body_struct_handle(SMIL_CONTENT_MGR_HAND
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, NULL);
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "smilContMgrHndle->msg_info_t = 0x%x", smilContMgrHndle->msg_info_t);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
        return smilContMgrHndle->msg_info_t;
 }
 
@@ -1051,6 +1070,7 @@ MSG_BOOL _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMg
                while (slideIdx < curSlide->commonData->pageCnt) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d", slideIdx);
                        double pagetime = 0.0;
+                       char *value = NULL;
                        int duration = 0;
                        double maximum_time = 0.0;
 
@@ -1107,6 +1127,8 @@ MSG_BOOL _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMg
                                                        bool is_drm = FALSE;
                                                        bool is_available_play = FALSE;
 
+                                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaType = %d", mediaType);
+
                                                        //check DRM
                                                        drm_bool_type_e is_drm_file = DRM_UNKNOWN;
                                                        int ret = DRM_RETURN_SUCCESS;
@@ -1134,42 +1156,45 @@ MSG_BOOL _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMg
 
                                                        if (is_available_play) {
                                                                int ret = 0;
-                                                               MMHandleType content_attrs = 0;
-
-                                                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "tempMedia->szFilePath is %s", szFilePath);
-
-                                                               ret = mm_file_create_content_attrs(&content_attrs, szFilePath);
-
-                                                               if (ret == MM_ERROR_NONE) {
-                                                                       char *error = NULL;
+                                                               metadata_extractor_h handle = NULL;
+                                                               ret = metadata_extractor_create(&handle);
+
+                                                               if (ret == METADATA_EXTRACTOR_ERROR_NONE) {
+                                                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "tempMedia->szFilePath is %s", szFilePath);
+                                                                       ret = metadata_extractor_set_path(handle, szFilePath);
+                                                                       if (ret != METADATA_EXTRACTOR_ERROR_NONE) {
+                                                                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "metadata_extractor_set_path is failed, %d", ret);
+                                                                               metadata_extractor_destroy(handle);
+                                                                               return FALSE;
+                                                                       }
 
-                                                                       ret = mm_file_get_attrs(content_attrs, &error, MM_FILE_CONTENT_DURATION, &duration, NULL);
+                                                                       ret = metadata_extractor_get_metadata(handle, METADATA_DURATION, &value);
 
-                                                                       if (ret != MM_ERROR_NONE) {
-                                                                               if (error) {
-                                                                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mm_file_get_attrs is failed - ret(%x), error(%s)", ret, error);
-                                                                                       free(error);
-                                                                               } else {
-                                                                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mm_file_get_attrs is failed - ret(%x)", ret);
+                                                                       if (ret == METADATA_EXTRACTOR_ERROR_NONE) {
+                                                                               if (value) {
+                                                                                       duration = atoi(value);
+                                                                                       free(value);
                                                                                }
+                                                                       } else {
+                                                                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "metadata_extractor_get_metadata is failed - ret(%x)", ret);
+                                                                               metadata_extractor_destroy(handle);
+                                                                               return FALSE;
                                                                        }
+
                                                                        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file : %s, duration : %f", szFilePath, (double)duration);
 
-                                                                       if (content_attrs)
-                                                                               mm_file_destroy_content_attrs(content_attrs);
+                                                                       metadata_extractor_destroy(handle);
                                                                } else {
-                                                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mm_file_create_content_attrs is failed - ret(%x)", ret);
+                                                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "metadata_extractor_create is failed - ret(%x)", ret);
                                                                }
                                                        }
 
-
                                                        //ceiling duration time
                                                        double ceilvalue = ceil((double)duration/1000)*1000;
                                                        if (maximum_time <= ceilvalue)
                                                                maximum_time = ceilvalue;
-                                               } else {
-                                                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current media type(%d) is follow page duration time. skip checking..", mediaType);
                                                }
+
                                                index++;
                                        }
                                }
index 0af9ffe..22f2b91 100755 (executable)
@@ -182,6 +182,7 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
        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);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_ERR_SMIL_INVALID_SLIDE);
+       SMIL_PLAYER_STATUS_E prev_slide_status = PLAYER_STATUS_NONE;
 
        if (curSlideIdx < 0) {
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid slide index = %d", curSlideIdx);
@@ -202,6 +203,7 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
 
        if (_msg_smil_cont_mgr_set_cur_slide_idx(smilContMgrHndle, curSlideIdx) == FALSE)
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_cur_slide_idx is failed");
+
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current slide idx = %d", _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle));
 
        int pageCnt = _msg_smil_cont_mgr_get_total_slide_count(smilContMgrHndle);
@@ -225,6 +227,8 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
 
                                        /* 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);
                                                haspageinfo = FALSE;
                                                break;
                                        }
@@ -278,6 +282,12 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                                case PAGE_EVENT_MOVE_TO_NEXT:
                                        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PAGE_EVENT_MOVE_TO_NEXT");
                                        if (singleSlideInfo->nextSlide != NULL) {
+                                               /* check previouts slide status */
+                                               int slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle);
+                                               SMIL_SLIDE_INFO_S *prev_slideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx-1);
+                                               if (prev_slideInfo)
+                                                       prev_slide_status = prev_slideInfo->slideStatus;
+
                                                /* Move to next slide*/
                                                _msg_smil_event_mgr_set_current_slide(smilEvntMgrHndle, singleSlideInfo->nextSlide);
                                                _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_PLAY);
@@ -293,6 +303,12 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                                        continue;
                                case PAGE_EVENT_MOVE_TO_PREV:
                                        if (singleSlideInfo->prevSlide != NULL) {
+                                               /* check previouts slide status */
+                                               int slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle);
+                                               SMIL_SLIDE_INFO_S *prev_slideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx+1);
+                                               if (prev_slideInfo)
+                                                       prev_slide_status = prev_slideInfo->slideStatus;
+
                                                /* Move to prev slide*/
                                                _msg_smil_event_mgr_set_current_slide(smilEvntMgrHndle, singleSlideInfo->prevSlide);
                                                singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle);
@@ -323,7 +339,10 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                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);
+               if (prev_slide_status == PLAYER_STATUS_PAUSED_END)
+                       _msg_smil_cont_mgr_set_status(smilContMgrHndle, slideIdx, PLAYER_STATUS_PAUSED);
+               else
+                       _msg_smil_cont_mgr_set_status(smilContMgrHndle, slideIdx, PLAYER_STATUS_PLAYING);
 
                /*calling renderhandler to draw content*/
                MSG_BOOL rendering_failed = FALSE;
@@ -344,6 +363,10 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                        rendering_failed = TRUE;
                }
 
+               SMIL_SLIDE_INFO_S *curSlideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx);
+               if (curSlideInfo->slideStatus == PLAYER_STATUS_PAUSED)
+                       _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_MOVE_PAGE_AFTER_PAUSED);
+
                /*Calling the callback function of Client.*/
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Calling the Client callback");
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "RENDEREVENT = %d", slideTimerCbData->curSlideParam->renderEvent);
@@ -425,6 +448,11 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timer is not registerd actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage);
                        }
                }
+
+               // set play timer pause to synchronize UI timer
+               if (curSlideInfo->slideStatus == PLAYER_STATUS_PAUSED && slideTimerCbData->timerHandle)
+                       ecore_timer_freeze(slideTimerCbData->timerHandle);
+
        } else {
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Page event is error actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage);
        }
@@ -468,13 +496,25 @@ MSG_SMIL_ERROR_E _msg_smil_event_mgr_stop_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvn
                slideTimerCbData->timerHandle = NULL;
        }
 
-       /* Update status as PLAYER_STATUS_PLAY_END */
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CALL UPDATE AT PLAY END");
        SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle);
        int curSlideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle);
-       if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PLAY_END) == FALSE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed");
-               return MSG_ERR_SMIL_NULL_MESSAGE;
+
+       if (_msg_smil_cont_mgr_get_status(smilContMgrHndle, curSlideIdx) == PLAYER_STATUS_PAUSED) {
+               /* Update status as PLAYER_STATUS_PAUSED_END */
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CALL UPDATE AT PAUSED -> END : PLAYER_STATUS_PAUSED_END");
+
+               if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PAUSED_END) == FALSE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed");
+                       return MSG_ERR_SMIL_NULL_MESSAGE;
+               }
+       } else {
+               /* Update status as PLAYER_STATUS_PLAY_END */
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CALL UPDATE AT PLAYING -> END : PLAYER_STATUS_PLAY_END");
+
+               if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PLAY_END) == FALSE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed");
+                       return MSG_ERR_SMIL_NULL_MESSAGE;
+               }
        }
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
index 79d66ee..818c02d 100755 (executable)
 #include "msg-ui-common-utility.h"
 
 #include <mm_error.h>
-#include <mm_player.h>
-#include <mm_session.h>
+#include <player.h>
+#include <metadata_extractor.h>
 #include <utilX.h>
 #include <Ecore_X.h>
 #include <E_DBus.h>
-/*For Multimedia element width, height.*/
-#include "mm_file.h"
-
-/*for direct video displaying*/
-#include <mm_player_internal.h>
 
 /*==================================================================================================
  *                                                             FUNCTION DECLARATIONS
@@ -51,20 +46,21 @@ static MSG_BOOL __msg_smil_render_player_mgr_stop(void *data);
 static MSG_BOOL __msg_smil_render_player_mgr_realize(void *data);
 static MSG_BOOL __msg_smil_render_player_mgr_unrealize(void);
 static MSG_BOOL __msg_smil_render_player_mgr_pause(void *data);
-static MSG_BOOL __msg_smil_render_player_mgr_resume(void *data);
+static MSG_BOOL __msg_smil_render_player_mgr_resume(void *data, int mediaType);
 static MSG_BOOL __msg_smil_render_player_mgr_mute(void *data);
-static MSG_BOOL __msg_smil_render_player_mgr_set_msg_cb(MMMessageCallback cb, void *user_data);
+static MSG_BOOL __msg_smil_render_player_mgr_set_player_cb(void *user_data);
 static MSG_BOOL __msg_smil_render_player_mgr_set_video_stream_cb(void *cb, void *user_data);
 static MSG_BOOL __msg_smil_render_player_mgr_set_attribute(void *data, const char *path, int mediaType);
 
 static MSG_BOOL __msg_smil_render_check_file_validity(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path);
 static MSG_BOOL __msg_smil_render_get_video_size(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path, int *width, int *height);
 static void __msg_smil_render_show_image_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_RENDER_IMAGE_TYPE_E imageType);
-static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
-static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path);
+static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_PLAYER_STATUS_E status);
+static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_PLAYER_STATUS_E status);
 static MSG_BOOL __msg_smil_render_get_resized_content_size(void *data, int content_w, int content_h, int *w, int *h);
 static void __msg_smil_render_create_video_image(void *data);
 static void __msg_smil_render_start_video_timer(void *data);
+
 /*idle functions*/
 static Eina_Bool __msg_smil_render_player_mgr_get_content_duration(void *data);
 static Eina_Bool __msg_smil_render_end_of_stream(void *data);
@@ -72,13 +68,15 @@ static Eina_Bool __msg_smil_render_resize_mm_video(void *data);
 static Eina_Bool __msg_smil_render_update_video_screen(void *data);
 
 /*cb functions*/
-static int __msg_smil_render_msg_cb(int msg_type, void *msg_param, void *user_param);
-static int __msg_smil_render_video_stream_cb(void *stream, int stream_size, void *user_param, int width, int height);
+static int __msg_smil_render_video_stream_cb(unsigned char *data, int width, int height, unsigned int size, void *user_data);
+static void __msg_smil_render_error_cb(int error_code, void *user_param);
+static void __msg_smil_render_complete_cb(void *user_param);
+static void __msg_smil_render_interrupted_cb(player_interrupted_code_e code, void *user_param);
 
 /*================================================================================================
  *                                                             FUNCTION IMPLEMENTATIONS
  *================================================================================================*/
-static MMHandleType _player = 0;
+static player_h _player = 0;
 
 static MSG_BOOL __msg_smil_render_is_player_active(void)
 {
@@ -92,15 +90,16 @@ static MSG_BOOL __msg_smil_render_player_mgr_create(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;
-       int err = MM_ERROR_NONE;
+       int err = PLAYER_ERROR_NONE;
 
        if (__msg_smil_render_is_player_active())
                return FALSE;
 
-       if ((err = mm_player_create(&_player)) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_create is failed err = %x", err);
+       if ((err = player_create(&_player)) != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_create is failed err = %x", err);
                return FALSE;
        }
+
        viewerRenderData->player_state = MEDIA_PLAYER_STATE_INIT;
 
        return TRUE;
@@ -112,13 +111,13 @@ static MSG_BOOL __msg_smil_render_player_mgr_realize(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;
-       int err = MM_ERROR_NONE;
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if ((err = mm_player_realize(_player)) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_realize Error = %x", err);
+       if ((err = player_prepare(_player)) != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_prepare Error = %d", err);
                return FALSE;
        }
        viewerRenderData->player_state = MEDIA_PLAYER_STATE_READY;
@@ -130,12 +129,13 @@ static MSG_BOOL __msg_smil_render_player_mgr_realize(void *data)
 static MSG_BOOL __msg_smil_render_player_mgr_unrealize(void)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if (mm_player_unrealize(_player) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_unrealize is failed");
+       if ((err = player_unprepare(_player)) != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_unprepare Error = %d", err);
                return FALSE;
        }
 
@@ -152,8 +152,8 @@ static MSG_BOOL __msg_smil_render_player_mgr_destroy(void *data)
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if (mm_player_destroy(_player) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_destroy is failed");
+       if (player_destroy(_player) != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_destroy is failed");
                return FALSE;
        }
        _player = 0;
@@ -168,13 +168,13 @@ static MSG_BOOL __msg_smil_render_player_mgr_play(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;
-       int err = MM_ERROR_NONE;
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if ((err = mm_player_start(_player)) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_start is failed err = 0x%x", err);
+       if ((err = player_start(_player)) != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_start is failed err = %d", err);
                return FALSE;
        }
        viewerRenderData->player_state = MEDIA_PLAYER_STATE_PLAYING;
@@ -188,13 +188,13 @@ static MSG_BOOL __msg_smil_render_player_mgr_pause(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;
-       int err = MM_ERROR_NONE;
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if ((err = mm_player_pause(_player)) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_pause is failed err = 0x%x", err);
+       if ((err = player_pause(_player)) != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_pause is failed err = %d", err);
                return FALSE;
        }
        viewerRenderData->player_state = MEDIA_PLAYER_STATE_PAUSED;
@@ -203,19 +203,37 @@ static MSG_BOOL __msg_smil_render_player_mgr_pause(void *data)
 }
 
 
-static MSG_BOOL __msg_smil_render_player_mgr_resume(void *data)
+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 = MM_ERROR_NONE;
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if ((err = mm_player_resume(_player)) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_resume is failed err = 0x%x", err);
-               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 (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;
+               }
+       } 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;
+               }
        }
        viewerRenderData->player_state = MEDIA_PLAYER_STATE_PLAYING;
 
@@ -227,13 +245,13 @@ static MSG_BOOL __msg_smil_render_player_mgr_mute(void *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
-       int err = MM_ERROR_NONE;
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if ((err = mm_player_set_mute(_player, TRUE)) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_mute is failed err = 0x%x", err);
+       if ((err = player_set_mute(_player, TRUE)) != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_set_mute is failed err = %d", err);
                return FALSE;
        }
 
@@ -249,9 +267,9 @@ static MSG_BOOL __msg_smil_render_player_mgr_stop(void *data)
 
        /*stop media player*/
        if (__msg_smil_render_is_player_active() && viewerRenderData->player_state == MEDIA_PLAYER_STATE_PLAYING) {
-               int err = MM_ERROR_NONE;
-               if ((err = mm_player_stop(_player)) != MM_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_stop is failed err = 0x%x", err);
+               int err = PLAYER_ERROR_NONE;
+               if ((err = player_stop(_player)) != PLAYER_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_stop is failed err = %d", err);
                        return FALSE;
                }
        }
@@ -261,18 +279,35 @@ static MSG_BOOL __msg_smil_render_player_mgr_stop(void *data)
 }
 
 
-static MSG_BOOL __msg_smil_render_player_mgr_set_msg_cb(MMMessageCallback cb, void *user_data)
+static MSG_BOOL __msg_smil_render_player_mgr_set_player_cb(void *user_data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       int err = MM_ERROR_NONE;
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if ((err = mm_player_set_message_callback(_player, cb, user_data)) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_message_callback is failed err = 0x%x", err);
+       /* set error cb */
+       err = player_set_error_cb(_player, __msg_smil_render_error_cb, user_data);
+       if (err != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_set_error_cb is failed err = %d", err);
+               return FALSE;
+       }
+
+       /* set complete cb */
+       err = player_set_completed_cb(_player, __msg_smil_render_complete_cb, user_data);
+       if (err != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_set_completed_cb is failed err = %d", err);
+               return FALSE;
+       }
+
+       /* set interrupted cb */
+       err = player_set_interrupted_cb(_player, __msg_smil_render_interrupted_cb, user_data);
+       if (err != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_set_interrupted_cb is failed err = %d", err);
                return FALSE;
        }
+
        return TRUE;
 }
 
@@ -280,13 +315,13 @@ static MSG_BOOL __msg_smil_render_player_mgr_set_msg_cb(MMMessageCallback cb, vo
 static MSG_BOOL __msg_smil_render_player_mgr_set_video_stream_cb(void *cb, void *user_data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       int err = MM_ERROR_NONE;
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       if ((err = mm_player_set_video_stream_callback(_player, cb, user_data)) != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_video_stream_callback is failed err = 0x%x", err);
+       if ((err = player_set_video_frame_decoded_cb(_player, cb, user_data)) != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_set_video_frame_decoded_cb is failed err = %d", err);
                return FALSE;
        }
        return TRUE;
@@ -299,61 +334,42 @@ static MSG_BOOL __msg_smil_render_player_mgr_set_attribute(void *data, const cha
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE);
        SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
-       int err = MM_ERROR_NONE;
-       char *perr_name = NULL;
-       int resized_width = 0;
-       int resized_height = 0;
-       int path_len = strlen(path);
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active())
                return FALSE;
 
-       /*avsysaudiosink volume table setting*/
-       err = mm_player_set_attribute(_player, &perr_name,
-                                                                       "sound_volume_type", MM_SOUND_VOLUME_TYPE_MEDIA,
-                                                                       "sound_priority", MM_SOUND_PRIORITY_1,
-                                                                       "sound_fadeup", 0,
-                                                                       "sound_route", MM_AUDIOROUTE_PLAYBACK_NORMAL,
-                                                                       NULL);
-       if (err != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name);
-               free(perr_name);
+       /*  set sound type */
+       err = player_set_sound_type(_player, SOUND_TYPE_MEDIA);
+       if (err != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_set_sound_type is failed. err = %d ", err)
                return FALSE;
        }
 
-       err = mm_player_set_attribute(_player, &perr_name,
-                                                                       "profile_uri", path, path_len,
-                                                                       NULL);
-       if (err != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name);
-               free(perr_name);
+       err = player_set_uri(_player, path);
+       if (err != PLAYER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_set_uri is failed. err = %d", err);
                return FALSE;
        }
 
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaType = %d", mediaType);
+
        if (mediaType == MMS_SMIL_MEDIA_VIDEO) {
-               err = mm_player_set_attribute(_player, &perr_name,
-                                                                               "display_rotation", MM_DISPLAY_ROTATION_NONE,
-                                                                               NULL);
-               if (err != MM_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name);
-                       free(perr_name);
+               err = player_set_x11_display_rotation(_player, PLAYER_DISPLAY_ROTATION_NONE);
+               if (err != PLAYER_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_set_x11_display_rotation is failed. err = %d", err);
                        return FALSE;
                }
 
-               if (!__msg_smil_render_get_resized_content_size(viewerRenderData, viewerRenderData->video_width, viewerRenderData->video_height, &resized_width, &resized_height)) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_get_resized_content_size is failed");
-                       resized_width = viewerRenderData->viewer_width;
-                       resized_height = viewerRenderData->viewer_landscape_height;
+               err = player_set_display(_player, PLAYER_DISPLAY_TYPE_EVAS, (void *)viewerRenderData->video_image);
+               if (err != PLAYER_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_set_display is failed. err = %d", err);
+                       return FALSE;
                }
 
-               err = mm_player_set_attribute(_player, &perr_name,
-                                                                               "display_width", resized_width,
-                                                                               "display_height", resized_height,
-                                                                               NULL);
-               if (err != MM_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name);
-                       free(perr_name);
+               err = player_enable_evas_display_scaling(_player, false);
+               if(err != PLAYER_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_enable_evas_display_scaling is failed. err = %d", err);
                        return FALSE;
                }
        }
@@ -368,20 +384,16 @@ static Eina_Bool __msg_smil_render_player_mgr_get_content_duration(void *data)
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, ECORE_CALLBACK_CANCEL);
        SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
        int duration = 0;
-       char *perr_name = NULL;
-       int err = MM_ERROR_NONE;
+       int err = PLAYER_ERROR_NONE;
 
        if (!__msg_smil_render_is_player_active()) {
                viewerRenderData->video_duration_idle = NULL;
                return ECORE_CALLBACK_CANCEL;
        }
 
-       err = mm_player_get_attribute(_player, &perr_name, "content_duration", &duration, NULL);
-       if (err != MM_ERROR_NONE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_get_attribute is failed err = %x, pErrName = (%s)", err, perr_name);
-               if (perr_name)
-                       free(perr_name);
-       }
+       err = player_get_duration(_player, &duration);
+       if (err != PLAYER_ERROR_NONE)
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player_get_duration is failed err = %d", err);
 
        viewerRenderData->video_duration = duration;
        viewerRenderData->video_duration_idle = NULL;
@@ -404,8 +416,10 @@ MSG_BOOL _msg_smil_render_pause(void *data, int mediaType)
                elm_icon_animated_play_set(viewerRenderData->insert_image, EINA_FALSE);
 
        /* enable copy and paste popup */
-       elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
-       elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+       if (viewerRenderData->viewer_body) {
+               elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+               elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+       }
 
        if (mediaType == MMS_SMIL_MEDIA_VIDEO || mediaType == MMS_SMIL_MEDIA_AUDIO) {
                SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
@@ -430,14 +444,16 @@ MSG_BOOL _msg_smil_render_resume(void *data, int mediaType)
                elm_icon_animated_play_set(viewerRenderData->insert_image, EINA_TRUE);
 
        /* disable copy and paste popup */
-       elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
-       elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
-       elm_entry_select_none(viewerRenderData->viewer_body);
+       if (viewerRenderData->viewer_body) {
+               elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+               elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+               elm_entry_select_none(viewerRenderData->viewer_body);
+       }
 
        if (mediaType == MMS_SMIL_MEDIA_VIDEO || mediaType == MMS_SMIL_MEDIA_AUDIO) {
                SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
                if (_msg_smil_event_mgr_get_video_endofstream(smil_handler->smilEvntMgrHndle) == FALSE)
-                       return __msg_smil_render_player_mgr_resume(viewerRenderData);
+                       return __msg_smil_render_player_mgr_resume(viewerRenderData, mediaType);
        }
 
        return TRUE;
@@ -459,8 +475,10 @@ MSG_BOOL _msg_smil_render_stop_playing_file(void *data)
                elm_icon_animated_play_set(viewerRenderData->insert_image, EINA_FALSE);
 
        /* enable copy and paste popup */
-       elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
-       elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+       if (viewerRenderData->viewer_body) {
+               elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+               elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_FALSE);
+       }
 
        __msg_smil_render_player_mgr_stop(data);
        __msg_smil_render_player_mgr_unrealize();
@@ -516,31 +534,17 @@ static Eina_Bool __msg_smil_render_resize_mm_video(void *data)
        SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data;
 
        if (viewerRenderData->video_image) {
-               int video_width = 0;
-               int video_height = 0;
-               int err = MM_ERROR_NONE;
-               char *perr_name = NULL;
-
-               evas_object_image_size_get(viewerRenderData->video_image, &video_width, &video_height);
-               err = mm_player_set_attribute(_player, &perr_name,
-                                                                                                               "display_width", video_width,
-                                                                                                               "display_height", video_height,
-                                                                                                               NULL);
-               if (err != MM_ERROR_NONE) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x", err);
-                       if (perr_name)
-                               free(perr_name);
+               evas_object_image_size_set(viewerRenderData->video_image, viewerRenderData->resized_width, viewerRenderData->resized_height);
+               evas_object_resize(viewerRenderData->video_image, viewerRenderData->resized_width, viewerRenderData->resized_height);
+               evas_object_image_fill_set(viewerRenderData->video_image, 0, 0, viewerRenderData->resized_width, viewerRenderData->resized_height);
 
-                       viewerRenderData->video_resize_idle = NULL;
-                       return ECORE_CALLBACK_CANCEL;
-               }
+               // set image buffer null
                viewerRenderData->video_image_buffer = NULL;
+               viewerRenderData->video_image_buffer = evas_object_image_data_get(viewerRenderData->video_image, EINA_TRUE);
+               evas_object_image_data_set(viewerRenderData->video_image, viewerRenderData->video_image_buffer);
 
-               if (!viewerRenderData->video_image_buffer) {
-                       viewerRenderData->video_image_buffer = evas_object_image_data_get(viewerRenderData->video_image, EINA_TRUE);
-                       evas_object_image_data_set(viewerRenderData->video_image, viewerRenderData->video_image_buffer);
-                       __msg_smil_render_update_video_screen(viewerRenderData);
-               }
+               /* update resized image screen */
+               __msg_smil_render_update_video_screen(viewerRenderData);
        }
 
        viewerRenderData->video_resize_idle = NULL;
@@ -548,15 +552,15 @@ static Eina_Bool __msg_smil_render_resize_mm_video(void *data)
 }
 
 
-static int __msg_smil_render_video_stream_cb(void *stream, int stream_size, void *user_param, int width, int height)
+static int __msg_smil_render_video_stream_cb(unsigned char *data, int width, int height, unsigned int size, void *user_data)
 {
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, stream == NULL || stream_size <= 0, MSG_UI_RET_ERR);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, user_param == NULL, MSG_UI_RET_ERR);
-       SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)user_param;
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL || size <= 0, MSG_UI_RET_ERR);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, user_data == NULL, MSG_UI_RET_ERR);
+       SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)user_data;
        int video_width = 0;
        int video_height = 0;
 
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "stream_size = %d, width = %d, height = %d", stream_size, width, height);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "stream_size = %d, width = %d, height = %d", size, width, height);
        evas_object_image_size_get(viewerRenderData->video_image, &video_width, &video_height);
 
        if (viewerRenderData->is_skip_frame) {  /*skip 1 frame*/
@@ -571,6 +575,11 @@ static int __msg_smil_render_video_stream_cb(void *stream, int stream_size, void
                        ecore_idler_del(viewerRenderData->video_resize_idle);
                        viewerRenderData->video_resize_idle = NULL;
                }
+
+               evas_object_image_size_set(viewerRenderData->video_image, width, height);
+               viewerRenderData->video_image_buffer = NULL;
+               evas_object_image_data_set(viewerRenderData->video_image, (void *)data);
+
                viewerRenderData->video_resize_idle = ecore_idler_add(__msg_smil_render_resize_mm_video, (void *)viewerRenderData);
                return MSG_UI_RET_SUCCESS;
        }
@@ -582,7 +591,7 @@ static int __msg_smil_render_video_stream_cb(void *stream, int stream_size, void
 
        /*update evas image buffer*/
        if (viewerRenderData->video_image_buffer)
-               memcpy(viewerRenderData->video_image_buffer, stream, stream_size);
+               memcpy(viewerRenderData->video_image_buffer, data, size);
 
        return MSG_UI_RET_SUCCESS;
 }
@@ -610,140 +619,89 @@ static Eina_Bool __msg_smil_render_end_of_stream(void *data)
        return ECORE_CALLBACK_CANCEL;
 }
 
+static void __msg_smil_render_error_cb(int error_code, void *user_param)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, user_param == NULL);
+
+       if (!__msg_smil_render_is_player_active())
+               return;
 
-static int __msg_smil_render_msg_cb(int msg_type, void *msg_param, void *user_param)
+       /*case MM_MESSAGE_ERROR */
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_ERROR, %d", error_code);
+}
+
+static void __msg_smil_render_complete_cb(void *user_param)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, user_param == NULL, MSG_UI_RET_ERR);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, user_param == NULL);
        SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)user_param;
-       MMMessageParamType *param = (MMMessageParamType *)msg_param;
 
        if (!__msg_smil_render_is_player_active())
-               return MSG_UI_RET_ERR;
+               return;
 
-       switch (msg_type) {
-       case MM_MESSAGE_BEGIN_OF_STREAM:
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_BEGIN_OF_STREAM");
-               {
-                       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);
+       /*case MM_MESSAGE_END_OF_STREAM */
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_END_OF_STREAM");
 
-                       if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo) {
-                               if (viewerRenderData->video_duration_idle) {
-                                       ecore_idler_del(viewerRenderData->video_duration_idle);
-                                       viewerRenderData->video_duration_idle = NULL;
-                               }
-                               viewerRenderData->video_duration_idle = ecore_idler_add(__msg_smil_render_player_mgr_get_content_duration, (void *)viewerRenderData);
-                       }
-                       viewerRenderData->is_skip_frame = TRUE;
-               }
-               break;
+       if (viewerRenderData->video_eos_idle) {
+               ecore_idler_del(viewerRenderData->video_eos_idle);
+               viewerRenderData->video_eos_idle = NULL;
+       }
+       viewerRenderData->video_eos_idle = ecore_idler_add(__msg_smil_render_end_of_stream, (void *)viewerRenderData);
+}
 
-       case MM_MESSAGE_ERROR:
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_ERROR");
-               break;
 
-       case MM_MESSAGE_WARNING:
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_WARNING");
-               break;
+static void __msg_smil_render_interrupted_cb(player_interrupted_code_e code, void *user_param)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, user_param == NULL);
+       SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)user_param;
 
-       case MM_MESSAGE_END_OF_STREAM:
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_END_OF_STREAM");
-               if (viewerRenderData->video_eos_idle) {
-                       ecore_idler_del(viewerRenderData->video_eos_idle);
-                       viewerRenderData->video_eos_idle = NULL;
-               }
-               viewerRenderData->video_eos_idle = ecore_idler_add(__msg_smil_render_end_of_stream, (void *)viewerRenderData);
-               break;
-
-       case MM_MESSAGE_STATE_CHANGED:
-               if (param) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_STATE_CHANGED with[%d]", param->state.current);
-                       switch (param->state.current) {
-                       case MM_PLAYER_STATE_NONE:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [NONE]");
-                               break;
-                       case MM_PLAYER_STATE_READY:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [READY]");
-                               break;
-                       case MM_PLAYER_STATE_PLAYING:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [PLAYING]");
-                               {
-                                       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);
-                               }
-                               break;
-                       case MM_PLAYER_STATE_PAUSED:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [PAUSED]");
-                               break;
-                       case MM_PLAYER_STATE_NULL:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [NULL]");
-                               break;
-                       }
-               }
-               break;
-
-       case MM_MESSAGE_STATE_INTERRUPTED:
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_STATE_INTERRUPTED");
-               if (param) {
-                       switch (param->code) {
-                       case MM_MSG_CODE_INTERRUPTED_BY_OTHER_APP:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_ERROR_PLAYER_BT_CONNECTION");
-                               break;
-
-                       case MM_MSG_CODE_INTERRUPTED_BY_CALL_START:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_CALL_START");
-                               break;
-
-                       case MM_MSG_CODE_INTERRUPTED_BY_CALL_END:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_CALL_END");
-                               break;
-
-                       case MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG");
-                               {
-                                       SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
-                                       SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle);
-                                       SMIL_SLIDE_EVENT_PARAM_S *curSlideParam = _msg_smil_event_mgr_get_slide_event_param_data(smilEvntMgrHndle);;
-                                       SMIL_TIMER_CALLBACK_DATA_S *timer_cb_data = _msg_smil_event_mgr_get_timer_cb_data(smilEvntMgrHndle);
-
-                                       _msg_smil_player_on_slide_event_handler((void **)&smil_handler, PLAYER_EVENT_PAUSE);
-                                       if (curSlideParam && timer_cb_data) {
-                                               _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE);
-                                               timer_cb_data->appSmilCb(&(curSlideParam->clientCbParam), timer_cb_data->appUserData);
-                                       }
-                               }
-                               break;
+       if (!__msg_smil_render_is_player_active())
+               return;
 
-                       case MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT");
-                               /*It is called when vtcall is receiving during video play*/
-                               break;
+       /*case MM_MESSAGE_END_OF_STREAM */
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_STATE_INTERRUPTED");
 
-                       case MM_MSG_CODE_INTERRUPTED_BY_ALARM_START:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_ALARM_START");
-                               break;
+       switch (code) {
+               case PLAYER_INTERRUPTED_BY_OTHER_APP:
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_ERROR_PLAYER_BT_CONNECTION");
+                       break;
 
-                       case MM_MSG_CODE_INTERRUPTED_BY_ALARM_END:
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_ALARM_END");
-                               break;
-                   }
-               }
-               break;
+               case PLAYER_INTERRUPTED_BY_CALL:
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_CALL_END");
+                       break;
 
-       default:
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid msg_type = %d", msg_type);
-               return MSG_UI_RET_ERR;
-       }
+               case PLAYER_INTERRUPTED_BY_EARJACK_UNPLUG:
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG");
 
-       return MSG_UI_RET_SUCCESS;
-}
+                       SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
+                       SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle);
+                       SMIL_SLIDE_EVENT_PARAM_S *curSlideParam = _msg_smil_event_mgr_get_slide_event_param_data(smilEvntMgrHndle);;
+                       SMIL_TIMER_CALLBACK_DATA_S *timer_cb_data = _msg_smil_event_mgr_get_timer_cb_data(smilEvntMgrHndle);
+
+                       _msg_smil_player_on_slide_event_handler((void **)&smil_handler, PLAYER_EVENT_PAUSE);
+                       if (curSlideParam && timer_cb_data) {
+                               _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE);
+                               timer_cb_data->appSmilCb(&(curSlideParam->clientCbParam), timer_cb_data->appUserData);
+                       }
+                       break;
+
+               case PLAYER_INTERRUPTED_BY_RESOURCE_CONFLICT:
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT");
+                       /*It is called when vtcall is receiving during video play*/
+                       break;
 
+               case PLAYER_INTERRUPTED_BY_ALARM:
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_ALARM_START");
+                       break;
 
-static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+               default:
+                       break;
+    }
+}
+
+static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_PLAYER_STATUS_E status)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
@@ -758,20 +716,21 @@ static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRe
        if (!__msg_smil_render_player_mgr_set_attribute(viewerRenderData, path, MMS_SMIL_MEDIA_AUDIO))
                return FALSE;
 
-       if (!__msg_smil_render_player_mgr_set_msg_cb(__msg_smil_render_msg_cb, (void *)viewerRenderData))
+       if (!__msg_smil_render_player_mgr_set_player_cb((void *)viewerRenderData))
                return FALSE;
 
-       if (!__msg_smil_render_player_mgr_realize((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_play((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");
+               /*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");
+               }
        }
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
@@ -779,7 +738,7 @@ static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRe
 }
 
 
-MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_PLAYER_STATUS_E status)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
@@ -809,7 +768,7 @@ MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRender
                        //copy drm content to app path end
 
                        /*play original sound(drm)*/
-                       if (__msg_smil_render_play_audio_file(viewerRenderData, app_drm_path) == FALSE) {
+                       if (__msg_smil_render_play_audio_file(viewerRenderData, app_drm_path, status) == FALSE) {
                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_audio_file is failed");
                                _msg_smil_render_stop_playing_file((void *)viewerRenderData);
 
@@ -831,7 +790,7 @@ MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRender
                }
        } else {
                /*normal case -- no drm*/
-               if (__msg_smil_render_play_audio_file(viewerRenderData, path) == FALSE) {
+               if (__msg_smil_render_play_audio_file(viewerRenderData, path, status) == FALSE) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_audio_file is failed");
                        _msg_smil_render_stop_playing_file((void *)viewerRenderData);
                        return FALSE;
@@ -860,18 +819,27 @@ static MSG_BOOL __msg_smil_render_check_file_validity(SMIL_RENDERER_DATA_S *view
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, file_path == NULL, FALSE);
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file_path = (%s)", file_path);
 
-       MMHandleType content = (MMHandleType)NULL;
        int err = 0;
+       metadata_extractor_h handle = NULL;
+
+       err = metadata_extractor_create(&handle);
 
-       err = mm_file_create_content_attrs(&content, file_path);
-       if (err == 0) {
-               err = mm_file_destroy_content_attrs(content);
-               if (err != 0) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_destroy_content_attrs FAILED err = %x", err);
+       if (err == METADATA_EXTRACTOR_ERROR_NONE) {
+               err = metadata_extractor_set_path(handle, file_path);
+
+               if (err != METADATA_EXTRACTOR_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "metadata_extractor_set_path is failed, %d", err);
+                       metadata_extractor_destroy(handle);
+                       return FALSE;
+               }
+
+               err = metadata_extractor_destroy(handle);
+               if (err != METADATA_EXTRACTOR_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "metadata_extractor_destroy FAILED err = %x", err);
                        return FALSE;
                }
        } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_create_content_attrs FAILED err = %x", err);
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "metadata_extractor_create FAILED err = %x", err);
                return FALSE;
        }
 
@@ -887,44 +855,58 @@ static MSG_BOOL __msg_smil_render_get_video_size(SMIL_RENDERER_DATA_S *viewerRen
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, width == NULL, FALSE);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, height == NULL, FALSE);
-       MMHandleType content = (MMHandleType)NULL;
        int err = 0;
-       char *err_msg = NULL;
-       MSG_BOOL iserror = FALSE;
+       metadata_extractor_h handle = NULL;
 
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file_path = (%s)", file_path);
-       err = mm_file_create_content_attrs(&content, file_path);
-
-       if (err == 0) {
-               err = mm_file_get_attrs(content,  &err_msg,
-                                                                       MM_FILE_CONTENT_VIDEO_WIDTH, width,
-                                                                       MM_FILE_CONTENT_VIDEO_HEIGHT, height,
-                                                                       /*MM_FILE_CONTENT_VIDEO_THUMBNAIL, &thumbnail, &thumbnail_size,*/
-                                                                       NULL);
-               if (err != 0) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_get_attrs FAILED err = %d", err);
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_get_attrs err_msg = %s", err_msg);
-                       if (err_msg) {
-                               free(err_msg);
-                               err_msg = NULL;
+       err = metadata_extractor_create(&handle);
+
+       if (err == METADATA_EXTRACTOR_ERROR_NONE) {
+               char *value = NULL;
+
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file_path = (%s)", file_path);
+
+               err = metadata_extractor_set_path(handle, file_path);
+
+               if (err != METADATA_EXTRACTOR_ERROR_NONE) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "metadata_extractor_set_path is failed, %d", err);
+                       metadata_extractor_destroy(handle);
+                       return FALSE;
+               }
+
+               err = metadata_extractor_get_metadata(handle, METADATA_VIDEO_WIDTH, &value);
+
+               if (err == METADATA_EXTRACTOR_ERROR_NONE) {
+                       if (value) {
+                               *width = atoi(value);
+                               free(value);
                        }
-                       iserror = TRUE;
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "metadata_extractor_get_metadata(METADATA_VIDEO_WIDTH) is failed - err(%x)", err);
+                       metadata_extractor_destroy(handle);
+                       return FALSE;
                }
 
-               err = mm_file_destroy_content_attrs(content);
-               if (err != 0) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_destroy_content_attrs FAILED err = %x", err);
-                       iserror = TRUE;
+               err = metadata_extractor_get_metadata(handle, METADATA_VIDEO_HEIGHT, &value);
+
+               if (err == METADATA_EXTRACTOR_ERROR_NONE) {
+                       if (value) {
+                               *height = atoi(value);
+                               free(value);
+                       }
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "metadata_extractor_get_metadata(METADATA_VIDEO_HEIGHT) is failed - err(%x)", err);
+                       metadata_extractor_destroy(handle);
+                       return FALSE;
                }
+
+               metadata_extractor_destroy(handle);
+
+               return TRUE;
        } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_create_content_attrs FAILED err = %x", err);
-               iserror = TRUE;
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "metadata_extractor_create FAILED err = %x", err);
        }
 
-       if (iserror)
-               return FALSE;
-
-       return TRUE;
+       return FALSE;
 }
 
 
@@ -1001,6 +983,9 @@ static void __msg_smil_render_create_video_image(void *data)
        }
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Image resized_width = %d, resized_height = %d", resized_width, resized_height);
 
+       viewerRenderData->resized_width = resized_width;
+       viewerRenderData->resized_height = resized_height;
+
        /*create image object for video image*/
        Evas *evas = NULL;
        evas = evas_object_evas_get(viewerRenderData->main_window);
@@ -1025,6 +1010,11 @@ static void __msg_smil_render_create_video_image(void *data)
        /*video top*/
        elm_box_pack_start(viewerRenderData->viewer_content_box, ic);
 
+       if (viewerRenderData->viewer_body_top_padding) {
+               elm_box_unpack(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_top_padding);
+               elm_box_pack_start(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_top_padding);
+       }
+
 #ifdef MSG_VIEWER_ENABLE_VIDEO_TOP_AND_BOTTOM /*Set image top as defalt region in case of video*/
        SMIL_SLIDE_INFO_S *curSlideInfo = NULL;
        MSG_BOOL istexttop = FALSE;
@@ -1045,7 +1035,7 @@ static void __msg_smil_render_create_video_image(void *data)
 }
 
 
-static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_PLAYER_STATUS_E status)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
@@ -1071,30 +1061,57 @@ static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRe
        if (!viewerRenderData->video_image)
                __msg_smil_render_create_video_image(viewerRenderData);
 
-       if (!__msg_smil_render_player_mgr_create(viewerRenderData))
+       if (!__msg_smil_render_player_mgr_create(viewerRenderData)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_create is failed");
                return FALSE;
+       }
 
-       if (!__msg_smil_render_player_mgr_set_attribute(viewerRenderData, path, MMS_SMIL_MEDIA_VIDEO))
+       if (!__msg_smil_render_player_mgr_set_attribute(viewerRenderData, path, MMS_SMIL_MEDIA_VIDEO)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_set_attribute is failed");
                return FALSE;
-
-       if (!__msg_smil_render_player_mgr_set_msg_cb(__msg_smil_render_msg_cb, (void *)viewerRenderData))
+       }
+       if (!__msg_smil_render_player_mgr_set_player_cb((void *)viewerRenderData)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_set_player_cb is failed");
                return FALSE;
+       }
 
-       if (!__msg_smil_render_player_mgr_set_video_stream_cb(__msg_smil_render_video_stream_cb, (void *)viewerRenderData))
-               return FALSE;
+       /* add getting content duration idler */
+       if (viewerRenderData->video_duration_idle) {
+               ecore_idler_del(viewerRenderData->video_duration_idle);
+               viewerRenderData->video_duration_idle = NULL;
+       }
+       viewerRenderData->video_duration_idle = ecore_idler_add(__msg_smil_render_player_mgr_get_content_duration, (void *)viewerRenderData);
+       viewerRenderData->is_skip_frame = TRUE;
 
-       if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData))
+       /* set video stream cb */
+       if (!__msg_smil_render_player_mgr_set_video_stream_cb(__msg_smil_render_video_stream_cb, (void *)viewerRenderData)) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_set_video_stream_cb is failed");
                return FALSE;
+       }
 
-       if (!__msg_smil_render_player_mgr_play((void *)viewerRenderData)) {
-               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;
+               }
        }
 
        return TRUE;
 }
 
 
-MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path)
+MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_PLAYER_STATUS_E status)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
@@ -1132,7 +1149,7 @@ MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRender
                        //copy drm content to app path end
 
                        /*play drm video file*/
-                       if (__msg_smil_render_play_video_file(viewerRenderData, app_drm_path) == FALSE) {
+                       if (__msg_smil_render_play_video_file(viewerRenderData, app_drm_path, status) == FALSE) {
                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_video_file is failed");
                                _msg_smil_render_stop_playing_file((void *)viewerRenderData);
 
@@ -1155,7 +1172,7 @@ MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRender
                }
        } else {
                /*normal case -- no drm*/
-               if (__msg_smil_render_play_video_file(viewerRenderData, path) == FALSE) {
+               if (__msg_smil_render_play_video_file(viewerRenderData, path, status) == FALSE) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_video_file is failed");
                        _msg_smil_render_stop_playing_file((void *)viewerRenderData);
                        return FALSE;
@@ -1171,7 +1188,6 @@ static void __msg_smil_render_show_image_file(SMIL_RENDERER_DATA_S *viewerRender
 {
        MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, "viewerRenderData is NULL");
        MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, path == NULL, "path is NULL");
-       Evas_Object *image_layout = NULL;
        Evas_Object *ic = NULL;
        int contnet_w = 0;
        int contnet_h = 0;
@@ -1192,23 +1208,14 @@ static void __msg_smil_render_show_image_file(SMIL_RENDERER_DATA_S *viewerRender
        evas_object_del(img);
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "image_width = %d, image_height = %d", contnet_w, contnet_h);
 
-       /*create layout for image*/
-       image_layout = elm_layout_add(viewerRenderData->layout_main);
-       MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, image_layout == NULL, "failed to create viewerRenderData->viewer_content_layout");
-
-       elm_layout_file_set(image_layout, MSG_VIEWER_THEME, "viewer_main");
-       evas_object_size_hint_weight_set(image_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(image_layout, 0.0, 0.0);
-       evas_object_show(image_layout);
-
-
        /*create icon above image_layout*/
-       ic = elm_icon_add(image_layout);
+       ic = elm_icon_add(viewerRenderData->layout_main);
 
-       if (imageType == VIEWER_IMAGE_TYPE_DRM_IMAGE_RAW_DATA)  // rendering drm image by raw data
+       if (imageType == VIEWER_IMAGE_TYPE_DRM_IMAGE_RAW_DATA) {        // rendering drm image by raw data
                elm_icon_file_set(ic, MSG_VIEWER_IMAGE_DRM_ICON, NULL);
-       else
+       } else {
                elm_icon_file_set(ic, path, NULL);
+       }
 
        MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, ic == NULL, "attached image add failed");
 
@@ -1245,27 +1252,32 @@ static void __msg_smil_render_show_image_file(SMIL_RENDERER_DATA_S *viewerRender
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid case");
        }
 
-       elm_object_part_content_set(image_layout, "viewer.body.content", ic);
+       elm_object_part_content_set(viewerRenderData->viewer_content_box, "viewer.body.content", ic);
 
        if (imageType == VIEWER_IMAGE_TYPE_DRM_SOUND) {
                if (!viewerRenderData->insert_sound_icon) {
-                       elm_box_pack_end(viewerRenderData->viewer_content_box, image_layout);   /*sound drm icon*/
-                       viewerRenderData->insert_sound_icon = image_layout;
+                       elm_box_pack_end(viewerRenderData->viewer_content_box, ic);     /*sound drm icon*/
+                       viewerRenderData->insert_sound_icon = ic;
                        evas_object_show(ic);
                } else {
                        evas_object_del(ic);
                }
        } else if (imageType == VIEWER_IMAGE_TYPE_UNSUPPORTED) {
                if (!viewerRenderData->insert_unsupported_icon) {
-                       elm_box_pack_end(viewerRenderData->viewer_content_box, image_layout);   /*unsupported file icon*/
-                       viewerRenderData->insert_unsupported_icon = image_layout;
+                       elm_box_pack_end(viewerRenderData->viewer_content_box, ic);     /*unsupported file icon*/
+                       viewerRenderData->insert_unsupported_icon = ic;
                        evas_object_show(ic);
                } else {
                        evas_object_del(ic);
                }
        } else {
-               elm_box_pack_start(viewerRenderData->viewer_content_box, image_layout);/*image top*/
-               viewerRenderData->insert_image = image_layout;
+               elm_box_pack_start(viewerRenderData->viewer_content_box, ic);/*image top*/
+               viewerRenderData->insert_image = ic;
+
+               if (viewerRenderData->viewer_body_top_padding) {
+                       elm_box_unpack(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_top_padding);
+                       elm_box_pack_start(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_top_padding);
+               }
 
                /*display region area according to Region info*/
                MSG_BOOL istexttop = FALSE;
@@ -1277,15 +1289,32 @@ static void __msg_smil_render_show_image_file(SMIL_RENDERER_DATA_S *viewerRender
                if (curSlideInfo && curSlideInfo->pageInfo)
                        istexttop = curSlideInfo->pageInfo->isTexttop;
 
-               if (istexttop) {
+               if (istexttop && viewerRenderData->viewer_body) {
                        if (viewerRenderData->insert_sound_icon || viewerRenderData->insert_unsupported_icon) {
                                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Text top message. And there is a drm sound or unsupported icon");
-                               elm_box_unpack(viewerRenderData->viewer_content_box, image_layout);
-                               elm_box_pack_after(viewerRenderData->viewer_content_box, image_layout, viewerRenderData->viewer_body);
+                               elm_box_unpack(viewerRenderData->viewer_content_box, ic);
+
+                               if (viewerRenderData->viewer_body_mid_padding) {
+                                       elm_box_unpack(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding);
+                                       elm_box_pack_after(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding, viewerRenderData->viewer_body);
+                                       elm_box_pack_after(viewerRenderData->viewer_content_box, ic, viewerRenderData->viewer_body_mid_padding);
+                               } else {
+                                       elm_box_pack_after(viewerRenderData->viewer_content_box, ic, viewerRenderData->viewer_body);
+                               }
                        } else {
                                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Text top message");
-                               elm_box_unpack(viewerRenderData->viewer_content_box, image_layout);
-                               elm_box_pack_end(viewerRenderData->viewer_content_box, image_layout);
+                               elm_box_unpack(viewerRenderData->viewer_content_box, ic);
+                               elm_box_pack_end(viewerRenderData->viewer_content_box, ic);
+
+                               if (viewerRenderData->viewer_body_mid_padding) {
+                                       elm_box_unpack(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding);
+                                       elm_box_pack_after(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding, viewerRenderData->viewer_body);
+                               }
+
+                               if (viewerRenderData->viewer_body_bottom_padding) {
+                                       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);
+                               }
                        }
                } else {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Image top message");
index 4a09e1a..27e25f2 100755 (executable)
@@ -349,7 +349,7 @@ MSG_SMIL_ERROR_E _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMI
 
                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_NEXT_SLIDE");
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed : PLAYER_EVENT_NEXT_SLIDE");
                        slideIdx -= MSG_MMS_SMIL_SLIDEIDX_INCREMENT;
                        _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
                        return err;
@@ -359,7 +359,7 @@ MSG_SMIL_ERROR_E _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMI
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_PREV_SLIDE");
                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_PREV_SLIDE");
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed : PLAYER_EVENT_PREV_SLIDE");
                        return err;
                }
                _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer);
@@ -377,7 +377,7 @@ MSG_SMIL_ERROR_E _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMI
 
                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_PREV_SLIDE");
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed : PLAYER_EVENT_PREV_SLIDE");
                        slideIdx += MSG_MMS_SMIL_SLIDEIDX_DECREMENT;
                        _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx);
                        return err;
index 1a2db3a..060023d 100755 (executable)
@@ -29,6 +29,7 @@
  *                                                             FUNCTION DECLARATIONS
  *==================================================================================================*/
 static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderData);
+static char *__msg_smil_render_get_cur_page_media_file_name(SMIL_RENDERER_DATA_S *viewerRenderData, int media_type);
 /*================================================================================================
  *                                                             FUNCTION IMPLEMENTATIONS
  *================================================================================================*/
@@ -190,33 +191,94 @@ MSG_BOOL _msg_smil_render_create_layout(SMIL_RENDERER_DATA_S *viewerRenderData,
        Evas_Object *eo = NULL;
        Evas_Object *entry = NULL;
 
+       /* clean up all object */
+       if (viewerRenderData->viewer_scroller) {
+               evas_object_del(viewerRenderData->viewer_scroller);
+               viewerRenderData->viewer_scroller = NULL;
+       }
+
+       if (viewerRenderData->viewer_content_box) {
+               evas_object_del(viewerRenderData->viewer_content_box);
+               viewerRenderData->viewer_content_box = NULL;
+       }
+
+       if (viewerRenderData->viewer_body_top_padding) {
+               evas_object_del(viewerRenderData->viewer_body_top_padding);
+               viewerRenderData->viewer_body_top_padding = NULL;
+       }
+
+       if (viewerRenderData->viewer_body_mid_padding) {
+               evas_object_del(viewerRenderData->viewer_body_mid_padding);
+               viewerRenderData->viewer_body_mid_padding = NULL;
+       }
+
+       if (viewerRenderData->viewer_body) {
+               evas_object_del(viewerRenderData->viewer_body);
+               viewerRenderData->viewer_body = NULL;
+       }
+
+       if (viewerRenderData->viewer_body_bottom_padding) {
+               evas_object_del(viewerRenderData->viewer_body_bottom_padding);
+               viewerRenderData->viewer_body_bottom_padding = NULL;
+       }
+
+       if (viewerRenderData->viewer_audio_name_rect) {
+               evas_object_del(viewerRenderData->viewer_audio_name_rect);
+               viewerRenderData->viewer_audio_name_rect = NULL;
+       }
+
+       if (viewerRenderData->viewer_bg_rect) {
+               evas_object_del(viewerRenderData->viewer_bg_rect);
+               viewerRenderData->viewer_bg_rect = NULL;
+       }
+
        viewerRenderData->layout_main = layout;
 
-       /*create scroller*/
-       if (!viewerRenderData->viewer_scroller) {
-               eo = elm_scroller_add(layout);
-               evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-               evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL);
-               elm_scroller_bounce_set(eo, FALSE, TRUE);
-               elm_scroller_policy_set(eo, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
-               elm_object_part_content_set(layout, "viewer.body", eo);
-               evas_object_show(eo);
-               viewerRenderData->viewer_scroller = eo;
+       /* get current slide */
+       SMIL_SLIDE_INFO_S *cur_slide = _msg_smil_get_current_slide_info(viewerRenderData->smilhandle);
+       if (!cur_slide || !cur_slide->pageInfo) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_current_slide_info is failed");
+               return FALSE;
        }
 
+       /*create scroller*/
+       eo = elm_scroller_add(layout);
+       evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_scroller_bounce_set(eo, FALSE, TRUE);
+       elm_scroller_policy_set(eo, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       elm_object_part_content_set(layout, "viewer.body", eo);
+       evas_object_show(eo);
+       viewerRenderData->viewer_scroller = eo;
+
        /* create content box */
-       if (!viewerRenderData->viewer_content_box) {
-               viewerRenderData->viewer_content_box = eo = elm_box_add(layout);
+       viewerRenderData->viewer_content_box = eo = elm_box_add(layout);
+       evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0);
+       elm_box_homogeneous_set(eo, EINA_FALSE);
+       evas_object_show(eo);
+       elm_object_content_set(viewerRenderData->viewer_scroller, viewerRenderData->viewer_content_box);
+
+       /* create body top padding */
+       viewerRenderData->viewer_body_top_padding = eo = elm_layout_add(layout);
+       elm_layout_file_set(viewerRenderData->viewer_body_top_padding, MSG_VIEWER_THEME, "viewer_body_outer_margin");
+       evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0);
+       elm_box_pack_start(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_top_padding);
+       evas_object_show(eo);
+
+       /* create body mid padding - check the condition for mid padding area should be created or not */
+       if ((cur_slide->pageInfo->hasText || cur_slide->pageInfo->isHelpPage) && (cur_slide->pageInfo->hasImage || cur_slide->pageInfo->hasVideo)) {
+               viewerRenderData->viewer_body_mid_padding = eo = elm_layout_add(layout);
+               elm_layout_file_set(viewerRenderData->viewer_body_mid_padding, MSG_VIEWER_THEME, "viewer_body_inner_margin");
                evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0);
                evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0);
-               elm_box_homogeneous_set(eo, EINA_FALSE);
+               elm_box_pack_after(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding, viewerRenderData->viewer_body_top_padding);
                evas_object_show(eo);
        }
 
-       elm_object_content_set(viewerRenderData->viewer_scroller, viewerRenderData->viewer_content_box);
-
        /* create entry */
-       if (!viewerRenderData->viewer_body) {
+       if (cur_slide->pageInfo->hasText || cur_slide->pageInfo->isHelpPage) {
                entry = elm_entry_add(layout);
                elm_entry_entry_set(entry, "");
                elm_entry_editable_set(entry, 0);
@@ -229,17 +291,42 @@ MSG_BOOL _msg_smil_render_create_layout(SMIL_RENDERER_DATA_S *viewerRenderData,
                viewerRenderData->viewer_body = entry;
        }
 
-       /*bg color rectangular*/
-       if (!viewerRenderData->viewer_bg_rect) {
-               eo = evas_object_rectangle_add(evas_object_evas_get(layout));
-               evas_object_color_set(eo, 255, 0, 0, 255);
-               elm_object_part_content_set(layout,  "viewer.body.bg", eo);
-               evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0);
-               evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0);
-               evas_object_show(eo);
-               viewerRenderData->viewer_bg_rect = eo;
+       /* create body bottom padding */
+       viewerRenderData->viewer_body_bottom_padding = eo = elm_layout_add(layout);
+       elm_layout_file_set(viewerRenderData->viewer_body_bottom_padding, MSG_VIEWER_THEME, "viewer_body_outer_margin");
+       evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0);
+       elm_box_pack_end(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_bottom_padding);
+       evas_object_show(eo);
+
+       /* create audio name panel */
+       if (cur_slide->pageInfo->hasAudio) {
+               char *file_name = NULL;
+               Evas_Object *layout = elm_layout_add(viewerRenderData->layout_main);
+               elm_layout_file_set(layout, MSG_VIEWER_THEME, "audio/panel");
+               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_show(layout);
+               viewerRenderData->viewer_audio_name_rect = layout;
+
+               file_name = __msg_smil_render_get_cur_page_media_file_name(viewerRenderData, MMS_SMIL_MEDIA_AUDIO);
+               if (file_name[0] != '\0') {
+                       edje_object_part_text_set(_EDJ(viewerRenderData->viewer_audio_name_rect), "audio.text.filename", file_name);
+                       free(file_name);
+               }
+
+               elm_object_part_content_set(viewerRenderData->layout_main, "viewer.swallow.audio.panel", viewerRenderData->viewer_audio_name_rect);
+               evas_object_show(viewerRenderData->viewer_audio_name_rect);
        }
 
+       /* bg color rectangular */
+       eo = evas_object_rectangle_add(evas_object_evas_get(layout));
+       evas_object_color_set(eo, 255, 0, 0, 255);
+       elm_object_part_content_set(layout,  "viewer.body.bg", eo);
+       evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0);
+       evas_object_show(eo);
+       viewerRenderData->viewer_bg_rect = eo;
+
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
        return TRUE;
 }
@@ -266,6 +353,12 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
        case SMIL_RENDER_EVENT_PAGE_PLAY_START:
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_PAGE_PLAY_START");
 
+               /*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");
+                       return MSG_ERR_SMIL_UI_DISPLAY_FAIURE;
+               }
+
                if (viewerRenderData->insert_image) {
                        evas_object_del(viewerRenderData->insert_image);
                        viewerRenderData->insert_image = NULL;
@@ -293,12 +386,15 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                }
 
                _msg_smil_render_stop_playing_file((void *)viewerRenderData);
-               elm_entry_entry_set(viewerRenderData->viewer_body, "");
 
-               /* disable copy and paste popup */
-               elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
-               elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
-               elm_entry_select_none(viewerRenderData->viewer_body);
+               if (viewerRenderData->viewer_body) {
+                       elm_entry_entry_set(viewerRenderData->viewer_body, "");
+
+                       /* disable copy and paste popup */
+                       elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+                       elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+                       elm_entry_select_none(viewerRenderData->viewer_body);
+               }
 
                /* set viewer bg color */
                __msg_smil_render_set_bg_color(viewerRenderData);
@@ -307,6 +403,12 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
        case SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START:
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START");
 
+               /*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");
+                       return MSG_ERR_SMIL_UI_DISPLAY_FAIURE;
+               }
+
                if (viewerRenderData->insert_image) {
                        evas_object_del(viewerRenderData->insert_image);
                        viewerRenderData->insert_image = NULL;
@@ -334,12 +436,15 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                }
 
                _msg_smil_render_stop_playing_file((void *)viewerRenderData);
-               elm_entry_entry_set(viewerRenderData->viewer_body, "");
 
-               /* disable copy and paste popup */
-               elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
-               elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
-               elm_entry_select_none(viewerRenderData->viewer_body);
+               if (viewerRenderData->viewer_body) {
+                       elm_entry_entry_set(viewerRenderData->viewer_body, "");
+
+                       /* disable copy and paste popup */
+                       elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+                       elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE);
+                       elm_entry_select_none(viewerRenderData->viewer_body);
+               }
 
                /* set viewer bg color */
                __msg_smil_render_set_bg_color(viewerRenderData);
@@ -358,7 +463,8 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
 
        case SMIL_RENDER_EVENT_DESTROY_SCREEN:
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_DESTROY_SCREEN");
-               elm_entry_entry_set(viewerRenderData->viewer_body, "");
+               if (viewerRenderData->viewer_body)
+                       elm_entry_entry_set(viewerRenderData->viewer_body, "");
 
                if (viewerRenderData->insert_image) {
                        evas_object_del(viewerRenderData->insert_image);
@@ -392,17 +498,37 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
 
        SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle);
        int pageCnt = _msg_smil_cont_mgr_get_total_slide_count(smilContMgrHndle);
+       msg_list_handle_t attachlist_info = NULL;
+       msg_struct_t attach_info = NULL;
+       int nAttachCnt = 0;
+       msg_struct_t mmsData_h = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, mmsData_h == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
+
+       msg_get_list_handle(mmsData_h, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
+       nAttachCnt = msg_list_length(attachlist_info);
+
        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), "<font_size=%d color=#6ca8c7>%s",
                                                                MMS_SMIL_FONT_SIZE_NORMAL,
-                                                               dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE"));
+                                                               ((nAttachCnt > 1) ? dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE") : dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE")));
 
-                       elm_entry_entry_set(viewerRenderData->viewer_body, buf_font);
+                       if (viewerRenderData->viewer_body)
+                               elm_entry_entry_set(viewerRenderData->viewer_body, buf_font);
 
                        _msg_smil_render_show_help_page_attach_list(viewerRenderData);
 
+                       if (viewerRenderData->viewer_body_mid_padding) {
+                               elm_box_unpack(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding);
+                               elm_box_pack_after(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding, viewerRenderData->viewer_body);
+                       }
+
+                       if (viewerRenderData->viewer_body_bottom_padding) {
+                               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);
+                       }
+
                } else {
                        if (_msg_smil_render_reload_mms(viewerRenderData, eventStatus) == FALSE) {
                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_reload_mms is failed");
@@ -413,17 +539,8 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "eventStatus->singleSlideInfo->commonData->attachCnt : %d", eventStatus->singleSlideInfo->commonData->attachCnt);
 
                if (_msg_smil_cont_mgr_is_cur_slide_help_page(eventStatus->singleSlideInfo)) {
-                       msg_list_handle_t attachlist_info = NULL;
-                       msg_struct_t attach_info = NULL;
-                       int nAttachCnt = 0;
                        int mediaType = 0;
 
-                       msg_struct_t mmsData_h = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle);
-                       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, mmsData_h == NULL, MSG_ERR_SMIL_INVALID_PARAMETER);
-
-                       msg_get_list_handle(mmsData_h, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
-                       nAttachCnt = msg_list_length(attachlist_info);
-
                        if (nAttachCnt == 1) {
                                attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, 0);
 
@@ -442,9 +559,20 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                                                                                MMS_SMIL_FONT_SIZE_NORMAL,
                                                                                dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE"));
 
-                                       elm_entry_entry_set(viewerRenderData->viewer_body, buf_font);
+                                       if (viewerRenderData->viewer_body)
+                                               elm_entry_entry_set(viewerRenderData->viewer_body, buf_font);
 
                                        _msg_smil_render_show_help_page_attach_list(viewerRenderData);
+
+                                       if (viewerRenderData->viewer_body_mid_padding) {
+                                               elm_box_unpack(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding);
+                                               elm_box_pack_after(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding, viewerRenderData->viewer_body);
+                                       }
+
+                                       if (viewerRenderData->viewer_body_bottom_padding) {
+                                               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);
+                                       }
                                }
                        } else {                //nAttachCnt > 1
                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Attachment count is over than 1, Display help page");
@@ -454,12 +582,24 @@ MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *
                                                                        MMS_SMIL_FONT_SIZE_NORMAL,
                                                                        dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE"));
 
-                               elm_entry_entry_set(viewerRenderData->viewer_body, buf_font);
+                               if (viewerRenderData->viewer_body)
+                                       elm_entry_entry_set(viewerRenderData->viewer_body, buf_font);
 
                                _msg_smil_render_show_help_page_attach_list(viewerRenderData);
+
+                               if (viewerRenderData->viewer_body_mid_padding) {
+                                       elm_box_unpack(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding);
+                                       elm_box_pack_after(viewerRenderData->viewer_content_box, viewerRenderData->viewer_body_mid_padding, viewerRenderData->viewer_body);
+                               }
+
+                               if (viewerRenderData->viewer_body_bottom_padding) {
+                                       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);
+                               }
                        }
                } else {
-                       elm_entry_entry_set(viewerRenderData->viewer_body, "");
+                       if (viewerRenderData->viewer_body)
+                               elm_entry_entry_set(viewerRenderData->viewer_body, "");
                }
        }
 
@@ -489,8 +629,8 @@ MSG_BOOL _msg_smil_render_reload_mms(SMIL_RENDERER_DATA_S *viewerRenderData, SMI
        bool heightPercent;
 
        char szFileName[MSG_FILENAME_LEN_MAX] = {0,};
-       char    szFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
-       char    regionId[MAX_SMIL_REGION_ID] = {0,};
+       char szFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
+       char regionId[MAX_SMIL_REGION_ID] = {0,};
 
        /*Get smil handler*/
        SMIL_HANDLER_S *smilHandle = (SMIL_HANDLER_S *)viewerRenderData->smilhandle;
@@ -591,7 +731,7 @@ MSG_BOOL _msg_smil_render_reload_mms(SMIL_RENDERER_DATA_S *viewerRenderData, SMI
                                        } else
                                                isSoundUsed = TRUE;
 
-                                       if (_msg_smil_render_show_inserted_audio(viewerRenderData, szFilePath) == FALSE) {
+                                       if (_msg_smil_render_show_inserted_audio(viewerRenderData, szFilePath, eventStatus->singleSlideInfo->slideStatus) == FALSE) {
                                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_audio is failed");
                                                return FALSE;
                                        }
@@ -607,7 +747,7 @@ MSG_BOOL _msg_smil_render_reload_mms(SMIL_RENDERER_DATA_S *viewerRenderData, SMI
                                                isImageUsed = TRUE;
                                        }
 
-                                       if (_msg_smil_render_show_inserted_video(viewerRenderData, szFilePath) == FALSE) {
+                                       if (_msg_smil_render_show_inserted_video(viewerRenderData, szFilePath, eventStatus->singleSlideInfo->slideStatus) == FALSE) {
                                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_video is failed");
                                                return FALSE;   /*returning FALSE is required to register timer in case of failed video play*/
                                        }
@@ -677,3 +817,59 @@ MSG_BOOL _msg_smil_render_set_mute(SMIL_RENDERER_DATA_S *viewerRenderData, MSG_B
        return TRUE;
 }
 
+static char *__msg_smil_render_get_cur_page_media_file_name(SMIL_RENDERER_DATA_S *viewerRenderData, int media_type)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, NULL);
+       SMIL_SLIDE_INFO_S *cur_slide = NULL;
+       char *return_str = NULL;
+       char file_name[MSG_FILENAME_LEN_MAX] = {0};
+
+       cur_slide = _msg_smil_get_current_slide_info(viewerRenderData->smilhandle);
+       if (!cur_slide || !cur_slide->pageInfo) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_current_slide_info is failed");
+               return NULL;
+       }
+
+       /* get page list handle */
+       msg_list_handle_t pagelist_info = NULL;
+       msg_get_list_handle(viewerRenderData->msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
+
+       /*Get page*/
+       msg_struct_t page_info = NULL;
+       page_info = msg_list_nth_data(pagelist_info, cur_slide->pageIdx);
+
+       /* get media list handle */
+       msg_list_handle_t media_list_info = NULL;
+       msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&media_list_info);
+
+       int media_cnt = 0;
+       media_cnt = msg_list_length(media_list_info);
+
+       int index = 0;
+       for (index = 0; index < media_cnt; index++) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index);
+               int mediaType = 0;
+
+               /* get media handle */
+               msg_struct_t media_info = NULL;
+               media_info = msg_list_nth_data(media_list_info, index);
+
+               if (media_info == NULL) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info is Null");
+                       return NULL;
+               }
+
+               msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
+
+               if (mediaType == media_type) {
+                       msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, file_name, sizeof(file_name));
+                       return_str = g_strdup(file_name);
+                       break;
+               }
+       }
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return return_str;              //it should be freed after use
+}
\ No newline at end of file
index 1c1895f..c2d995d 100755 (executable)
@@ -37,6 +37,8 @@ MSG_BOOL _msg_smil_render_show_inserted_text(SMIL_RENDERER_DATA_S *viewerRenderD
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData->viewer_body == NULL, FALSE);
+
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE);
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "path : (%s)", path);
        FILE *fp = NULL;
index fdc3363..9a03ff2 100755 (executable)
@@ -109,21 +109,18 @@ void msg_ui_viewer_destroy_cb(ui_gadget_h ug, void *priv)
                if (viewer_main_data->player_view) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type);
                        if (viewer_main_data->player_view->launch_cmd == MSG_VIEWER_LOAD_OTHER_UG_MODE &&
-                                       (viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT ||
-                                       viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER ||
-                                       viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER)) {
+                                       (viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_CONTACT)) {
 
                                /*update title button text after contact sync */
-                               if (viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT)
-                                       msg_ui_viewer_contact_info_update(viewer_main_data->player_view);
+                               msg_ui_viewer_title_update(viewer_main_data->player_view, MSG_VIEWER_OPTION_CONTACT);
+                       }
 
-                               /*connect handler again*/
-                               if (!viewer_main_data->player_view->mouse_down_event_handler)
-                                       viewer_main_data->player_view->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_main_data->player_view);
+                       /*connect handler again*/
+                       if (!viewer_main_data->player_view->mouse_down_event_handler)
+                               viewer_main_data->player_view->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_main_data->player_view);
 
-                               viewer_main_data->player_view->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
-                               viewer_main_data->player_view->cmd_type = MSG_VIEWER_CMD_NONE;
-                       }
+                       viewer_main_data->player_view->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
+                       viewer_main_data->player_view->cmd_type = MSG_VIEWER_CMD_NONE;
                }
        }
 
index 6172db4..269ea6e 100755 (executable)
@@ -27,7 +27,6 @@
 #include "msg-ui-image-resource.h"
 
 #include <bundle.h>
-#include "aul.h"
 
 /*==================================================================================================
  *                                                                     DEFINITIONS
@@ -311,6 +310,7 @@ static void __drm_list_genlist_sel_cb(void *data, Evas_Object *obj, void *event_
        Elm_Object_Item *selected_item = (Elm_Object_Item *)event_info;
        char szurl[MSG_UI_URL_MAX_LEN + 1] = {0x00};
        MSG_DRM_LIST_DATA_S *drm_list_data = NULL;
+       service_h svc_handle = NULL;
 
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "media_type [%d]", pmedia_info->media_type);
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name [%s]", pmedia_info->pfile_name);
@@ -324,11 +324,22 @@ static void __drm_list_genlist_sel_cb(void *data, Evas_Object *obj, void *event_
                        drm_list_data->drm_list_cmd = MSG_VIEWER_DRM_LIST_CMD_LAUNCH_BROWSER;
                        drm_list_data->selected_item = selected_item;
                        drm_list_data->selected_file_info = pmedia_info;
-               } else
+               } else {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_list_data is NULL");
+               }
 
                /*launch browser to buy ro*/
-               aul_open_content(szurl);
+               if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
+               } else {
+                       service_set_operation(svc_handle, SERVICE_OPERATION_VIEW);
+                       service_set_uri(svc_handle, szurl);
+
+                       if (service_send_launch_request(svc_handle, NULL, NULL) != SERVICE_ERROR_NONE)
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed");
+
+                       service_destroy(svc_handle);
+               }
        } else {
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_get_drm_url is failed");
        }
index 623c5d5..0df2a16 100755 (executable)
@@ -43,6 +43,7 @@ static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, serv
 static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv);
 static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv);
 
+static void __msg_ui_viewer_reload_viewer_ug(void *data, service_h svc_handle);
 static void __msg_ui_viewer_destroy_viewer_ug(void *data);
 static unsigned int __msg_ui_viewer_convert_atoh(const char *string);
 static void __msg_ui_viewer_rotate_play_window(void *data, int rotate);
@@ -171,6 +172,15 @@ static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, servic
                                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgID");
                                return NULL;
                        }
+
+                       char *msg_box_mode = NULL;
+                       /* get mode if viewer should be displayed from message box */
+                       service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MESSAGE_BOX, &msg_box_mode);
+
+                       if (msg_box_mode) {
+                               if (!g_strcmp0(msg_box_mode, MSG_BUNDLE_VALUE_MSGBOX_PROTECTED) || !g_strcmp0(msg_box_mode, MSG_BUNDLE_VALUE_MSGBOX_SPAM))
+                                       viewer_main_data->msg_box_viewer = true;
+                       }
                }
        } else {
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "data is NULL");
@@ -181,7 +191,17 @@ static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, servic
                viewer_main_data->ug_launch_mode = MSG_UG_MODE_FULLVIEW;
                /*create layout*/
                Evas_Object *bg = msg_ui_viewer_create_bg(viewer_main_data, viewer_main_data->main_window);
-               layout = msg_ui_viewer_create_layout_main(viewer_main_data->main_window);
+
+               bool show_indicator = true;
+               char *indicator_mode = NULL;
+
+               service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_INDICATOR_MODE, &indicator_mode);
+               if (indicator_mode) {
+                       if (!g_strcmp0(indicator_mode, MSG_BUNDLE_VALUE_NO_INDICATOR))
+                               show_indicator = false;
+               }
+
+               layout = msg_ui_viewer_create_layout_main(viewer_main_data->main_window, show_indicator);
                viewer_main_data->layout_main = layout;
 
                if (bg)
@@ -255,9 +275,12 @@ static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void
        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 launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type);
-                       /*connect handler again*/
-                       if (!viewer_main_data->player_view->mouse_down_event_handler)
-                               viewer_main_data->player_view->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_main_data->player_view);
+
+                       if (!viewer_main_data->player_view->popup) {
+                               /*connect handler again*/
+                               if (!viewer_main_data->player_view->mouse_down_event_handler)
+                                       viewer_main_data->player_view->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_main_data->player_view);
+                       }
 
                        if (viewer_main_data->player_view->launch_cmd == MSG_VIEWER_LOAD_OTHER_APP_MODE) {
                                /*reset launch_cmd and cmd_type*/
@@ -289,12 +312,6 @@ static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, voi
 
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->SmilHandle : %x", viewer_main_data->SmilHandle);
 
-       if (viewer_main_data->item_list_view) {
-               msg_ui_viewer_destroy_item_list(viewer_main_data->item_list_view);
-               free(viewer_main_data->item_list_view);
-               viewer_main_data->item_list_view = NULL;
-       }
-
        if (viewer_main_data->player_view) {
                msg_ui_viewer_destroy_play_view(viewer_main_data->player_view);
                free(viewer_main_data->player_view);
@@ -361,6 +378,12 @@ static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, voi
 static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL);
+       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv;
+
+       __msg_ui_viewer_reload_viewer_ug(viewer_main_data, svc_msg_h);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
 
 static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv)
@@ -378,8 +401,13 @@ static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, servic
                int battey_level = 0;
                vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW , &battey_level);
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "battey_level = %d", battey_level);
-               if (battey_level == VCONFKEY_SYSMAN_BAT_POWER_OFF)
-                       __msg_ui_viewer_destroy_viewer_ug(priv);
+               if (battey_level == VCONFKEY_SYSMAN_BAT_POWER_OFF) {
+                       int charger_status = -1;
+                       vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, &charger_status);
+
+                       if (!charger_status)
+                               __msg_ui_viewer_destroy_viewer_ug(priv);
+               }
 
                break;
        }
@@ -434,15 +462,6 @@ static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event
                                        msg_ui_viewer_update_play_controller(viewer_main_data->player_view, MSG_VIEWER_STOP);
                                }
                        }
-               } else if (viewer_main_data->view_mode == MSG_VIEWER_ITEM_LIST_VIEW) {
-                       if (viewer_main_data->item_list_view) {
-                               if (viewer_main_data->item_list_view->popup) {
-                                       elm_popup_timeout_set(viewer_main_data->item_list_view->popup, 0);
-                                       evas_object_del(viewer_main_data->item_list_view->popup);
-                                       viewer_main_data->item_list_view->popup = NULL;
-                                       ispopup = TRUE;
-                               }
-                       }
                } else {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Not required case");
                }
@@ -458,6 +477,66 @@ static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event
        }
 }
 
+static void __msg_ui_viewer_reload_viewer_ug(void *data, service_h svc_handle)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
+       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
+
+       if (viewer_main_data->msg_t) {
+               msg_release_struct(&viewer_main_data->msg_t);
+               viewer_main_data->msg_t = NULL;
+       }
+
+       if (viewer_main_data->mms_t) {
+               msg_release_struct(&viewer_main_data->mms_t);
+               viewer_main_data->mms_t = NULL;
+       }
+
+       if (svc_handle) {
+               char *msgid = NULL;
+               service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msgid);
+               if (msgid) {
+                       viewer_main_data->msgID = (int)atoi(msgid);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgID = %d", viewer_main_data->msgID);
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgid");
+                       return;
+               }
+       }
+
+       if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Reset play view mode");
+
+               if (viewer_main_data->player_view) {
+                       msg_ui_viewer_destroy_play_view(viewer_main_data->player_view);
+                       free(viewer_main_data->player_view);
+                       viewer_main_data->player_view = NULL;
+               }
+
+               if (viewer_main_data->SmilHandle) {
+                       msg_smil_destroy_smil_player(viewer_main_data->SmilHandle);
+                       msg_ui_viewer_set_smilhandle(viewer_main_data, NULL);
+               }
+
+               if (msg_ui_viewer_launch(viewer_main_data) == FALSE) {
+                       msg_common_reset_font_size("entry");
+                       ug_destroy_me(viewer_main_data->viewer_ug);
+               }
+       } else if (viewer_main_data->view_mode == MSG_VIEWER_DRM_LIST_VIEW) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "DRM list view mode, come here to implement");
+               if (viewer_main_data->drm_list_view) {
+                       msg_ui_viewer_destroy_drm_list_view(viewer_main_data->drm_list_view);
+                       free(viewer_main_data->drm_list_view);
+                       viewer_main_data->drm_list_view = NULL;
+               }
+
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d mode is not required anything", viewer_main_data->view_mode);
+       }
+}
+
+
 static void __msg_ui_viewer_destroy_viewer_ug(void *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -472,16 +551,9 @@ static void __msg_ui_viewer_destroy_viewer_ug(void *data)
                                Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_STOP);
                                if (Error != MSG_SMIL_SUCCESS) {
                                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
-                               } else
+                               } else {
                                        viewer_main_data->player_view->status = MSG_VIEWER_STOP;
-                       }
-               }
-       } else if (viewer_main_data->view_mode == MSG_VIEWER_ITEM_LIST_VIEW) {
-               if (viewer_main_data->item_list_view) {
-                       if (viewer_main_data->item_list_view->popup) {
-                               elm_popup_timeout_set(viewer_main_data->item_list_view->popup, 0);
-                               evas_object_del(viewer_main_data->item_list_view->popup);
-                               viewer_main_data->item_list_view->popup = NULL;
+                               }
                        }
                }
        } else {
diff --git a/viewer/src/msg-ui-viewer-item-list.c b/viewer/src/msg-ui-viewer-item-list.c
deleted file mode 100755 (executable)
index a95b689..0000000
+++ /dev/null
@@ -1,896 +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://www.tizenopensource.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.h>
-#include <msg_storage.h>
-#include <msg_transport.h>
-
-#include "msg-ui-viewer-item-list.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 "aul.h"
-#include <glib.h>
-#include <Ecore_X.h>
-#include "appsvc.h"
-/*==================================================================================================
- *                                                                     FUNCTION DECLARATIONS
- *==================================================================================================*/
-static void __viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_item_list_popup(void *data, Evas_Object *parent, char *pcontent);
-static void __viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-static void __viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
-
-static MSG_BOOL __msg_ui_viewer_auto_rename(char *src_path, char *dst_path);
-static void __viewer_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
-
-static char *__msg_ui_viewer_text_get(void *data, Evas_Object *obj, const char *part);
-static Evas_Object *__msg_ui_viewer_content_get(void *data, Evas_Object *obj, const char *part);
-static char *__msg_ui_viewer_group_text_get(void *data, Evas_Object *obj, const char *part);
-static void __msg_ui_viewer_genlist_item_selected(void *data, Evas_Object *obj, void *event_info);
-static void __msg_ui_viewer_item_selected(void *data, Evas_Object *obj, void *event_info);
-static Evas_Object *__msg_ui_viewer_create_genlist(void *data);
-static void __msg_ui_viewer_set_list_styles(void *data);
-static void __msg_ui_viewer_item_list_set_list_data(Evas_Object *genlist, void *data);
-static MSG_BOOL __msg_ui_viewer_item_list_get_list_data(void *data);
-static MSG_BOOL  __msg_ui_viewer_get_body_message(void *data);
-static void __viewer_toolbar_play_cb(void *data, Evas_Object *obj, void *event_info);
-static void __viewer_toolbar_save_all_cb(void *data, Evas_Object *obj, void *event_info);
-static Evas_Object *__msg_ui_viewer_create_toolbar(Evas_Object *parent, void *data);
-
-/*==================================================================================================
-*                                                              FUNCTION IMPLEMENTATIONS
-*==================================================================================================*/
-void msg_ui_viewer_init_item_list(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-
-       pitem_list_data->viewer_main = NULL;
-       pitem_list_data->main_window = NULL;
-       pitem_list_data->navi_frame = NULL;
-       pitem_list_data->popup = NULL;
-       pitem_list_data->genlist = NULL;
-       pitem_list_data->msgHandle = NULL;
-       pitem_list_data->msgID = 0;
-       pitem_list_data->mms_t = NULL;
-       pitem_list_data->insert_item_count = 0;
-       pitem_list_data->attach_item_count = 0;
-       pitem_list_data->insert_list = NULL;
-       pitem_list_data->attach_list = NULL;
-       pitem_list_data->group_list[0].index = 0;
-       pitem_list_data->group_list[0].group_label = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_INSERTED_ITEMS");
-       pitem_list_data->group_list[1].index = 1;
-       pitem_list_data->group_list[1].group_label = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_ATTACHED_ITEMS");
-
-       pitem_list_data->group_item_class = NULL;
-       memset(&pitem_list_data->item_class, 0x00, sizeof(Elm_Genlist_Item_Class));
-       memset(&pitem_list_data->title_class, 0x00, sizeof(Elm_Genlist_Item_Class));
-}
-
-void msg_ui_viewer_destroy_item_list(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-
-       if (pitem_list_data->popup) {
-               evas_object_del(pitem_list_data->popup);
-               pitem_list_data->popup = NULL;
-       }
-
-
-       /*free insert list*/
-       if (pitem_list_data->insert_list) {
-               int index = 0;
-               int ntotal = 0;
-               ntotal = eina_list_count(pitem_list_data->insert_list);
-               for (index = 0; index < ntotal; index++) {
-                       MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->insert_list, index);
-                       if (pmedia_info) {
-                               free(pmedia_info);
-                               pmedia_info = NULL;
-                       }
-               }
-               eina_list_free(pitem_list_data->insert_list);
-               pitem_list_data->insert_list = NULL;
-       }
-
-       /*free attach list*/
-       if (pitem_list_data->attach_list) {
-               int index = 0;
-               int ntotal = 0;
-               ntotal = eina_list_count(pitem_list_data->attach_list);
-               for (index = 0; index < ntotal; index++) {
-                       MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->attach_list, index);
-                       if (pmedia_info) {
-                               free(pmedia_info);
-                               pmedia_info = NULL;
-                       }
-               }
-               eina_list_free(pitem_list_data->attach_list);
-               pitem_list_data->attach_list = NULL;
-       }
-
-       /* genlist must be destroyed before freeing itc */
-       if (pitem_list_data->genlist) {
-               evas_object_del(pitem_list_data->genlist);
-               pitem_list_data->genlist = NULL;
-       }
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __viewer_back_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_UI_RET_IF(MSG_UI_LEVEL_ERR, obj == NULL);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-
-       msg_common_reset_font_size("entry");
-       ug_destroy_me(msg_ui_viewer_get_viewer_ug(pitem_list_data->viewer_main));
-       elm_object_disabled_set(obj, TRUE);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static MSG_BOOL __msg_ui_viewer_auto_rename(char *src_path, char *dst_path)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src_path == NULL, FALSE);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, dst_path == NULL, FALSE);
-       char file_ext[MSG_VIEWER_FILE_EXT_MAX_LEN + 1] = {0};
-       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 ncount = 0;
-
-       strncpy(file_name_without_ext, dst_path, MSG_VIEWER_FILENAME_MAX_LEN);
-       result = msg_viewer_util_get_file_ext(dst_path, file_ext, MSG_VIEWER_FILE_EXT_MAX_LEN);
-       if (result)
-               file_name_without_ext[strlen(file_name_without_ext) - strlen(file_ext) - 1] = '\0';
-
-       ncount = msg_viewer_util_get_next_number(file_name_without_ext);
-       if (ncount < 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid filename");
-               return FALSE;
-       } else {
-               /*find new filename*/
-               Eina_Bool is_exists = FALSE;
-               do {
-                       if (strlen(file_ext) > 0)
-                               snprintf(new_file_name, sizeof(new_file_name), "%s_%d.%s", file_name_without_ext, ncount, file_ext);
-                       else
-                               snprintf(new_file_name, sizeof(new_file_name), "%s_%d", file_name_without_ext, ncount);
-                       /*check for same file*/
-                       is_exists = ecore_file_exists(new_file_name);
-                       if (is_exists == EINA_TRUE) {
-                               memset(new_file_name, 0x00, sizeof(new_file_name));
-                               ncount++;
-                       } else {
-                               break;
-                       }
-               } while (is_exists);
-
-               if (ecore_file_cp(src_path, new_file_name) == EINA_FALSE)
-                       return FALSE;
-       }
-
-       return TRUE;
-}
-
-static void __viewer_popup_block_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_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-
-       if (pitem_list_data->popup) {
-               evas_object_del(pitem_list_data->popup);
-               pitem_list_data->popup = NULL;
-       }
-}
-
-static void __viewer_popup_timeout_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_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-
-       if (pitem_list_data->popup) {
-               evas_object_del(pitem_list_data->popup);
-               pitem_list_data->popup = NULL;
-       }
-}
-
-static void __msg_ui_viewer_item_list_popup(void *data, Evas_Object *parent, char *pcontent)
-{
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, parent == NULL);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-       Evas_Object *popup = NULL;
-
-       if (pitem_list_data->popup) {
-               evas_object_del(pitem_list_data->popup);
-               pitem_list_data->popup = NULL;
-       }
-
-       popup = elm_popup_add(parent);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, popup == NULL);
-       pitem_list_data->popup = popup;
-
-       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-       if (pcontent) {
-               elm_object_text_set(popup, pcontent);
-               elm_popup_timeout_set(popup, 2);
-               evas_object_smart_callback_add(popup, "block,clicked", __viewer_popup_block_clicked_cb, pitem_list_data);
-               evas_object_smart_callback_add(popup, "timeout", __viewer_popup_timeout_cb, pitem_list_data);
-       } else {
-               evas_object_del(pitem_list_data->popup);
-               pitem_list_data->popup = NULL;
-               return;
-       }
-
-       evas_object_show(popup);
-}
-
-static void __viewer_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data;
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)pmedia_info->item_list_data;
-
-       if (strlen(pmedia_info->pfile_path) == 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pfile_path is NULL");
-               __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
-               return;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pmedia_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, pmedia_info->pfile_name);
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path);
-
-                       /*check for same file*/
-                       if (ecore_file_exists(dst_path) == EINA_TRUE) {
-                               if (__msg_ui_viewer_auto_rename(pmedia_info->pfile_path, dst_path) == FALSE)
-                                       issave = FALSE;
-                       } else {
-                               if (ecore_file_cp(pmedia_info->pfile_path, dst_path) == EINA_FALSE)
-                                       issave = FALSE;
-                       }
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed");
-                       __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
-                       return;
-               }
-
-               if (issave)
-                       __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_SAVED"));
-               else
-                       __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
-       }
-}
-
-static char *__msg_ui_viewer_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_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data;
-
-       if (strcmp(part, "elm.text") == 0) {
-               if (pmedia_info)
-                       return strdup(pmedia_info->pfile_name);
-       }
-       return NULL;
-}
-
-static Evas_Object *__msg_ui_viewer_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) {
-               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_icon_file_set(icon, MSG_VIEWER_IMAGE_SAVE_ICON, NULL);
-               elm_object_part_content_set(button, "icon", icon);
-               evas_object_smart_callback_add(button, "clicked", __viewer_save_button_clicked_cb, data);
-               evas_object_show(button);
-               evas_object_show(box);
-               return box;
-       } else if (strcmp(part, "elm.icon.1") == 0) {
-               MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data;
-               Evas_Object *image = NULL;
-
-               image = elm_icon_add(obj);
-
-               /*set attach file icon*/
-               if (pmedia_info->emedia_type == MSG_MEDIA_IMG ||
-                               pmedia_info->emedia_type == MSG_MEDIA_ANIMATE) {
-                       elm_icon_file_set(image, pmedia_info->pfile_path, NULL);
-               } else if (pmedia_info->emedia_type == MSG_MEDIA_DRM) {
-                       elm_icon_file_set(image, MSG_VIEWER_IMAGE_DRM_SMALL_ICON, NULL);
-               } else {
-                       if (strlen(pmedia_info->pfile_path)) {
-                               const char *icon_path = NULL;
-
-                               icon_path = msg_common_get_file_icon(pmedia_info->pfile_path);
-                               if (icon_path) {
-                                       elm_icon_file_set(image, icon_path, NULL);
-                               } else {
-                                       D_EMSG("icon_path is NULL");
-                                       elm_icon_file_set(image, MSG_VIEWER_IMAGE_ATTACH_ICON, NULL);
-                               }
-                       } 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 char *__msg_ui_viewer_group_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_GROUP_LABEL_S *group_label = (MSG_GROUP_LABEL_S *) data;
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", group_label->index);
-
-       if (strcmp(part, "elm.text") == 0) {
-               if (group_label->group_label)
-                       return strdup(group_label->group_label);
-       }
-
-       return NULL;
-}
-
-static void __msg_ui_viewer_genlist_item_selected(void *data, Evas_Object *obj, void *event_info)
-{
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL);
-       Elm_Object_Item *pitem = (Elm_Object_Item *)event_info;
-
-       elm_genlist_item_selected_set(pitem, FALSE);
-       return;
-}
-
-static void __msg_ui_viewer_item_selected(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_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data;
-       Elm_Object_Item *pselected_item = (Elm_Object_Item *)event_info;
-
-       elm_genlist_item_selected_set(pselected_item, FALSE);
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pmedia_info->pfile_name);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pmedia_info->pfile_path);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pmedia_info->emedia_type);
-
-       char mimetype[MSG_BUFFER_SIZE_64 + 1] = {0,};
-       char defapp[MSG_BUFFER_SIZE_64 + 1] = {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_VIEW);
-       service_set_uri(svc_handle, pmedia_info->pfile_path);
-
-       /*get mime type*/
-       if (aul_get_mime_from_file(pmedia_info->pfile_path, mimetype, sizeof(mimetype)) < 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mime type failed");
-
-               if (SERVICE_ERROR_NONE != service_send_launch_request(svc_handle, NULL, NULL))
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed");
-
-               service_destroy(svc_handle);
-               return;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mime type [%s]", mimetype);
-       }
-
-       /*get default app*/
-       if (aul_get_defapp_from_mime(mimetype, defapp, sizeof(defapp)) < 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "default app failed");
-
-               if (SERVICE_ERROR_NONE != service_send_launch_request(svc_handle, NULL, NULL))
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed");
-
-               service_destroy(svc_handle);
-               return;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "default app [%s]", defapp);
-       }
-
-       /*launch application*/
-       if (strcmp(defapp, VIDEO_PLAYER_PKG_NAME) == 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Video content");
-               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_LAUNCH_APPLICATION, MESSAGE_PKGNAME);
-       }
-
-       if (SERVICE_ERROR_NONE != service_send_launch_request(svc_handle, NULL, NULL))
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request is failed");
-
-       service_destroy(svc_handle);
-
-       return;
-}
-
-static Evas_Object *__msg_ui_viewer_create_genlist(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-       Evas_Object *genlist = NULL;
-
-       genlist = elm_genlist_add(pitem_list_data->navi_frame);
-       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);
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-
-       return genlist;
-}
-
-static void __msg_ui_viewer_set_list_styles(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-
-       pitem_list_data->item_class.item_style  = "1text.2icon";
-       pitem_list_data->item_class.func.text_get = __msg_ui_viewer_text_get;
-       pitem_list_data->item_class.func.content_get  = __msg_ui_viewer_content_get;
-       pitem_list_data->item_class.func.del = NULL;
-       pitem_list_data->item_class.func.state_get = NULL;
-
-       pitem_list_data->title_class.item_style = "grouptitle.dialogue";
-       pitem_list_data->title_class.func.text_get = __msg_ui_viewer_group_text_get;
-       pitem_list_data->title_class.func.content_get = NULL;
-       pitem_list_data->title_class.func.del = NULL;
-       pitem_list_data->title_class.func.state_get = NULL;
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __msg_ui_viewer_item_list_set_list_data(Evas_Object *genlist, void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, genlist == NULL);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-       int nmedia_count = pitem_list_data->insert_item_count;
-       int attachment_count = pitem_list_data->attach_item_count;
-
-       /*add inserted items*/
-       if (nmedia_count > 0) {
-               int insert_index = 0;
-               pitem_list_data->group_item_class = elm_genlist_item_append(genlist, &pitem_list_data->title_class, (void *)(&pitem_list_data->group_list[0]), NULL, ELM_GENLIST_ITEM_GROUP, __msg_ui_viewer_genlist_item_selected, (void*)ITEM_LIST_INFO_INSERT_FILE);
-               for (insert_index = 0; insert_index < nmedia_count; insert_index++) {
-                       MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->insert_list, insert_index);
-                       if (pmedia_info == NULL) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL");
-                       } else {
-                               elm_genlist_item_append(genlist, &pitem_list_data->item_class, (void *)(pmedia_info), pitem_list_data->group_item_class, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_item_selected, (void*)(pmedia_info));
-                       }
-               }
-       }
-
-       /*add attached items*/
-       if (attachment_count > 0) {
-               int attach_index = 0;
-               pitem_list_data->group_item_class = elm_genlist_item_append(genlist, &pitem_list_data->title_class, (void *)(&pitem_list_data->group_list[1]), NULL, ELM_GENLIST_ITEM_GROUP, __msg_ui_viewer_genlist_item_selected, (void*)ITEM_LIST_INFO_ATTACH_FILE);
-               for (attach_index = 0; attach_index < attachment_count; attach_index++) {
-                       MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->attach_list, attach_index);
-                       if (pmedia_info == NULL) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL");
-                       } else {
-                               elm_genlist_item_append(genlist, &pitem_list_data->item_class, (void *)(pmedia_info), pitem_list_data->group_item_class, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_item_selected, (void*)(pmedia_info));
-                       }
-               }
-       }
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static MSG_BOOL __msg_ui_viewer_item_list_get_list_data(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-       msg_list_handle_t pagelist_info = NULL;
-       msg_struct_t page_info = NULL;
-       msg_list_handle_t medialist_info = NULL;
-       msg_struct_t media_info = NULL;
-
-       msg_list_handle_t attachlist_info = NULL;
-       msg_struct_t attach_info = NULL;
-
-       int nPageCnt = 0;
-       int nPageMediaCnt = 0;
-       int nAttachmentCnt = 0;
-       int nmedia_count = 0;
-       int attach_count = 0;
-
-       char strFileName[MSG_FILENAME_LEN_MAX] = {0,};
-       char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,};
-
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pitem_list_data->mms_t == NULL, FALSE);
-
-       msg_get_list_handle(pitem_list_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info);
-       if (!pagelist_info)     {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_list_handle(MSG_MMS_PAGE_LIST_HND) is failed");
-               return FALSE;
-       }
-
-       nPageCnt = msg_list_length(pagelist_info);
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageCnt = %d", nPageCnt);
-
-       /*get inserted content list*/
-       if (nPageCnt) {
-               int page_idx = 0;
-
-               for (page_idx = 0; page_idx < nPageCnt; ++page_idx) {
-                       page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx);
-
-                       if (!page_info) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL");
-                               continue;
-                       }
-
-                       msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info);
-
-                       if (!medialist_info) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "medialist_info is NULL");
-                               continue;
-                       }
-                       nPageMediaCnt = msg_list_length(medialist_info);
-
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, media count = %d", page_idx, nPageMediaCnt);
-
-                       int media_idx = 0;
-                       for (media_idx = 0; media_idx < nPageMediaCnt; ++media_idx) {
-                               int mediaType = 0;
-                               int drmType = 0;
-                               media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx);
-
-                               if (!media_info) {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info is NULL");
-                                       continue;
-                               }
-
-                               bzero(strFileName, sizeof(strFileName));
-                               bzero(strFilePath, sizeof(strFilePath));
-
-                               msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName));
-                               msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath));
-
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "filename [%s], filepath [%s]", strFileName, strFilePath);
-
-                               msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType);
-
-                               /*skip the text file*/
-                               if (mediaType == MMS_SMIL_MEDIA_TEXT)
-                                       continue;
-
-                               MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)calloc(1, sizeof(MSG_MEDIA_INFO_S));
-                               if (pmedia_info == NULL) {
-                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
-                                       return FALSE;
-                               } else {
-                                       if (strlen(strFileName)) {
-                                               strncpy(pmedia_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
-                                       } else {
-                                               const char *file_name = NULL;
-                                               file_name = ecore_file_file_get(strFilePath);
-                                               if (file_name)
-                                                       strncpy(pmedia_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
-                                               else
-                                                       strncpy(pmedia_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
-                                       }
-
-                                       strncpy(pmedia_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
-
-                                       msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType);
-
-                                       if (drmType != MSG_DRM_TYPE_NONE) {
-                                               char szDrmFullPath[MSG_FILEPATH_LEN_MAX] = {0,};
-                                               bzero(szDrmFullPath, sizeof(szDrmFullPath));
-                                               msg_get_str_value(media_info, MSG_MMS_MEDIA_DRM_FULLPATH_STR, szDrmFullPath, sizeof(szDrmFullPath));
-
-                                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drmtype: %d (1: Fowward Lock, 2:Combined Delivery, 3: Separated Delivery), drmpath: %s", drmType, szDrmFullPath);
-                                               pmedia_info->emedia_type = MSG_MEDIA_DRM;
-                                       } else {
-                                               if (mediaType == MMS_SMIL_MEDIA_IMG)
-                                                       pmedia_info->emedia_type = MSG_MEDIA_IMG;
-                                               else if (mediaType == MMS_SMIL_MEDIA_AUDIO)
-                                                       pmedia_info->emedia_type = MSG_MEDIA_AUDIO;
-                                               else if (mediaType == MMS_SMIL_MEDIA_VIDEO)
-                                                       pmedia_info->emedia_type = MSG_MEDIA_VIDEO;
-                                               else if (mediaType == MMS_SMIL_MEDIA_TEXT)
-                                                       pmedia_info->emedia_type = MSG_MEDIA_TEXT;
-                                               else if (mediaType == MMS_SMIL_MEDIA_ANIMATE)
-                                                       pmedia_info->emedia_type = MSG_MEDIA_ANIMATE;
-                                               else if (mediaType == MMS_SMIL_MEDIA_IMG_OR_VIDEO)
-                                                       pmedia_info->emedia_type = MSG_MEDIA_IMG_OR_VIDEO;
-                                               else {
-                                                       pmedia_info->emedia_type = MSG_MEDIA_INVALID;
-                                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid mediaType : %d", mediaType);
-                                               }
-                                       }
-                                       pmedia_info->item_list_data = pitem_list_data;
-                                       /*append insert list*/
-                                       pitem_list_data->insert_list = eina_list_append(pitem_list_data->insert_list, pmedia_info);
-                                       nmedia_count++;
-                               }
-                       }
-               }
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart Mixed");
-       }
-       pitem_list_data->insert_item_count = nmedia_count;
-
-       /*get attached content list*/
-       int attach_idx = 0;
-       msg_get_list_handle(pitem_list_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info);
-
-       nAttachmentCnt = msg_list_length(attachlist_info);
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachmentCnt = %d", nAttachmentCnt);
-
-       for (attach_idx = 0; attach_idx < nAttachmentCnt; ++attach_idx) {
-               attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, attach_idx);
-
-               if (attach_info == NULL) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach is NULL");
-                       continue;
-               }  else {
-                       bzero(strFileName, sizeof(strFileName));
-                       bzero(strFilePath, sizeof(strFilePath));
-
-                       msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, strFileName, sizeof(strFileName));
-                       msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath));
-
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file name: %s", strFileName);
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath);
-
-                       MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)calloc(1, sizeof(MSG_MEDIA_INFO_S));
-                       if (pmedia_info == NULL) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
-                               return FALSE;
-                       } else {
-                               if (strlen(strFileName)) {
-                                       strncpy(pmedia_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN);
-                               } else {
-                                       const char *file_name = NULL;
-                                       file_name = ecore_file_file_get(strFilePath);
-                                       if (file_name)
-                                               strncpy(pmedia_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN);
-                                       else
-                                               strncpy(pmedia_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN);
-                               }
-
-                               strncpy(pmedia_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN);
-                               pmedia_info->emedia_type = MSG_MEDIA_ATTACH;
-                               pmedia_info->item_list_data = pitem_list_data;
-                               /*append attach list*/
-                               pitem_list_data->attach_list = eina_list_append(pitem_list_data->attach_list, pmedia_info);
-                               attach_count++;
-                       }
-               }
-       }
-       pitem_list_data->attach_item_count = attach_count;
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert_count = %d, attach_count = %d", nmedia_count, attach_count);
-
-       return TRUE;
-}
-
-static MSG_BOOL  __msg_ui_viewer_get_body_message(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-
-       if (pitem_list_data->mms_t == NULL) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pitem_list_data->mms_t is failed");
-                       return FALSE;
-               }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-       return TRUE;
-}
-
-static void __viewer_toolbar_play_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_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-
-       msg_ui_viewer_destroy_item_list(pitem_list_data);
-       msg_ui_viewer_show_view_by_mode(pitem_list_data->viewer_main, MSG_VIEWER_PLAYER_VIEW, MSG_VIEWER_VIEW_CMD_PLAY);
-       elm_naviframe_item_pop(pitem_list_data->navi_frame);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static void __viewer_toolbar_save_all_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_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-
-       int insert_cnt = eina_list_count(pitem_list_data->insert_list);
-       int attach_cnt = eina_list_count(pitem_list_data->attach_list);
-       int total_cnt = insert_cnt + attach_cnt;
-       int index = 0;
-       int insert_index = 0;
-       int attach_index = 0;
-       int failed_count = 0;
-       int saved_count = 0;
-       MSG_MEDIA_INFO_S *pmedia_info = NULL;
-
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert_cnt = %d, attach_cnt = %d", insert_cnt, attach_cnt);
-
-       while (index < total_cnt) {
-               if (index < insert_cnt)
-                       pmedia_info = eina_list_nth(pitem_list_data->insert_list, insert_index++);
-               else
-                       pmedia_info = eina_list_nth(pitem_list_data->attach_list, attach_index++);
-
-               if (pmedia_info) {
-                       /*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, pmedia_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]", pmedia_info->pfile_path);
-
-                               char *result_path = msg_ui_viewer_util_copy_file(pmedia_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++;
-                       }
-
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index);
-                       failed_count++;
-               }
-
-               pmedia_info = NULL;
-
-               index++;
-       }
-
-       /* show popup */
-       if (failed_count == total_cnt) {
-               __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
-       } 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, total_cnt);
-               __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, buf);
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
-static Evas_Object *__msg_ui_viewer_create_toolbar(Evas_Object *parent, void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-       Evas_Object *toolbar = elm_toolbar_add(parent);
-       Elm_Object_Item *toolbar_item = NULL;
-
-       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
-
-       elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_SAVE, NULL, __viewer_toolbar_save_all_cb, pitem_list_data);
-       toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
-       elm_object_item_disabled_set(toolbar_item, EINA_TRUE);
-       elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_PLAY, NULL, __viewer_toolbar_play_cb, pitem_list_data);
-       toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
-       elm_object_item_disabled_set(toolbar_item, EINA_TRUE);
-
-       evas_object_show(toolbar);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-       return toolbar;
-}
-
-MSG_BOOL  msg_ui_viewer_create_item_list_view(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data;
-       Evas_Object *back_button = NULL;
-       Evas_Object *toolbar = NULL;
-       Evas_Object *layout_inner = NULL;
-       Evas_Object *genlist = NULL;
-       Evas_Object *bg_layout = NULL;
-
-       /*get message body*/
-       if (__msg_ui_viewer_get_body_message(pitem_list_data) == FALSE)
-               return FALSE;
-
-       /*get inserted and attached item list*/
-       if (__msg_ui_viewer_item_list_get_list_data(pitem_list_data) == FALSE)
-               return FALSE;
-
-       bg_layout = msg_ui_viewer_get_bg_layout(pitem_list_data->viewer_main);
-       if (bg_layout)
-               elm_object_style_set(bg_layout, "group_list");
-
-       layout_inner = elm_layout_add(pitem_list_data->navi_frame);
-       evas_object_size_hint_weight_set(layout_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       elm_layout_file_set(layout_inner, MSG_VIEWER_THEME, "item_list");
-
-       genlist = __msg_ui_viewer_create_genlist(pitem_list_data);
-       __msg_ui_viewer_set_list_styles(pitem_list_data);
-       pitem_list_data->genlist = genlist;
-
-       /*set list data*/
-       __msg_ui_viewer_item_list_set_list_data(genlist, pitem_list_data);
-       elm_object_part_content_set(layout_inner, "viewer.itemlist.body", genlist);
-
-       back_button = elm_button_add(pitem_list_data->navi_frame);
-       elm_object_style_set(back_button, "naviframe/back_btn/default");
-       evas_object_smart_callback_add(back_button, "clicked", __viewer_back_button_cb, (void *)pitem_list_data);
-       Elm_Object_Item *navi_it = elm_naviframe_item_push(pitem_list_data->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_ITEM_LIST"), back_button, NULL, layout_inner, NULL);
-
-       /*create commandbar*/
-       toolbar = __msg_ui_viewer_create_toolbar(pitem_list_data->navi_frame, pitem_list_data);
-       elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-       return TRUE;
-}
index d4d9019..7178e16 100755 (executable)
@@ -31,7 +31,6 @@
 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 void __msg_ui_viewer_launch_item_list(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_show_play_view(void *data);
@@ -58,7 +57,6 @@ void msg_ui_viewer_main_init(void *data)
        viewer_main_data->navi_frame = NULL;
        viewer_main_data->player_view = NULL;
        viewer_main_data->drm_list_view = NULL;
-       viewer_main_data->item_list_view = NULL;
        viewer_main_data->del_idler = NULL;
 }
 
@@ -98,7 +96,6 @@ void msg_ui_viewer_show_view_by_mode(void *data, MSG_VIEWER_VIEW_MODE_E viewMode
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewMode = %d", viewMode);
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->player_view = 0x%x", viewer_main_data->player_view);
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->drm_list_view = 0x%x", viewer_main_data->drm_list_view);
-       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->item_list_view = 0x%x", viewer_main_data->item_list_view);
 
        if (viewMode == MSG_VIEWER_PLAYER_VIEW) {
                if (commandType == MSG_VIEWER_VIEW_CMD_PLAY) {
@@ -111,53 +108,11 @@ void msg_ui_viewer_show_view_by_mode(void *data, MSG_VIEWER_VIEW_MODE_E viewMode
        } else if (viewMode == MSG_VIEWER_DRM_LIST_VIEW) {
                __msg_ui_viewer_launch_drm_list(viewer_main_data);
                viewer_main_data->view_mode = MSG_VIEWER_DRM_LIST_VIEW;
-       } else if (viewMode == MSG_VIEWER_ITEM_LIST_VIEW) {
-               __msg_ui_viewer_launch_item_list(viewer_main_data);
-               viewer_main_data->view_mode = MSG_VIEWER_ITEM_LIST_VIEW;
        } else {
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid viewMode!!");
        }
 }
 
-static void __msg_ui_viewer_launch_item_list(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
-       MSG_ITEM_LIST_DATA_S *pitem_list_data = NULL;
-
-       if (!viewer_main_data->item_list_view) {
-               pitem_list_data = (MSG_ITEM_LIST_DATA_S *)calloc(1, sizeof(MSG_ITEM_LIST_DATA_S));
-               if (!pitem_list_data) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed");
-                       return;
-               } else
-                       viewer_main_data->item_list_view = pitem_list_data;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "item list view is already created");
-               pitem_list_data = viewer_main_data->item_list_view;
-       }
-
-       msg_ui_viewer_init_item_list(pitem_list_data);
-
-       pitem_list_data->msgID = viewer_main_data->msgID;
-       pitem_list_data->msgHandle = viewer_main_data->msgHandle;
-       pitem_list_data->mms_t = viewer_main_data->mms_t;
-       pitem_list_data->main_window = viewer_main_data->main_window;
-       if (viewer_main_data->navi_frame)
-               pitem_list_data->navi_frame = viewer_main_data->navi_frame;
-
-       pitem_list_data->viewer_main = viewer_main_data;
-
-       if (msg_ui_viewer_create_item_list_view(pitem_list_data) == FALSE) {
-               if (viewer_main_data->item_list_view) {
-                       msg_ui_viewer_destroy_item_list(viewer_main_data->item_list_view);
-                       free(viewer_main_data->item_list_view);
-                       viewer_main_data->item_list_view = NULL;
-               }
-       }
-}
-
 static MSG_BOOL __msg_ui_viewer_launch_drm_list(void *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -272,6 +227,8 @@ static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data)
        viewer_play_data->msg_t = viewer_main_data->msg_t;
        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;
+
        if (viewer_main_data->navi_frame)
                viewer_play_data->navi_frame = viewer_main_data->navi_frame;
 
@@ -406,14 +363,19 @@ Evas_Object *msg_ui_viewer_create_bg(void *data, Evas_Object *parent)
        return bg;
 }
 
-Evas_Object *msg_ui_viewer_create_layout_main(Evas_Object *parent)
+Evas_Object *msg_ui_viewer_create_layout_main(Evas_Object *parent, bool indicator)
 {
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL);
        Evas_Object *layout = NULL;
 
        layout = elm_layout_add(parent);
        MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, NULL);
-       elm_layout_theme_set(layout, "layout", "application", "default");
+
+       if (indicator)
+               elm_layout_theme_set(layout, "layout", "application", "default");
+       else
+               elm_layout_theme_set(layout, "layout", "application", "noindicator");
+
        evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        elm_win_resize_object_add(parent, layout);
        evas_object_show(layout);
index f65355a..3b4bdea 100755 (executable)
@@ -20,7 +20,6 @@
 #include "msg-ui-common-utility.h"
 #include "msg-ui-image-resource.h"
 
-#include <aul.h>
 #include <contacts-ug.h>
 #include "contacts-svc.h"
 #include "appsvc.h"
@@ -42,6 +41,7 @@ static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_
 static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info);
 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);
@@ -63,6 +63,8 @@ static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data,
 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
@@ -256,21 +258,11 @@ void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj
                        end_point_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");
 
-                       if (viewer_play_data->playcontroller_opened) {
-                               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);
-                       } else {
-                               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;
-                                       //create play controller timer
-                                       msg_ui_viewer_create_play_controller_timer(viewer_play_data);
-                               }
-                       }
+                       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);
                }
        } else {
                if (abs(start_point_x-end_point_x) < screen_width / 10 && abs(start_point_y-end_point_y) < screen_height / 10 ) {
@@ -321,8 +313,6 @@ void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info
        if (!viewer_play_data->del_idler)
                viewer_play_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_play_data->viewer_main);
 
-       elm_object_disabled_set(obj, TRUE);
-
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
 
@@ -331,17 +321,32 @@ void msg_ui_viewer_title_button_clicked_cb(void *data, Evas_Object *obj, void *e
        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_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
 
        if (viewer_play_data->title_optionheader_opened) {
                elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", "");
                elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
                viewer_play_data->title_optionheader_opened = EINA_FALSE;
+
+               /* 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->title_box_layout) {
                /* clear title box layout */
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "clear title box layout!");
                elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
                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 {
                /* clear optionheader */
                Evas_Object *content = NULL;
@@ -370,28 +375,20 @@ void msg_ui_viewer_title_button_clicked_cb(void *data, Evas_Object *obj, void *e
                        elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,show", "");
                        viewer_play_data->title_optionheader_opened = EINA_TRUE;
                } else if (viewer_play_data->addr_list.addr_cnt > 1) {
-                       elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,show", "");
+                       elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,show,multi", "");
                        msg_ui_viewer_open_title_menu_genlist(viewer_play_data);
                } else {
                        D_EMSG("invalid address count [%d]", viewer_play_data->addr_list.addr_cnt);
                        return;
                }
 
-               /* set player state to pause and update icon */
-               if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-                       err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
-                       if (err != MSG_SMIL_SUCCESS) {
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err);
-                               return;
-                       } else {
-                               if (viewer_play_data->play_controller)
-                                       edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
-                               viewer_play_data->status = MSG_VIEWER_PAUSE;
+               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 (viewer_play_data->play_controller_progressbar_timer) {
-                                       ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-                               }
-                       }
+               /* 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;
                }
        }
 
@@ -402,18 +399,15 @@ 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_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
        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);
 
        //no medias in msg
        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, (char *)"No attachments");
+               msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_NO_ATTACHMENTS"));
                return;
        }
 
-       viewer_play_data->popup_mode = VIEWER_SAVE_MODE_POPUP;
-
        //prevent invalid double pressing button event after launching ug or app( call, vtcall)
        if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) {
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd);
@@ -429,21 +423,9 @@ void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info
        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);
 
-       //Pause
-       if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
-               if (err != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
-                       return;
-               } else {
-                       if (viewer_play_data->play_controller)
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
-                       viewer_play_data->status = MSG_VIEWER_PAUSE;
-
-                       if (viewer_play_data->play_controller_progressbar_timer) {
-                               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-                       }
-               }
+       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
@@ -457,7 +439,9 @@ void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_in
        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_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
+       msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+       msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+       msg_error_t err = MSG_SUCCESS;
 
        if (viewer_play_data->popup) {
                evas_object_del(viewer_play_data->popup);
@@ -466,7 +450,22 @@ void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_in
 
        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, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_DELETE_Q"));
+
+       err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed");
+               msg_release_struct(&msgInfo);
+               msg_release_struct(&sendOpt);
+               return;
+       }
+
+       /* Add protection on/off menu */
+       bool is_protected = false;
+       msg_get_bool_value(msgInfo, 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"));
+
+       msg_release_struct(&msgInfo);
+       msg_release_struct(&sendOpt);
 
        Evas_Object *btn_ok = elm_button_add(popup);
        elm_object_style_set(btn_ok, "popup_button/default");
@@ -483,21 +482,14 @@ void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_in
        evas_object_show(popup);
        viewer_play_data->popup = popup;
 
-       /* set player state to pause*/
-       if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
-               if (err != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
-                       return;
-               } else {
-                       if (viewer_play_data->play_controller)
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
-                       viewer_play_data->status = MSG_VIEWER_PAUSE;
+       /* 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);
 
-                       if (viewer_play_data->play_controller_progressbar_timer) {
-                               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-                       }
-               }
+       /* set player state to pause*/
+       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;
        }
 
        /*disconnect mouse handler*/
@@ -522,16 +514,26 @@ static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, v
 
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete msg-id is %d", viewer_play_data->msgID);
 
-       service_h svc_handle = NULL;
+       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;
+               }
 
-       service_create(&svc_handle);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
+       } else {
+               service_h svc_handle = NULL;
 
-       snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
-       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_DELETE_MSG, str_id);
+               service_create(&svc_handle);
+               MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL);
 
-       ug_send_result(viewer_main_data->viewer_ug, svc_handle);
-       service_destroy(svc_handle);
+               snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
+               service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_DELETE_MSG, 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);
@@ -554,6 +556,14 @@ static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *ob
        /* connect mouse handler again*/
        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);
+
+       /* 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)
@@ -563,7 +573,6 @@ void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_i
        MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
        char buf[DEF_BUF_LEN_S] = { 0, };
        service_h svc_handle;
-       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
 
        if (viewer_play_data->popup) {
                evas_object_del(viewer_play_data->popup);
@@ -571,40 +580,30 @@ void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_i
        }
 
        /* set player state to pause*/
-       if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
-               if (err != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err);
-                       return;
-               } else {
-                       if (viewer_play_data->play_controller)
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
-                       viewer_play_data->status = MSG_VIEWER_PAUSE;
-
-                       if (viewer_play_data->play_controller_progressbar_timer) {
-                               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-                       }
-               }
+       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 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_FORWARD, buf);
+               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;
 
-               viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
-               viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
                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);
-               } else {
-                       viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
-                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+                       viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
                }
+
                service_destroy(svc_handle);
        }
 
@@ -617,7 +616,6 @@ void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_in
        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_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
        char str_id[DEF_BUF_LEN] = {0,};
 
        if (viewer_play_data->popup) {
@@ -626,26 +624,14 @@ void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_in
        }
 
        /* set player state to pause*/
-       if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
-               if (err != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err);
-                       return;
-               } else {
-                       if (viewer_play_data->play_controller)
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
-                       viewer_play_data->status = MSG_VIEWER_PAUSE;
-
-                       if (viewer_play_data->play_controller_progressbar_timer) {
-                               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-                       }
-               }
+       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;
        }
 
        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);
 
@@ -667,7 +653,6 @@ void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_inf
        MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
        MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
        service_h svc_handle;
-       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
 
        if (viewer_play_data->popup) {
                evas_object_del(viewer_play_data->popup);
@@ -675,20 +660,9 @@ void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_inf
        }
 
        /* set player state to pause*/
-       if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
-               if (err != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err);
-                       return;
-               } else {
-                       if (viewer_play_data->play_controller)
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
-                       viewer_play_data->status = MSG_VIEWER_PAUSE;
-
-                       if (viewer_play_data->play_controller_progressbar_timer) {
-                               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-                       }
-               }
+       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;
        }
 
        if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
@@ -697,17 +671,15 @@ void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_inf
                service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, viewer_play_data->addr_list.addr_info[0].address);
                ui_gadget_h loaded_ug;
 
-               viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
-               viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
                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);
-               } else {
-                       viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
-                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+                       viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER;
                }
+
                service_destroy(svc_handle);
        }
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
@@ -718,7 +690,6 @@ 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_SMIL_ERROR_E smilErr = MSG_SMIL_SUCCESS;
        MSG_BOOL hasText = FALSE;
        int page_count = 0;
        int media_count = 0;
@@ -742,24 +713,17 @@ void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info
                viewer_play_data->popup = NULL;
        }
 
-       /* set player state to pause*/
-       if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-               smilErr = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
-               if (smilErr != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", smilErr);
-                       msg_release_struct(&msgInfo);
-                       msg_release_struct(&sendOpt);
-                       return;
-               } else {
-                       if (viewer_play_data->play_controller)
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
-                       viewer_play_data->status = MSG_VIEWER_PAUSE;
+       /* 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);
 
-                       if (viewer_play_data->play_controller_progressbar_timer) {
-                               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-                       }
-               }
+       /* set player state to pause*/
+       if (!msg_ui_viewer_command_play_pause(viewer_play_data, MSG_VIEWER_ACTION_AUTO_PAUSE)) {
+               msg_release_struct(&msgInfo);
+               msg_release_struct(&sendOpt);
+               return;
        }
+
        Evas_Object *ctx_popup = NULL;
        ctx_popup = elm_ctxpopup_add(viewer_play_data->main_window);
        evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_viewer_more_ctxpopup_dismissed_cb, (void *)viewer_play_data);
@@ -769,7 +733,17 @@ void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info
 
        /* Add FORWARD menu if outbox/inbox msg */
        if (folder_id == MSG_OUTBOX_ID || folder_id == MSG_INBOX_ID)
-               elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_BODY_FORWARD_A"), NULL, msg_ui_viewer_forward_button_cb, (void *)viewer_play_data);
+               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(msgInfo, 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) {
@@ -806,10 +780,10 @@ void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info
        }
 
        if (hasText)
-               elm_ctxpopup_item_append(ctx_popup, (char *)"Copy message text", NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
+               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, (char *)"View message details", NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data);
+       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;
@@ -894,10 +868,8 @@ void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object * o, const char
        MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL);
        MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
 
-       msg_ui_viewer_command_play_pause(viewer_play_data);
-
-       //create play controller timer repeatedly
-       msg_ui_viewer_create_play_controller_timer(viewer_play_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);
 }
@@ -953,53 +925,6 @@ void msg_ui_viewer_next_button_cb(void *data, Evas_Object * o, const char *emiss
        }
 }
 
-void msg_ui_viewer_stop_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_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
-       MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
-
-       /*prevent invalid double pressing button event after launching ug or app( call, vtcall)*/
-       if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd);
-               return;
-       }
-
-       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);
-       } else {
-               msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode);
-
-               if (launchmode == MSG_VIEWER_PREVIEW_MODE) {
-                       if (viewer_play_data->play_controller) {
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
-                               msg_ui_viewer_destroy_play_controller_progressbar_timer(viewer_play_data);
-                       }
-               } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE){
-                       msg_ui_viewer_disconnect_handler(viewer_play_data);
-                       msg_ui_viewer_show_view_by_mode(viewer_play_data->viewer_main, MSG_VIEWER_ITEM_LIST_VIEW, MSG_VIEWER_VIEW_CMD_NONE);
-                       if (viewer_play_data->title_optionheader_opened) {
-                               elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", "");
-                               elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
-                               viewer_play_data->title_optionheader_opened = EINA_FALSE;
-                       } else if (viewer_play_data->title_box_layout) {
-                               elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
-                               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
-                       }
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid launchmode : %d", launchmode);
-               }
-
-               viewer_play_data->status = MSG_VIEWER_STOP;
-               msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP);
-       }
-
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
-
 void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -1010,6 +935,7 @@ void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_in
        msg_error_t err =  MSG_SUCCESS;
        msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
        msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
+       service_error_e svc_err = SERVICE_ERROR_NONE;
 
        err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt);
        if (err != MSG_SUCCESS) {
@@ -1029,7 +955,7 @@ void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_in
                msg_struct_t addr_info = NULL;
                char szAddress[MAX_ADDRESS_VAL_LEN + 1] = {0,};
                addr_info = addr_list->msg_struct_info[0];
-               msg_set_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, szAddress, strlen(szAddress));
+               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);
                memcpy(address, szAddress, strlen(szAddress));
@@ -1037,18 +963,22 @@ void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_in
                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, MSG_BUNDLE_KEY_TO, address);
+               service_add_extra_data(svc_handle, SERVICE_DATA_TO, address);
 
-               msg_ui_viewer_disconnect_handler(viewer_play_data);
-               viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
-               viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
-               loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), EMAIL_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);
+               Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
+               service_set_window(svc_handle, win_id);
+
+               svc_err = service_send_launch_request(svc_handle, NULL, NULL);
+
+               if (svc_err == SERVICE_ERROR_NONE) {
+                       msg_ui_viewer_disconnect_handler(viewer_play_data);
+                       viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
+                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
                } else {
-                       viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
-                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", svc_err);
                }
 
                service_destroy(svc_handle);
@@ -1100,21 +1030,31 @@ void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_in
        MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data);
 
        if (viewer_play_data->addr_list.addr_cnt == 1) {
-               int ret = 0;
-               bundle *b = bundle_create();
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO);
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE);
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, viewer_play_data->addr_list.addr_info[0].address);
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE);
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE);
-               if ((ret = aul_launch_app(VIDEO_CALL_PKG_NAME, b)) >= 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", viewer_play_data->addr_list.addr_info[0].address);
+               snprintf(contact_id, sizeof(contact_id), "%d", viewer_play_data->addr_list.addr_info[0].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);
+               err = service_send_launch_request(svc_handle, NULL, NULL);
+
+               if (err == SERVICE_ERROR_NONE) {
                        msg_ui_viewer_disconnect_handler(viewer_play_data);
                        viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
                        viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
                } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "aul_launch_app failed ret : %d", ret);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", err);
                }
-               bundle_free(b);
+
+               service_destroy(svc_handle);
        }
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
@@ -1146,15 +1086,13 @@ void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void
                        service_add_extra_data(svc_handle, CT_UG_BUNDLE_NUM, viewer_play_data->addr_list.addr_info[0].address);
                }
 
-               msg_ui_viewer_disconnect_handler(viewer_play_data);
-               viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
-               viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT;
                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);
-               } else {
-                       viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
-                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+                       msg_ui_viewer_disconnect_handler(viewer_play_data);
+                       viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
                }
 
                service_destroy(svc_handle);
@@ -1185,16 +1123,13 @@ void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *e
                service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
                service_add_extra_data(svc_handle, CT_UG_BUNDLE_ID, contactId);
 
-               viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
-               viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT;
                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);
-               } else {
-                       viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
-                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+                       viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
                }
 
                service_destroy(svc_handle);
@@ -1203,6 +1138,135 @@ void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *e
        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 *szbuf = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_BLOCK_PS_Q");
+       char *popup_text = g_strdup_printf(szbuf, viewer_play_data->addr_list.addr_info[0].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_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;
+
+       /*disconnect mouse handler*/
+       msg_ui_viewer_disconnect_handler(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;
+
+       if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, viewer_play_data->addr_list.addr_info[0].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, viewer_play_data->addr_list.addr_info[0].address);
+               if (!message_text) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
+                       return;
+               }
+               status_message_post(message_text);
+               free(message_text);
+
+               msg_ui_viewer_title_update(viewer_play_data, MSG_VIEWER_OPTION_BLOCK);
+       }
+
+       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;
+       }
+
+       if (viewer_play_data->addr_list.addr_cnt == 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;
+               }
+
+               err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, viewer_play_data->addr_list.addr_info[0].address, strlen(viewer_play_data->addr_list.addr_info[0].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, viewer_play_data->addr_list.addr_info[0].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_ui_viewer_title_update(viewer_play_data, MSG_VIEWER_OPTION_BLOCK);
+
+               msg_release_struct(&filter);
+       }
+
+       return;
+}
+
 void msg_ui_viewer_open_title_menu_genlist(void *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -1210,23 +1274,17 @@ void msg_ui_viewer_open_title_menu_genlist(void *data)
        MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!");
        int i = 0;
 
-       /* create layout for title menu */
-       Evas_Object *layout = elm_layout_add(viewer_play_data->play_layout);
-       elm_layout_theme_set(layout, "layout", "application", "noindicator");
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_show(layout);
-       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.titlebtn.list", layout);
-
        /* create box (for setting min size of genlist)*/
-       Evas_Object *box = elm_box_add(layout);
+       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(layout, "elm.swallow.content", box);
+
+       elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.title.list", 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);
@@ -1236,7 +1294,7 @@ void msg_ui_viewer_open_title_menu_genlist(void *data)
        elm_box_pack_end(box, genlist);
 
        /* set genlist styles */
-       viewer_play_data->itc_title.item_style = "2text.1icon.2";
+       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;
@@ -1247,16 +1305,16 @@ void msg_ui_viewer_open_title_menu_genlist(void *data)
                elm_genlist_item_append(genlist, &(viewer_play_data->itc_title), &(viewer_play_data->addr_list.addr_info[i]), NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_title_menu_gl_sel, viewer_play_data);
 
        viewer_play_data->title_genlist = genlist;
-       viewer_play_data->title_box_layout = layout;
+       viewer_play_data->title_box_layout = box;
 
        /** emit signal for changing state of title menu list to open */
-       elm_object_signal_emit(viewer_play_data->title_box_layout, "elm,state,titlelist,open", "");
+       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlelist,open", "");
 
-       /** Determine genlist size to show - it shows maxmum 3 rows */
+       /** Determine genlist size to show */
        if (viewer_play_data->addr_list.addr_cnt >= 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);
+               evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * VIEWER_TITLE_MENU_GENLIST_MAX_ITEM * elm_scale_get());
        else
-               evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * viewer_play_data->addr_list.addr_cnt);
+               evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * viewer_play_data->addr_list.addr_cnt * elm_scale_get());
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
@@ -1267,9 +1325,9 @@ void msg_ui_viewer_close_title_menu_genlist(void *data)
        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->title_box_layout, "elm,state,titlelist,close", "");
+       elm_object_signal_emit(viewer_play_data->play_layout, "elm,state,titlelist,close", "");
 
-       Evas_Object *layout = elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.titlebtn.list");
+       Evas_Object *layout = elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.title.list");
        if (layout) {
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete box layout");
                evas_object_del(layout);
@@ -1371,6 +1429,14 @@ static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void
                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);
@@ -1430,21 +1496,31 @@ static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object
 
                service_destroy(svc_handle);
        } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) {
-               int ret = 0;
-               bundle *b = bundle_create();
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO);
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE);
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, addrInfo->address);
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE);
-               bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE);
-               if ((ret = aul_launch_app(VIDEO_CALL_PKG_NAME, b)) >= 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);
+               err = service_send_launch_request(svc_handle, NULL, NULL);
+
+               if (err == SERVICE_ERROR_NONE) {
                        msg_ui_viewer_disconnect_handler(viewer_play_data);
                        viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
                        viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL;
                } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "aul_launch_app failed ret : %d", ret);
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", err);
                }
-               bundle_free(b);
+
+               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, };
@@ -1463,17 +1539,15 @@ static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object
                        service_add_extra_data(svc_handle, CT_UG_BUNDLE_NUM, addrInfo->address);
                }
 
-               viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
-               viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT;
                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);
-               } else {
-                       viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
-                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+                       viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
                }
+
                service_destroy(svc_handle);
        } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) {
                ui_gadget_h loaded_ug = NULL;
@@ -1490,45 +1564,153 @@ static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object
                service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf);
                service_add_extra_data(svc_handle, CT_UG_BUNDLE_ID, contactId);
 
-               viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
-               viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT;
                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);
-               } else {
-                       viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
-                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+                       viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
+                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CONTACT;
                }
+
                service_destroy(svc_handle);
        } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) {
-               ui_gadget_h loaded_ug = NULL;
                service_h svc_handle = NULL;
+               service_error_e svc_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, MSG_BUNDLE_KEY_TO, addrInfo->address);
+               service_add_extra_data(svc_handle, SERVICE_DATA_TO, addrInfo->address);
 
-               viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE;
-               viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
-               loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), EMAIL_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs);
+               Ecore_X_Window win_id = elm_win_xwindow_get(viewer_play_data->main_window);
+               service_set_window(svc_handle, win_id);
 
-               if (loaded_ug) {
-                       msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug);
+               svc_err = service_send_launch_request(svc_handle, NULL, NULL);
+
+               if (svc_err == SERVICE_ERROR_NONE) {
                        msg_ui_viewer_disconnect_handler(viewer_play_data);
+                       viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE;
+                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER;
                } else {
-                       viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE;
-                       viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE;
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] service_send_launch_request is failed : %d", svc_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, viewer_play_data->addr_list.addr_info[0].address);
+                       if (!message_text) {
+                               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "message_text is null");
+                               return;
+                       }
+
+                       status_message_post(message_text);
+                       free(message_text);
+
+                       msg_ui_viewer_title_update(viewer_play_data, MSG_VIEWER_OPTION_BLOCK);
+               }
+       } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK")) == 0) {
+               char szbuf[VIEWER_BUFFER_SIZE_64] = {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);
+               snprintf(szbuf, sizeof(szbuf), "%s %s?", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_BLOCK"), viewer_play_data->addr_list.addr_info[0].address);
+               elm_object_text_set(popup, szbuf);
+
+               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;
+
+               /*disconnect mouse handler*/
+               msg_ui_viewer_disconnect_handler(viewer_play_data);
        }
 
+       /* close title box area */
+       elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+       msg_ui_viewer_close_title_menu_genlist(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 = NULL;
+       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;
+       }
+
+       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_ui_viewer_title_update(viewer_play_data, MSG_VIEWER_OPTION_BLOCK);
+
+       msg_release_struct(&filter);
+
+       return;
+}
+
 static void __msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
@@ -1536,11 +1718,13 @@ static void __msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
        MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
        Elm_Object_Item *gl_item = NULL;
        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;
 
        total_media_count = viewer_play_data->insert_count + viewer_play_data->attach_count;
 
@@ -1555,7 +1739,7 @@ static void __msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
                elm_object_style_set(popup, "min_menustyle");
 
        /* set popup title */
-        elm_object_part_text_set(popup, "title,text", (char *)"Attachments");
+        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";
@@ -1610,17 +1794,12 @@ static void __msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data)
        evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb, viewer_play_data);
 
        /* set popup style */
-       if (total_media_count > 3 ) {
-               /* set genlist part content in popup */
-               elm_object_content_set(popup, genlist);
-       } else {
-               Evas_Object *box = NULL;
-               box = elm_box_add(viewer_play_data->main_window);
-               evas_object_size_hint_min_set(box, VIEWER_ATTACH_POPUP_WIDTH * elm_scale_get(), VIEWER_ATTACH_GL_ITEM_HEIGHT * (viewer_play_data->insert_count + viewer_play_data->attach_count + ((total_media_count > 1) ? 1 : 0)) * elm_scale_get());
-               evas_object_show(genlist);
-               elm_box_pack_end(box, genlist);
-               elm_object_content_set(popup, box);
-       }
+       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_scale_get());
+       evas_object_show(genlist);
+       elm_box_pack_end(box, genlist);
+       elm_object_content_set(popup, box);
 
        /* show popup */
        evas_object_show(popup);
@@ -1672,6 +1851,14 @@ static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(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);
 
+       /* 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);
 }
 
@@ -1762,15 +1949,27 @@ static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, E
        if (failed_count == selected_count) {
                status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
        } 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);
+               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 mouse handler again*/
        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);
 
+       /* 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);
 }
 
@@ -2167,9 +2366,13 @@ static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play
        if (failed_count == attach_count) {
                status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE"));
        } 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);
+               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);
@@ -2220,7 +2423,7 @@ void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj
                }
 
                if (issave)
-                       status_message_post(dgettext("sys_string", "IDS_COM_POP_SAVED"));
+                       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"));
        }
@@ -2239,9 +2442,17 @@ static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *ob
                viewer_play_data->popup = NULL;
        }
 
-       if (strcmp(label, (char *)"Copy message text") == 0) {
+       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);
-       } else if (strcmp(label, (char *)"View message details") == 0) {
+
+               /* play viewer again if previous status was PLAY */
+               if (viewer_play_data->auto_resume_state && 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");
@@ -2262,6 +2473,97 @@ static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *
                viewer_play_data->popup = NULL;
        }
 
+       /* 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_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+
+       msg_error_t err =  MSG_SUCCESS;
+       bool is_protected = false;
+
+       msg_struct_t msg_info = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
+       msg_struct_t send_opt = msg_create_struct(MSG_STRUCT_SENDOPT);
+
+       err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msg_info, send_opt);
+
+       if (err != MSG_SUCCESS) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message is failed");
+
+               if (msg_info)
+                       msg_release_struct(&msg_info);
+               if (send_opt)
+                       msg_release_struct(&send_opt);
+               return;
+       }
+
+       msg_get_bool_value(msg_info, 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");
+               msg_release_struct(&msg_info);
+               msg_release_struct(&send_opt);
+               return;
+       }
+
+       /* delete ctx popup */
+       if (viewer_play_data->popup) {
+               evas_object_del(viewer_play_data->popup);
+               viewer_play_data->popup = NULL;
+       }
+
+       /* 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");
+               msg_release_struct(&msg_info);
+               msg_release_struct(&send_opt);
+               return;
+       }
+
+       snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID);
+       service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_REFRESH_CONV, str_id);
+       ug_send_result(viewer_main_data->viewer_ug, svc_handle);
+
+       service_destroy(svc_handle);
+
+       msg_release_struct(&msg_info);
+       msg_release_struct(&send_opt);
+
+       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+}
index bd287e8..ee38009 100755 (executable)
@@ -27,7 +27,6 @@
 #include <msg_storage.h>
 #include <msg_transport.h>
 
-#include <aul.h>
 #include <Ecore_X.h>
 #include <glib.h>
 #include <contacts-ug.h>
@@ -91,7 +90,7 @@ MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus
 
        /*update page index*/
        snprintf(title_string, sizeof(title_string), "%d/%d ", eventStatus->pageIdx + 1, total_page);
-       edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "page/index", title_string);
+       edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "page/text", title_string);
 
        if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE && eventStatus->isLastSlide == TRUE) {
                MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
@@ -140,7 +139,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), "pause", "*");
 
                viewer_play_data->status = MSG_VIEWER_PLAY;
-       } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE) {
+       } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE || eventStatus->clientCbEvent == SMIL_RENDER_EVENT_MOVE_PAGE_AFTER_PAUSED) {
                if (viewer_play_data->play_controller)
                        edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
 
@@ -178,26 +177,15 @@ void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E s
        MSG_BOOL bfisrt_page = FALSE;
        MSG_BOOL blast_page = FALSE;
        SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = viewer_play_data->smil_eventStatus;
-       Evas_Object *left_btn_icon = NULL;
-       Evas_Object *right_btn_icon = NULL;
-       int r = VIEWER_COLOR_255;
-       int g = VIEWER_COLOR_255;
-       int b = VIEWER_COLOR_255;
-       int a = VIEWER_COLOR_255;
        SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
 
        if (status == MSG_VIEWER_STOP) {
-               elm_object_disabled_set(viewer_play_data->next_button, TRUE);
-               right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
-               evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
-               evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
-
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
-               elm_object_disabled_set(viewer_play_data->prev_button, TRUE);
-               left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
-               evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
-               evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+               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);
@@ -210,123 +198,125 @@ void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E s
                                blast_page = TRUE;
 
                        if (bfisrt_page) {      /*first page*/
-                                       elm_object_disabled_set(viewer_play_data->prev_button, TRUE);
-                                       left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
-                                       evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
-                                       evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
+                               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 {
-                               elm_object_disabled_set(viewer_play_data->prev_button, FALSE);
-                               left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
-                               evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
-                               evas_object_color_set(left_btn_icon, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255);
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable prev_button");
+                               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*/
-                                       elm_object_disabled_set(viewer_play_data->next_button, TRUE);
-                                       right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
-                                       evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
-                                       evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, 128);
+                               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 {
-                               elm_object_disabled_set(viewer_play_data->next_button, FALSE);
-                               right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
-                               evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
-                               evas_object_color_set(right_btn_icon, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255);
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable next_button");
+                               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) {
-                               elm_object_disabled_set(viewer_play_data->next_button, TRUE);
-                               right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
-                               evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
-                               evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button");
-
-                               elm_object_disabled_set(viewer_play_data->prev_button, TRUE);
-                               left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
-                               evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
-                               evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
-                               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button");
+                               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");
-                       elm_object_disabled_set(viewer_play_data->next_button, TRUE);
-                       right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon");
-                       evas_object_color_get(right_btn_icon, &r, &g, &b, &a);
-                       evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
-
-                       elm_object_disabled_set(viewer_play_data->prev_button, TRUE);
-                       left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon");
-                       evas_object_color_get(left_btn_icon, &r, &g, &b, &a);
-                       evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128);
+                       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_command_play_pause(void *data)
+MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E action)
 {
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS;
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE);
+       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
        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);
 
        /*prevent invalid double pressing button event after launching ug or app( call, vtcall)*/
        if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) {
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd);
-               return;
+               return FALSE;
        }
 
-       /* play */
-       if (viewer_play_data->status == MSG_VIEWER_PLAY) {
-               Error = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
-               if (Error != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
-                       return;
-               } else {
-                       if (viewer_play_data->play_controller)
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
-                       viewer_play_data->status = MSG_VIEWER_PAUSE;
+       switch(action) {
+               case MSG_VIEWER_ACTION_TOOLBAR_PAUSE :
+                       /* fall through */
+               case MSG_VIEWER_ACTION_AUTO_PAUSE :
+                       /* Do pause action only if current status is PLAY */
+                       if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE);
+                               if (err != MSG_SMIL_SUCCESS) {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+                                       return FALSE;
+                               } else {
+                                       if (viewer_play_data->play_controller)
+                                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*");
+                                       viewer_play_data->status = MSG_VIEWER_PAUSE;
 
-                       if (viewer_play_data->play_controller_progressbar_timer)
-                               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
-               }
-       } else if (viewer_play_data->status == MSG_VIEWER_STOP) {
-               Error = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
-               if (Error != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
-               } 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);
+                                       if (viewer_play_data->play_controller_progressbar_timer)
+                                               ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer);
+                               }
                        }
+                       break;
+               case MSG_VIEWER_ACTION_TOOLBAR_PLAY :
+                       /* fall through */
+               case MSG_VIEWER_ACTION_AUTO_PLAY :
+                       /* Do play action when play status is STOP & PAUSE */
+                       if (viewer_play_data->status == MSG_VIEWER_STOP) {
+                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY);
+                               if (err != MSG_SMIL_SUCCESS) {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+                                       return FALSE;
+                               } 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);
+                                       }
+                                       viewer_play_data->status = MSG_VIEWER_PLAY;
+                               }
+                       } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) {
+                               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_RESUME);
+                               if (err != MSG_SMIL_SUCCESS) {
+                                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
+                                       return FALSE;
+                               } else {
+                                       if (viewer_play_data->play_controller)
+                                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
+                                       viewer_play_data->status = MSG_VIEWER_PLAY;
 
-                       viewer_play_data->status = MSG_VIEWER_PLAY;
-               }
-       } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) {
-               Error = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_RESUME);
-               if (Error != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error);
-                       return;
-               } else {
-                       if (viewer_play_data->play_controller)
-                               edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*");
-                       viewer_play_data->status = MSG_VIEWER_PLAY;
-
-                       if (viewer_play_data->play_controller_progressbar_timer)
-                               ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
-               }
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid play status case");
+                                       if (viewer_play_data->play_controller_progressbar_timer)
+                                               ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer);
+                               }
+                       }
+                       break;
+               default :
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid play status case");
+                       return FALSE;
        }
 
-       /* hide optionheader if current viewer status has changed to MSG_VIEWER_PLAY */
-       if (viewer_play_data->status == MSG_VIEWER_PLAY) {
+       /* refreshing play controller timer by button action */
+       if (action == MSG_VIEWER_ACTION_TOOLBAR_PLAY) {
+               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
                if (viewer_play_data->title_optionheader_opened) {
                        elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", "");
                        elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
@@ -337,34 +327,48 @@ void msg_ui_viewer_command_play_pause(void *data)
                        elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
                        msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
                }
-       }
 
-       MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
-}
+               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);
+               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_optionheader_opened) {
+                               elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", "");
+                               elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+                               viewer_play_data->title_optionheader_opened = EINA_FALSE;
+                       }
 
-void msg_ui_viewer_update_player_state_after_save(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL);
-       MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS;
-       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+                       if (viewer_play_data->title_box_layout) {
+                               elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", "");
+                               msg_ui_viewer_close_title_menu_genlist(viewer_play_data);
+                       }
 
-       if (viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
-               err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_RESUME);
-               if (err != MSG_SMIL_SUCCESS) {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err);
-                       return;
-               } else {
-                       viewer_play_data->status = MSG_VIEWER_PLAY;
+                       /* show play controller again to notify SMIL is resumed */
+                       if (viewer_play_data->play_controller && !viewer_play_data->playcontroller_opened) {
+                               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;
+                               msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+                       }
+               } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) {
+                       if (viewer_play_data->previous_status == MSG_VIEWER_PLAY) {
+                               /* show play controller again to notify SMIL is paused */
+                               if (viewer_play_data->play_controller && !viewer_play_data->playcontroller_opened) {
+                                       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;
+                                       msg_ui_viewer_create_play_controller_timer(viewer_play_data);
+                               }
+                       }
                }
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status);
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status : %d", viewer_play_data->previous_status);
        }
 
-       viewer_play_data->previous_status = MSG_VIEWER_UNKOWN;
-
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
+
+       return TRUE;
 }
 
 void msg_ui_viewer_play_view_init(void *data)
@@ -790,10 +794,16 @@ static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data)
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "subject text is %s", strSubject);
 
        if (strSubject[0] != '\0')
-               edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "subject", strSubject);
+               edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "subject/text", strSubject);
 
        elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.subject", viewer_play_data->subject_index_layout);
 
+       /* set LOCK icon if available */
+       bool bProtected = false;
+       msg_get_bool_value(msgInfo, MSG_MESSAGE_PROTECTED_BOOL, &bProtected);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Lock status of current message %d", bProtected);
+       edje_object_signal_emit(_EDJ(viewer_play_data->subject_index_layout), ((bProtected) ? "lock/icon/show" : "lock/icon/hide"), "*");
+
        msg_release_struct(&msgInfo);
        msg_release_struct(&sendOpt);
 
@@ -947,7 +957,7 @@ void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data)
                        viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
                        elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
                        elm_object_style_set(viewer_play_data->title_button, "title_button");
-                       evas_object_size_hint_weight_set(viewer_play_data->title_button, 0.0, 0.0);
+                       evas_object_size_hint_weight_set(viewer_play_data->title_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
                        evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
                        if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) {
@@ -973,7 +983,7 @@ void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data)
                        viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame);
                        elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th);
                        elm_object_style_set(viewer_play_data->title_button, "title_button");
-                       evas_object_size_hint_weight_set(viewer_play_data->title_button, 0.0, 0.0);
+                       evas_object_size_hint_weight_set(viewer_play_data->title_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
                        evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
                        if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) {
@@ -1063,18 +1073,19 @@ void msg_ui_viewer_add_title_toolbar_item(Evas_Object *toolbar, 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 i;
 
        /* create add/view contact button */
        Evas_Object *addcontact_button = NULL;
+       Evas_Object *block_button = NULL;
 
        /* clear toolbar items, max value is 3 */
-       for (i = 0; i < 3; i++) {
+       for (i = 0; i < sizeof(viewer_play_data->toolbar_item)/sizeof(Elm_Object_Item *); i++) {
                if (viewer_play_data->toolbar_item[i])
                        elm_object_item_del(viewer_play_data->toolbar_item[i]);
        }
 
+       /* check contact button type and create */
        if (viewer_play_data->addr_list.addr_info[0].contact_id <= 0) {
                addcontact_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL);
                evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_add_to_contact_cb, (void *)viewer_play_data);
@@ -1083,6 +1094,16 @@ void msg_ui_viewer_add_title_toolbar_item(Evas_Object *toolbar, void *data)
                evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_view_contact_cb, (void *)viewer_play_data);
        }
 
+       /* check block button type and create */
+       int filter_id = 0;
+       if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, viewer_play_data->addr_list.addr_info[0].address, &filter_id)) {
+               block_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_UNBLOCK, NULL);
+               evas_object_smart_callback_add(block_button, "clicked", msg_ui_viewer_toolbar_unblock_address_cb, (void *)viewer_play_data);
+       } else {
+               block_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_BLOCK, NULL);
+               evas_object_smart_callback_add(block_button, "clicked", msg_ui_viewer_toolbar_block_address_cb, (void *)viewer_play_data);
+       }
+
        if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) {
                /* create voicecall button */
                Evas_Object *voicecall_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_VOICECALL, NULL);
@@ -1096,23 +1117,35 @@ void msg_ui_viewer_add_title_toolbar_item(Evas_Object *toolbar, void *data)
                viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
                elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", videocall_button);
 
+               /* set contact button */
                viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
                elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", addcontact_button);
+
+               /* set block button */
+               viewer_play_data->toolbar_item[3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+               elm_object_item_part_content_set(viewer_play_data->toolbar_item[3], "object", block_button);
        } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) {
+               /* set email button */
                Evas_Object *email_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, NULL, dgettext("sys_string","IDS_COM_BODY_EMAIL"));
                evas_object_smart_callback_add(email_button, "clicked", msg_ui_viewer_toolbar_email_cb, (void *)viewer_play_data);
                viewer_play_data->toolbar_item[0] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
                elm_object_item_part_content_set(viewer_play_data->toolbar_item[0], "object", email_button);
 
+               /* set contact button */
                viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
                elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", addcontact_button);
        } else {
                MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "given address cannot be handled : %s", viewer_play_data->addr_list.addr_info[0].address);
 
-               viewer_play_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+               viewer_play_data->toolbar_item[0] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
                elm_object_item_part_content_set(viewer_play_data->toolbar_item[0], "object", addcontact_button);
                elm_object_item_disabled_set(viewer_play_data->toolbar_item[0], EINA_TRUE);
                elm_object_disabled_set(addcontact_button, EINA_TRUE);
+
+               viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+               elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", block_button);
+               elm_object_item_disabled_set(viewer_play_data->toolbar_item[1], EINA_TRUE);
+               elm_object_disabled_set(block_button, EINA_TRUE);
        }
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
@@ -1524,63 +1557,102 @@ FREE_LIST:
        return NULL;
 }
 
-void msg_ui_viewer_contact_info_update(MSG_PLAY_DATA_S *data)
+void msg_ui_viewer_title_update(MSG_PLAY_DATA_S *data, MSG_VIEWER_OPTION_CHANGE_TYPE_E option_type)
 {
        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;
 
-       /* reload thread address list */
-       __msg_ui_viewer_get_thread_addr_list(viewer_play_data);
+       if (option_type == MSG_VIEWER_OPTION_CONTACT) {
+               Evas_Object *contact_button = NULL;
+               Evas_Object *block_button = NULL;
+               int filter_id = 0;
 
-       /* change control bar button */
-       if (viewer_play_data->title_optionheader_opened) {
-               if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) {
-                       Evas_Object *addcontact_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL);
-                       evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_view_contact_cb, (void *)viewer_play_data);
+               /* reload thread address list */
+               __msg_ui_viewer_get_thread_addr_list(viewer_play_data);
 
-                       if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) {
-                               elm_object_item_del(viewer_play_data->toolbar_item[2]);
-                               viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
-                               elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", addcontact_button);
-                       } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) {
-                               elm_object_item_del(viewer_play_data->toolbar_item[1]);
-                               viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
-                               elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", addcontact_button);
+               /* change control bar button */
+               if (viewer_play_data->title_optionheader_opened) {
+                       if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, viewer_play_data->addr_list.addr_info[0].address, &filter_id)) {
+                               block_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_TITLE_ICON_UNBLOCK, NULL);
+                               evas_object_smart_callback_add(block_button, "clicked", msg_ui_viewer_toolbar_unblock_address_cb, (void *)viewer_play_data);
+                       } else {
+                               block_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_TITLE_ICON_BLOCK, NULL);
+                               evas_object_smart_callback_add(block_button, "clicked", msg_ui_viewer_toolbar_block_address_cb, (void *)viewer_play_data);
                        }
-               } else {
-                       Evas_Object *addcontact_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL);
-                       evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_add_to_contact_cb, (void *)viewer_play_data);
 
-                       if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) {
-                               elm_object_item_del(viewer_play_data->toolbar_item[2]);
-                               viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
-                               elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", addcontact_button);
-                       } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) {
-                               elm_object_item_del(viewer_play_data->toolbar_item[1]);
-                               viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
-                               elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", addcontact_button);
+                       if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) {
+                               contact_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL);
+                               evas_object_smart_callback_add(contact_button, "clicked", msg_ui_viewer_toolbar_view_contact_cb, (void *)viewer_play_data);
+
+                               if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) {
+                                       elm_object_item_del(viewer_play_data->toolbar_item[3]);
+                                       elm_object_item_del(viewer_play_data->toolbar_item[2]);
+                                       viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+                                       elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", contact_button);
+                                       viewer_play_data->toolbar_item[3] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+                                       elm_object_item_part_content_set(viewer_play_data->toolbar_item[3], "object", block_button);
+                               } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) {
+                                       elm_object_item_del(viewer_play_data->toolbar_item[1]);
+                                       viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+                                       elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", contact_button);
+                               }
+                       } else {
+                               contact_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL);
+                               evas_object_smart_callback_add(contact_button, "clicked", msg_ui_viewer_toolbar_add_to_contact_cb, (void *)viewer_play_data);
+
+                               if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) {
+                                       elm_object_item_del(viewer_play_data->toolbar_item[3]);
+                                       elm_object_item_del(viewer_play_data->toolbar_item[2]);
+                                       viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+                                       elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", contact_button);
+                                       viewer_play_data->toolbar_item[3] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+                                       elm_object_item_part_content_set(viewer_play_data->toolbar_item[3], "object", block_button);
+                               } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) {
+                                       elm_object_item_del(viewer_play_data->toolbar_item[1]);
+                                       viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+                                       elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", contact_button);
+                               }
                        }
                }
-       }
 
-       /* change title button */
-       if (viewer_play_data->addr_list.addr_cnt == 1) {
-               if (viewer_play_data->addr_list.addr_info[0].name[0] != '\0')
-                       elm_object_text_set(viewer_play_data->title_button, viewer_play_data->addr_list.addr_info[0].name);
-               else
-                       elm_object_text_set(viewer_play_data->title_button, viewer_play_data->addr_list.addr_info[0].address);
-       } else if (viewer_play_data->addr_list.addr_cnt > 1) {
-               char title_text[DEF_BUF_LEN+1] = {0,};
+               /* change title button */
+               if (viewer_play_data->addr_list.addr_cnt == 1) {
+                       if (viewer_play_data->addr_list.addr_info[0].name[0] != '\0')
+                               elm_object_text_set(viewer_play_data->title_button, viewer_play_data->addr_list.addr_info[0].name);
+                       else
+                               elm_object_text_set(viewer_play_data->title_button, viewer_play_data->addr_list.addr_info[0].address);
+               } else if (viewer_play_data->addr_list.addr_cnt > 1) {
+                       char title_text[DEF_BUF_LEN+1] = {0,};
 
-               if (viewer_play_data->addr_list.addr_info[0].name[0] != '\0')
-                       snprintf(title_text, sizeof(title_text), "%s +%d", viewer_play_data->addr_list.addr_info[0].name, viewer_play_data->addr_list.addr_cnt-1);
-               else
-                       snprintf(title_text, sizeof(title_text), "%s +%d", viewer_play_data->addr_list.addr_info[0].address, viewer_play_data->addr_list.addr_cnt-1);
+                       if (viewer_play_data->addr_list.addr_info[0].name[0] != '\0')
+                               snprintf(title_text, sizeof(title_text), "%s +%d", viewer_play_data->addr_list.addr_info[0].name, viewer_play_data->addr_list.addr_cnt-1);
+                       else
+                               snprintf(title_text, sizeof(title_text), "%s +%d", viewer_play_data->addr_list.addr_info[0].address, viewer_play_data->addr_list.addr_cnt-1);
 
-               elm_object_text_set(viewer_play_data->title_button, title_text);
-       } else {
-               elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+                       elm_object_text_set(viewer_play_data->title_button, title_text);
+               } else {
+                       elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+               }
+       } else { //if (option_type == MSG_VIEWER_OPTION_BLOCK)
+               int filter_id = 0;
+               Evas_Object *block_button = NULL;
+
+               if (viewer_play_data->addr_list.addr_cnt == 1) {
+                       if (msg_ui_viewer_check_address_is_blocked(viewer_play_data, viewer_play_data->addr_list.addr_info[0].address, &filter_id)) {
+                               block_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_TITLE_ICON_UNBLOCK, NULL);
+                               evas_object_smart_callback_add(block_button, "clicked", msg_ui_viewer_toolbar_unblock_address_cb, (void *)viewer_play_data);
+                       } else {
+                               block_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_TITLE_ICON_BLOCK, NULL);
+                               evas_object_smart_callback_add(block_button, "clicked", msg_ui_viewer_toolbar_block_address_cb, (void *)viewer_play_data);
+                       }
+
+                       if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) {
+                               elm_object_item_del(viewer_play_data->toolbar_item[3]);
+                               viewer_play_data->toolbar_item[3] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data);
+                               elm_object_item_part_content_set(viewer_play_data->toolbar_item[3], "object", block_button);
+                       }
+               }
        }
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
@@ -1628,9 +1700,6 @@ void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *ev
        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_mode == VIEWER_SAVE_MODE_POPUP)
-               msg_ui_viewer_update_player_state_after_save(data);
-
        if (viewer_play_data->popup) {
                evas_object_del(viewer_play_data->popup);
                viewer_play_data->popup = NULL;
@@ -1645,9 +1714,7 @@ void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_in
        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_mode == VIEWER_SAVE_MODE_POPUP) {
-               msg_ui_viewer_update_player_state_after_save(data);
-       } else if (viewer_play_data->popup_mode == VIEWER_DELETE_MSG_MODE_POPUP) {
+       if (viewer_play_data->popup_mode == VIEWER_DELETE_MSG_MODE_POPUP) {
                //destroy ug
                if (viewer_play_data->viewer_main) {
                        MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
@@ -1686,7 +1753,7 @@ MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data,
        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));
+       evas_object_size_hint_min_set(box2, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * (attach_count + 1) * elm_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;
@@ -1705,17 +1772,18 @@ MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data,
        if (attach_count > 0) {
                int attach_index = 0;
 
-               //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;
-
-               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);
+               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;
+
+                       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);
@@ -1747,7 +1815,36 @@ static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj,
        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);
-                       return strdup(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;
                }
        }
 
@@ -1821,6 +1918,8 @@ static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void
        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);
 
@@ -1834,49 +1933,28 @@ static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void
                return;
        }
 
-       char mimetype[MSG_BUFFER_SIZE_64 + 1] = {0,};
-       char defapp[MSG_BUFFER_SIZE_64 + 1] = {0,};
-
-       bundle *b = bundle_create();
-       appsvc_set_operation(b, APPSVC_OPERATION_VIEW);
-       appsvc_set_uri(b, pAttach_info->pfile_path);
-
-       /*get mime type*/
-       if (aul_get_mime_from_file(pAttach_info->pfile_path, mimetype, sizeof(mimetype)) < 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mime type failed");
-
-               if (appsvc_run_service(b, 0, NULL, NULL) < 0)
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appsvc_run_service is failed");
-
-               bundle_free(b);
+       if (service_create(&svc_handle) < 0 || svc_handle == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!");
                return;
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mime type [%s]", mimetype);
        }
 
-       /*get default app*/
-       if (aul_get_defapp_from_mime(mimetype, defapp, sizeof(defapp)) < 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "default app failed");
+       service_set_operation(svc_handle, SERVICE_OPERATION_VIEW);
+       service_set_uri(svc_handle, pAttach_info->pfile_path);
 
-               if (appsvc_run_service(b, 0, NULL, NULL) < 0)
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appsvc_run_service is failed");
-
-               bundle_free(b);
-               return;
+       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_DEBUG, "default app [%s]", defapp);
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed");
        }
 
-       /*launch application*/
-       if (strcmp(defapp, VIDEO_PLAYER_PKG_NAME) == 0) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Video content");
-               bundle_add(b, MSG_BUNDLE_KEY_LAUNCH_APPLICATION, MESSAGE_PKGNAME);
-       }
-
-       if (appsvc_run_service(b, 0, NULL, NULL) < 0)
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service is failed");
-
-       bundle_free(b);
+       service_destroy(svc_handle);
 
        return;
 }
@@ -1905,6 +1983,7 @@ void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data)
                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);
@@ -1915,6 +1994,8 @@ 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;
@@ -1984,6 +2065,11 @@ void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx)
 
        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);
 }
 
@@ -2172,7 +2258,7 @@ void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data)
        }
 
        if (is_text_copied)
-               status_message_post(dgettext("sys_string", "IDS_COM_POP_COPIED_P"));
+               status_message_post(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_COPIED_TO_CLIPBOARD"));
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
@@ -2195,7 +2281,7 @@ void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data)
        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", (char *)"Message details");
+       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);
@@ -2251,6 +2337,8 @@ void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data)
        viewer_play_data->popup = 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);
@@ -2269,20 +2357,20 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
        int contact_id = 0;
        msg_struct_list_s addrList;
 
-       /**********************
+       /*********************
        *       [ For sent/outbox msg]
        *       1. Type:
        *       2. To:
        *       3. Sent time:
        *       4. Subject:
        *       5. Message size:
-       *       5. Delivery report:             //TBD : FW for multistatus
-       *       6. Read report:         //TBD : FW for multistatus
+       *       5. Delivery report:
+       *       6. Read report:
        *
        *       [For inbox msg]
        *       1. Type:
        *       2. From:
-       *       3. To:                          //TBD : FW for multistatus
+       *       3. To:                          //TBD : FW for multi recipient
        *       4. Received time:
        *       5. Subject:
        *       6. Message size:
@@ -2307,7 +2395,8 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
        eina_strbuf_append(text_data, "<font_size=32>");
 
        /*message type*/
-       eina_strbuf_append(text_data, (char *)"Type : "); //TODO : change to string resource
+       eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_BODY_DETAILS_TYPE"));
+       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COLLON);
 
        /*message type value - current view details is supporting only multimedia message */
        int msg_type;
@@ -2315,12 +2404,12 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
        if (msg_type == MSG_TYPE_MMS || msg_type == MSG_TYPE_MMS_NOTI)
                eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE"));
        else if (msg_type == MSG_TYPE_SMS)
-               eina_strbuf_append(text_data, (char *)"Text message"); //TODO : change to string resource
+               eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_TEXT_MESSAGE"));
        else
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid msg type!");
 
        /*line change*/
-       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
 
        /*get time format setting */
        int timeformat = msg_common_get_timeformat();
@@ -2330,7 +2419,8 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
 
        if (folder_id == MSG_SENTBOX_ID || folder_id == MSG_OUTBOX_ID) {
                int index = 0;
-               eina_strbuf_append(text_data, (char *)"To : " ); //TODO : change to string resource
+               eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO"));
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COLLON);
 
                memset(&addrList, 0x00, sizeof(msg_struct_list_s));
                msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
@@ -2338,7 +2428,7 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
 
                MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address count = %d", addrList.nCount);
 
-               for (index = 0; index<addrList.nCount; index++) {
+               for (index = 0; index < addrList.nCount; index++) {
                        bzero(name, sizeof(name));
                        bzero(addr_value, sizeof(addr_value));
 
@@ -2361,10 +2451,12 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
                msg_release_list_struct(&addrList);
 
                /*line change*/
-               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
+
+               /*sent*/
+               eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT"));
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COLLON);
 
-               /*time*/
-               eina_strbuf_append(text_data, (char *)"Sent : "); //TODO : change to string resource
                int dptime = 0;
                msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, &dptime);
 
@@ -2376,12 +2468,13 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
                eina_strbuf_append(text_data, str_time);
 
                /*line change*/
-               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
        } else if (folder_id == MSG_INBOX_ID) {
                int index = 0;
 
                /*From address*/
-               eina_strbuf_append(text_data, (char *)"From : " ); //TODO : change to string resource
+               eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_FROM"));
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COLLON);
 
                memset(&addrList, 0x00, sizeof(msg_struct_list_s));
                msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
@@ -2415,10 +2508,12 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
                //TODO : HOW to get??
 
                /*line change*/
-               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
+
+               /*received*/
+               eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_RECEIVED"));
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COLLON);
 
-               /*time*/
-               eina_strbuf_append(text_data, (char *)"Received : "); //TODO : change to string resource
                int dptime = 0;
                msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, &dptime);
 
@@ -2430,23 +2525,25 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
                eina_strbuf_append(text_data, str_time);
 
                /*line change*/
-               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
        }
 
        /*subject*/
-       eina_strbuf_append(text_data, (char *)"Subject : "); //TODO : change to string resource
+       eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_BODY_SUBJECT"));
+       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COLLON);
        char strSubject[MAX_SUBJECT_LEN] = {0};
        msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN);
        if (strSubject[0]  != '\0')
                eina_strbuf_append(text_data, strSubject);
        else
-               eina_strbuf_append(text_data, (char *)"Untitled"); //TODO : change to string resource
+               eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_UNTITLED_M_MMS"));
 
        /*line change*/
-       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
 
        /*msg size - make sure what is the mms size, pdu size? or media total size??*/
-       eina_strbuf_append(text_data, (char *)"Size : "); //TODO : change to string resource
+       eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MESSAGE_SIZE"));
+       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COLLON);
 
        int mediaindex = 0;
        long long totalSize = 0;
@@ -2485,135 +2582,164 @@ static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object
        eina_strbuf_append(text_data, count_str);
 
        /*line change*/
-       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
 
        /*report status*/
        if (folder_id == MSG_SENTBOX_ID || folder_id == MSG_OUTBOX_ID) {
-               msg_struct_t msg_struct =  msg_create_struct(MSG_STRUCT_SETTING_MMS_SEND_OPT);
-               err = msg_get_mms_send_opt(viewer_play_data->msgHandle, msg_struct);
+               bool setting_delivery_flag = false;
+               bool setting_read_flag = false;
+
+               msg_struct_t send_opt =  msg_create_struct(MSG_STRUCT_SETTING_MMS_SEND_OPT);
+               err = msg_get_mms_send_opt(viewer_play_data->msgHandle, send_opt);
 
                if (err != MSG_SUCCESS) {
                        MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_mms_send_opt is failed");
                        eina_strbuf_free(text_data);
                        return;
                }
-               /*delivery report*/
-               eina_strbuf_append(text_data, (char *)"Delivery report : "); //TODO : change to string resource
-               /*line change*/
-               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
-
-               bool bValue = false;
-               err = msg_get_bool_value(msg_struct, MSG_MMS_SENDOPT_DELIVERY_REPORT_BOOL, &bValue);
-               if (!bValue) {
-                       eina_strbuf_append(text_data, (char *)"Not required"); //TODO : change to string resource
-               } else {
-                       //TODO : How to Get Multistatus delivery report?
-                       memset(&addrList, 0x00, sizeof(msg_struct_list_s));
-                       msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
-                       err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
-
-                       bzero(addr_value, sizeof(addr_value));
-                       msg_get_str_value(addrList.msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
 
-                       msg_release_list_struct(&addrList);
+               msg_get_bool_value(send_opt, MSG_MMS_SENDOPT_DELIVERY_REPORT_BOOL, &setting_delivery_flag);
+               msg_get_bool_value(send_opt, MSG_MMS_SENDOPT_READ_REPLY_BOOL, &setting_read_flag);
 
-                       // now 1st address delivery status can be get only.
-                       eina_strbuf_append(text_data, addr_value);
-                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_DASH);
+               msg_release_struct(&send_opt);
 
-                       msg_struct_t report_status = msg_create_struct(MSG_STRUCT_REPORT_STATUS_INFO);
-                       int msgId = 0;
-                       msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msgId);
-                       msg_get_report_status(viewer_play_data->msgHandle, msgId, report_status);
-
-                       int deliveryStatus = 0;
-                       msg_get_int_value(report_status, MSG_REPORT_STATUS_DELIVERY_STATUS_INT, &deliveryStatus);
+               MSG_VIEWER_REPORT_LIST_S *viewer_report_list = NULL;
+               viewer_report_list = (MSG_VIEWER_REPORT_LIST_S *)calloc(viewer_play_data->addr_list.addr_cnt, sizeof(MSG_VIEWER_REPORT_LIST_S));
+               if (viewer_report_list == NULL) {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "report_list is null");
+                       eina_strbuf_free(text_data);
+                       return;
+               }
 
-                       if (deliveryStatus == MSG_DELIVERY_REPORT_NONE) {
-                               eina_strbuf_append(text_data, (char *)"Requested");      //TODO : change to string resource
-                       } else if (deliveryStatus == MSG_DELIVERY_REPORT_EXPIRED) {
-                               eina_strbuf_append(text_data, (char *)"Expired"); //TODO : change to string resource
-                       } else if (deliveryStatus == MSG_DELIVERY_REPORT_SUCCESS) {
-                               eina_strbuf_append(text_data, (char *)"Received "); //TODO : change to string resource
-                               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE);
+               /* initialize report list */
+               int i = 0;
+               for (i = 0; i < viewer_play_data->addr_list.addr_cnt; i++) {
+                       strncpy(viewer_report_list[i].address, viewer_play_data->addr_list.addr_info[i].address, MAX_ADDRESS_VAL_LEN);
+                       viewer_report_list[i].delivery.status = MSG_DELIVERY_REPORT_NONE;
+                       viewer_report_list[i].read.status = MSG_READ_REPORT_NONE;
+               }
 
-                               int dsTime = 0;
-                               msg_get_int_value(report_status, MSG_REPORT_STATUS_DELIVERY_TIME_INT, &dsTime);
-                               char *str_time = NULL;
-                               if (timeformat == MSG_TIME_FORMAT_24H)
-                                       str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &dsTime);
-                               else
-                                       str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &dsTime);
-                               eina_strbuf_append(text_data, str_time);
-                               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
-                       } else if (deliveryStatus == MSG_DELIVERY_REPORT_REJECTED) {
-                               eina_strbuf_append(text_data, (char *)"Rejected "); //TODO : change to string resource
+               /* get fw report list */
+               msg_struct_list_s fw_report_list = {0,};
+
+               msg_get_report_status(viewer_play_data->msgHandle, viewer_play_data->msgID, &fw_report_list);
+
+               if (fw_report_list.nCount != 0) {
+                       msg_struct_t report;
+                       msg_report_type_t type;
+                       int status;
+                       time_t time;
+                       char address[MAX_ADDRESS_VAL_LEN+1];
+                       int i = 0;
+                       for (i = 0; i < fw_report_list.nCount; i++) {
+                               bzero(address, sizeof(address));
+
+                               report = fw_report_list.msg_struct_info[i];
+
+                               msg_get_int_value(report, MSG_REPORT_TYPE_INT, (int *)&type);
+                               msg_get_int_value(report, MSG_REPORT_STATUS_INT, (int *)&status);
+                               msg_get_str_value(report, MSG_REPORT_ADDRESS_STR, address, MAX_ADDRESS_VAL_LEN);
+                               msg_get_int_value(report, MSG_REPORT_TIME_INT, (int *)&time);
+
+                               int j = 0;
+                               /* fill values for viewer report list */
+                               for (j=0; j < viewer_play_data->addr_list.addr_cnt; j++) {
+                                       if (!strcmp(viewer_report_list[j].address, address)) {
+                                               if (type == MSG_REPORT_TYPE_DELIVERY) {
+                                                       viewer_report_list[j].delivery.status = status;
+                                                       viewer_report_list[j].delivery.time = time;
+                                               } else {
+                                                       viewer_report_list[j].read.status = status;
+                                                       viewer_report_list[j].read.time = time;
+                                               }
+                                       }
+                               }
                        }
-
-                       msg_release_struct(&report_status);
                }
-               /*line change*/
-               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
 
-               /*read reportt*/
-               eina_strbuf_append(text_data, (char *)"Read report : "); //TODO : change to string resource
+               msg_release_list_struct(&fw_report_list);
+
+               /*delivery report*/
+               eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_DELIVERY_REPORT"));
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COLLON);
                /*line change*/
-               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
 
-               err = msg_get_bool_value(msg_struct, MSG_MMS_SENDOPT_READ_REPLY_BOOL, &bValue);
-               if (!bValue) {
-                       eina_strbuf_append(text_data, (char *)"Not required"); //TODO : change to string resource
+               if (!setting_delivery_flag) {
+                       eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_BODY_NOT_REQUESTED"));
                } else {
-                       //TODO : How to Get Multistatus read report?
-                       memset(&addrList, 0x00, sizeof(msg_struct_list_s));
-                       msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id);
-                       err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList);
-
-                       bzero(addr_value, sizeof(addr_value));
-                       msg_get_str_value(addrList.msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN);
-
-                       msg_release_list_struct(&addrList);
-
-                       // now 1st address delivery status can be get only.
-                       eina_strbuf_append(text_data, addr_value);
-                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_DASH);
+                       int i = 0;
+                       for (i = 0; i < viewer_play_data->addr_list.addr_cnt; i++) {
+                               eina_strbuf_append(text_data, viewer_report_list[i].address);
+                               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_DASH);
+
+                               if (viewer_report_list[i].delivery.status == MSG_DELIVERY_REPORT_NONE) {
+                                       eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_REQUESTED"));
+                               } else if (viewer_report_list[i].delivery.status == MSG_DELIVERY_REPORT_EXPIRED) {
+                                       eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_EXPIRED"));
+                               } else if (viewer_report_list[i].delivery.status == MSG_DELIVERY_REPORT_SUCCESS) {
+                                       eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_RECEIVED"));
+                                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_SPACE);
+                                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE);
+                                       char *str_time = NULL;
+                                       if (timeformat == MSG_TIME_FORMAT_24H)
+                                               str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &(viewer_report_list[i].delivery.time));
+                                       else
+                                               str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &(viewer_report_list[i].delivery.time));
+                                       eina_strbuf_append(text_data, str_time);
+                                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
+                               } else if (viewer_report_list[i].delivery.status == MSG_DELIVERY_REPORT_REJECTED) {
+                                       eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_POP_REJECTED"));
+                               } else {
+                                       eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+                               }
 
-                       msg_struct_t report_status = msg_create_struct(MSG_STRUCT_REPORT_STATUS_INFO);
-                       int msgId = 0;
-                       msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msgId);
-                       msg_get_report_status(viewer_play_data->msgHandle, msgId, report_status);
+                               if (i != viewer_play_data->addr_list.addr_cnt-1)
+                                       /*line change*/
+                                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
+                       }
+               }
 
-                       int readStatus = 0;
-                       msg_get_int_value(report_status, MSG_REPORT_STATUS_READ_STATUS_INT, &readStatus);
+               /*line change*/
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
 
-                       if (readStatus == MSG_READ_REPORT_NONE) {
-                               eina_strbuf_append(text_data, (char *)"Requested "); //TODO : change to string resource
-                       } else if (readStatus == MSG_READ_REPORT_IS_READ) {
-                               eina_strbuf_append(text_data, (char *)"Read "); //TODO : change to string resource
-                               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE);
+               /*read report*/
+               eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_READ_REPORT"));
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COLLON);
+               /*line change*/
+               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
 
-                               int rsTime = 0;
-                               msg_get_int_value(report_status, MSG_REPORT_STATUS_READ_TIME_INT, &rsTime);
+               if (!setting_read_flag) {
+                       eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_BODY_NOT_REQUESTED"));
+               } else {
+                       int i = 0;
+                       for (i = 0; i < viewer_play_data->addr_list.addr_cnt; i++) {
+                               eina_strbuf_append(text_data, viewer_report_list[i].address);
+                               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_DASH);
+                               if (viewer_report_list[i].read.status == MSG_READ_REPORT_NONE) {
+                                       eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_REQUESTED"));
+                               } else if (viewer_report_list[i].read.status == MSG_READ_REPORT_IS_READ) {
+                                       eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_READ"));
+                                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_SPACE);
+                                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE);
+                                       char *str_time = NULL;
+                                       if (timeformat == MSG_TIME_FORMAT_24H)
+                                               str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &(viewer_report_list[i].read.time));
+                                       else
+                                               str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &(viewer_report_list[i].read.time));
+                                       eina_strbuf_append(text_data, str_time);
+                                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
+                               } else if (viewer_report_list[i].read.status == MSG_READ_REPORT_IS_DELETED) {
+                                       eina_strbuf_append(text_data, dgettext("sys_string", "IDS_COM_POP_DELETED"));
+                               }
 
-                               char *str_time = NULL;
-                               if (timeformat == MSG_TIME_FORMAT_24H)
-                                       str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &rsTime);
-                               else
-                                       str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &rsTime);
-                               eina_strbuf_append(text_data, str_time);
-                               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE);
-                               /*line change*/
-                               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
-                       } else if (readStatus == MSG_READ_REPORT_IS_DELETED) {
-                               eina_strbuf_append(text_data, (char *)"Deleted "); //TODO : change to string resource
+                               if (i != viewer_play_data->addr_list.addr_cnt-1)
+                                       /*line change*/
+                                       eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_NEW_LINE);
                        }
-
-                       msg_release_struct(&report_status);
                }
-               /*line change*/
-               eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED);
 
-               msg_release_struct(&msg_struct);
+               free(viewer_report_list);
        }
 
        /*display total text*/
@@ -2632,4 +2758,63 @@ static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, E
                evas_object_del(viewer_play_data->popup);
                viewer_play_data->popup = NULL;
        }
+
+       /*connect mouse down signal*/
+       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);
+
+
+       /* 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;
 }
+
index 956e5dd..98e9bad 100755 (executable)
@@ -1,47 +1,66 @@
 #define MAIN_W 720
-#define BODY_TOP_PADDING_MIN_H 34
+#define BODY_PADDING_MIN_H 34
+#define BODY_PADDING_MID_MIN_H 16
 #define SUBJECT_MIN_H 48
+#define AUDIO_PANEL_H 80
+#define PAGE_INDEX_MIN_W 96
+#define DETAIL_PADDING_V_MIN 20
+#define DETAIL_PADDING_H_MIN 16
+
+//colors
 #define COLOR_SUBJECT_BG 216 226 232 255
+#define COLOR_SUBJECT_INDEX 29 100 149 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 48
+#define PLAY_CTRBAR_TOP_PADDING_MIN_H 51
 #define PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H 28
-#define PLAY_CTRBAR_MIDDLE_PADDING_MIN_H 54
-#define PLAY_CTRBAR_BOTTOM_PADDING_MIN_H 32
-#define PLAY_CTRBAR_PROGRESS_BAR_W 482
-#define PLAY_CTRBAR_PROGRESS_TEXT_START_X 20
-#define PLAY_CTRBAR_PROGRESS_TEXT_W 79
-#define PLAY_CTRBAR_PROGRESS_PADDING_W 22
-#define PLAY_CTRBAR_BUTTON_W 56
-#define PLAY_CTRBAR_BUTTON_PADDING_W 88
-#define PLAY_CTRBAR_BUTTON_VOLUME_START_X 44
-#define PLAY_CTRBAR_BUTTON_PREV_START_X (PLAY_CTRBAR_BUTTON_VOLUME_START_X+PLAY_CTRBAR_BUTTON_W+PLAY_CTRBAR_BUTTON_PADDING_W)
-#define PLAY_CTRBAR_BUTTON_PLAY_START_X (PLAY_CTRBAR_BUTTON_PREV_START_X+PLAY_CTRBAR_BUTTON_W+PLAY_CTRBAR_BUTTON_PADDING_W)
-#define PLAY_CTRBAR_BUTTON_NEXT_START_X (PLAY_CTRBAR_BUTTON_PLAY_START_X+PLAY_CTRBAR_BUTTON_W+PLAY_CTRBAR_BUTTON_PADDING_W)
+#define PLAY_CTRBAR_MIDDLE_PADDING_MIN_H 42
+#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
 
-//msg details popup
-#define DETAIL_PADDING_V_MIN 30
-#define DETAIL_PADDING_H_MIN 20
+#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)
 
 //edc images
 #define PLAYER_BG "M01_player_bg.png"
-#define VOL_BTN "M01_play_btn_volume.png"
-#define VOL_BTN_PRESS "M01_play_btn_volume_press.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 PLAY_BTN "M01_play_btn_play.png"
-#define PLAY_BTN_PRESS "M01_play_btn_play_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 "00_index list_bg.png"
+
+#define TITLE_BUTTON_ARROW "optionheader_arrow.png"
+#define TITLE_BUTTON_LIST_ARROW "M01_popup_bubble_tail_top.png"
+#define TITLE_LIST_BG "M01_popup_bubble_bg.png"
+
+#define AUDIO_ICON "myfile_icon_music.png"
+
 collections {
        group {
                name: "play_controller";
@@ -51,12 +70,14 @@ collections {
                        image: VOL_BTN_PRESS COMP;
                        image: PREV_BTN COMP;
                        image: PREV_BTN_PRESS COMP;
+                       image: PREV_BTN_DIM COMP;
                        image: PLAY_BTN COMP;
                        image: PLAY_BTN_PRESS COMP;
                        image: PAUSE_BTN COMP;
                        image: PAUSE_BTN_PRESS COMP;
                        image: NEXT_BTN COMP;
                        image: NEXT_BTN_PRESS COMP;
+                       image: NEXT_BTN_DIM COMP;
                }
                parts {
                        part {
@@ -118,8 +139,8 @@ collections {
                                        min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H;
                                        align: 0.5 0.5;
                                        fixed: 1 1;
-                                       rel1{to:"rect/padding/progressbar"; relative:0.0 0.0; offset: PLAY_CTRBAR_PROGRESS_TEXT_START_X 0;}
-                                       rel2{to:"progressbar"; relative:0.0 1.0; offset: -PLAY_CTRBAR_PROGRESS_PADDING_W 0;}
+                                       rel1{to:"rect/padding/progressbar"; relative:0.0 0.0;}
+                                       rel2{to:"progressbar"; relative:0.0 1.0;}
                                        color: COLOR_PROGRESS_START_TEXT;
                                        text {
                                                font: SLP_FONT_REGULAR;
@@ -155,8 +176,8 @@ collections {
                                        min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H;
                                        align: 0.5 0.5;
                                        fixed: 1 1;
-                                       rel1{to:"progressbar"; relative:1.0 0.0; offset: PLAY_CTRBAR_PROGRESS_PADDING_W 0;}
-                                       rel2{to:"rect/padding/progressbar"; relative:1.0 1.0; offset: -PLAY_CTRBAR_PROGRESS_PADDING_W 0;}
+                                       rel1{to:"progressbar"; relative:1.0 0.0;}
+                                       rel2{to:"rect/padding/progressbar"; relative:1.0 1.0;}
                                        color: COLOR_PROGRESS_END_TEXT;
                                        text {
                                                font: SLP_FONT_REGULAR;
@@ -215,11 +236,12 @@ collections {
                                mouse_events: 1;
                                description { state: "default" 0.0;
                                        visible: 1;
-                                       min: 56 56;
+                                       min: 104 74;
+                                       max: 104 74;
                                        fixed: 1 1;
                                        align: 0.5 0.5;
-                                       rel1 { relative: PLAY_CTRBAR_BUTTON_VOLUME_START_X/MAIN_W 0.0; to, "rect/padding/buttons";}
-                                       rel2 { relative: PLAY_CTRBAR_BUTTON_VOLUME_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;}
+                                       rel1 { relative: PLAY_CTRBAR_BUTTON_VOLUME_START_X/MAIN_W 0.0; to, "rect/padding/buttons"; offset: 0 3;}
+                                       rel2 { relative: PLAY_CTRBAR_BUTTON_VOLUME_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_VOL_BUTTON_W -3;}
                                        image { normal: VOL_BTN; }
 
                                }
@@ -235,11 +257,11 @@ collections {
                                description {
                                        state: "default" 0.0;
                                        visible: 1;
-                                       min: 1 56;
+                                       min: 1 70;
                                        align: 0.0 0.0;
                                        fixed: 1 1;
-                                       rel1{to:"volume"; relative:1.0 0.0; offset: 35 0;}
-                                       rel2{to:"volume"; relative:1.0 1.0; offset: 35 0;}
+                                       rel1{to:"volume"; relative:1.0 0.0; offset: 10 2;}
+                                       rel2{to:"volume"; relative:1.0 1.0; offset: 10 -2;}
                                        color: 144 144 144 255;
                                }
                        }
@@ -249,16 +271,21 @@ collections {
                                mouse_events: 1;
                                description { state: "default" 0.0;
                                        visible: 1;
-                                       min: 56 56;
+                                       min: 122 80;
+                                       max: 122 80;
                                        fixed: 1 1;
                                        rel1 { relative: PLAY_CTRBAR_BUTTON_PREV_START_X/MAIN_W 0.0; to, "rect/padding/buttons";}
-                                       rel2 { relative: PLAY_CTRBAR_BUTTON_PREV_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;}
+                                       rel2 { relative: PLAY_CTRBAR_BUTTON_PREV_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_NAVI_BUTTON_W 0;}
                                        image { normal: PREV_BTN; }
                                }
                                description { state: "pressed" 0.0;
                                        inherit: "default" 0.0;
                                        image { normal: PREV_BTN_PRESS; }
                                }
+                               description { state: "dimmed" 0.0;
+                                       inherit: "default" 0.0;
+                                       image { normal: PREV_BTN_DIM; }
+                               }
                        }
                        part { name: "next";
                                type : IMAGE;
@@ -267,17 +294,22 @@ collections {
                                description {
                                        state: "default" 0.0;
                                        visible: 1;
-                                       min: 56 56;
+                                       min: 122 80;
+                                       max: 122 80;
                                        fixed: 1 1;
                                        align: 0.5 0.5;
                                        rel1 { relative: PLAY_CTRBAR_BUTTON_NEXT_START_X/MAIN_W 0.0; to, "rect/padding/buttons";}
-                                       rel2 { relative: PLAY_CTRBAR_BUTTON_NEXT_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;}
+                                       rel2 { relative: PLAY_CTRBAR_BUTTON_NEXT_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_NAVI_BUTTON_W 0;}
                                        image { normal: NEXT_BTN; }
                                }
                                description { state: "pressed" 0.0;
                                        inherit: "default" 0.0;
                                        image { normal: NEXT_BTN_PRESS; }
                                }
+                               description { state: "dimmed" 0.0;
+                                       inherit: "default" 0.0;
+                                       image { normal: NEXT_BTN_DIM; }
+                               }
                        }
                        part { name: "play_pause";
                                type : IMAGE;
@@ -286,11 +318,12 @@ collections {
                                description {
                                state: "default" 0.0;
                                        visible: 1;
-                                       min: 56 56;
+                                       min: 122 80;
+                                       max: 122 80;
                                        fixed: 1 1;
                                        align: 0.5 0.5;
                                        rel1 { relative: PLAY_CTRBAR_BUTTON_PLAY_START_X/MAIN_W 0.0; to, "rect/padding/buttons";}
-                                       rel2 { relative: PLAY_CTRBAR_BUTTON_PLAY_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;}
+                                       rel2 { relative: PLAY_CTRBAR_BUTTON_PLAY_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_NAVI_BUTTON_W 0;}
                                        image { normal: PLAY_BTN; }
                                }
                                description { state: "default" 1.0;
@@ -336,7 +369,12 @@ collections {
                                        source: "prev";
                                        signal: "mouse,clicked,1";
                                        script {
-                                               emit ("prev_clicked", "");
+                                               new st[31];
+                                               new Float:vl;
+                                               get_state(PART:"prev", st, 30, vl)
+
+                                               if (!strcmp(st, "default"))
+                                                       emit ("prev_clicked", "");
                                        }
                                }
                                program {
@@ -344,7 +382,12 @@ collections {
                                        source: "prev";
                                        signal: "mouse,down,1";
                                        script {
-                                               set_state(PART:"prev", "pressed", 0.0);
+                                               new st[31];
+                                               new Float:vl;
+                                               get_state(PART:"prev", st, 30, vl)
+
+                                               if (!strcmp(st, "default"))
+                                                       set_state(PART:"prev", "pressed", 0.0);
                                        }
                                }
                                program {
@@ -352,10 +395,31 @@ collections {
                                        source: "prev";
                                        signal: "mouse,up,1";
                                        script {
+                                               new st[31];
+                                               new Float:vl;
+                                               get_state(PART:"prev", st, 30, vl)
+
+                                               if (!strcmp(st, "pressed"))
+                                                       set_state(PART:"prev", "default", 0.0);
+                                       }
+                               }
+                               program {
+                                       name: "prev_btn_enable";
+                                       source: "*";
+                                       signal: "prev_enable";
+                                       script {
                                                set_state(PART:"prev", "default", 0.0);
                                        }
                                }
                                program {
+                                       name: "prev_btn_disable";
+                                       source: "*";
+                                       signal: "prev_disable";
+                                       script {
+                                               set_state(PART:"prev", "dimmed", 0.0);
+                                       }
+                               }
+                               program {
                                        name: "play_btn_click";
                                        source: "play_pause";
                                        signal: "mouse,clicked,1";
@@ -418,7 +482,12 @@ collections {
                                        source: "next";
                                        signal: "mouse,clicked,1";
                                        script {
-                                               emit ("next_clicked", "");
+                                               new st[31];
+                                               new Float:vl;
+                                               get_state(PART:"next", st, 30, vl)
+
+                                               if (!strcmp(st, "default"))
+                                                       emit ("next_clicked", "");
                                        }
                                }
                                program {
@@ -426,7 +495,12 @@ collections {
                                        source: "next";
                                        signal: "mouse,down,1";
                                        script {
-                                               set_state(PART:"next", "pressed", 0.0);
+                                               new st[31];
+                                               new Float:vl;
+                                               get_state(PART:"next", st, 30, vl)
+
+                                               if (!strcmp(st, "default"))
+                                                       set_state(PART:"next", "pressed", 0.0);
                                        }
                                }
                                program {
@@ -434,12 +508,34 @@ collections {
                                        source: "next";
                                        signal: "mouse,up,1";
                                        script {
+                                               new st[31];
+                                               new Float:vl;
+                                               get_state(PART:"next", st, 30, vl)
+
+                                               if (!strcmp(st, "pressed"))
+                                                       set_state(PART:"next", "default", 0.0);
+                                       }
+                               }
+                               program {
+                                       name: "next_btn_enable";
+                                       source: "*";
+                                       signal: "next_enable";
+                                       script {
                                                set_state(PART:"next", "default", 0.0);
                                        }
                                }
+                               program {
+                                       name: "next_btn_disable";
+                                       source: "*";
+                                       signal: "next_disable";
+                                       script {
+                                               set_state(PART:"next", "dimmed", 0.0);
+                                       }
+                               }
                        }
                }
        }
+
        group {
                name: "elm/progressbar/horizontal/list_progress";
                images {
@@ -593,7 +689,6 @@ collections {
                                        }
                                        image {
                                                normal: PROGRESS_BAR;
-                                               //border: 0 0 1 1;
                                        }
                                }
                                description {
@@ -670,6 +765,10 @@ collections {
 
        group {
                name: "subject/pageindex";
+               images {
+                       image: LOCK_ICON COMP;
+                       image: SUBJECT_INDEX_BG COMP;
+               }
                parts {
                        part {
                                name: "rect";
@@ -678,11 +777,25 @@ collections {
                                description {
                                        state: "default" 0.0;
                                        min: 0 SUBJECT_MIN_H;
-                                       color: COLOR_SUBJECT_BG;
                                }
                        }
                        part {
-                               name: "subject";
+                               name: "rect/bg";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 1;
+                                       rel1{to:"rect"; relative:0.0 0.0;}
+                                       rel2{to:"rect"; relative:1.0 1.0;}
+                                       image {
+                                               normal: SUBJECT_INDEX_BG;
+                                               border: 2 2 2 2;
+                                       }
+                               }
+                       }
+                       part {
+                               name: "subject/text";
                                type: TEXT;
                                scale: 1;
                                mouse_events: 0;
@@ -691,43 +804,166 @@ collections {
                                        rel1{to:"rect"; relative:0.0 0.0; offset: DETAIL_PADDING_H_MIN 0; }
                                        rel2{to:"rect"; relative:0.8 1.0;}
                                        align: 0.0 0.5;
-                                       color: COLOR_DETAIL_INFO_TEXT;
+                                       color: COLOR_SUBJECT_INDEX;
                                        text {
-                                               font: SLP_FONT_REGULAR;
-                                               text_class: FONT_TEXT_CLASS_REGULAR;
+                                               font: "SLP:style=Bold";
+                                               text_class: "slp_medium";
                                                size: 32;
                                                align: 0.0 0.5;
-                                               ellipsis: 0.0;
-                                               text: "";
                                        }
                                }
                        }
                        part {
-                               name: "page/index";
+                               name: "page/text";
                                type: TEXT;
                                scale: 1;
                                mouse_events: 0;
                                description {
                                        state: "default" 0.0;
                                        align: 1.0 0.5;
-                                       rel1{to:"rect"; relative:0.8 0.0;}
-                                       rel2{to:"rect"; relative:1.0 1.0; offset: -DETAIL_PADDING_H_MIN 0;}
-                                       color: COLOR_DETAIL_INFO_TEXT;
+                                       min: PAGE_INDEX_MIN_W SUBJECT_MIN_H;
+                                       rel1{to:"rect"; relative:1.0 0.0;}
+                                       rel2{to:"rect"; relative:1.0 1.0;}
+                                       color: COLOR_SUBJECT_INDEX;
                                        text {
-                                               font: SLP_FONT_REGULAR;
-                                               text_class: FONT_TEXT_CLASS_REGULAR;
+                                               font: "SLP:style=Bold";
+                                               text_class: "slp_medium";
                                                size: 32;
-                                               align: 1.0 0.5;
-                                               ellipsis: 0.0;
-                                               text: "";
                                        }
                                }
                        }
+                       part {
+                               name: "lock/icon";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 0;
+                                       min: SUBJECT_MIN_H SUBJECT_MIN_H;
+                                       max: SUBJECT_MIN_H SUBJECT_MIN_H;
+                                       fixed: 1 1;
+                                       rel1{to:"page/text"; relative:0.0 0.0; offset: -SUBJECT_MIN_H 0;}
+                                       rel2{to:"page/text"; relative:0.0 1.0;}
+                                       align: 1.0 0.5;
+                                       image { normal: LOCK_ICON; }
+                               }
+                               description {
+                                       state: "default" 1.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       programs {
+                               program {
+                                       name: "lock/icon/enabled";
+                                       source: "*";
+                                       signal: "lock/icon/show";
+                                       script {
+                                               set_state(PART:"lock/icon", "default", 1.0);
+                                       }
+                               }
+                               program {
+                                       name: "lock/icon/disabled";
+                                       source: "*";
+                                       signal: "lock/icon/hide";
+                                       script {
+                                               set_state(PART:"lock/icon", "default", 0.0);
+                                       }
+                               }
+                       }
+               }
+       }
+
+       group {
+               name: "audio/panel";
+               images {
+                       image: AUDIO_ICON COMP;
+               }
+               parts {
+                       part {
+                               name: "rect";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 AUDIO_PANEL_H;
+                               }
+                       }
+                       part {
+                               name: "audio.text.filename";
+                               type: TEXT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1{to:"rect"; relative:0.0 0.0; offset: 76 0; }
+                                       rel2{to:"rect"; relative:0.8 1.0;}
+                                       align: 0.0 0.5;
+                                       color: COLOR_SUBJECT_INDEX;
+                                       text {
+                                               font: "SLP:style=Bold";
+                                               text_class: "slp_medium";
+                                               size: 36;
+                                               align: 0.0 0.5;
+                                       }
+                               }
+                       }
+                       part {
+                               name: "audio.image.icon";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 1;
+                                       min: 64 64;
+                                       max: 64 64;
+                                       fixed: 1 1;
+                                       rel1{to:"rect"; relative:0.0 0.0;}
+                                       rel2{to:"rect"; relative:0.0 1.0;}
+                                       align: 0.0 0.5;
+                                       image { normal: AUDIO_ICON; }
+                               }
+                       }
+               }
+       }
+
+       group {
+               name: "viewer_body_outer_margin";
+               parts {
+                       part {
+                               name: "rect";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       visible: 0;
+                                       state: "default" 0.0;
+                                       min: 0 BODY_PADDING_MIN_H;
+                               }
+                       }
+               }
+       }
+
+       group {
+               name: "viewer_body_inner_margin";
+               parts {
+                       part {
+                               name: "rect";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       visible: 0;
+                                       state: "default" 0.0;
+                                       min: 0 BODY_PADDING_MID_MIN_H;
+                               }
+                       }
                }
        }
 
        group {
                name : "viewer_main";
+               images {
+                       image: TITLE_LIST_BG COMP;
+               }
                parts {
                        part {
                                name: "rect";
@@ -768,30 +1004,41 @@ collections {
                                scale: 1;
                                description {
                                        state: "default" 0.0;
-                                       fixed: 1 1;
+                                       fixed: 1 0;
                                        min: 0 0;
                                        color: 0 0 0 0;
-                                       rel1 {to: "viewer.swallow.subject"; relative: 0.02 1.0; offset: 0 BODY_TOP_PADDING_MIN_H;}
-                                       rel2 {to: "rect"; relative: 0.98 1.0;}
+                                       rel1 {to: "viewer.swallow.subject"; relative: 0.02 1.0;}
+                                       rel2 {to: "viewer.swallow.audio.panel"; relative: 0.98 0.0;}
                                        align: 0.0 0.0;
-                                       }
                                }
-                       part {
-                               name: "viewer.body.content";
-                               type: SWALLOW;
-                               scale: 1;
-                               mouse_events: 1;
+                       }
+                       part {
+                               name: "viewer.body.content";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
                                description {
                                        state: "default" 0.0;
                                        fixed: 1 0;
                                        min:0 0;
                                        color: 0 0 0 0;
-                                       rel1 {to: "viewer.swallow.subject"; relative: 0.02 0.0;}
-                                       rel2 {to: "rect"; relative: 0.98 1.0;}
+                                       rel1 {to: "viewer.swallow.subject"; relative: 0.02 1.0;}
+                                       rel2 {to: "viewer.swallow.audio.panel"; relative: 0.98 0.0;}
                                        align: 0.0 0.0;
                                }
-                       }
-                       part {
+               }
+                       part {
+                               name: "viewer.swallow.audio.panel";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 1.0;
+                                       rel1 {to: "rect"; relative:0.0 1.0;}
+                                       rel2 {to: "rect"; relative:1.0 1.0;}
+                               }
+               }
+               part {
                                name: "viewer.swallow.play.controller";
                                type: SWALLOW;
                                scale: 1;
@@ -807,15 +1054,108 @@ collections {
                                }
                        }
                        part {
-                               name:"viewer.titlebtn.list";
+                               name: "viewer.title.list.bg";
+                               type: IMAGE;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               to_x: "viewer.title.list.padding.left";
+                                               to_y: "viewer.swallow.title.list";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to_x: "viewer.title.list.padding.right";
+                                               to_y: "viewer.swallow.title.list";
+                                               relative: 0.0 1.0;
+                                               offset: 0 6;
+                                       }
+                                       image {
+                                               normal: TITLE_LIST_BG;
+                                               border: 11 11 11 11;
+                                               border_scale: 1;
+                                       }
+                                       color: 255 255 255 0;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 255 255 255 255;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+                       part {
+                               name: "viewer.title.list.padding.left";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 0;
+                                       min: 16 0;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 0.0 1.0;}
+                                       align: 0.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "viewer.title.list.padding.right";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 0;
+                                       min: 9 0;
+                                       rel1 { relative: 1.0 0.0;}
+                                       rel2 { relative: 1.0 1.0;}
+                                       align: 1.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "viewer.title.list.padding.bottom";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 7;
+                                       max: 0 7;
+                                       rel1 { to: "viewer.swallow.title.list"; relative: 0.0 1.0;}
+                                       rel2 { to: "viewer.swallow.title.list"; relative: 1.0 1.0;}
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                                       color: 255 0 0 100;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+
+                       }
+                       part {
+                               name:"viewer.swallow.title.list";
                                type: SWALLOW;
                                scale: 1;
                                description {
                                        state: "default" 0.0;
                                        fixed: 1 0;
                                        min: 0 1;
-                                       rel1 {to: "rect"; relative: 0.0 0.0;}
-                                       rel2 {to: "rect"; relative: 1.0 0.0;}
+                                       rel1 {to: "rect"; relative: 0.0 0.0; offset: 16 0;}
+                                       rel2 {to: "rect"; relative: 1.0 0.0; offset: -16 0;}
                                        align: 0.0 0.0;
                                }
                                description {
@@ -829,22 +1169,25 @@ collections {
                                        max: 0 0;
                                }
                        }
-                       programs
+
+               programs
                        {
                                program {
-                                       name: "viewer.titlebtn.list.open";
+                                       name: "viewer.title.list.open";
                                        signal: "elm,state,titlelist,open";
                                        source: "";
                                        action: STATE_SET "show" 0.0;
-                                       target: "viewer.titlebtn.list";
+                                       target: "viewer.swallow.title.list";
+                                       target: "viewer.title.list.bg";
                                        transition: LINEAR 0.2;
                                }
                                program {
-                                       name: "viewer.titlebtn.list.close";
+                                       name: "viewer.title.list.close";
                                        signal: "elm,state,titlelist,close";
                                        source: "";
                                        action: STATE_SET "hide" 0.0;
-                                       target: "viewer.titlebtn.list";
+                                       target: "viewer.swallow.title.list";
+                                       target: "viewer.title.list.bg";
                                        transition: LINEAR 0.2;
                                }
                        }
@@ -948,7 +1291,14 @@ collections {
        }
 
        group {
-               name : "item_list";
+               name : "title";
+               images {
+                       image: TITLE_BUTTON_ARROW COMP;
+                       image: TITLE_BUTTON_LIST_ARROW COMP;
+               }
+               script {
+                       public title_show = 0;
+               }
                parts {
                        part {
                                name: "rect";
@@ -960,35 +1310,31 @@ collections {
                                }
                        }
                        part {
-                               name: "viewer.itemlist.body";
-                               type: SWALLOW;
+                               name: "title_top_padding";
+                               type: RECT;
                                scale: 1;
-                               description {
+                               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;}
+                                       visible: 0;
+                                       fixed: 0 1;
+                                       min: 0 10;
+                                       align: 0.5 0;
+                                       rel1{to: "rect"; relative: 0.0 0.0;}
+                                       rel2{to: "rect"; relative: 1.0 0.0;}
                                }
                        }
-               }
-       }
-
-       group {
-               name : "title";
-               images {
-                       image: "optionheader_arrow.png" COMP;
-               }
-               script {
-                       public title_show = 0;
-               }
-               parts {
                        part {
-                               name: "rect";
+                               name: "title_bottom_padding";
                                type: RECT;
                                scale: 1;
-                               description {
+                               description     {
                                        state: "default" 0.0;
-                                       color: 0 0 0 0;
+                                       visible: 0;
+                                       fixed: 0 1;
+                                       min: 0 16;
+                                       align: 0 1.0;
+                                       rel1{to: "rect"; relative: 0.0 1.0;}
+                                       rel2{to: "rect"; relative: 1.0 1.0;}
                                }
                        }
                        part {
@@ -997,16 +1343,15 @@ collections {
                                scale: 1;
                                description     {
                                        state: "default" 0.0;
-                                       fixed: 1 1;
-                                       min: 0 78;
+                                       fixed: 0 0;
+                                       min: 0 72;
                                        align: 0 0.5;
-                                       color: 255 0 0 255;
-                                       rel1{to: "rect"; relative: 0.0 0.5;}
-                                       rel2{to: "rect"; relative: 1.0 0.5;}
+                                       rel1{to: "title_top_padding"; relative: 0.0 1.0;}
+                                       rel2{to: "title_bottom_padding"; relative: 1.0 0.0;}
                                }
                        }
                        part {
-                               name: "titlebtn_arrow";
+                               name: "title_btn_arrow";
                                type: IMAGE;
                                scale: 1;
                                description {
@@ -1017,7 +1362,7 @@ collections {
                                        align: 0.5 0.0;
                                        rel1 { relative: 0.0 0.89; to_x: "title_btn"; }
                                        rel2 { relative: 1.0 0.89; to_x: "title_btn"; }
-                                       image.normal: "optionheader_arrow.png";
+                                       image.normal: TITLE_BUTTON_ARROW;
                                        color: 255 255 255 0;
                                }
                                description {
@@ -1025,6 +1370,15 @@ collections {
                                        inherit: "default" 0.0;
                                        color: 255 255 255 255;
                                }
+                               description {
+                                       state: "show_multi" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 26 21;
+                                       max: 26 21;
+                                       rel1 { relative: 0.0 0.82; to_x: "title_btn"; }
+                                       rel2 { relative: 1.0 0.82; to_x: "title_btn"; }
+                                       image.normal: TITLE_BUTTON_LIST_ARROW;
+                                       color: 255 255 255 255;
                        }
                }
                programs {
@@ -1034,7 +1388,16 @@ collections {
                                source: "";
                                script {
                                        set_int(title_show, 1);
-                                       set_state(PART:"titlebtn_arrow", "show", 0.0);
+                                       set_state(PART:"title_btn_arrow", "show", 0.0);
+                               }
+                       }
+                       program {
+                               name: "title_show_multi";
+                               signal: "elm,state,title,show,multi";
+                               source: "";
+                               script {
+                                       set_int(title_show, 1);
+                                       set_state(PART:"title_btn_arrow", "show_multi", 0.0);
                                }
                        }
                        program {
@@ -1043,7 +1406,7 @@ collections {
                                source: "";
                                script {
                                        set_int(title_show, 0);
-                                       set_state(PART:"titlebtn_arrow", "default", 0.0);
+                                       set_state(PART:"title_btn_arrow", "default", 0.0);
                                }
                        }
                }