Fixed crashes in messaging view and added unsupported image for sticker
[apps/native/telegram-tizen.git] / TelegramTizen / src / tg_user_main_view.c
1 /*
2     This file is part of Telegram application for tizen
3
4     This library is free software; you can redistribute it and/or
5     modify it under the terms of the GNU Lesser General Public
6     License as published by the Free Software Foundation; either
7     version 2.1 of the License, or (at your option) any later version.
8
9     This library is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12     Lesser General Public License for more details.
13
14     You should have received a copy of the GNU Lesser General Public
15     License along with this library; if not, write to the Free Software
16     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17 */
18
19 #include "tg_user_main_view.h"
20 #include "tg_start_messaging_view.h"
21 #include "tg_messaging_view.h"
22 #include "contact_selection_view.h"
23 #include "tg_search_peer_view.h"
24 #include "tg_settings_view.h"
25 #include "tg_db_manager.h"
26 #include "server_requests.h"
27 #include "tg_db_wrapper.h"
28 #include "tg_main_item_deletion_view.h"
29 #include "tg_search_message_view.h"
30
31 #define IMAGE_SIZE (36*1.4f)
32
33
34 static Evas_Object *create_image_object_from_file(const char *icon_name, Evas_Object *parent)
35 {
36         Evas_Object *icon = elm_image_add(parent);
37         evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
38         evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
39         elm_image_file_set(icon, icon_name, NULL);
40         evas_object_show(icon);
41         return icon;
42 }
43
44 static char* on_menu_item_name_get_cb(void *data, Evas_Object *obj, const char *part)
45 {
46         if (!strcmp(part, "elm.text")) {
47                 int id = (int) data;
48
49                 char temp_text[256];
50                 sprintf(temp_text, "<font=Tizen:style=Normal color=#000000 align=left><font_size=30>%s</font_size></font>", main_view_menu_items[id][0]);
51
52                 return strdup(temp_text);
53         } else {
54                 return NULL;
55         }
56 }
57
58 static Evas_Object* on_menu_item_image_get_cb(void *data, Evas_Object *obj, const char *part)
59 {
60         int id = (int)data;
61         if (!strcmp(part, "elm.swallow.icon")) {
62                 Evas_Object *img = elm_image_add(obj);
63                 elm_image_file_set(img, ui_utils_get_resource(main_view_menu_items[id][1]), NULL);
64                 evas_object_size_hint_min_set(img, ELM_SCALE_SIZE(IMAGE_SIZE), ELM_SCALE_SIZE(IMAGE_SIZE));
65                 return img;
66         }
67         return NULL;
68 }
69
70 static void launch_contact_picker(appdata_s* ad)
71 {
72         app_control_h app_control;
73         int ret = app_control_create(&app_control);
74
75         app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE);
76         //app_control_set_app_id(app_control, "tizen.messages");
77         //app_control_add_extra_data(app_control, APP_CONTROL_DATA_TO, recipient);
78         app_control_set_mime(app_control, "text/html");
79         char *text = "Invite you to telegram! https://telegram.org/dl";
80         app_control_add_extra_data(app_control, APP_CONTROL_DATA_TEXT, text);
81         if (app_control_send_launch_request(app_control, NULL, NULL) == APP_CONTROL_ERROR_NONE) {
82                 // sms view launched
83         }
84         app_control_destroy(app_control);
85 }
86
87 static void on_menu_item_selected(void *data, Evas_Object *obj, void *event_info)
88 {
89         //int index __attribute__((unused)) = (int)data;
90         appdata_s* ad = evas_object_data_get(obj, "app_data");
91         int id = (int) data;
92         if (id == 0) { // new group
93                 launch_contact_selction_view(ad);
94         } else if (id == 1) { // new sec chat
95
96         } else if (id == 2) { // contacts
97                 launch_start_messaging_view(ad);
98         } else if (id == 3) { // invite friends
99                 launch_contact_picker(ad);
100         } else if (id == 4) { // settings
101                 launch_settings_screen(ad);
102         } else {
103
104         }
105         elm_panel_hidden_set(ad->panel, EINA_TRUE);
106 }
107
108 static void on_menu_list_clicked_cb(void *data, Evas_Object *obj, void *event_info)
109 {
110         Elm_Object_Item *it = event_info;
111         elm_genlist_item_selected_set(it, EINA_FALSE);
112 }
113
114 Evas_Object* create_side_panel_list(appdata_s* ad, Evas_Object *parent)
115 {
116
117         char edj_path[PATH_MAX] = {0, };
118         app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
119
120         Evas_Object* scroller = elm_scroller_add(ad->nf);
121         elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
122         elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
123
124         Evas_Object* layout = elm_layout_add(ad->nf);
125         elm_layout_file_set(layout, edj_path, "user_main_screen_side_panel");
126         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
127         evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
128         evas_object_show(layout);
129         elm_object_content_set(scroller, layout);
130
131
132         Evas_Object* user_info_layout = elm_layout_add(ad->nf);
133         elm_layout_file_set(user_info_layout, edj_path, "menu_user_layout");
134         evas_object_size_hint_weight_set(user_info_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
135         evas_object_size_hint_align_set(user_info_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
136         evas_object_show(user_info_layout);
137         elm_object_part_content_set(layout, "main_box", user_info_layout);
138
139         Evas_Object *profile_pic = NULL;
140         /*********** user info ********************/
141         if (ad->current_user_data->photo_path && strlen(ad->current_user_data->photo_path) > 0 && strstr(ad->current_user_data->photo_path, "_null_") == NULL) {
142                 profile_pic = create_image_object_from_file(ad->current_user_data->photo_path, ad->nf);
143         } else  {
144                 profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_SINGLE_PIC), ad->nf);
145         }
146
147         Evas_Object *user_pic_layout = elm_layout_add(ad->nf);
148         elm_layout_file_set(user_pic_layout, edj_path, "main_circle_layout");
149         evas_object_size_hint_weight_set(user_pic_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
150         evas_object_size_hint_align_set(user_pic_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
151         evas_object_show(user_pic_layout);
152         elm_object_part_content_set(user_pic_layout, "content", profile_pic);
153
154         elm_object_part_content_set(user_info_layout, "user_photo_box", user_pic_layout);
155
156         evas_object_data_set(ad->nf, "main_user_profile_pic", profile_pic);
157
158
159         char* full_name = NULL;
160         /*
161         if (ad->current_user_data.first_name && ad->current_user_data.last_name) {
162                 full_name =(char*)malloc(strlen(ad->current_user_data.first_name) + strlen("") + strlen(ad->current_user_data.last_name) + 1);
163                 strcpy(full_name, ad->current_user_data.first_name);
164                 strcat(full_name, "");
165                 strcat(full_name, ad->current_user_data.last_name);
166         } else if (ad->current_user_data.first_name) {
167                 full_name =(char*)malloc(strlen(ad->current_user_data.first_name) + strlen("") + strlen(ad->current_user_data.last_name) + 1);
168                 strcpy(full_name, ad->current_user_data.first_name);
169                 strcat(full_name, "");
170                 strcat(full_name, ad->current_user_data.last_name);
171         }*/
172
173         if (ad->current_user_data->print_name) {
174                 full_name = replace(ad->current_user_data->print_name, '_', " ");
175         } else {
176                 full_name = strdup("");
177         }
178
179
180         char* phone_no = NULL;
181         if (ad->current_user_data->phone) {
182                 phone_no = (char*)malloc(strlen(ad->current_user_data->phone) + strlen("+") + 1);
183                 strcpy(phone_no, "+");
184                 strcat(phone_no, ad->current_user_data->phone);
185         } else {
186                 phone_no = strdup("");
187         }
188
189         char temp_full_name[256];
190         sprintf(temp_full_name, "<font=Tizen:style=Bold color=#000000 align=center><font_size=30>%s</font_size></font>", full_name);
191
192
193         char temp_phone_no[256];
194         sprintf(temp_phone_no, "<font=Tizen:style=Bold color=#000000 align=center><font_size=30>%s</font_size></font>", phone_no);
195
196
197         Evas_Object* user_name = elm_label_add(ad->nf);
198         elm_object_text_set(user_name, temp_full_name);
199         elm_label_ellipsis_set(user_name, EINA_TRUE);
200         evas_object_show(user_name);
201         elm_object_part_content_set(user_info_layout, "user_name_box", user_name);
202
203         Evas_Object* phone_no_lbl = elm_label_add(ad->nf);
204         elm_object_text_set(phone_no_lbl, temp_phone_no);
205         elm_label_ellipsis_set(phone_no_lbl, EINA_TRUE);
206         evas_object_show(phone_no_lbl);
207         elm_object_part_content_set(user_info_layout, "phone_number_box", phone_no_lbl);
208
209
210         free(full_name);
211         free(phone_no);
212
213
214         /*********** user info ********************/
215
216
217         Evas_Object* menu_gen_list = elm_genlist_add(parent);
218         elm_list_mode_set(menu_gen_list, ELM_LIST_COMPRESS);
219         elm_genlist_mode_set(menu_gen_list, ELM_LIST_COMPRESS);
220         evas_object_size_hint_weight_set(menu_gen_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
221         evas_object_size_hint_align_set(menu_gen_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
222
223         evas_object_data_set(menu_gen_list, "app_data", ad);
224
225         static Elm_Genlist_Item_Class itc;
226         itc.item_style = "type1";
227         itc.func.text_get = on_menu_item_name_get_cb;
228         itc.func.content_get = on_menu_item_image_get_cb;
229         itc.func.state_get = NULL;
230         itc.func.del = NULL;
231
232         for (int i = 0; i < NUMBER_OF_MENU_ITEMS; i++) {
233                 elm_genlist_item_append(menu_gen_list, &itc, (void *)i, NULL, ELM_GENLIST_ITEM_NONE, on_menu_item_selected, (void*)i);
234         }
235         evas_object_show(menu_gen_list);
236         elm_object_part_content_set(layout, "options_box", menu_gen_list);
237         evas_object_smart_callback_add(menu_gen_list, "selected", on_menu_list_clicked_cb, ad);
238         return scroller;
239
240 }
241
242
243 void on_side_panel_scroll_clicked(void *data, Evas_Object *obj, void *event_info)
244 {
245         Elm_Panel_Scroll_Info *ev = event_info;
246         Evas_Object *bg = data;
247         int col = 127 * ev->rel_x;
248         evas_object_color_set(bg, 0, 0, 0, col);
249 }
250
251 void on_side_list_back_clicked(void *data, Evas_Object *obj, void *event_info)
252 {
253         Evas_Object *panel = data;
254         elm_panel_hidden_set(panel, EINA_TRUE);
255 }
256
257 Evas_Object* create_side_panel(Evas_Object *parent)
258 {
259         Evas_Object *panel, *bg;
260
261         panel = elm_panel_add(parent);
262         elm_panel_scrollable_set(panel, EINA_TRUE);
263         elm_panel_hidden_set(panel, EINA_TRUE);
264         elm_panel_orient_set(panel, ELM_PANEL_ORIENT_LEFT);
265
266         bg = evas_object_rectangle_add(evas_object_evas_get(parent));
267         evas_object_color_set(bg, 0, 0, 0, 0);
268         elm_object_part_content_set(parent, "elm.swallow.bg", bg);
269         evas_object_show(bg);
270
271         evas_object_smart_callback_add(panel, "scroll", on_side_panel_scroll_clicked, bg);
272         evas_object_show(panel);
273
274         return panel;
275 }
276
277 void on_side_panel_clicked(void *data, Evas_Object *obj, void *event_info)
278 {
279         appdata_s *ad = data;
280         Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
281         if (it == NULL) return;
282         elm_object_item_part_text_set(elm_naviframe_top_item_get(ad->nf), NULL, elm_object_item_part_text_get(it, "default"));
283         elm_list_item_selected_set(it, EINA_FALSE);
284 }
285
286
287 void create_side_main_view(appdata_s *ad)
288 {
289         ad->panel = create_side_panel(ad->layout);
290         elm_object_part_content_set(ad->layout, "elm.swallow.left", ad->panel);
291         Evas_Object *panel_list = create_side_panel_list(ad, ad->panel);
292         evas_object_size_hint_weight_set(panel_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
293         evas_object_size_hint_align_set(panel_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
294         evas_object_smart_callback_add(panel_list, "selected", on_side_panel_clicked, ad);
295         eext_object_event_callback_add(panel_list, EEXT_CALLBACK_BACK, on_side_list_back_clicked, ad->panel);
296         elm_object_content_set(ad->panel, panel_list);
297         evas_object_data_set(ad->panel, "panel_list", panel_list);
298         return;
299 }
300
301 void on_side_panel_requested(void *data, Evas_Object * obj, void *event_info)
302 {
303         appdata_s *ad = data;
304
305         if (!ad)
306                 return;
307
308         if (ad->current_app_state == TG_USER_MAIN_VIEW_STATE) {
309
310                 if (ad->panel == NULL) {
311                         create_side_main_view(ad);
312                 }
313                 if (!elm_object_disabled_get(ad->panel))
314                         elm_panel_toggle(ad->panel);
315         }
316
317         return;
318 }
319
320 /******************** long press menu *******************************************/
321
322
323 char* on_longpress_group_menu_text_get_cb(void *data, Evas_Object *obj, const char *part)
324 {
325         int id = (int) data;
326         if (id == 0) {
327                 return strdup(i18n_get_text("IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3"));
328         } else {
329                 return strdup(i18n_get_text("IDS_TGRAM_OPT_LEAVE_CHAT"));
330         }
331 }
332
333 char* on_longpress_single_menu_text_get_cb(void *data, Evas_Object *obj, const char *part)
334 {
335         int id = (int) data;
336         if (id == 0) {
337                 return strdup(i18n_get_text("IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3"));
338         } else {
339                 return strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE"));
340         }
341 }
342
343 /******************** long press menu *******************************************/
344 void on_chat_long_press_option_selected_cb(void *data, Evas_Object *obj, void *event_info)
345 {
346         Evas_Object *popup = data;
347         appdata_s *ad = (appdata_s*)evas_object_data_get(popup, "app_data");
348         tg_main_list_item_s  *sel_item = (tg_main_list_item_s*)evas_object_data_get(popup, "selected_chat_item");
349         int item_id = (int)evas_object_data_get(popup, "selected_chat_item_index");
350
351         Elm_Object_Item *it = event_info;
352         elm_genlist_item_selected_set(it, EINA_FALSE);
353         int id = (int)elm_object_item_data_get(it);
354
355         if (id == 0) {
356                 if (sel_item->peer_type == TGL_PEER_USER || sel_item->peer_type == TGL_PEER_CHAT) {
357                         char* tablename = get_table_name_from_number(sel_item->peer_id);
358                         delete_all_records(tablename);
359                         free(tablename);
360
361                         //change item in list
362                         sel_item->last_message = strdup("");
363                         sel_item->last_msg_id = -1;
364                         sel_item->last_msg_type = -1;
365                         sel_item->is_out_msg = -1;
366                         sel_item->last_msg_status = -1;
367                         sel_item->number_of_unread_msgs = 0;
368
369                         if (sel_item->status_lbl) {
370                                 char *org_msg = "";
371                                 elm_object_text_set(sel_item->status_lbl, org_msg);
372                         }
373                         if (sel_item->date_lbl) {
374                                 Eina_Bool is_today = compare_date_with_current_date(sel_item->last_seen_time);
375
376                                 if (is_today) {
377                                         elm_object_text_set(sel_item->date_lbl, "<font=Tizen:style=Normal color=#000000 align=center><font_size=25>Today</font_size></font>");
378                                 } else {
379                                         char *format = NULL;
380                                         time_t t = sel_item->last_seen_time;
381                                         format = "%d/%b/%Y";
382                                         struct tm lt;
383                                         char res[256];
384                                         (void) localtime_r(&t, &lt);
385
386                                         if (strftime(res, sizeof(res), format, &lt) == 0) {
387                                                 (void) fprintf(stderr,  "strftime(3): cannot format supplied "
388                                                                 "date/time into buffer of size %u "
389                                                                 "using: '%s'\n",
390                                                                 sizeof(res), format);
391                                         }
392
393                                         char time_str[256] = {0,};
394                                         snprintf(time_str, sizeof(time_str), "<font=Tizen:style=Normal color=#000000 align=center><font_size=25>%s</font_size></font>", res);
395
396                                         elm_object_text_set(sel_item->date_lbl, time_str);
397                                 }
398                         }
399 #if 0
400                         if (sel_item->msg_status_lbl) {
401                                 Evas_Object* temp_lbl = elm_object_part_content_get(sel_item->msg_status_lbl, "swallow.status");
402                                 if (temp_lbl) {
403                                         evas_object_del(temp_lbl);
404                                 }
405                                 Evas_Object* num_lbl = elm_label_add(ad->nf);
406                                 elm_object_style_set(num_lbl, "transparent");
407                                 elm_object_text_set(num_lbl, "");
408                                 evas_object_size_hint_weight_set(num_lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
409                                 evas_object_size_hint_align_set(num_lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
410                                 evas_object_show(num_lbl);
411                                 elm_object_part_content_set(sel_item->msg_status_lbl, "swallow.status", num_lbl);
412                         }
413 #endif
414                         Evas_Object *buddy_list = evas_object_data_get(ad->nf, "buddy_list");
415                         if (buddy_list) {
416                                 elm_genlist_realized_items_update(buddy_list);
417                         }
418
419                 } else {
420
421                 }
422
423         } else if (id == 1) {
424                 if (sel_item->peer_type == TGL_PEER_USER) {
425                         char* tablename = get_table_name_from_number(sel_item->peer_id);
426                         delete_all_records(tablename);
427                         free(tablename);
428
429                         // delete from main list
430
431                         if (sel_item->peer_print_name) {
432                                 free(sel_item->peer_print_name);
433                                 sel_item->peer_print_name = NULL;
434                         }
435                         if (sel_item->last_message) {
436                                 free(sel_item->last_message);
437                                 sel_item->last_message = NULL;
438                         }
439                         if (sel_item->profile_pic_path) {
440                                 free(sel_item->profile_pic_path);
441                                 sel_item->profile_pic_path = NULL;
442                         }
443                         sel_item->date_lbl = NULL;
444                         sel_item->msg_status_lbl = NULL;
445                         sel_item->main_item_layout = NULL;
446                         sel_item->profile_pic = NULL;
447                         sel_item->profile_pic_path = NULL;
448                         sel_item->status_lbl = NULL;
449                         sel_item->user_name_lbl = NULL;
450
451                         //ad->main_list
452                         ad->main_list = eina_list_remove(ad->main_list, sel_item);
453                         refresh_main_list_view(ad, EINA_FALSE);
454
455                 } else if (sel_item->peer_type == TGL_PEER_CHAT) {
456
457                         //send group chat delete request
458                         show_loading_popup(ad);
459                         send_delete_group_chat_request(ad, ad->service_client, sel_item->peer_id);
460
461                 } else {
462
463                 }
464         } else {
465
466         }
467         evas_object_del(popup);
468 }
469
470
471 static void on_buddy_list_longpress(void *data, Evas_Object *obj, void *event_info)
472 {
473         appdata_s *ad = data;
474         Elm_Object_Item *it = event_info;
475         elm_genlist_item_selected_set(it, EINA_FALSE);
476
477         int item_id = (int)elm_object_item_data_get(it);
478         tg_main_list_item_s  *sel_item = eina_list_nth(ad->main_list, item_id);
479
480         if (sel_item) {
481                 static Elm_Genlist_Item_Class itc;
482                 Evas_Object *popup;
483                 Evas_Object *box;
484                 Evas_Object *genlist;
485                 int i;
486                 Evas_Object *win = ad->win;
487
488                 popup = elm_popup_add(win);
489                 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
490                 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
491                 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
492
493                 evas_object_data_set(popup, "app_data", ad);
494                 evas_object_data_set(popup, "selected_chat_item", (void*)sel_item);
495                 evas_object_data_set(popup, "selected_chat_item_index", (void*)item_id);
496
497                 /* genlist */
498                 genlist = elm_genlist_add(popup);
499                 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
500                 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
501
502                 itc.item_style = "default";
503
504
505                 if (sel_item->peer_type == TGL_PEER_USER) {
506                         itc.func.text_get = on_longpress_single_menu_text_get_cb;
507                 } else if (sel_item->peer_type == TGL_PEER_CHAT) {
508                         itc.func.text_get = on_longpress_group_menu_text_get_cb;
509                 } else {
510
511                 }
512
513                 itc.func.content_get = NULL;
514                 itc.func.state_get = NULL;
515                 itc.func.del = NULL;
516
517                 for (i = 0; i < 2; i++) {
518                         elm_genlist_item_append(genlist, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_chat_long_press_option_selected_cb, popup);
519                 }
520                 evas_object_show(genlist);
521                 elm_object_content_set(popup, genlist);
522                 evas_object_show(popup);
523         }
524 }
525
526 void on_main_chat_item_selected(void *data, Evas_Object *obj, void *event_info)
527 {
528         Elm_Object_Item *it = event_info;
529         elm_genlist_item_selected_set(it, EINA_FALSE);
530
531         //int item_id = (int) data;
532         int item_id = (int)elm_object_item_data_get(it);
533
534         appdata_s* ad = evas_object_data_get(obj, "app_data");
535
536         tg_main_list_item_s* sel_item = eina_list_nth(ad->main_list, item_id);
537
538         ad->buddy_in_cahtting_data = NULL;
539         ad->peer_in_cahtting_data = NULL;
540         int buddy_id = -1;
541         if (sel_item) {
542
543                 if (sel_item->peer_type == TGL_PEER_CHAT) {
544
545                         tg_chat_info_s* chat_info = get_chat_info(sel_item->peer_id);
546                         if (!chat_info || (chat_info && chat_info->user_list_size <= 0)) {
547                                 // request chat info
548                                 //show_toast(ad, "Loading chat info. Please wait.");
549                                 show_loading_popup(ad);
550                                 send_update_chat_request(ad, ad->service_client, sel_item->peer_id);
551                                 return;
552                         }
553                 }
554
555                 if (sel_item->peer_type == TGL_PEER_USER) {
556                         for (int i = 0; i < eina_list_count(ad->buddy_list); i++) {
557                                 user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i);
558                                 user_data_s* user_data = item->use_data;
559
560                                 if (user_data->user_id.id == sel_item->peer_id) {
561                                         ad->buddy_in_cahtting_data = item;
562                                         break;
563                                 }
564                         }
565
566                         if (ad->buddy_in_cahtting_data == NULL) {
567                                 for (int i = 0; i < eina_list_count(ad->unknown_buddy_list); i++) {
568                                         user_data_with_pic_s *item = eina_list_nth(ad->unknown_buddy_list, i);
569                                         user_data_s* user_data = item->use_data;
570
571                                         if (user_data->user_id.id == sel_item->peer_id) {
572                                                 ad->buddy_in_cahtting_data = item;
573                                                 break;
574                                         }
575                                 }
576                         }
577                 }
578
579                 for (int i = 0; i < eina_list_count(ad->peer_list); i++) {
580                         peer_with_pic_s* pic_item = eina_list_nth(ad->peer_list, i);
581                         tg_peer_info_s* item = pic_item->use_data;
582
583                         if (item->peer_id == sel_item->peer_id) {
584                                 ad->peer_in_cahtting_data = pic_item;
585                                 buddy_id = i;
586                                 break;
587                         }
588                 }
589
590                 if (buddy_id == -1) {
591                         load_peer_data(ad);
592                         for (int i = 0; i < eina_list_count(ad->peer_list); i++) {
593                                 peer_with_pic_s* pic_item = eina_list_nth(ad->peer_list, i);
594                                 tg_peer_info_s* item = pic_item->use_data;
595
596                                 if (item->peer_id == sel_item->peer_id) {
597                                         ad->peer_in_cahtting_data = pic_item;
598                                         buddy_id = i;
599                                         break;
600                                 }
601                         }
602                 }
603
604                 if (buddy_id == -1) {
605                         show_toast(ad, "unable to get buddy info.");
606                         ad->buddy_in_cahtting_data = NULL;
607                         ad->peer_in_cahtting_data = NULL;
608                         return;
609                 }
610
611                 ad->main_item_in_cahtting_data = sel_item;
612 #if 0
613                 if (ad->panel) {
614                         Evas_Object *panel_list = evas_object_data_get(ad->panel, "panel_list");
615                         if (panel_list) {
616                                 evas_object_del(panel_list);
617                         }
618                         evas_object_del(ad->panel);
619                         ad->panel = NULL;
620                 }
621 #endif
622                 delete_floating_button(ad);
623                 launch_messaging_view_cb(ad, buddy_id);
624         }
625 }
626
627 void on_buddy_icon_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
628 {
629         tg_main_list_item_s *item  = data;
630         item->profile_pic = NULL;
631 }
632
633 void on_buddy_date_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
634 {
635         tg_main_list_item_s *item  = data;
636         item->date_lbl = NULL;
637 }
638
639 void on_buddy_main_item_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
640 {
641         tg_main_list_item_s *item  = data;
642         item->main_item_layout = NULL;
643 }
644 #if 0
645 void on_buddy_msg_status_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
646 {
647         tg_main_list_item_s *item  = data;
648         item->msg_status_lbl = NULL;
649 }
650 #endif
651
652 void on_buddy_user_status_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
653 {
654         tg_main_list_item_s *item  = data;
655         item->status_lbl = NULL;
656 }
657
658 static Evas_Object *on_chat_item_load_requested(void *data, Evas_Object *obj, const char *part)
659 {
660         int id = (int) data;
661         appdata_s* ad = evas_object_data_get(obj, "app_data");
662         if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
663                 return NULL;
664         }
665         tg_main_list_item_s* item = eina_list_nth(ad->main_list, id);
666         if (!item) {
667                 return NULL;
668         }
669
670         Eina_Bool is_empty_msg = EINA_FALSE;
671
672         if (item->main_item_layout) {
673                 return item->main_item_layout;
674         }
675
676         char edj_path[PATH_MAX] = {0, };
677         app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
678
679         if (!strcmp(part, "elm.swallow.icon")) {
680                 if (item->profile_pic == NULL) {
681                         Evas_Object *profile_pic = NULL;
682                         if (item->profile_pic_path && strcmp(item->profile_pic_path, "") != 0) {
683                                 profile_pic = elm_image_add(obj);
684                                 evas_object_size_hint_weight_set(profile_pic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
685                                 evas_object_size_hint_align_set(profile_pic, EVAS_HINT_FILL, EVAS_HINT_FILL);
686                                 elm_object_focus_set(profile_pic, EINA_FALSE);
687
688                                 Eina_Bool is_success = elm_image_file_set(profile_pic, item->profile_pic_path, NULL);
689
690                                 if (!is_success) {
691                                         if (item->peer_type == TGL_PEER_USER) {
692                                                 profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_SINGLE_PIC), obj);
693                                                 // send download request again To-Do
694                                         } else if (item->peer_type == TGL_PEER_CHAT) {
695                                                 profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_MULTI_PIC), obj);
696                                                 // send download request again To-Do
697                                         } else {
698
699                                         }
700                                         evas_object_color_set(profile_pic, 45, 165, 224, 255);
701                                 }
702                                 evas_object_show(profile_pic);
703                         } else {
704
705                                 if (item->peer_type == TGL_PEER_USER) {
706                                         profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_SINGLE_PIC), obj);
707                                 } else if (item->peer_type == TGL_PEER_CHAT) {
708                                         profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_MULTI_PIC), obj);
709                                 } else {
710
711                                 }
712                                 evas_object_color_set(profile_pic, 45, 165, 224, 255);
713                         }
714
715                         item->profile_pic = profile_pic;
716                         evas_object_event_callback_add(item->profile_pic, EVAS_CALLBACK_DEL, on_buddy_icon_deleted, item);
717                 }
718
719                 Evas_Object* user_pic_layout = elm_layout_add(ad->nf);
720                 elm_layout_file_set(user_pic_layout, edj_path, "circle_layout");
721                 evas_object_size_hint_weight_set(user_pic_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
722                 evas_object_size_hint_align_set(user_pic_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
723                 evas_object_size_hint_min_set(user_pic_layout, 98, 98);
724                 evas_object_show(user_pic_layout);
725                 elm_object_part_content_set(user_pic_layout, "content", item->profile_pic);
726
727                 return user_pic_layout;
728         } else if (!strcmp(part, "elm.swallow.end")) {
729                 Evas_Object* item_layout = elm_layout_add(ad->nf);
730                 elm_layout_file_set(item_layout, edj_path, "main_list_date");
731
732                 evas_object_size_hint_weight_set(item_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
733                 evas_object_size_hint_align_set(item_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
734                 evas_object_show(item_layout);
735
736                 Eina_Bool is_today = compare_date_with_current_date(item->last_seen_time);
737                 Evas_Object* time_lbl = elm_label_add(ad->nf);
738                 if (is_today) {
739                         //elm_object_text_set(time_lbl, "<font=Tizen:style=Normal color=#000000 align=left><font_size=27>Today</font_size></font>");
740                         // get time to display
741
742                         char *format = NULL;
743                         time_t t = item->last_seen_time;
744                         format = "%I:%M %p";
745                         struct tm lt;
746                         char res[28] = {'\0'};
747                         (void) localtime_r(&t, &lt);
748
749                         if (strftime(res, sizeof(res), format, &lt) == 0) {
750                                 (void) fprintf(stderr,  "strftime(3): cannot format supplied "
751                                                 "date/time into buffer of size %u "
752                                                 "using: '%s'\n",
753                                                 sizeof(res), format);
754                         }
755
756                         char time_str[128] = {0,};
757                         sprintf(time_str, "<font=Tizen:style=Regular color=#666666 align=right><font_size=30>%s</font_size></font>", res);
758
759                         elm_object_text_set(time_lbl, time_str);
760                 } else {
761                         char *format = NULL;
762                         time_t t = item->last_seen_time;
763                         format = "%b %d";
764                         struct tm lt;
765                         char res[28] = {'\0'};
766                         (void) localtime_r(&t, &lt);
767
768                         if (strftime(res, sizeof(res), format, &lt) == 0) {
769                                 (void) fprintf(stderr,  "strftime(3): cannot format supplied "
770                                                 "date/time into buffer of size %u "
771                                                 "using: '%s'\n",
772                                                 sizeof(res), format);
773                         }
774
775                         char time_str[128] = {0, };
776                         sprintf(time_str, "<font=Tizen:style=Regular color=#666666 align=right><font_size=30>%s</font_size></font>", res);
777
778                         elm_object_text_set(time_lbl, time_str);
779                 }
780
781                 evas_object_size_hint_weight_set(time_lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
782                 evas_object_size_hint_align_set(time_lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
783                 evas_object_show(time_lbl);
784
785                 item->date_lbl = time_lbl;
786                 evas_object_event_callback_add(item->date_lbl, EVAS_CALLBACK_DEL, on_buddy_date_deleted, item);
787
788                 elm_object_part_content_set(item_layout, "swallow.date", time_lbl);
789
790                 /*************************** date ***************************************/
791
792                 /*************************** sent message status ***************************************/
793                 if (!is_empty_msg) {
794                         if (item->is_out_msg && !(item->last_msg_service)) {
795
796                                 Evas_Object *status_obj;
797                                 status_obj = elm_icon_add(obj);
798                                 evas_object_size_hint_weight_set(status_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
799                                 evas_object_size_hint_align_set(status_obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
800
801                                 if (item->last_msg_status == TG_MESSAGE_STATE_SENDING) {
802                                         elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_SENDING_ICON), NULL);
803                                 } else if (item->last_msg_status == TG_MESSAGE_STATE_SENT) {
804                                         elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_SENT_ICON), NULL);
805                                 } else if (item->last_msg_status == TG_MESSAGE_STATE_DELIVERED) {
806                                         elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_DELIVERED_ICON), NULL);
807                                 } else if (item->last_msg_status == TG_MESSAGE_STATE_RECEIVED) {
808
809                                 } else if (item->last_msg_status == TG_MESSAGE_STATE_FAILED) {
810                                         elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_FAILED_ICON), NULL);
811                                 } else if (item->last_msg_status == TG_MESSAGE_STATE_READ) {
812                                         elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_READ_ICON), NULL);
813                                 } else if (item->last_msg_status == TG_MESSAGE_STATE_UNKNOWN) {
814
815                                 }
816 #if 0
817                                 Evas_Object *msg_status = elm_layout_add(ad->nf);
818                                 elm_layout_file_set(msg_status, edj_path, "status_bg_layout");
819                                 evas_object_size_hint_weight_set(msg_status, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
820                                 evas_object_size_hint_align_set(msg_status, EVAS_HINT_FILL, EVAS_HINT_FILL);
821                                 evas_object_show(msg_status);
822                                 elm_object_part_content_set(msg_status, "content", status_obj);
823 #endif
824                                 evas_object_color_set(status_obj, 75, 96, 178, 255);
825                                 elm_object_part_content_set(item_layout, "swallow.read_unread_status", status_obj);
826
827                         } else {
828                                 if (item->number_of_unread_msgs > 0) {
829                                         char unread_msgs[256];
830                                         sprintf(unread_msgs, "%d", item->number_of_unread_msgs);
831
832                                         Evas_Object* msg_status = elm_layout_add(ad->nf);
833                                         elm_layout_file_set(msg_status, edj_path, "count_bg_layout");
834                                         evas_object_size_hint_weight_set(msg_status, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
835                                         evas_object_size_hint_align_set(msg_status, EVAS_HINT_FILL, EVAS_HINT_FILL);
836                                         evas_object_show(msg_status);
837                                         elm_object_part_text_set(msg_status, "content", unread_msgs);
838                                         elm_object_part_content_set(item_layout, "swallow.unread_count", msg_status);
839                                 }
840                         }
841                 }
842
843                 return item_layout;
844         }
845         return NULL;
846 }
847
848 static char* on_chat_text_load_requested(void *data, Evas_Object *obj, const char *part)
849 {
850         int id = (int) data;
851         appdata_s* ad = evas_object_data_get(obj, "app_data");
852         if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
853                 return NULL;
854         }
855         tg_main_list_item_s* item = eina_list_nth(ad->main_list, id);
856         if (!item) {
857                 return NULL;
858         }
859
860         if (!strcmp(part, "elm.text")) {
861                 char* user_name = str_replace(item->buddy_display_name, "_null_", "");
862                 char buf[512] = {'\0'};
863                 snprintf(buf, 512, "<font=Tizen:style=Large color=#000000 align=left><font_size=40>%s</font_size></font>", user_name);
864                 free(user_name);
865
866                 return strdup(buf);
867         } else if (!strcmp(part, "elm.text.sub")) {
868                 char* org_msg = NULL;
869                 if (item->last_message) {
870                         org_msg = str_replace(item->last_message, "<br/>", " ");
871                 } else {
872                         org_msg = strdup("");
873                 }
874
875                 char status_buf[126] = {'\0'};
876                 if (item->last_msg_service) {
877                         snprintf(status_buf, 125, "<font=Tizen:style=Bold color=#158CB0 align=left><font_size=28>%s</font_size></font>", org_msg);
878                 } else {
879                         snprintf(status_buf, 125, "<font=Tizen:style=Bold color=#A4A4A4 align=left><font_size=28>%s</font_size></font>", org_msg);
880                 }
881                 free(org_msg);
882
883                 return strdup(status_buf);
884         }
885         return NULL;
886 }
887
888 void reload_main_list_view(appdata_s* ad)
889 {
890         Evas_Object *buddy_list = evas_object_data_get(ad->nf, "buddy_list");
891         if (buddy_list) {
892                 elm_genlist_clear(buddy_list);
893
894                 int i = 0;
895                 static Elm_Genlist_Item_Class itc;
896                 itc.item_style = "type1";
897                 itc.func.text_get = on_chat_text_load_requested;
898                 itc.func.content_get = on_chat_item_load_requested;
899                 itc.func.state_get = NULL;
900                 itc.func.del = NULL;
901
902                 int size = eina_list_count(ad->main_list);
903                 if (size > 0) {
904                         for (i = 0; i < size; i++) {
905                                 elm_genlist_item_append(buddy_list, &itc, (void*) i, NULL, ELM_GENLIST_ITEM_NONE, on_main_chat_item_selected, (void*) i);
906                         }
907                 } else {
908                         i = 1;
909                         elm_genlist_item_append(buddy_list, &itc, (void*) i, NULL, ELM_GENLIST_ITEM_NONE, on_main_chat_item_selected, (void*) i);
910                 }
911                 evas_object_show(buddy_list);
912         }
913 }
914
915
916 void refresh_main_list_view(appdata_s* ad, Eina_Bool is_new_item)
917 {
918         Evas_Object *buddy_list = evas_object_data_get(ad->nf, "buddy_list");
919         if (buddy_list) {
920                 if (is_new_item) {
921                         static Elm_Genlist_Item_Class itc;
922                         itc.item_style = "type1";
923                         itc.func.text_get = on_chat_text_load_requested;
924                         itc.func.content_get = on_chat_item_load_requested;
925                         itc.func.state_get = NULL;
926                         itc.func.del = NULL;
927
928                         int size = eina_list_count(ad->main_list);
929                         int i = size - 1;
930                         elm_genlist_item_append(buddy_list, &itc, (void*) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
931                 } else {
932                         elm_genlist_clear(buddy_list);
933
934                         static Elm_Genlist_Item_Class itc;
935                         itc.item_style = "type1";
936                         itc.func.text_get = on_chat_text_load_requested;
937                         itc.func.content_get = on_chat_item_load_requested;
938                         itc.func.state_get = NULL;
939                         itc.func.del = NULL;
940
941                         int i = 0;
942                         if (ad->main_list) {
943                                 int size = eina_list_count(ad->main_list);
944                                 if (size > 0) {
945                                         for (i = 0; i < size; i++) {
946                                                 elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
947                                         }
948                                 } else {
949                                         i = 1;
950                                         elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
951                                 }
952                         }
953                 }
954                 elm_genlist_realized_items_update(buddy_list);
955         } else {
956
957                 int size = eina_list_count(ad->main_list);
958                 if (size > 0) {
959
960                         Evas_Object* layout = evas_object_data_get(ad->nf, "no_chat_image");
961                         if (layout) {
962                                 elm_object_signal_emit(layout, "no_chat_hide", "no_chat_text");
963                         }
964
965                         int i;
966                         static Elm_Genlist_Item_Class itc;
967                         Evas_Object *buddy_list = elm_genlist_add(ad->nf);
968                         elm_genlist_mode_set(buddy_list, ELM_LIST_COMPRESS);
969                         evas_object_size_hint_weight_set(buddy_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
970                         evas_object_size_hint_align_set(buddy_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
971                         evas_object_data_set(buddy_list, "app_data", ad);
972
973                         itc.item_style = "type1";
974                         itc.func.text_get = on_chat_text_load_requested;
975                         itc.func.content_get = on_chat_item_load_requested;
976                         itc.func.state_get = NULL;
977                         itc.func.del = NULL;
978
979                         int size = eina_list_count(ad->main_list);
980                         if (size > 0) {
981                                 for (i = 0; i < size; i++) {
982                                         elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
983                                 }
984                         } else {
985                                 i = 1;
986                                 elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
987                         }
988                         evas_object_show(buddy_list);
989                         evas_object_data_set(ad->nf, "buddy_list", buddy_list);
990                 }
991         }
992 }
993
994 static void on_user_list_search_clicked(void *data, Evas_Object *obj, void *event_info)
995 {
996         appdata_s* ad = data;
997 #if 0
998         if (ad->panel) {
999                 Evas_Object *panel_list = evas_object_data_get(ad->panel, "panel_list");
1000                 if (panel_list) {
1001                         evas_object_del(panel_list);
1002                 }
1003                 evas_object_del(ad->panel);
1004                 ad->panel = NULL;
1005         }
1006 #endif
1007         delete_floating_button(ad);
1008         launch_start_peer_search_view(ad);
1009 }
1010
1011 static void on_search_icon_pressed(void *data, Evas_Object *obj, void *event_info)
1012 {
1013         elm_image_file_set(data, ui_utils_get_resource(TG_SEARCH_PRESSED_ICON), NULL);
1014 }
1015
1016 static void on_search_icon_unpressed(void *data, Evas_Object *obj, void *event_info)
1017 {
1018         elm_image_file_set(data, ui_utils_get_resource(TG_SEARCH_ICON), NULL);
1019 }
1020
1021 static void _more_popup_rotate(void *data, Evas_Object *obj, void *event_info)
1022 {
1023         int pos;
1024         Evas_Coord w, h;
1025         appdata_s *ad = data;
1026
1027         elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
1028         pos = elm_win_rotation_get(ad->win);
1029
1030         switch (pos) {
1031         case 90:
1032         case 270:
1033                 evas_object_move(ad->menu_popup, 0, w);
1034                 break;
1035         case 180:
1036         default:
1037                 evas_object_move(ad->menu_popup, 0, h);
1038                 break;
1039     }
1040 }
1041
1042 static void _ctxpopup_dismiss_cb(void *data, Evas_Object *obj, void *event_info)
1043 {
1044         appdata_s *ad = data;
1045         evas_object_del(ad->menu_popup);
1046         ad->menu_popup = NULL;
1047 }
1048
1049 static void _ctxpopup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
1050 {
1051         appdata_s *ad = data;
1052
1053         if (!ad) {
1054                         LOGE("ad is NULL");
1055                         return;
1056         }
1057
1058         if (!ad->win) {
1059                 LOGE("window is NULL");
1060                 return;
1061         }
1062         evas_object_smart_callback_del(ad->win, "rotation,changed", _more_popup_rotate);
1063         if (ad->menu_popup) {
1064                 evas_object_smart_callback_del(ad->menu_popup, "dismissed", _ctxpopup_dismiss_cb);
1065                 evas_object_del(ad->menu_popup);
1066                 ad->menu_popup = NULL;
1067         }
1068 }
1069
1070 static void ctxpopup_delete_select_cb(void *data, Evas_Object *obj, void *event_info)
1071 {
1072         appdata_s *ad = data;
1073         if (!ad) {
1074                 LOGE("ad is NULL");
1075                 return;
1076         }
1077
1078         _ctxpopup_dismiss_cb(ad, NULL, NULL);
1079
1080         launch_main_item_deletion_view_cb(ad);
1081 }
1082
1083 static void ctxpopup_search_select_cb(void *data, Evas_Object *obj, void *event_info)
1084 {
1085         appdata_s *ad = data;
1086         if (!ad) {
1087                 LOGE("ad is NULL");
1088                 return;
1089         }
1090         delete_floating_button(ad);
1091         _ctxpopup_dismiss_cb(ad, NULL, NULL);
1092
1093         /* please input here when search menu is clicked */
1094         launch_search_message_view(ad);
1095 }
1096
1097 static void ctxpopup_contact_select_cb(void *data, Evas_Object *obj, void *event_info)
1098 {
1099         appdata_s *ad = data;
1100         if (!ad) {
1101                 LOGE("ad is NULL");
1102                 return;
1103         }
1104
1105         _ctxpopup_dismiss_cb(ad, NULL, NULL);
1106     on_floating_icon_clicked(data, obj, event_info);
1107         /* please input here when contact menu is clicked */
1108 }
1109
1110 static void ctxpopup_settings_select_cb(void *data, Evas_Object *obj, void *event_info)
1111 {
1112         appdata_s *ad = data;
1113         if (!ad) {
1114                 LOGE("ad is NULL");
1115                 return;
1116         }
1117
1118         _ctxpopup_dismiss_cb(ad, NULL, NULL);
1119         delete_floating_button(ad);
1120         launch_settings_screen(ad);
1121 }
1122
1123 static void _create_more_popup(void *data, Evas_Object *obj, void *event_info)
1124 {
1125         Elm_Object_Item *it;
1126         Evas_Object *ctxpopup;
1127         appdata_s *ad = data;
1128
1129         if (!ad) {
1130                         LOGE("ad is NULL");
1131                         return;
1132         }
1133
1134         if (ad->current_app_state != TG_USER_MAIN_VIEW_STATE) {
1135                 return;
1136         }
1137
1138         ctxpopup = elm_ctxpopup_add(ad->nf);
1139         elm_object_style_set(ctxpopup, "more/default");
1140         elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
1141         eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_BACK, eext_ctxpopup_back_cb, NULL);
1142         eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_MORE, eext_ctxpopup_back_cb, NULL);
1143         evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, _ctxpopup_del_cb, ad);
1144
1145         evas_object_smart_callback_add(ctxpopup, "dismissed", _ctxpopup_dismiss_cb, ad);
1146         evas_object_smart_callback_add(ad->win, "rotation,changed", _more_popup_rotate, ad);
1147
1148         it = elm_ctxpopup_item_append(ctxpopup, i18n_get_text("IDS_TGRAM_OPT_DELETE"), NULL, ctxpopup_delete_select_cb, ad);
1149         it = elm_ctxpopup_item_append(ctxpopup, i18n_get_text("IDS_TGRAM_OPT_SEARCH"), NULL, ctxpopup_search_select_cb, ad);
1150         it = elm_ctxpopup_item_append(ctxpopup, i18n_get_text("IDS_TGRAM_OPT_CONTACTS"), NULL, ctxpopup_contact_select_cb, ad);
1151         it = elm_ctxpopup_item_append(ctxpopup, i18n_get_text("IDS_TGRAM_OPT_SETTINGS"), NULL, ctxpopup_settings_select_cb, ad);
1152         //elm_object_item_domain_text_translatable_set(it, SETTING_PACKAGE, EINA_TRUE);
1153         elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN);
1154
1155         if (ad->menu_popup) {
1156                 evas_object_del(ad->menu_popup);
1157         }
1158
1159         ad->menu_popup = ctxpopup;
1160
1161         _more_popup_rotate(ad, NULL, NULL);
1162
1163         evas_object_show(ctxpopup);
1164
1165 }
1166
1167 void launch_user_main_view_cb(appdata_s* ad)
1168 {
1169         if (!ad)
1170                 return;
1171
1172 #if 0
1173         if (ad->panel) {
1174                 Evas_Object *panel_list = evas_object_data_get(ad->panel, "panel_list");
1175                 if (panel_list) {
1176                         evas_object_del(panel_list);
1177                 }
1178                 evas_object_del(ad->panel);
1179                 ad->panel = NULL;
1180         }
1181 #endif
1182         ad->current_app_state = TG_USER_MAIN_VIEW_STATE;
1183         ad->is_tg_initilized = EINA_TRUE;
1184         char edj_path[PATH_MAX] = {0, };
1185         app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
1186         send_request_for_server_connection_status(ad, ad->service_client);
1187         send_request_for_delete_notifications(ad, ad->service_client);
1188
1189         Evas_Object* layout = elm_layout_add(ad->nf);
1190         elm_layout_file_set(layout, edj_path, "user_main_screen_new");
1191         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1192         evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1193         evas_object_show(layout);
1194
1195         Evas_Object *buddy_list = NULL;
1196
1197         if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
1198                 elm_object_part_text_set(layout, "no_chat_text", i18n_get_text("IDS_TGRAM_NPBODY_NO_CHATS"));
1199                 elm_object_part_text_set(layout, "explain_text", i18n_get_text("IDS_TGRAM_BODY_TO_START_A_NEW_CONVERSATION_TAP_THE_CREATE_NEW_GROUP_BUTTON_IN_THE_BOTTOM_RIGHT_OR_PRESS_THE_MENU_KEY_FOR_MORE_OPTIONS"));
1200                 elm_object_signal_emit(layout, "no_chat_show", "no_chat_text");
1201
1202                 evas_object_data_set(ad->nf, "no_chat_image", layout);
1203         } else {
1204                 int i;
1205                 static Elm_Genlist_Item_Class itc;
1206                 buddy_list = elm_genlist_add(ad->nf);
1207                 elm_genlist_mode_set(buddy_list, ELM_LIST_COMPRESS);
1208                 evas_object_size_hint_weight_set(buddy_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1209                 evas_object_size_hint_align_set(buddy_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
1210                 evas_object_data_set(buddy_list, "app_data", ad);
1211                 elm_genlist_homogeneous_set(buddy_list, EINA_TRUE);
1212
1213                 itc.item_style = "type1";
1214                 itc.func.text_get = on_chat_text_load_requested;
1215                 itc.func.content_get = on_chat_item_load_requested;
1216                 itc.func.state_get = NULL;
1217                 itc.func.del = NULL;
1218
1219                 int size = eina_list_count(ad->main_list);
1220                 if (size > 0) {
1221                         for (i = 0; i < size; i++) {
1222                                 elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
1223                         }
1224                 } else {
1225                         i = 1;
1226                         elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
1227                 }
1228                 evas_object_show(buddy_list);
1229                 evas_object_data_set(ad->nf, "buddy_list", buddy_list);
1230
1231                 evas_object_smart_callback_add(buddy_list, "longpressed", on_buddy_list_longpress, ad);
1232                 evas_object_smart_callback_add(buddy_list, "selected", on_main_chat_item_selected, ad);
1233                 elm_object_part_content_set(layout, "main_box", buddy_list);
1234         }
1235
1236         create_floating_button(ad);
1237 #if 0
1238         Evas_Object* search_layout = elm_layout_add(ad->nf);
1239         elm_layout_file_set(search_layout, edj_path, "title_search_layout");
1240         evas_object_size_hint_weight_set(search_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1241         evas_object_size_hint_align_set(search_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1242         evas_object_show(search_layout);
1243
1244         Evas_Object *search_btn = elm_button_add(layout);
1245         elm_object_style_set(search_btn, "transparent");
1246         evas_object_size_hint_align_set(search_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
1247         evas_object_size_hint_weight_set(search_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1248
1249
1250     Evas_Object *search_icon = elm_image_add(layout);
1251     elm_image_file_set(search_icon, ui_utils_get_resource(TG_SEARCH_ICON), NULL);
1252     evas_object_show(search_icon);
1253
1254     elm_object_content_set(search_btn, search_icon);
1255
1256     elm_object_part_content_set(search_layout, "search_box", search_btn);
1257     evas_object_smart_callback_add(search_btn, "clicked", on_user_list_search_clicked, ad);
1258     evas_object_smart_callback_add(search_btn, "pressed", on_search_icon_pressed, search_icon);
1259     evas_object_smart_callback_add(search_btn, "unpressed", on_search_icon_unpressed, search_icon);
1260 #endif
1261
1262     ad->main_item = elm_naviframe_item_push(ad->nf, i18n_get_text("IDS_TGRAM_HEADER_TELEGRAM"), NULL, NULL, layout, NULL);
1263
1264 #if 0
1265     Elm_Object_Item* navi_item = elm_naviframe_item_push(ad->nf, "<font=Tizen:style=Bold color=#ffffff align=center><font_size=48>Telegram</font_size></font>", NULL, NULL, scroller, NULL);
1266         elm_object_item_part_content_set(navi_item, "title_right_btn", search_layout);
1267         /* left panel toggle button */
1268         Evas_Object *panel_btn = create_button(ad->nf, "naviframe/drawers", NULL);
1269         evas_object_smart_callback_add(panel_btn, "clicked", on_side_panel_requested, ad);
1270         elm_object_item_part_content_set(navi_item, "title_left_btn", panel_btn);
1271 #endif
1272
1273 //      eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_MORE, on_messaging_menu_button_clicked, ad);
1274
1275         eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_MORE, _create_more_popup, ad);
1276 }
1277
1278