N_SE-24098 : Tapping volumebar is not working
[apps/home/message-app.git] / viewer / include / msg-ui-viewer-play-view.h
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *    http://floralicense.org/license
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #ifndef __MSG_UI_VIEWER_PLAY_VIEW_H__
18 #define __MSG_UI_VIEWER_PLAY_VIEW_H__
19 /*==================================================================================================
20  *                                                                      INCLUDE HEADERS
21  *==================================================================================================*/
22 #include <msg.h>
23
24 #include "msg-smil-player-interface.h"
25 #include "msg-ui-viewer-types.h"
26
27 #include <Ecore_X.h>
28 #include <Ecore.h>
29 #include <Elementary.h>
30 #include <ui-gadget-module.h>
31
32 /*==================================================================================================
33  *                                                                      DEFINITIONS
34  *==================================================================================================*/
35 #define VIEWER_BUFFER_SIZE_64 64
36 #define VIEWER_TITLE_MENU_GENLIST_MAX_ITEM 3
37 #define VIEWER_TITLE_MENU_LINE_HEIGHT 129
38 #define VIEWER_ATTACH_GL_ITEM_HEIGHT 112
39 #define VIEWER_TITLE_FONT_LEN 100
40 #define VIEWER_NAVI_FRAME_HEIGHT 98
41 #define VIEWER_NAVIFRAME_BOTTOM_H 114
42
43
44 #define VIEWER_PLAY_CONTROLLER_LIFETIME (3.0)
45 #define VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME (1.0)
46 #define VIEWER_PLAY_CONTROLLER_HEIGHT 218
47
48 #define VIEWER_VOLUMEBAR_LIFETIME (3.0)
49 #define VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME (0.3)
50 #define VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME (0.1)
51
52 #define VIEWER_DETAILS_TEXT_SPACE " "
53 #define VIEWER_DETAILS_TEXT_LEFT_BRACE "("
54 #define VIEWER_DETAILS_TEXT_RIGHT_BRACE ")"
55 #define VIEWER_DETAILS_TEXT_MSG_SIZE_KB 1024
56
57 #define MSG_VIEWER_EDJ EDJDIR"/msg_viewer.edj"
58 /*==================================================================================================
59  *                                                                              ENUMERATIONS
60  *==================================================================================================*/
61 typedef enum {
62         MSG_VIEWER_PLAY = 0,
63         MSG_VIEWER_PAUSE,
64         MSG_VIEWER_STOP,
65         MSG_VIEWER_CLOSE,
66         MSG_VIEWER_UNKOWN,
67 } MSG_VIEWER_PLAY_STATUS_E;
68
69 typedef enum {
70         MSG_VIEWER_ACTION_NONE = 0,
71         MSG_VIEWER_ACTION_TOOLBAR_PLAY,         /* action tapping play button in play toolbar */
72         MSG_VIEWER_ACTION_TOOLBAR_PAUSE,        /* action tapping pause button in play toolbar */
73         MSG_VIEWER_ACTION_AUTO_PLAY,            /* action auto play by related UX flow */
74         MSG_VIEWER_ACTION_AUTO_PAUSE,           /* action auto pause by related UX flow */
75 } MSG_VIEWER_ACTION_TYPE_E;
76
77 typedef enum {
78         MSG_VIEWER_DEFAULT_MODE = 0,
79         MSG_VIEWER_LOAD_OTHER_UG_MODE,  /*launch other ug mode like calling contact ug*/
80         MSG_VIEWER_LOAD_OTHER_APP_MODE, /*launch other application mode like calling voice call*/
81 } MSG_VIEWER_LAUNCH_CMD_TYPE_E;
82
83 typedef enum {
84         MSG_VIEWER_CMD_NONE = 0,
85         MSG_VIEWER_CMD_LOAD_CONTACT,
86         MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER,
87         MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER,
88         MSG_VIEWER_CMD_LOAD_CALL,
89         MSG_VIEWER_CMD_LOAD_VIDEO_CALL,
90         MSG_VIEWER_CMD_LOAD_BROWSER
91 } MSG_VIEWER_CMD_TYPE_E;
92
93 typedef enum {
94         MSG_VIEWER_FILE_SAVE_SUCCESS = 0,
95         MSG_VIEWER_FILE_SAVE_FAILED,
96         MSG_VIEWER_FILE_SAVE_INVALID_ERROR,
97 } MSG_VIEWER_FILE_SAVE_STATUS_E;
98
99 typedef enum {
100         MSG_VIEWER_POPUP_NONE = 0,
101         MSG_VIEWER_NORMAL_POPUP,
102         MSG_VIEWER_DELETE_POPUP,
103         MSG_VIEWER_ATTACHMENTS_POPUP,
104         MSG_VIEWER_DETAILS_POPUP,
105         MSG_VIEWER_MENU_CTX_POPUP,
106         MSG_VIEWER_CUTLINK_POPUP,
107         MSG_VIEWER_TITLE_MENU_POPUP,
108         MSG_VIEWER_BLOCK_POPOP,
109 } MSG_VIEWER_POPUP_TYPE_E;
110
111 typedef enum {
112         MSG_VIEWER_MEDIA_INVALID = 0,
113         MSG_VIEWER_MEDIA_IMG,
114         MSG_VIEWER_MEDIA_AUDIO,
115         MSG_VIEWER_MEDIA_VIDEO,
116         MSG_VIEWER_MEDIA_TEXT,
117         MSG_VIEWER_MEDIA_ANIMATE,
118         MSG_VIEWER_MEDIA_IMG_OR_VIDEO,
119         MSG_VIEWER_MEDIA_ATTACH,
120         MSG_VIEWER_MEDIA_DRM,
121 } MSG_VIEWER_MEDIA_TYPE_E;
122
123 typedef enum {
124         MSG_VIEWER_OPTION_CONTACT = 0,
125         MSG_VIEWER_OPTION_BLOCK,
126 } MSG_VIEWER_OPTION_CHANGE_TYPE_E;
127
128 typedef enum {
129         MSG_VIEWER_FONT_SIZE_NONE,
130         MSG_VIEWER_ACCESSIBILITY_FONT_SIZE,
131         MSG_VIEWER_MSG_FONT_SIZE
132 } MSG_VIEWER_FONT_SIZE_TYPE_E;
133
134 typedef enum {
135         MSG_VIEWER_FONT_CHANGE_LOAD_SETTING,
136         MSG_VIEWER_FONT_CHANGE_LATEST_UPDATE,
137 } MSG_VIEWER_FONT_CHANGE_TYPE_E;
138
139 typedef enum {
140         MSG_VIEWER_ENTRY_NORMAL_TEXT,
141         MSG_VIEWER_ENTRY_HELP_TEXT,
142 } MSG_VIEWER_ENTRY_TYPE_E;
143
144 typedef enum {
145         MSG_VIEWER_VOLUME_EVENT_DRAG_START,
146         MSG_VIEWER_VOLUME_EVENT_DRAG_STOP,
147 } MSG_VIEWER_VOLUME_BAR_EVENT_E;
148
149 typedef void (*MSG_VIEWER_VOLUMEBAR_CB)(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event);
150 /*==================================================================================================
151  *                                                                              STRUCTURES
152  *==================================================================================================*/
153 typedef struct _MSG_VIEWER_ADDR_INFO_S{
154         int contact_id;
155         char address[MAX_ADDRESS_VAL_LEN+1];
156         char name[MAX_DISPLAY_NAME_LEN+1];
157 } MSG_VIEWER_ADDR_INFO;
158
159 typedef struct _MSG_VIEWER_ADDR_LIST_S{
160         int addr_cnt;
161         MSG_VIEWER_ADDR_INFO addr_info[MAX_TO_ADDRESS_CNT];
162 } MSG_VIEWER_ADDR_LIST;
163
164 typedef struct _MSG_PLAY_DATA_S {
165         struct ug_cbs cbs;
166         void *viewer_main;
167         Evas_Object *main_window;
168         Evas_Object *navi_frame;
169         Evas_Object *navi_title_layout;         /* navi title area layout */
170         Evas_Object *title_button;                              /* navi title button */
171         Evas_Object *attach_button;                             /* attachment button */
172         Evas_Object *more_btn;                          /* control toolbar */
173         Evas_Object *title_box_layout;                  /* title box layout for genlist */
174         Evas_Object *play_layout;                               /* play viewer main layout */
175         Evas_Object *subject_index_layout;      /* subject / page index */
176         Evas_Object *play_controller;                   /* play controller */
177         Evas_Object *progressbar;                               /* progressbar of play controller */
178         Evas_Object *volumebar;                         /* volumebar */
179         Evas_Object *volume_slider;             /* volumebar_slider */
180
181         Evas_Object *help_page_gl;                      /* help page genlist */
182         Evas_Object *save_attachment_gl;                /* save attachments genlist(controlbar menu) */
183         Evas_Object *render_entry;                      /* entry handle of SMIL render */
184
185         Evas_Object *save_button;                       /* save attachment's popup button */
186         Evas_Object *sa_check;                          /* select all check object in save attachment popup */
187         Eina_Bool isSelectAll;                                  /* check if save attachments select all mode is enable */
188
189         Elm_Object_Item *navi_item;                     /* naviframe item */
190
191         Evas_Object *popup;                                     /*simple popup*/
192         MSG_VIEWER_POPUP_TYPE_E popup_type;
193         SMIL_SLIDE_CLIENT_CB_PARAM_S *smil_eventStatus;
194
195         int m_x;
196         int m_y;
197         int window_width;
198         int window_height;
199
200         Ecore_Event_Handler *mouse_down_event_handler;
201         Ecore_Event_Handler *mouse_up_event_handler;
202
203         msg_handle_t msgHandle; /*ipc handler between viewer and MF*/
204         msg_struct_t msg_t;
205         msg_struct_t mms_t;
206         int     msgID;
207         MSG_VIEWER_LAUNCH_CMD_TYPE_E launch_cmd;
208         void *SmilHandle;
209         MSG_VIEWER_PLAY_STATUS_E status;
210         MSG_VIEWER_PLAY_STATUS_E previous_status;
211         MSG_VIEWER_CMD_TYPE_E cmd_type;
212         int font_size;
213
214         Ecore_Idler *del_idler;
215         Ecore_Timer *play_controller_timer;
216         Ecore_Timer *play_controller_progressbar_timer;
217         Ecore_Timer *volumebar_timer;
218
219         MSG_VIEWER_VOLUMEBAR_CB volumebar_event_cb;
220
221         int ctrl_start_x;               /* play controller mouse pointer */
222         int ctrl_start_y;               /* play controller mouse pointer */
223         int ctrl_end_x;                 /* play controller mouse pointer */
224         int ctrl_end_y;                 /* play controller mouse pointer */
225
226         int insert_count;       /*inserted contents count, except text file*/
227         int attach_count;       /*attached contents count*/
228
229         Eina_List *insert_list; /*inserted content list */
230         Eina_List *attach_list; /*attached contents list */
231
232         bool title_menu_opened; /* check if title button option is opened*/
233         bool playcontroller_opened;             /*check play controller is shown or not */
234         bool auto_resume_state;         /* check state of auto resume availablity */
235         bool msg_box_viewer;    /* TRUE is viewer is launched from message box */
236         bool drag_volume_slider; /* check do not navigate multiple page when volume bar is displayed */
237
238         int totalProgressTime;          /* total progress time for all slide*/
239         int elapsedProgressTime;                /*progress time from 1st slide to current slide*/
240
241         Elm_Genlist_Item_Class itc_title_single;        /* title button single recipient item */
242         Elm_Genlist_Item_Class itc_title;       /* title button multi recipient item */
243         Elm_Genlist_Item_Class hp_sa_class;     /* help page attach list save all item */
244         Elm_Genlist_Item_Class hp_class;        /* help page attach list item */
245         Elm_Genlist_Item_Class attach_sa_class; /*attachments select all item */
246         Elm_Genlist_Item_Class attach_item_class;       /*attachments each item */
247
248         Elm_Theme *title_th;    /* title theme */
249         Elm_Theme *progress_th;         /* progressbar theme*/
250
251         /* for use volume key setting */
252         Ecore_Event_Handler *volkey_release_handler;
253         Ecore_Event_Handler *volkey_press_handler;
254
255         Ecore_Timer *vol_up_key_longpress;
256         Ecore_Timer *vol_down_key_longpress;
257
258         Ecore_X_Display *xdisplay;
259 } MSG_PLAY_DATA_S;
260
261 typedef struct {
262         char pfile_name[MSG_VIEWER_FILENAME_MAX_LEN + 1];
263         char pfile_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1];
264         int pfile_size;
265         bool isSaveAll;                 /* for select all item */
266         Eina_Bool isChecked;            /* check object status of save attachment genlist */
267         Evas_Object *check_item;        /* check object for save attachments genlist */
268         MSG_VIEWER_MEDIA_TYPE_E media_type;
269         MSG_PLAY_DATA_S *viewer_play_data;
270 } MSG_VIEWER_ATTACH_MEDIA_INFO_S;
271 /*==================================================================================================
272  *                                                                      FUNCTION DECLARATIONS
273  *==================================================================================================*/
274 MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data);
275
276 /*
277  *@fn           msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data);
278  *@brief                This function is used to show player view again when player view is already ready.
279  * @param[in] data MSG_PLAY_DATA_S structure
280  * @return      return TRUE if player view is playing, else FALSE
281  */
282 MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data);
283
284 void msg_ui_viewer_play_view_init(void *data);
285 void msg_ui_viewer_destroy_play_view(void *data);
286 void msg_ui_viewer_connect_handler(void *data);
287 void msg_ui_viewer_disconnect_handler(void *data);
288
289 /*
290  *@fn           msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status);
291  *@brief                This function is used to enable/disable prev & next button
292  * @param[in] data MSG_PLAY_DATA_S structure
293  * @param[in] status viewer play status.
294  */
295 void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status);
296 Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent);
297 Evas_Object     *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data);
298 void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data);
299 void msg_ui_viewer_open_title_menu_genlist(void *data);
300 void msg_ui_viewer_close_title_menu_genlist(void *data);
301 void msg_ui_viewer_show_popup(void *data, Evas_Object *parent, char *pcontent);
302 void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data);
303 void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data);
304 void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx);
305 void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data);
306 void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data);
307 void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data);
308 void msg_ui_viewer_create_volume_bar(void *data);
309 void msg_ui_viewer_destroy_volume_bar(void *data);
310
311 /* ========================VIEWER  CALLBACK========================*/
312 /*
313  *@fn           msg_ui_viewer_smil_cb(SMIL_SLIDE_EVENT_PARAM_S *eventStatus, void *appUserData);
314  *@brief                This function is SMIL callback function
315  * @param[in] eventStatus  this is the slide info to be used by the application.
316  * @param[in] appUserData appdata structure
317  * @return MSG_SMIL_ERROR_E
318  */
319 MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *appUserData);
320 MSG_SMIL_ERROR_E msg_ui_viewer_set_entry_handle_cb(MSG_PLAY_DATA_S *data, void *entry);
321
322 Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event);
323 Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event);
324 void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
325 void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
326 void msg_ui_viewer_play_layout_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
327 void msg_ui_viewer_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
328 void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info);
329 void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_info);
330 void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_info);
331 void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_info);
332 void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_info);
333 void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info);
334 void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info);
335 void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info);
336 void msg_ui_viewer_toolbar_call_cb(void *data, Evas_Object *obj, void *event_info);
337 void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_info);
338 void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info);
339 void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *event_info);
340 void msg_ui_viewer_toolbar_block_address_cb(void *data, Evas_Object *obj, void *event_info);
341 void msg_ui_viewer_toolbar_unblock_address_cb(void *data, Evas_Object *obj, void *event_info);
342
343 /* Play controller */
344 void msg_ui_viewer_volume_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
345 void msg_ui_viewer_prev_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
346 void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
347 void msg_ui_viewer_next_button_cb(void *data, Evas_Object *o, const char *emission, const char *source);
348 Eina_Bool  msg_ui_viewer_play_controller_progressbar_timer_cb(void *data);
349 Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data);
350 MSG_BOOL msg_ui_viewer_command_play_pause(void *data, MSG_VIEWER_ACTION_TYPE_E action_type);
351
352 /* help page create cb - called from SMIL renderer */
353 MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box);
354 void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
355
356 /* popup */
357 void msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data);
358 void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info);
359 void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info);
360
361 /* message info */
362 int msg_ui_viewer_get_thread_address_count(MSG_PLAY_DATA_S *data);
363 void msg_ui_viewer_get_thread_address_nth_address(MSG_PLAY_DATA_S *data, int number, char **address, int *contact_id);
364 void msg_ui_viewer_title_update(MSG_PLAY_DATA_S *data, MSG_VIEWER_OPTION_CHANGE_TYPE_E option_type);
365 MSG_BOOL msg_ui_viewer_check_address_is_blocked(void *data, char *address, int *filter_id);
366 void msg_ui_viewer_set_font_size(MSG_PLAY_DATA_S *data, MSG_VIEWER_ENTRY_TYPE_E entry_type, MSG_VIEWER_FONT_CHANGE_TYPE_E change_type);
367 #endif  /* __MSG_UI_VIEWER_PLAY_VIEW_H__*/