From ac8dd7f8ec2bd91352f8c8cf5b63fde00a2bd673 Mon Sep 17 00:00:00 2001 From: Dowon Park Date: Thu, 25 Oct 2012 17:53:13 +0900 Subject: [PATCH] Apply Viewer options and more functions - 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 --- viewer/CMakeLists.txt | 9 +- viewer/include/msg-ui-viewer-item-list.h | 101 --- viewer/include/msg-ui-viewer-main.h | 11 +- viewer/include/msg-ui-viewer-play-view.h | 64 +- viewer/include/msg-ui-viewer-utility.h | 1 + .../smil-player/include/msg-smil-content-manager.h | 10 + viewer/smil-player/include/msg-smil-render.h | 82 +- viewer/smil-player/include/msg-smil-types.h | 6 +- viewer/smil-player/src/msg-smil-content-manager.c | 79 +- viewer/smil-player/src/msg-smil-event-manager.c | 52 +- viewer/smil-player/src/msg-smil-media-render.c | 697 ++++++++-------- viewer/smil-player/src/msg-smil-player.c | 6 +- viewer/smil-player/src/msg-smil-render.c | 304 +++++-- viewer/smil-player/src/msg-smil-text-render.c | 2 + viewer/src/msg-ui-viewer-callback.c | 19 +- viewer/src/msg-ui-viewer-drm-list.c | 17 +- viewer/src/msg-ui-viewer-gadget.c | 132 ++- viewer/src/msg-ui-viewer-item-list.c | 896 -------------------- viewer/src/msg-ui-viewer-main.c | 56 +- viewer/src/msg-ui-viewer-play-view-callback.c | 908 ++++++++++++++------- viewer/src/msg-ui-viewer-play-view.c | 889 ++++++++++++-------- viewer/theme/msg_viewer.edc | 583 ++++++++++--- 22 files changed, 2572 insertions(+), 2352 deletions(-) delete mode 100755 viewer/include/msg-ui-viewer-item-list.h delete mode 100755 viewer/src/msg-ui-viewer-item-list.c diff --git a/viewer/CMakeLists.txt b/viewer/CMakeLists.txt index 90f71c9..ee3def3 100755 --- a/viewer/CMakeLists.txt +++ b/viewer/CMakeLists.txt @@ -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 index 8671b82..0000000 --- a/viewer/include/msg-ui-viewer-item-list.h +++ /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 -#include "msg-ui-viewer-types.h" - -#include -#include -#include - -/*================================================================================================== - * 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 - diff --git a/viewer/include/msg-ui-viewer-main.h b/viewer/include/msg-ui-viewer-main.h index 14aa7f0..7735c7a 100755 --- a/viewer/include/msg-ui-viewer-main.h +++ b/viewer/include/msg-ui-viewer-main.h @@ -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); diff --git a/viewer/include/msg-ui-viewer-play-view.h b/viewer/include/msg-ui-viewer-play-view.h index cdac2a6..27b561a 100755 --- a/viewer/include/msg-ui-viewer-play-view.h +++ b/viewer/include/msg-ui-viewer-play-view.h @@ -31,31 +31,25 @@ /*================================================================================================== * 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 "
" +#define VIEWER_DETAILS_TEXT_NEW_LINE "
" #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__*/ diff --git a/viewer/include/msg-ui-viewer-utility.h b/viewer/include/msg-ui-viewer-utility.h index 9dd6f26..154509d 100755 --- a/viewer/include/msg-ui-viewer-utility.h +++ b/viewer/include/msg-ui-viewer-utility.h @@ -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 *==================================================================================================*/ diff --git a/viewer/smil-player/include/msg-smil-content-manager.h b/viewer/smil-player/include/msg-smil-content-manager.h index 7b0f366..19628a3 100755 --- a/viewer/smil-player/include/msg-smil-content-manager.h +++ b/viewer/smil-player/include/msg-smil-content-manager.h @@ -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 diff --git a/viewer/smil-player/include/msg-smil-render.h b/viewer/smil-player/include/msg-smil-render.h index 2581e83..c3c579d 100755 --- a/viewer/smil-player/include/msg-smil-render.h +++ b/viewer/smil-player/include/msg-smil-render.h @@ -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); diff --git a/viewer/smil-player/include/msg-smil-types.h b/viewer/smil-player/include/msg-smil-types.h index 6cfada9..aea531c 100755 --- a/viewer/smil-player/include/msg-smil-types.h +++ b/viewer/smil-player/include/msg-smil-types.h @@ -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*/ diff --git a/viewer/smil-player/src/msg-smil-content-manager.c b/viewer/smil-player/src/msg-smil-content-manager.c index 0f956de..e644a34 100755 --- a/viewer/smil-player/src/msg-smil-content-manager.c +++ b/viewer/smil-player/src/msg-smil-content-manager.c @@ -17,8 +17,7 @@ /*================================================================================================== * INCLUDE HEADERS *==================================================================================================*/ -#include -#include +#include #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++; } } diff --git a/viewer/smil-player/src/msg-smil-event-manager.c b/viewer/smil-player/src/msg-smil-event-manager.c index 0af9ffe..22f2b91 100755 --- a/viewer/smil-player/src/msg-smil-event-manager.c +++ b/viewer/smil-player/src/msg-smil-event-manager.c @@ -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); diff --git a/viewer/smil-player/src/msg-smil-media-render.c b/viewer/smil-player/src/msg-smil-media-render.c index 79d66ee..818c02d 100755 --- a/viewer/smil-player/src/msg-smil-media-render.c +++ b/viewer/smil-player/src/msg-smil-media-render.c @@ -28,16 +28,11 @@ #include "msg-ui-common-utility.h" #include -#include -#include +#include +#include #include #include #include -/*For Multimedia element width, height.*/ -#include "mm_file.h" - -/*for direct video displaying*/ -#include /*================================================================================================== * 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"); diff --git a/viewer/smil-player/src/msg-smil-player.c b/viewer/smil-player/src/msg-smil-player.c index 4a09e1a..27e25f2 100755 --- a/viewer/smil-player/src/msg-smil-player.c +++ b/viewer/smil-player/src/msg-smil-player.c @@ -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; diff --git a/viewer/smil-player/src/msg-smil-render.c b/viewer/smil-player/src/msg-smil-render.c index 1a2db3a..060023d 100755 --- a/viewer/smil-player/src/msg-smil-render.c +++ b/viewer/smil-player/src/msg-smil-render.c @@ -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), "%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 diff --git a/viewer/smil-player/src/msg-smil-text-render.c b/viewer/smil-player/src/msg-smil-text-render.c index 1c1895f..c2d995d 100755 --- a/viewer/smil-player/src/msg-smil-text-render.c +++ b/viewer/smil-player/src/msg-smil-text-render.c @@ -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; diff --git a/viewer/src/msg-ui-viewer-callback.c b/viewer/src/msg-ui-viewer-callback.c index fdc3363..9a03ff2 100755 --- a/viewer/src/msg-ui-viewer-callback.c +++ b/viewer/src/msg-ui-viewer-callback.c @@ -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; } } diff --git a/viewer/src/msg-ui-viewer-drm-list.c b/viewer/src/msg-ui-viewer-drm-list.c index 6172db4..269ea6e 100755 --- a/viewer/src/msg-ui-viewer-drm-list.c +++ b/viewer/src/msg-ui-viewer-drm-list.c @@ -27,7 +27,6 @@ #include "msg-ui-image-resource.h" #include -#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"); } diff --git a/viewer/src/msg-ui-viewer-gadget.c b/viewer/src/msg-ui-viewer-gadget.c index 623c5d5..0df2a16 100755 --- a/viewer/src/msg-ui-viewer-gadget.c +++ b/viewer/src/msg-ui-viewer-gadget.c @@ -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 index a95b689..0000000 --- a/viewer/src/msg-ui-viewer-item-list.c +++ /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 -#include -#include - -#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 -#include -#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; -} diff --git a/viewer/src/msg-ui-viewer-main.c b/viewer/src/msg-ui-viewer-main.c index d4d9019..7178e16 100755 --- a/viewer/src/msg-ui-viewer-main.c +++ b/viewer/src/msg-ui-viewer-main.c @@ -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); diff --git a/viewer/src/msg-ui-viewer-play-view-callback.c b/viewer/src/msg-ui-viewer-play-view-callback.c index f65355a..3b4bdea 100755 --- a/viewer/src/msg-ui-viewer-play-view-callback.c +++ b/viewer/src/msg-ui-viewer-play-view-callback.c @@ -20,7 +20,6 @@ #include "msg-ui-common-utility.h" #include "msg-ui-image-resource.h" -#include #include #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); + +} diff --git a/viewer/src/msg-ui-viewer-play-view.c b/viewer/src/msg-ui-viewer-play-view.c index bd287e8..ee38009 100755 --- a/viewer/src/msg-ui-viewer-play-view.c +++ b/viewer/src/msg-ui-viewer-play-view.c @@ -27,7 +27,6 @@ #include #include -#include #include #include #include @@ -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, ""); /*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; indexmsgHandle, 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; } + diff --git a/viewer/theme/msg_viewer.edc b/viewer/theme/msg_viewer.edc index 956e5dd..98e9bad 100755 --- a/viewer/theme/msg_viewer.edc +++ b/viewer/theme/msg_viewer.edc @@ -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); } } } -- 2.7.4