[Telegram] Create the search the chat list 05/50105/1
authormoon87.park <moon87.park@samsung.com>
Fri, 23 Oct 2015 12:42:36 +0000 (21:42 +0900)
committermoon87.park <moon87.park@samsung.com>
Fri, 23 Oct 2015 12:42:36 +0000 (21:42 +0900)
Change-Id: I41b9cb03452a4313c42a55a2f855e021234524f7

TelegramTizen/inc/tg_search_message_view.h [new file with mode: 0644]
TelegramTizen/src/contact_selection_view.c
TelegramTizen/src/tg_search_message_view.c [new file with mode: 0644]
TelegramTizen/src/tg_search_peer_view.c
TelegramTizen/src/tg_user_main_view.c

diff --git a/TelegramTizen/inc/tg_search_message_view.h b/TelegramTizen/inc/tg_search_message_view.h
new file mode 100644 (file)
index 0000000..4c75d67
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * tg_search_message_view.h
+ *
+ *  Created on: Oct 23, 2015
+ *      Author: moonkyoung
+ */
+
+#ifndef TG_SEARCH_MESSAGE_VIEW_H_
+#define TG_SEARCH_MESSAGE_VIEW_H_
+
+#include "tg_common.h"
+
+extern void launch_search_message_view(appdata_s* ad);
+
+
+#endif /* TG_SEARCH_MESSAGE_VIEW_H_ */
index 0ca9a4e..51112f7 100644 (file)
@@ -651,7 +651,7 @@ void launch_contact_selction_view(void *data)
        elm_layout_theme_set(nocontents, "layout", "nocontents", "default");
        evas_object_size_hint_weight_set(nocontents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(nocontents, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_object_part_text_set(nocontents, "elm.text", "No Items");
+       elm_object_part_text_set(nocontents, "elm.text", _("IDS_TGRAM_NPBODY_NO_RESULTS_FOUND_ABB"));
        evas_object_data_set(ad->nf, "no_contents_layout", nocontents);
 
        evas_object_data_set(ad->nf, "fs_layout", fs_layout);
diff --git a/TelegramTizen/src/tg_search_message_view.c b/TelegramTizen/src/tg_search_message_view.c
new file mode 100644 (file)
index 0000000..db681ce
--- /dev/null
@@ -0,0 +1,595 @@
+/*
+ * tg_search_message_view.c
+ *
+ *  Created on: Oct 23, 2015
+ *      Author: moonkyoung
+ */
+
+#include "tg_search_message_view.h"
+#include "tg_user_main_view.h"
+#include "tg_start_messaging_view.h"
+#include "tg_messaging_view.h"
+#include "contact_selection_view.h"
+#include "tg_search_peer_view.h"
+#include "tg_settings_view.h"
+#include "tg_db_manager.h"
+#include "server_requests.h"
+#include "tg_db_wrapper.h"
+#include "ucol.h"
+
+static Evas_Object* create_image_object_from_file(const char *icon_name, Evas_Object *parent)
+{
+       Evas_Object *icon = elm_image_add(parent);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_image_file_set(icon, icon_name, NULL);
+       evas_object_show(icon);
+       return icon;
+}
+
+static void on_buddy_user_name_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
+{
+       tg_main_list_item_s *item  = data;
+       item->user_name_lbl = NULL;
+}
+
+static void on_buddy_user_status_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
+{
+       tg_main_list_item_s *item  = data;
+       item->status_lbl = NULL;
+}
+
+static void on_buddy_date_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
+{
+       tg_main_list_item_s *item  = data;
+       item->date_lbl = NULL;
+}
+
+static void on_main_chat_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = event_info;
+       elm_genlist_item_selected_set(it, EINA_FALSE);
+
+       appdata_s* ad = evas_object_data_get(obj, "app_data");
+       Eina_List *list = evas_object_data_get(obj, "result_list");
+       int item_id = (int) data;
+       //int item_id = (int)elm_object_item_data_get(it);
+
+       tg_main_list_item_s* sel_item = eina_list_nth(list, item_id);
+
+       ad->buddy_in_cahtting_data = NULL;
+       ad->peer_in_cahtting_data = NULL;
+       int buddy_id = -1;
+       if (sel_item) {
+
+               if (sel_item->peer_type == TGL_PEER_CHAT) {
+
+                       tg_chat_info_s* chat_info = get_chat_info(sel_item->peer_id);
+                       if (!chat_info) {
+                               // request chat info
+                               //show_toast(ad, "Loading chat info. Please wait.");
+                               show_loading_popup(ad);
+                               send_update_chat_request(ad->service_client, sel_item->peer_id);
+                               return;
+                       }
+               }
+
+               if (sel_item->peer_type == TGL_PEER_USER) {
+                       for (int i = 0; i < eina_list_count(ad->buddy_list); i++) {
+                               user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i);
+                               user_data_s* user_data = item->use_data;
+
+                               if (user_data->user_id.id == sel_item->peer_id) {
+                                       ad->buddy_in_cahtting_data = item;
+                                       break;
+                               }
+                       }
+
+                       if (ad->buddy_in_cahtting_data == NULL) {
+                               for (int i = 0; i < eina_list_count(ad->unknown_buddy_list); i++) {
+                                       user_data_with_pic_s *item = eina_list_nth(ad->unknown_buddy_list, i);
+                                       user_data_s* user_data = item->use_data;
+
+                                       if (user_data->user_id.id == sel_item->peer_id) {
+                                               ad->buddy_in_cahtting_data = item;
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               for (int i = 0; i < eina_list_count(ad->peer_list); i++) {
+                       peer_with_pic_s* pic_item = eina_list_nth(ad->peer_list, i);
+                       tg_peer_info_s* item = pic_item->use_data;
+
+                       if (item->peer_id == sel_item->peer_id) {
+                               ad->peer_in_cahtting_data = pic_item;
+                               buddy_id = i;
+                               break;
+                       }
+               }
+               ad->main_item_in_cahtting_data = sel_item;
+
+               elm_naviframe_item_pop(ad->nf);
+               delete_floating_button(ad);
+               launch_messaging_view_cb(ad, buddy_id);
+
+       }
+}
+
+static Evas_Object* on_chat_item_load_requested(void *data, Evas_Object *obj, const char *part)
+{
+       int id = (int) data;
+       appdata_s* ad = evas_object_data_get(obj, "app_data");
+       Eina_List *list = evas_object_data_get(obj, "result_list");
+
+       if (list == NULL || eina_list_count(list) <= 0) {
+               return NULL;
+       }
+       tg_main_list_item_s* item = eina_list_nth(list, id);
+       if (!item) {
+               return NULL;
+       }
+
+       Eina_Bool is_empty_msg = EINA_FALSE;
+
+       if (!strcmp(part, "elm.swallow.content")) {
+
+               char edj_path[PATH_MAX] = {0, };
+               app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
+               Evas_Object* layout = elm_layout_add(ad->nf);
+               elm_layout_file_set(layout, edj_path, "main_list_custom_item");
+               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(layout);
+               Evas_Object* item_layout = elm_layout_add(ad->nf);
+               if (ad->target_direction == TELEGRAM_TARGET_DIRECTION_LANDSCAPE_INVERSE || ad->target_direction == TELEGRAM_TARGET_DIRECTION_LANDSCAPE) {
+                       if ((item->last_message == NULL) || (strlen(item->last_message) <= 0) || (strcmp(item->last_message, " ") == 0) || (item->number_of_unread_msgs == 0 &&(!item->is_out_msg || !item->last_msg_service))) {
+                               elm_layout_file_set(item_layout, edj_path, "main_list_custom_no_msg_item_land");
+                               is_empty_msg = EINA_TRUE;
+                       } else {
+                               if (item->is_out_msg && !(item->last_msg_service)) {
+                                       elm_layout_file_set(item_layout, edj_path, "main_list_custom_sent_item_land");
+                               } else {
+                                       elm_layout_file_set(item_layout, edj_path, "main_list_custom_received_item_land");
+                               }
+                       }
+               } else {
+                       if ((item->last_message == NULL) || (strlen(item->last_message) <= 0) || (strcmp(item->last_message, " ") == 0) || (item->number_of_unread_msgs == 0 &&(!item->is_out_msg || !item->last_msg_service))) {
+                               elm_layout_file_set(item_layout, edj_path, "main_list_custom_no_msg_item");
+                               is_empty_msg = EINA_TRUE;
+                       } else {
+                               if (item->is_out_msg && !(item->last_msg_service)) {
+                                       elm_layout_file_set(item_layout, edj_path, "main_list_custom_sent_item");
+                               } else {
+                                       elm_layout_file_set(item_layout, edj_path, "main_list_custom_received_item");
+                               }
+                       }
+               }
+               evas_object_size_hint_weight_set(item_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(item_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(item_layout);
+               elm_object_part_content_set(layout, "swallow.item", item_layout);
+
+               /*************************** profile pic ***************************************/
+               Evas_Object *profile_pic = NULL;
+               if (item->profile_pic_path && strcmp(item->profile_pic_path, "") != 0) {
+                       profile_pic = elm_image_add(obj);
+                       evas_object_size_hint_weight_set(profile_pic, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(profile_pic, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       elm_object_focus_set(profile_pic, EINA_FALSE);
+
+                       Eina_Bool is_success = elm_image_file_set(profile_pic, item->profile_pic_path, NULL);
+
+                       if (!is_success) {
+                               if (item->peer_type == TGL_PEER_USER) {
+                                       profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_SINGLE_PIC), obj);
+                                       // send download request again To-Do
+                               } else if (item->peer_type == TGL_PEER_CHAT) {
+                                       profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_MULTI_PIC), obj);
+                                       // send download request again To-Do
+                               } else {
+                               }
+                               evas_object_color_set(profile_pic, 45, 165, 224, 255);
+                       }
+                       evas_object_show(profile_pic);
+               } else {
+
+                       if (item->peer_type == TGL_PEER_USER) {
+                               profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_SINGLE_PIC), obj);
+                       } else if (item->peer_type == TGL_PEER_CHAT) {
+                               profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_LIST_THUMB_MULTI_PIC), obj);
+                       } else {
+
+                       }
+                       evas_object_color_set(profile_pic, 45, 165, 224, 255);
+               }
+
+               Evas_Object* user_pic_layout = elm_layout_add(ad->nf);
+               elm_layout_file_set(user_pic_layout, edj_path, "circle_layout");
+               evas_object_size_hint_weight_set(user_pic_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(user_pic_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(user_pic_layout);
+               elm_object_part_content_set(user_pic_layout, "content", profile_pic);
+
+               elm_object_part_content_set(item_layout, "swallow.icon", user_pic_layout);
+
+               /*************************** profile pic ***************************************/
+
+               /*************************** user name ***************************************/
+
+               char* user_name = replace(item->peer_print_name, '_', "");
+               char buf[512] = {'\0'};
+               snprintf(buf, 512, "<font=Tizen:style=Bold color=#000000 align=left><font_size=35>%s</font_size></font>", user_name);
+               free(user_name);
+
+               Evas_Object*  name_lbl = elm_label_add(ad->nf);
+               elm_object_text_set(name_lbl, buf);
+               evas_object_size_hint_weight_set(name_lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(name_lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(name_lbl);
+
+               elm_object_part_content_set(item_layout, "swallow.title", name_lbl);
+
+               item->user_name_lbl = name_lbl;
+               evas_object_event_callback_add(item->user_name_lbl, EVAS_CALLBACK_DEL, on_buddy_user_name_deleted, item);
+
+               /*************************** user name ***************************************/
+
+               /*************************** last message ***************************************/
+
+               char* org_msg = NULL;
+               if (item->last_message) {
+                       org_msg = item->last_message;
+               } else {
+                       org_msg = "";
+               }
+
+               int len_org_str = strlen(org_msg);
+
+               char res[30] = {'\0'};
+               char status_buf[126] = {'\0'};
+               if(len_org_str > 30) {
+                       strncpy(res, org_msg, 29);
+                       if(item->last_msg_service) {
+                               sprintf(status_buf,"<font=Tizen:style=Bold color=#158CB0 align=left><font_size=28>%s</font_size></font>", res);
+                       } else {
+                               sprintf(status_buf,"<font=Tizen:style=Bold color=#A4A4A4 align=left><font_size=28>%s</font_size></font>", res);
+                       }
+               } else {
+                       if(item->last_msg_service) {
+                               sprintf(status_buf, "<font=Tizen:style=Bold color=#158CB0 align=left><font_size=28>%s</font_size></font>", org_msg);
+                       } else {
+                               sprintf(status_buf, "<font=Tizen:style=Bold color=#A4A4A4 align=left><font_size=28>%s</font_size></font>", org_msg);
+                       }
+               }
+
+               Evas_Object*  status_lbl = elm_label_add(ad->nf);
+               elm_object_text_set(status_lbl, status_buf);
+               evas_object_size_hint_weight_set(status_lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(status_lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(status_lbl);
+
+               item->status_lbl = status_lbl;
+               evas_object_event_callback_add(item->status_lbl, EVAS_CALLBACK_DEL, on_buddy_user_status_deleted, item);
+
+               elm_object_part_content_set(item_layout, "swallow.last_message", item->status_lbl);
+
+               /*************************** last message ***************************************/
+
+               /*************************** date ***************************************/
+               Eina_Bool is_today = compare_date_with_current_date(item->last_seen_time);
+               Evas_Object* time_lbl = elm_label_add(ad->nf);
+               if (is_today) {
+                       //elm_object_text_set(time_lbl, "<font=Tizen:style=Italic color=#000000 align=left><font_size=27>Today</font_size></font>");
+                       // get time to display
+
+                       char *format = NULL;
+                       time_t t = item->last_seen_time;
+                       format = "%I:%M %p";
+                       struct tm lt;
+                       char res[28] = {'\0'};
+                       (void) localtime_r(&t, &lt);
+
+                       if (strftime(res, sizeof(res), format, &lt) == 0) {
+                               (void) fprintf(stderr,  "strftime(3): cannot format supplied "
+                                               "date/time into buffer of size %u "
+                                               "using: '%s'\n",
+                                               sizeof(res), format);
+                       }
+
+                       char time_str[128]={0,};
+                       sprintf(time_str, "<font=Tizen:style=Italic color=#000000 align=right><font_size=27>%s</font_size></font>", res);
+
+                       elm_object_text_set(time_lbl,time_str);
+
+
+               } else {
+                       char *format = NULL;
+                       time_t t = item->last_seen_time;
+                       format = "%b %d";
+                       struct tm lt;
+                       char res[28] = {'\0'};
+                       (void) localtime_r(&t, &lt);
+
+                       if (strftime(res, sizeof(res), format, &lt) == 0) {
+                               (void) fprintf(stderr,  "strftime(3): cannot format supplied "
+                                               "date/time into buffer of size %u "
+                                               "using: '%s'\n",
+                                               sizeof(res), format);
+                       }
+
+                       char time_str[128]={0,};
+                       sprintf(time_str, "<font=Tizen:style=Italic color=#000000 align=right><font_size=27>%s</font_size></font>", res);
+
+                       elm_object_text_set(time_lbl,time_str);
+               }
+
+               evas_object_size_hint_weight_set(time_lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(time_lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(time_lbl);
+
+               item->date_lbl = time_lbl;
+               evas_object_event_callback_add(item->date_lbl, EVAS_CALLBACK_DEL, on_buddy_date_deleted, item);
+
+               elm_object_part_content_set(item_layout, "swallow.date", time_lbl);
+
+               /*************************** date ***************************************/
+
+               /*************************** sent message status ***************************************/
+               if (!is_empty_msg) {
+                       if (item->is_out_msg && !(item->last_msg_service)) {
+
+                               Evas_Object *status_obj;
+                               status_obj = elm_icon_add(obj);
+                               evas_object_size_hint_weight_set(status_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                               evas_object_size_hint_align_set(status_obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+                               if(item->last_msg_status == TG_MESSAGE_STATE_SENDING) {
+                                       elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_SENDING_ICON), NULL);
+                               } else if(item->last_msg_status == TG_MESSAGE_STATE_SENT) {
+                                       elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_SENT_ICON), NULL);
+                               } else if(item->last_msg_status == TG_MESSAGE_STATE_DELIVERED) {
+                                       elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_DELIVERED_ICON), NULL);
+                               } else if(item->last_msg_status == TG_MESSAGE_STATE_RECEIVED) {
+
+                               } else if(item->last_msg_status == TG_MESSAGE_STATE_FAILED) {
+                                       elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_FAILED_ICON), NULL);
+                               } else if(item->last_msg_status == TG_MESSAGE_STATE_READ) {
+                                       elm_image_file_set(status_obj, ui_utils_get_resource(MESSAGE_READ_ICON), NULL);
+                               } else if(item->last_msg_status == TG_MESSAGE_STATE_UNKNOWN) {
+
+                               }
+#if 0
+                               Evas_Object *msg_status = elm_layout_add(ad->nf);
+                               elm_layout_file_set(msg_status, edj_path, "status_bg_layout");
+                               evas_object_size_hint_weight_set(msg_status, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                               evas_object_size_hint_align_set(msg_status, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                               evas_object_show(msg_status);
+                               elm_object_part_content_set(msg_status, "content", status_obj);
+#endif
+                               evas_object_color_set(status_obj, 75, 96,178, 255);
+                               elm_object_part_content_set(item_layout, "swallow.read_unread_status", status_obj);
+
+                       } else {
+                               if (item->number_of_unread_msgs > 0) {
+                                       Evas_Object* num_lbl = elm_label_add(ad->nf);
+                                       elm_object_style_set(num_lbl, "transparent");
+                                       char unread_msgs[256];
+                                       sprintf(unread_msgs, "<font=Tizen:style=Bold color=#ffffff align=center><font_size=25>%d</font_size></font>", item->number_of_unread_msgs);
+                                       elm_object_text_set(num_lbl, unread_msgs);
+                                       evas_object_size_hint_weight_set(num_lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                                       evas_object_size_hint_align_set(num_lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                                       evas_object_show(num_lbl);
+
+                                       Evas_Object* msg_status = elm_layout_add(ad->nf);
+                                       elm_layout_file_set(msg_status, edj_path, "count_bg_layout");
+                                       evas_object_size_hint_weight_set(msg_status, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                                       evas_object_size_hint_align_set(msg_status, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                                       evas_object_show(msg_status);
+                                       elm_object_part_content_set(msg_status, "content", num_lbl);
+                                       //evas_object_color_set(num_lbl, 37, 137, 186, 255 * 0.8);
+                                       elm_object_part_content_set(item_layout, "swallow.unread_count", msg_status);
+                               }
+                       }
+               }
+               return layout;
+       }
+       return NULL;
+}
+
+static void _append_peer_item(Evas_Object *genlist, appdata_s *ad, Eina_List* item_list)
+{
+       int i;
+       static Elm_Genlist_Item_Class itc;
+       Elm_Object_Item* item = NULL;
+
+       itc.item_style = "full";
+       itc.func.text_get = NULL;
+       itc.func.content_get = on_chat_item_load_requested;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+
+       int count = eina_list_count(item_list);
+
+       evas_object_data_set(genlist, "result_list", item_list);
+
+       if(count > 0) {
+               for (i = 0; i < count; i++) {
+                       item = elm_genlist_item_append(genlist, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_main_chat_item_selected, (void*) i);
+               }
+       }
+}
+
+static void _on_search_entry_changed(void *data, Evas_Object *obj, void *event_info)
+{
+       appdata_s* ad = data;
+       char* entry_text = NULL;
+
+       Evas_Object *peer_list = evas_object_data_get(ad->nf, "peer_list");
+       Evas_Object *main_layout = evas_object_data_get(ad->nf, "main_layout");
+
+       tg_main_list_item_s* item;
+
+       if (!peer_list) {
+               DBG("peer_list is null");
+               return;
+       }
+
+       elm_genlist_clear(peer_list);
+
+       entry_text = trim(elm_entry_markup_to_utf8(elm_object_text_get(obj)));
+
+       Eina_List *result_list = NULL;
+       Eina_List *l = NULL;
+
+       if (ucol_is_jamo(entry_text)) {
+               LOGD("entry_text is jamo, %s", entry_text);
+               EINA_LIST_FOREACH(ad->main_list, l, item) {
+                       int result;
+                       result = ucol_compare_first_letters(item->peer_print_name, entry_text);
+                       if (result == 0) {
+                               result_list = eina_list_append(result_list, item);
+                       }
+               }
+       } else {
+               LOGD("entry_text is not jamo, %s", entry_text);
+               EINA_LIST_FOREACH(ad->main_list, l, item) {
+                       //user = item->use_data;
+
+                       if (ucol_ncompare(item->peer_print_name, entry_text, strlen(entry_text)) == 0) {
+                               result_list = eina_list_append(result_list, item);
+                       }
+               }
+       }
+
+       if ((entry_text == NULL || strlen(entry_text) == 0) && result_list == NULL) {
+               result_list = ad->main_list;
+       }
+
+       LOGD("count of result_list is %d", eina_list_count(result_list));
+
+       Evas_Object *no_contents = evas_object_data_get(ad->nf, "no_contents_layout");
+       Evas_Object *content = elm_object_part_content_get(main_layout, "elm.swallow.content");
+
+       if (result_list) {
+               _append_peer_item(peer_list, data, result_list);
+
+               if (no_contents == content) {
+                       elm_object_part_content_unset(main_layout, "elm.swallow.content");
+                       evas_object_hide(content);
+               }
+
+               elm_object_part_content_set(main_layout, "elm.swallow.content", peer_list);
+
+       } else {
+               if (content == peer_list) {
+                       elm_object_part_content_unset(main_layout, "elm.swallow.content");
+                       evas_object_hide(peer_list);
+               }
+               elm_object_part_content_set(main_layout, "elm.swallow.content", no_contents);
+       }
+       elm_genlist_realized_items_update(peer_list);
+       if (entry_text) {
+               free(entry_text);
+       }
+}
+
+static void _on_search_entry_focused(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout = data;
+       if (elm_object_focus_get(layout)) {
+               elm_object_signal_emit(layout, "elm,state,focused", "");
+       } else{
+               elm_object_signal_emit(layout, "elm,state,unfocused", "");
+       }
+}
+
+static Evas_Object *_create_searchbar(Evas_Object* parent, void* data)
+{
+       char edj_path[PATH_MAX] = {0, };
+       app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
+
+       Evas_Object* layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, edj_path, "");
+
+       /* editfield layout */
+       Evas_Object* searchbar_layout = elm_layout_add(parent);
+       elm_layout_theme_set(searchbar_layout, "layout", "searchfield", "singleline");
+       evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, 0.0);
+       evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, 0.0);
+
+       /* entry */
+       Evas_Object* searchbar_entry = elm_entry_add(searchbar_layout);
+       elm_entry_cursor_end_set(searchbar_entry);
+       evas_object_size_hint_weight_set(searchbar_entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(searchbar_entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_entry_single_line_set(searchbar_entry,  EINA_TRUE);
+       elm_entry_scrollable_set (searchbar_entry, EINA_FALSE);
+       elm_entry_cnp_mode_set(searchbar_entry, ELM_CNP_MODE_NO_IMAGE);
+       elm_entry_context_menu_disabled_set(searchbar_entry, EINA_TRUE);
+       elm_object_part_text_set(searchbar_entry, "elm.guide", i18n_get_text("IDS_TGRAM_NPBODY_SEARCH"));
+       elm_object_focus_set(searchbar_entry, EINA_FALSE);
+
+       limit_filter_data.max_char_count = 255;
+       elm_entry_markup_filter_append(searchbar_entry, elm_entry_filter_limit_size, &limit_filter_data);
+
+
+       evas_object_smart_callback_add(searchbar_entry, "changed", _on_search_entry_changed, data);
+       evas_object_smart_callback_add(searchbar_entry, "preedit,changed", _on_search_entry_changed, data);
+       evas_object_smart_callback_add(searchbar_entry, "focused", _on_search_entry_focused, searchbar_layout);
+
+       elm_object_part_content_set(searchbar_layout, "elm.swallow.content", searchbar_entry);
+       return searchbar_layout;
+}
+
+static Evas_Object* create_genlist(appdata_s *ad, Evas_Object *layout)
+{
+       Evas_Object *list = elm_genlist_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       elm_genlist_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(list);
+       elm_object_focus_set(list, EINA_TRUE);
+       return list;
+}
+
+void launch_search_message_view(appdata_s* ad)
+{
+       if (!ad)
+               return;
+
+       ad->current_app_state = TG_USER_MAIN_VIEW_SELECTION_STATE;
+
+       Evas_Object* layout = elm_layout_add(ad->nf);
+       elm_layout_theme_set(layout, "layout", "application", "searchbar_base");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(layout);
+
+       Evas_Object* searchbar_layout = _create_searchbar(layout, ad);
+       elm_object_part_content_set(layout, "searchbar", searchbar_layout);
+
+       Evas_Object* peer_list = create_genlist(ad, layout);
+       evas_object_data_set(peer_list, "app_data", ad);
+       elm_object_part_content_set(layout, "elm.swallow.content", peer_list);
+
+       _append_peer_item(peer_list, ad, ad->main_list);
+
+       /* no contents */
+       Evas_Object *nocontents = elm_layout_add(ad->nf);
+       elm_layout_theme_set(nocontents, "layout", "nocontents", "default");
+       evas_object_size_hint_weight_set(nocontents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(nocontents, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_part_text_set(nocontents, "elm.text", _("IDS_TGRAM_NPBODY_NO_RESULTS_FOUND_ABB"));
+       evas_object_hide(nocontents);
+
+       evas_object_data_set(ad->nf, "no_contents_layout", nocontents);
+       evas_object_data_set(ad->nf, "main_layout", layout);
+       evas_object_data_set(ad->nf, "peer_list", peer_list);
+
+       Elm_Object_Item *it = elm_naviframe_item_push(ad->nf, NULL, NULL, NULL, layout, NULL);
+       elm_naviframe_item_title_enabled_set(it, EINA_FALSE, EINA_FALSE);
+
+}
index df6d224..388612f 100755 (executable)
@@ -347,8 +347,9 @@ static void on_peer_item_clicked(void *data, Evas_Object *obj, void *event_info)
 
        int item_id = (int) data;
        appdata_s* ad = evas_object_data_get(obj, "app_data");
+       Eina_List *list = evas_object_data_get(obj, "result_list");
 
-       user_data_with_pic_s* sel_item = eina_list_nth(ad->search_peer_list, item_id);
+       user_data_with_pic_s* sel_item = eina_list_nth(list, item_id);
        ad->buddy_in_cahtting_data = sel_item;
 
        int peer_id = -1;
@@ -783,7 +784,7 @@ void launch_start_peer_search_view(appdata_s* ad)
        elm_layout_theme_set(nocontents, "layout", "nocontents", "default");
        evas_object_size_hint_weight_set(nocontents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(nocontents, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_object_part_text_set(nocontents, "elm.text", "No Items");
+       elm_object_part_text_set(nocontents, "elm.text", _("IDS_TGRAM_NPBODY_NO_RESULTS_FOUND_ABB"));
        evas_object_data_set(ad->nf, "no_contents_layout", nocontents);
 
        evas_object_data_set(ad->nf, "fs_layout", fs_layout);
index b04153d..ba5ef4a 100644 (file)
@@ -15,6 +15,7 @@
 #include "server_requests.h"
 #include "tg_db_wrapper.h"
 #include "tg_main_item_deletion_view.h"
+#include "tg_search_message_view.h"
 
 static Evas_Object *create_image_object_from_file(const char *icon_name, Evas_Object *parent)
 {
@@ -1125,6 +1126,7 @@ static void ctxpopup_search_select_cb(void *data, Evas_Object *obj, void *event_
        _ctxpopup_dismiss_cb(ad, NULL, NULL);
 
        /* please input here when search menu is clicked */
+       launch_search_message_view(ad);
 }
 
 static void ctxpopup_contact_select_cb(void *data, Evas_Object *obj, void *event_info)