Apply EFL migration of thread, common
[apps/core/preloaded/message-app.git] / thread / include / msg-ui-thread-main.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://www.tizenopensource.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 __DEF_MSG_UI_THREAD_MAIN_H__
18 #define __DEF_MSG_UI_THREAD_MAIN_H__
19
20 #include <stdio.h>
21 #include <msg.h>
22 #include <msg_storage.h>
23 #include <msg_transport.h>
24
25 #include <libintl.h>
26 #include <bundle.h>
27 #include <Ecore.h>
28 #include <Ecore_IMF.h>
29 #include <Elementary.h>
30 #include <ui-gadget-module.h>
31 #include <utilX.h>
32 #include <time.h>
33 #include <contacts.h>
34
35 #include "message.h"
36 #include "msg-ui-util.h"
37 #include "msg-ui-image-resource.h"
38 #include "msg-ui-common-utility.h"
39
40 #define MSG_THREAD_THEME        EDJDIR"/thread_genlist.edj"
41 #define MSG_THREAD_DELETE_NOTI_TIME 1.5
42 #define MSG_THREAD_LIST_MAX_COUNT 10
43 #define MSG_THREAD_LIST_LAUNCH_LOAD_MAX_CNT 20
44 #define MSG_THREAD_LIST_ADDR_POPUP_MAX_CNT 4
45 #define MSG_THREAD_LIST_ADDR_POPUP_ITEM_HEIGHT 114
46
47
48
49 typedef struct _MSG_THREAD_LIST_DATA MSG_THREAD_LIST_DATA, *PMSG_THREAD_LIST_DATA;
50 typedef struct _MSG_THREAD_SPLIT_DATA MSG_THREAD_SPLIT_DATA, *PMSG_THREAD_SPLIT_DATA;
51 typedef struct _MSG_APP_THREAD_DATA_S MSG_APP_THREAD_DATA_S, *PMSG_APP_THREAD_DATA_S;
52 typedef struct _MSG_APP_THREAD_MSG_DATA_S MSG_APP_THREAD_MSG_DATA_S, *PMSG_APP_THREAD_MSG_DATA_S;
53 typedef struct _MSG_APP_THREAD_DATELINE_DATA_S MSG_APP_THREAD_DATELINE_DATA_S, *PMSG_APP_THREAD_DATELINE_DATA_S;
54 typedef struct _MSG_APP_THREAD_ADDR_INFO_S MSG_APP_THREAD_ADDR_INFO_S, *PMSG_APP_THREAD_ADDR_INFO_S;
55 typedef struct _THREAD_MORE_VIEW_DATA THREAD_MORE_VIEW_DATA, *PTHREAD_MORE_VIEW_DATA;
56
57 typedef enum {
58         THREAD_NORMAL_VIEW = 0,
59         THREAD_EDIT_VIEW,               /** Edit viw mode*/
60         THREAD_UNLOAD_VIEW, /* when it calls other gadgets or views. */
61 } ThreadViewMode;
62
63 typedef enum {
64         THREAD_NORMAL_LIST_TYPE,        /** Normal converstaion THREAD list */
65         THREAD_SPAM_LIST_TYPE,          /** <More - spam messages list> */
66         THREAD_SIM_LIST_TYPE,           /** <More -Sim messages list> */
67         THREAD_CBMSG_LIST_TYPE, /** <More -CB Message list> */
68 } ThreadMsgListType;
69
70 typedef enum {
71         THREAD_LIST_APP_DATA_THREAD = 0,
72         THREAD_LIST_APP_DATA_MSG,
73 } ThreadMsgListAppDataType;
74
75 typedef enum {
76         THREAD_SEARCH_OFF = 0,
77         THREAD_SEARCH_ON,
78 } ThreadSearchMode;
79
80 typedef enum {
81         THREAD_ITC_EMPTY = 0,
82         THREAD_ITC_SEARCH,
83         THREAD_ITC_BLANK,
84         THREAD_ITC_POPUP,
85         THREAD_ITC_DATE,
86 } ThreadItcType;
87
88 typedef enum {
89         THREAD_ACTION_NONE = 0,
90         THREAD_ACTION_DELETE,
91         THREAD_ACTION_RESTORE,
92         THREAD_ACTION_COPY_TO_PHONE,
93         THREAD_ACTION_BLOCK,
94         THREAD_ACTION_UNBLOCK,
95 } ThreadActionType;
96
97 enum {
98         THREAD_ROTATE_ANGLE_PORTRAIT = 0,
99         THREAD_ROTATE_ANGLE_PORTRAIT_UPSIDEDOWN = 180,
100         THREAD_ROTATE_ANGLE_LANDSCAPE = 270,
101         THREAD_ROTATE_ANGLE_LANDSCAPE_UPSIDEDOWN = 90,
102         THREAD_ROTATE_ANGLE_UNKNOWN = -1,
103 };
104
105 typedef struct _MSG_THREAD_DATA {
106
107         msg_handle_t msgHandle;
108         int app_state;
109
110         Elm_Theme *th;
111         Evas_Object *win_main;
112         Evas_Object *conform;
113         Evas_Object *panes;
114         Evas_Object *layout_main;
115         Evas_Object *navi_frame;
116         PMSG_THREAD_SPLIT_DATA split_data;
117         Evas_Object *detail_layout;
118         Elm_Object_Item *detail_nf_it;
119
120         Elm_Genlist_Item_Class itc_empty;
121         Elm_Genlist_Item_Class itc_search;
122         Elm_Genlist_Item_Class itc_blank;
123         Elm_Genlist_Item_Class itc_popup;
124         Elm_Genlist_Item_Class itc_date;
125
126         char *time_12h_ptn;
127         char *time_24h_ptn;
128         char *date_ptn_default;
129         char *date_ptn_year;
130         msg_time_format time_fmt;
131         char locale[DEF_BUF_LEN];
132
133         bool isRotate;                  /* Rotation state */
134         bool isIncomingMsg;     /* Check there is new incoming message when it back from edit mode to normal. */
135
136         PMSG_THREAD_LIST_DATA list_data[MSG_THREAD_LIST_MAX_COUNT];
137
138 } MSG_THREAD_DATA, *PMSG_THREAD_DATA;
139
140 typedef struct _MSG_THREAD_LIST_DATA {
141
142         Evas_Object *genlist;
143         Evas_Object *content_ly;
144         Evas_Object *noc_ly;
145         Elm_Object_Item *nf_it; //title, control bar naviframe item
146         Evas_Object *toolbar_btn[CONTROLBAR_ITEM_MAX];
147         Evas_Object *back_btn;
148         Evas_Object *search_btn;
149         Evas_Object *searchbar;
150         Ecore_Timer *search_timer;
151
152         Elm_Genlist_Item_Class itc_default;
153         Elm_Genlist_Item_Class itc_unread;
154
155         ThreadViewMode view_mode;
156         ThreadMsgListType list_type;
157         ThreadMsgListAppDataType app_data_type;
158         ThreadSearchMode search_mode;
159         ThreadActionType action_type;
160
161         Elm_Object_Item *sel_gen_item;
162         int sel_thread_id;
163         int sel_msg_id;
164
165         struct ug_cbs cbs;
166         ui_gadget_h loaded_ug;
167
168         Evas_Object *select_info;       //%d item selected
169         Evas_Object *selectioninfo_layout;
170
171         Evas_Object *sel_all_ly;
172         Evas_Object *sel_all_box;
173         Eina_Bool sel_all_checked;
174         Eina_List *chk_list;
175         Ecore_Thread *multi_action_thread;
176         int sel_index;
177         int item_cnt;
178         int check_cnt;
179
180         Evas_Object *popup;
181         Evas_Object *progressbar;
182         Ecore_Job *job_popup_end;
183         bool include_protected_msg;
184
185         Ecore_Idler *launch_idler;
186         int loaded_cnt;
187 } _MSG_THREAD_LIST_DATA;
188
189 typedef struct _MSG_THREAD_SPLIT_DATA {
190         Evas_Object *content_ly;
191         Evas_Object *navi_frame;
192         Elm_Object_Item *nf_it;
193         Evas_Object *title_layout;
194         Evas_Object *noc_ly;
195         Evas_Object *back_btn;
196         Evas_Object *composer_btn;
197 } _MSG_THREAD_SPLIT_DATA;
198
199 typedef struct _MSG_APP_THREAD_DATA_S {
200         msg_thread_id_t thread_id;
201         char thread_name[DEF_THREAD_NAME_LEN+1];
202         char thread_data[DEF_BUF_LEN_S+1];
203         time_t *thread_time;
204         msg_direction_type_t direction;
205         int unread_cnt;
206         int sms_cnt;
207         int mms_cnt;
208         int msg_type;
209
210         Evas_Object *chk;
211         Eina_Bool is_check;
212 } _MSG_APP_THREAD_DATA_S;
213
214 typedef struct _MSG_APP_THREAD_MSG_DATA_S {
215         int msg_id;
216         int msg_type;
217         bool is_read;
218         int direction;
219
220         PMSG_APP_THREAD_ADDR_INFO_S *addr_info;
221         int addr_cnt;
222         char msg_body[MAX_MSG_TEXT_LEN+1];
223         time_t *msg_time;
224
225         Evas_Object *chk;
226         Eina_Bool is_check;
227 } _MSG_APP_THREAD_MSG_DATA_S;
228
229 typedef struct _MSG_APP_THREAD_DATELINE_DATA_S {
230         Elm_Object_Item *date_it;
231         time_t *thread_time;
232         int subitem_cnt;
233 } _MSG_APP_THREAD_DATELINE_DATA_S;
234
235 typedef struct _MSG_APP_THREAD_ADDR_INFO_S {
236         int contact_id;
237         char display_name[DEF_THREAD_NAME_LEN+1];
238         char address[DEF_THREAD_ADDR_LEN+1];
239 } _MSG_APP_THREAD_ADDR_INFO_S;
240
241
242
243 #define MSG_THREAD_POPUP_DATA   "popup_data"
244 #define MSG_THREAD_DEL_CONFIRM  "del_confirm"
245
246
247 PMSG_THREAD_DATA msg_ui_thread_get_data(void);
248 msg_handle_t msg_ui_thread_get_data_handle(void);
249 Elm_Genlist_Item_Class* msg_ui_thread_get_itc_type(ThreadItcType type);
250
251 void *msg_ui_thread_init_thread_data(struct appdata *ad);
252 void msg_ui_thread_deinit_thread_data(void *data);
253
254 PMSG_THREAD_LIST_DATA msg_ui_thread_create_thread_list_data(ThreadMsgListType list_type, ThreadMsgListAppDataType app_data_type);
255 PMSG_THREAD_SPLIT_DATA msg_ui_thread_create_split_data(void);
256 void msg_ui_thread_destroy_thread_list_data(PMSG_THREAD_LIST_DATA pListData);
257 void msg_ui_thread_destroy_split_data(PMSG_THREAD_SPLIT_DATA pSplitData);
258 PMSG_THREAD_LIST_DATA msg_ui_thread_get_default_list(void);
259 PMSG_THREAD_LIST_DATA msg_ui_thread_get_current_list(void);
260 PMSG_THREAD_LIST_DATA msg_ui_thread_get_prev_list(PMSG_THREAD_LIST_DATA pListData);
261
262 void msg_ui_thread_load_thread_view(void *data, service_h service);
263 void msg_ui_thread_load_message_box(int list_type);
264 void msg_ui_thread_reset_thread_view(void *data, service_h service);
265
266 void msg_ui_thread_fullview_launch(PMSG_THREAD_DATA pData, PMSG_THREAD_LIST_DATA pListData);
267 void msg_ui_thread_splitview_launch(PMSG_THREAD_DATA pData, PMSG_THREAD_SPLIT_DATA pSplitData);
268 Evas_Object *msg_ui_thread_create_content_layout(Evas_Object *parent);
269 Evas_Object *msg_ui_thread_create_nocontent_layout(Evas_Object *parent);
270 Evas_Object *msg_ui_thread_create_layout_main(PMSG_THREAD_DATA pData);
271 Evas_Object *msg_ui_thread_create_genlist(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData);
272 Evas_Object *msg_ui_thread_create_searchbar_layout(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData);
273
274 void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData);
275 void msg_ui_thread_set_navi_toolbar_item(PMSG_THREAD_LIST_DATA pListData);
276 void msg_ui_thread_show_toolbar(PMSG_THREAD_LIST_DATA pListData);
277 void msg_ui_thread_hide_toolbar(PMSG_THREAD_LIST_DATA pListData, bool bDeleteBtn);
278 void msg_ui_thread_rotation_set(void *data, int rot);
279 bool msg_ui_thread_rotation_get(void);
280 void msg_ui_thread_lang_changed(void *data);
281 void msg_ui_thread_split_view_hide(PMSG_THREAD_DATA pData);
282 void msg_ui_thread_split_view_show(PMSG_THREAD_DATA pData);
283
284
285 /* THREAD LIST */
286 void msg_ui_thread_set_thread_data(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_DATA_S thread_data, msg_struct_t msgThreadInfo);
287 void msg_ui_thread_set_msg_data(PMSG_APP_THREAD_MSG_DATA_S msg_data, msg_struct_t msgInfo);
288 char *msg_ui_thread_msg_gl_text_get(void *data, Evas_Object *obj, const char *part);
289 char *msg_ui_thread_search_msg_gl_text_get(void *data, Evas_Object *obj, const char *part);
290 Evas_Object *msg_ui_thread_msg_gl_content_get(void *data, Evas_Object *obj, const char *part);
291 void msg_ui_thread_msg_gl_del(void *data, Evas_Object *obj);
292 void msg_ui_thread_msg_gl_sel(void *data, Evas_Object *obj, void *event_info);
293 char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part);
294 void msg_ui_thread_gl_empty_sel(void *data, Evas_Object *obj, void *event_info);
295 char *msg_ui_thread_date_gl_text_get(void *data, Evas_Object *obj, const char *part);
296 void msg_ui_thread_date_gl_del(void *data, Evas_Object *obj);
297 PMSG_APP_THREAD_DATELINE_DATA_S msg_ui_thread_list_insert_dateline(PMSG_THREAD_LIST_DATA pListData, time_t* cur_time, time_t* prev_time);
298 void  msg_ui_thread_list_load(PMSG_THREAD_LIST_DATA pListData, Eina_Bool bLaunch);
299 void msg_ui_thread_list_update(PMSG_THREAD_LIST_DATA pListData);
300 Eina_Bool msg_ui_thread_list_item_update(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id);
301 void msg_ui_thread_list_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id);
302
303 void msg_ui_thread_msg_list_load(PMSG_THREAD_LIST_DATA pListData, int listType);
304 void msg_ui_thread_list_msg_list_update(PMSG_THREAD_LIST_DATA pListData);
305 void msg_ui_thread_list_msg_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id);
306 Eina_Bool msg_ui_thread_list_msg_item_update(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id);
307 Eina_Bool  msg_ui_thread_search_msg_list_load(void *data);
308
309 void msg_ui_thread_common_style_set(PMSG_THREAD_DATA pData);
310 void msg_ui_thread_genlist_style_set(PMSG_THREAD_LIST_DATA pListData);
311
312 /* THREAD CALLBACK */
313 void msg_ui_thread_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t storageChangeType, msg_id_list_s *pMsgIdList, void *user_param);
314 void msg_ui_thread_ctlbar_multi_action_cb(void *data, Evas_Object *obj, void *event_info);
315 void msg_ui_thread_multi_action_thread_fn(void *data, Ecore_Thread *thread);
316 void msg_ui_thread_multi_action_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_data);
317 void msg_ui_thread_ctlbar_checkbox_cb(void *data, Evas_Object *obj, void *event_info);
318 void msg_ui_thread_ctlbar_spam_setting_cb(void *data, Evas_Object *obj, void *event_info);
319 void msg_ui_thread_ctlbar_compose_cb(void *data, Evas_Object *obj, void *event_info);
320 void msg_ui_thread_ctlbar_message_box_cb(void *data, Evas_Object *obj, void *event_info);
321
322 void msg_ui_thread_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_info);
323 void msg_ui_thread_list_checked_cb(void *data, Evas_Object *obj, void *event_info);
324 void msg_ui_thread_back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
325 void msg_ui_thread_search_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
326 void msg_ui_thread_searchbar_entry_focus_cb(void *data, Evas_Object *obj, void *event_info);
327 void msg_ui_thread_searchbar_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info);
328 void msg_ui_thread_searchbar_entry_change_cb(void *data, Evas_Object *obj, void *event_info);
329 void msg_ui_thread_searchbar_entry_click_cb(void *data, Evas_Object *obj, void *event_info);
330 void msg_ui_thread_searchbar_cancel_click_cb(void *data, Evas_Object *obj, void *event_info);
331 void msg_ui_thread_searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
332 void msg_ui_thread_sweep_btn_cb(void *data, Evas_Object *obj, void *event_info);
333 void msg_ui_thread_timezone_change_cb(keynode_t *key, void *data);
334 void msg_ui_thread_gl_mode_right(void *data, Evas_Object *obj, void *event_info);
335 void msg_ui_thread_gl_mode_left(void *data, Evas_Object *obj, void *event_info);
336
337 /* THREAD UTILS */
338 int msg_ui_thread_launch_voice_call(const char *call_num);
339 void msg_ui_thread_launch_video_call(const char *call_num);
340 void msg_ui_thread_launch_spam_setting(PMSG_THREAD_LIST_DATA pListData);
341 void msg_ui_thread_launch_viewer_ug(PMSG_THREAD_LIST_DATA pListData, int nMsgId);
342 void msg_ui_thread_launch_msg_detail_view(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_MSG_DATA_S item_data);
343 void msg_ui_thread_update_msg_detail_view(PMSG_APP_THREAD_MSG_DATA_S item_data);
344
345 void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData);
346 void msg_ui_thread_get_locale(PMSG_THREAD_DATA pData);
347
348 void msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data, service_h svc_handle);
349 void msg_ui_thread_get_composer_data(int msg_id, service_h svc_handle);
350 void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_LIST_DATA pListData);
351 void msg_ui_thread_show_normal_mode(PMSG_THREAD_LIST_DATA pListData);
352 void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_LIST_DATA pListData, int thread_id);
353 void msg_ui_thread_select_item_by_msg_id(PMSG_THREAD_LIST_DATA pListData, int msg_id);
354 void msg_ui_thread_show_notify(PMSG_THREAD_LIST_DATA pListData, const char *msg);
355 void msg_ui_thread_show_action_popup(PMSG_THREAD_LIST_DATA pListData, int actionType, const char *msg);
356 Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_LIST_DATA pListData, int count);
357 void msg_ui_thread_show_select_info(PMSG_THREAD_LIST_DATA pListData);
358 void msg_ui_thread_show_action_finish_info(PMSG_THREAD_LIST_DATA pListData, int actionType, void *pData);
359 void msg_ui_thread_addr_select_popup(PMSG_THREAD_LIST_DATA pListData, const char *title, msg_struct_list_s *addrList);
360
361 void msg_ui_thread_set_app_state(int app_state);
362 int msg_ui_thread_get_app_state(PMSG_THREAD_DATA pData);
363 void msg_ui_thread_cancel_search_mode(PMSG_THREAD_LIST_DATA pListData);
364 void msg_ui_thread_button_disabled_set(PMSG_THREAD_LIST_DATA pListData, Eina_Bool disabled, int controlbar_btn);
365 void msg_ui_thread_get_title_text(PMSG_THREAD_LIST_DATA pListData, char *label, int label_len);
366
367 const char *msg_ui_thread_make_search_result_string(const char *string, char *searchword, bool *result);
368 void msg_ui_thread_make_time_string(time_t *msg_t, char *buf, int buf_len);
369 #endif  /* __DEF_MSG_UI_THREAD_MAIN_H__ */