Fix N_SE-24338, mms draft message issue
[apps/core/preloaded/message-app.git] / composer / include / msg-ui-composer-bubble.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_COMPOSER_BUBBLE_H__
18 #define __MSG_UI_COMPOSER_BUBBLE_H__
19
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <glib.h>
23
24 #include <msg.h>
25 #include <msg_storage.h>
26 #include <msg_transport.h>
27
28 #include <libintl.h>
29 #include <bundle.h>
30 #include <Ecore.h>
31 #include <Elementary.h>
32 #include <ui-gadget-module.h>
33 #include <time.h>
34
35 #include "msg-ui-util.h"
36 #include "msg-ui-common-utility.h"
37
38 #include <contacts.h>
39
40 #define MSG_BUBBLE_EXPORT_DIR   "/opt/usr/media/message"
41 #define MSG_BUBBLE_EXPORT_TEMPDIR "/tmp/message"
42 #define MSG_BUBBLE_DOWNLOAD_DIR "/opt/usr/media/Downloads"
43
44 #define MSG_BUBBLE_SIM_MSG_ICON         IMGDIR"/07_message_sim.png"
45 #define MSG_BUBBLE_ATTACH_ICON          IMGDIR"/attach_icon.png"
46 #define MSG_BUBBLE_AUDIOFILE_ICON       IMGDIR"/M01_icon_voice.png"
47 #define MSG_BUBBLE_PROTECTED_ICON       IMGDIR"/M01_icon_locked.png"
48
49 /* STYLE for genlist and entry */
50 #define MSG_BUBBLE_STYLE_SENT   "sentmessage/custom"
51 #define MSG_BUBBLE_STYLE_RECV   "readmessage/custom"
52
53 #define MSG_BUBBLE_CONTENT_H (653)
54 #define MSG_BUBBLE_IMG_MAX_W (320)
55 #define MSG_BUBBLE_IMG_MAX_H (320)
56
57 #define MSG_BUBBLE_CONTROLBAR_ITEM_NUM  (4)
58 #define MSG_BUBBLE_DELETE_NOTI_TIME (1.5)
59
60 #define MSG_BUBBLE_POPUP_LIST_MAX_MENU 4
61 #define MSG_BUBBLE_POPUP_LIST_1LINE_HEIGHT 114
62
63
64 typedef enum {
65         BUBBLE_NORMAL_VIEW = 0,
66         BUBBLE_EDIT_VIEW,
67         BUBBLE_UNLOAD_VIEW,
68 } BubbleViewMode;
69
70 typedef enum {
71         BUBBLE_UG_START = 0,
72         BUBBLE_UG_PAUSE,
73         BUBBLE_UG_RESUME,
74         BUBBLE_UG_DESTROY,
75 } BubbleUGState;
76
77 typedef enum {
78         SCROLL_DEFAULT = 0,
79         SCROLL_FOCUS_IN,
80         SCROLL_FOCUS_OUT,
81         SCROLL_FOCUS_OTHER,
82 } BubbleScrollFocus;
83
84 typedef enum {
85         WORD_TYPE_NONE = 0x00,
86         WORD_TYPE_URL,
87         WORD_TYPE_URL_WITH_PROTC,
88         WORD_TYPE_NUM,
89         WORD_TYPE_EMAIL
90 } BubbleTextType;
91
92 typedef enum {
93         MSG_BOX_PACK_START = 0,
94         MSG_BOX_PACK_END,
95         MSG_BOX_PACK_BEFORE,
96         MSG_BOX_PACK_AFTER,
97 } MsgBoxPackType;
98
99 typedef enum {
100         BUBBLE_BACKUP_TYPE_NONE = 0,
101         BUBBLE_BACKUP_TYPE_SD,
102         BUBBLE_BACKUP_TYPE_EMAIL,
103 } BubbleBackupType;
104
105 typedef enum {
106         BUBBLE_THUMBNAIL_NONE = 0,
107         BUBBLE_THUMBNAIL_IMAGE,
108         BUBBLE_THUMBNAIL_VIDEO,
109         BUBBLE_THUMBNAIL_AUDIO,
110 } BubbleThumbnailType;
111
112 typedef struct {
113         msg_message_id_t msgId;
114         int msgType;
115         msg_storage_id_t storageId;
116         time_t *msgTime;
117         char displayDate[DEF_BUF_LEN_S];
118         char subject[DEF_BUF_LEN_S];
119         msg_network_status_t networkStatus;
120         bool bRead;
121         bool bProtected;
122         int direction;
123         int attachment_cnt;
124         int thumbType;
125         char thumbNailPath[DEF_IMG_PATH_LEN + 1];
126         char attachment_filename[DEF_IMG_PATH_LEN + 1];
127         char audio_filename[DEF_IMG_PATH_LEN + 1];
128         char msgText[DEF_MAX_MSG_TEXT_LEN+1];
129
130         Evas_Object *ly;
131         Evas_Object *entry;
132         Evas_Object *progressbar;
133         Evas_Object *failed_button;
134         Evas_Object *chk;
135         Eina_Bool isCheck;
136
137 } MSG_APP_CONV_DATA_S, *PMSG_APP_CONV_DATA_S;
138
139 typedef struct {
140         PMSG_APP_CONV_DATA_S add_item;
141         Evas_Object *rel_obj;
142         MsgBoxPackType pack_type;
143 }BUBBLE_PACK_INFO;
144
145 typedef struct {
146         int contact_id;
147         char address[DEF_THREAD_ADDR_LEN+1];
148         char name[DEF_THREAD_NAME_LEN+1];
149 }BUBBLE_ADDRESS_INFO;
150
151 typedef struct {
152         int drm_type;
153         int media_type;
154         int file_size;
155         char filepath[DEF_IMG_PATH_LEN+1];
156         char filename[DEF_IMG_PATH_LEN+1];
157
158         Eina_Bool isChecked;
159         Evas_Object *check;
160 }BUBBLE_MEDIA_INFO, *PBUBBLE_MEDIA_INFO;
161
162 typedef struct {
163         int addr_cnt;
164         BUBBLE_ADDRESS_INFO addr_info[MAX_TO_ADDRESS_CNT];
165 }BUBBLE_ADDRESS_LIST;
166
167 typedef struct _MSG_BUBBLE_DATA {
168         Evas_Object *layout_main;
169         Evas_Object *scrl;
170         Evas_Object *box;
171
172         BubbleViewMode viewmode;
173         BubbleUGState ug_state;
174         bool isRotate;
175
176         Evas_Object *parent_layout;
177         Evas_Object *bubble_layout;
178         Evas_Object *title_button;
179         Evas_Object *title_genlist;
180         Evas_Object *sel_all_ly;
181         Evas_Object *sel_all_box;
182         Evas_Object *noc_ly;
183
184         Evas_Object *popup;
185         Evas_Object *progressbar;
186         Evas_Object *progresslabel;
187         Evas_Object *popup_genlist;
188         Evas_Object *save_button;
189
190         Evas_Object *select_info;
191         Evas_Object *selectioninfo_layout;
192
193         Eina_List *bubble_list;
194         Eina_List *realized_list;
195         Eina_List *chk_list;
196         Eina_List *added_list;
197         Eina_List *media_list;
198
199         Eina_Bool sel_all_checked;
200
201 #ifdef _BUBBLE_FLICK_EVENT
202         Evas_Coord m_x;
203         Evas_Coord m_y;
204 #endif
205         Elm_Genlist_Item_Class itc_title;
206         Elm_Genlist_Item_Class itc_title_single;
207         Elm_Genlist_Item_Class itc_popup;
208         Elm_Genlist_Item_Class itc_popup_selall;
209
210         char *time_12h_ptn;
211         char *time_24h_ptn;
212         char *date_ptn_default;
213         char *date_ptn_year;
214         msg_time_format time_fmt;
215         char locale[DEF_BUF_LEN];
216
217         Ecore_Animator *load_animator;
218         Ecore_Animator *add_animator;
219         Ecore_Idler *resend_idler;
220         Ecore_Idler *retrieve_idler;
221         Ecore_Thread *del_thread;
222         Ecore_Thread *backup_thread;
223
224         msg_handle_t msgHandle;
225         msg_thread_id_t threadId;
226         BUBBLE_ADDRESS_LIST addr_list;
227         char threadName[DEF_THREAD_NAME_LEN+1];
228         char backupPath[DEF_BUF_LEN+1];
229
230         int bubble_count;
231         int bubble_index;
232         int added_count;
233         int msg_type;                   /* type of the latest message in the selected converstaion list*/
234         bool isDraft;
235         bool title_menu_opened;
236         bool del_cancel;
237         bool backup_cancel;
238
239         int copy_id;
240         int resend_id;
241         int retrieve_id;
242         int draft_msg_id;
243         int check_cnt;
244         int media_chk_cnt;
245         int del_index;
246         int backup_type;
247         void *callback_data;
248 } MSG_BUBBLE_DATA, *PMSG_BUBBLE_DATA;
249
250
251 /* FUNCTIONS */
252 PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(msg_handle_t msgHandle, void *callback_data);
253 void msg_ui_bubble_deinit_bubble_data(void *data);
254
255 void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, service_h svc_handle);
256 void msg_ui_bubble_start_bubble_list(PMSG_BUBBLE_DATA bubble_data);
257 void msg_ui_bubble_init_bubble_list(PMSG_BUBBLE_DATA bubble_data);
258
259 Evas_Object *msg_ui_bubble_create_view(Evas_Object *parent, void *user_data);
260 void msg_ui_bubble_start_view(PMSG_BUBBLE_DATA bubble_data);
261
262 void msg_ui_bubble_reg_bubble_cb_func(PMSG_BUBBLE_DATA pData);
263
264 void msg_ui_bubble_fill_bubble_contents(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S item_data);
265 Eina_Bool msg_ui_bubble_item_load_cb(void *data);
266 void msg_ui_bubble_resend_msg(PMSG_BUBBLE_DATA bubble_data, int msg_id);
267 void msg_ui_bubble_delete_msg(PMSG_BUBBLE_DATA bubble_data, int msg_id);
268 void msg_ui_bubble_refresh_msg_lock_status(PMSG_BUBBLE_DATA bubble_data, int msg_id);
269 void msg_ui_bubble_list_load(PMSG_BUBBLE_DATA bubble_data);
270 void msg_ui_bubble_list_data_update(PMSG_BUBBLE_DATA bubble_data);
271 void msg_ui_bubble_list_update_read_status(PMSG_BUBBLE_DATA bubble_data);
272 void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg);
273 Eina_Bool msg_ui_bubble_item_add_cb(void *data);
274 void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg);
275 void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg);
276
277 void msg_ui_bubble_change_normal_navi_control(PMSG_BUBBLE_DATA pData);
278 void msg_ui_bubble_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
279 void msg_ui_bubble_open_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data);
280 void msg_ui_bubble_close_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data);
281 Evas_Object *msg_ui_bubble_create_toolbar(void *user_data);
282
283 void msg_ui_bubble_msg_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t type, msg_id_list_s *pMsgIdList, void *user_param);
284 Evas_Object *msg_ui_bubble_toolbar_btn_create(Evas_Object *parent, char *icon_path, char *button_text);
285 void msg_ui_bubble_more_delete_clicked_cb(void *data, Evas_Object *obj, void *event_info);
286 void msg_ui_bubble_backup_clicked_cb(void *data, Evas_Object *obj, void *event_info);
287
288 void msg_ui_bubble_ctlbar_call_cb(void *data, Evas_Object *obj, void *event_info);
289 void msg_ui_bubble_ctlbar_vcall_cb(void *data, Evas_Object *obj, void *event_info);
290 void msg_ui_bubble_ctlbar_email_cb(void *data, Evas_Object *obj, void *event_info);
291 void msg_ui_bubble_ctlbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info);
292 void msg_ui_bubble_ctlbar_view_ct_detail_cb(void *data, Evas_Object *obj, void *event_info);
293 void msg_ui_bubble_ctlbar_block_cb(void *data, Evas_Object *obj, void *event_info);
294 void msg_ui_bubble_ctlbar_unblock_cb(void *data, Evas_Object *obj, void *event_info);
295 void msg_ui_bubble_ctlbar_delete_cb(void *data, Evas_Object *obj, void *event_info);
296 void msg_ui_bubble_ctlbar_forward_cb(void *data, Evas_Object *obj, void *event_info);
297 void msg_ui_bubble_ctlbar_move_cb(void *data, Evas_Object *obj, void *event_info);
298 void msg_ui_bubble_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_info);
299 void msg_ui_bubble_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_info);
300 void msg_ui_bubble_item_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
301 void msg_ui_bubble_item_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
302 #ifdef _BUBBLE_FLICK_EVENT
303 void msg_ui_bubble_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
304 void msg_ui_bubble_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
305 #endif
306 void msg_ui_bubble_list_checked_cb(void *data, Evas_Object *obj, void *event_info);
307 void msg_ui_bubble_timezone_change_cb(keynode_t *key, void *data);
308 void msg_ui_bubble_scroll_edge_top_cb(void *data, Evas_Object *obj, void *event_info);
309 void msg_ui_bubble_scroll_drag_start_cb(void *data, Evas_Object *obj, void *event_info);
310 void msg_ui_bubble_anchor_menu_click_cb(void *data, Evas_Object *obj, void *event_info);
311 void msg_ui_bubble_main_layout_clicked_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
312
313 void msg_ui_bubble_launch_voice_call(const char *call_num);
314 void msg_ui_bubble_launch_video_call(const char *call_num);
315 char *msg_ui_bubble_get_trimmed_number(const char *org_num);
316 void msg_ui_bubble_launch_add_to_contact_ug(PMSG_BUBBLE_DATA pData);
317 void msg_ui_bubble_launch_contact_list_ug(PMSG_BUBBLE_DATA pData, int type, const char *str);
318 void msg_ui_bubble_launch_contact_detail_ug(PMSG_BUBBLE_DATA pData, int ct_id);
319 void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg);
320 void msg_ui_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info);
321 Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData, int count);
322
323 void msg_ui_bubble_show_select_info(PMSG_BUBBLE_DATA pData);
324 void msg_ui_bubble_show_deleted_info(PMSG_BUBBLE_DATA pData);
325 void msg_ui_bubble_status_message_post(PMSG_BUBBLE_DATA pData, char *msg);
326 void msg_ui_bubble_contact_info_update(PMSG_BUBBLE_DATA pData);
327 unsigned char msg_ui_bubble_check_word_type(char *txt);
328 void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData);
329 void msg_ui_bubble_get_locale(PMSG_BUBBLE_DATA pData);
330
331 char *msg_ui_bubble_create_export_folder_name(void);
332 char *msg_ui_bubble_create_export_file_name(void);
333 char *msg_ui_bubble_create_export_folder(PMSG_BUBBLE_DATA pData, const char* folder_name);
334 char *msg_ui_bubble_create_export_string(PMSG_BUBBLE_DATA pData, msg_struct_t msg);
335
336 bool msg_is_sms(int msg_type);
337 bool msg_is_mms(int msg_type);
338
339
340 #endif