2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://www.tizenopensource.org/license
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.
17 #ifndef __DEF_MSG_UI_THREAD_MAIN_H__
18 #define __DEF_MSG_UI_THREAD_MAIN_H__
22 #include <msg_storage.h>
23 #include <msg_transport.h>
28 #include <Ecore_IMF.h>
29 #include <Elementary.h>
30 #include <ui-gadget-module.h>
36 #include "msg-ui-util.h"
37 #include "msg-ui-image-resource.h"
38 #include "msg-ui-common-utility.h"
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
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;
58 THREAD_NORMAL_VIEW = 0,
59 THREAD_EDIT_VIEW, /** Edit viw mode*/
60 THREAD_UNLOAD_VIEW, /* when it calls other gadgets or views. */
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> */
71 THREAD_LIST_APP_DATA_THREAD = 0,
72 THREAD_LIST_APP_DATA_MSG,
73 } ThreadMsgListAppDataType;
76 THREAD_SEARCH_OFF = 0,
89 THREAD_ACTION_NONE = 0,
91 THREAD_ACTION_RESTORE,
92 THREAD_ACTION_COPY_TO_PHONE,
94 THREAD_ACTION_UNBLOCK,
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,
105 typedef struct _MSG_THREAD_DATA {
107 msg_handle_t msgHandle;
111 Evas_Object *win_main;
112 Evas_Object *conform;
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;
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;
128 char *date_ptn_default;
130 msg_time_format time_fmt;
131 char locale[DEF_BUF_LEN];
133 bool isRotate; /* Rotation state */
134 bool isIncomingMsg; /* Check there is new incoming message when it back from edit mode to normal. */
136 PMSG_THREAD_LIST_DATA list_data[MSG_THREAD_LIST_MAX_COUNT];
138 } MSG_THREAD_DATA, *PMSG_THREAD_DATA;
140 typedef struct _MSG_THREAD_LIST_DATA {
142 Evas_Object *genlist;
143 Evas_Object *content_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;
152 Elm_Genlist_Item_Class itc_default;
153 Elm_Genlist_Item_Class itc_unread;
155 ThreadViewMode view_mode;
156 ThreadMsgListType list_type;
157 ThreadMsgListAppDataType app_data_type;
158 ThreadSearchMode search_mode;
159 ThreadActionType action_type;
161 Elm_Object_Item *sel_gen_item;
166 ui_gadget_h loaded_ug;
168 Evas_Object *select_info; //%d item selected
169 Evas_Object *selectioninfo_layout;
171 Evas_Object *sel_all_ly;
172 Evas_Object *sel_all_box;
173 Eina_Bool sel_all_checked;
175 Ecore_Thread *multi_action_thread;
181 Evas_Object *progressbar;
182 Ecore_Job *job_popup_end;
183 bool include_protected_msg;
185 Ecore_Idler *launch_idler;
187 } _MSG_THREAD_LIST_DATA;
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;
195 Evas_Object *back_btn;
196 Evas_Object *composer_btn;
197 } _MSG_THREAD_SPLIT_DATA;
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];
204 msg_direction_type_t direction;
212 } _MSG_APP_THREAD_DATA_S;
214 typedef struct _MSG_APP_THREAD_MSG_DATA_S {
220 PMSG_APP_THREAD_ADDR_INFO_S *addr_info;
222 char msg_body[MAX_MSG_TEXT_LEN+1];
227 } _MSG_APP_THREAD_MSG_DATA_S;
229 typedef struct _MSG_APP_THREAD_DATELINE_DATA_S {
230 Elm_Object_Item *date_it;
233 } _MSG_APP_THREAD_DATELINE_DATA_S;
235 typedef struct _MSG_APP_THREAD_ADDR_INFO_S {
237 char display_name[DEF_THREAD_NAME_LEN+1];
238 char address[DEF_THREAD_ADDR_LEN+1];
239 } _MSG_APP_THREAD_ADDR_INFO_S;
243 #define MSG_THREAD_POPUP_DATA "popup_data"
244 #define MSG_THREAD_DEL_CONFIRM "del_confirm"
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);
251 void *msg_ui_thread_init_thread_data(struct appdata *ad);
252 void msg_ui_thread_deinit_thread_data(void *data);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
345 void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData);
346 void msg_ui_thread_get_locale(PMSG_THREAD_DATA pData);
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);
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);
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__ */