Apply latest changes 58/49658/1
authorjin0.kim <jin0.kim@samsung.com>
Fri, 16 Oct 2015 14:54:23 +0000 (23:24 +0830)
committerjin0.kim <jin0.kim@samsung.com>
Fri, 16 Oct 2015 14:55:07 +0000 (23:25 +0830)
Change-Id: I6270e4ed732d93cf4b25588cb17f18d53d226da7

TelegramTizen/res/images/telegram_button_add.png [new file with mode: 0755]
TelegramTizen/res/images/telegram_list_thumb_image_add.png [new file with mode: 0755]
TelegramTizen/res/images/telegram_list_thumb_image_secrete.png [new file with mode: 0755]
TelegramTizen/src/tg_search_peer_view.c [changed mode: 0644->0755]
TelegramTizen/src/tg_settings_view.c
TelegramTizen/tg_utils/tg_common.c
TelegramTizen/tg_utils/tg_common.h

diff --git a/TelegramTizen/res/images/telegram_button_add.png b/TelegramTizen/res/images/telegram_button_add.png
new file mode 100755 (executable)
index 0000000..5d33479
Binary files /dev/null and b/TelegramTizen/res/images/telegram_button_add.png differ
diff --git a/TelegramTizen/res/images/telegram_list_thumb_image_add.png b/TelegramTizen/res/images/telegram_list_thumb_image_add.png
new file mode 100755 (executable)
index 0000000..50b6a4f
Binary files /dev/null and b/TelegramTizen/res/images/telegram_list_thumb_image_add.png differ
diff --git a/TelegramTizen/res/images/telegram_list_thumb_image_secrete.png b/TelegramTizen/res/images/telegram_list_thumb_image_secrete.png
new file mode 100755 (executable)
index 0000000..f535159
Binary files /dev/null and b/TelegramTizen/res/images/telegram_list_thumb_image_secrete.png differ
old mode 100644 (file)
new mode 100755 (executable)
index d658fef..b8aaee7
@@ -9,6 +9,56 @@
 #include "tg_db_wrapper.h"
 #include "tg_messaging_view.h"
 
+#define COMMAND_MENU_ITEM_COUNT 2
+
+typedef struct {
+       char* string;
+       char* image_path;
+       void (*func) (void *data, Evas_Object * obj, void *event_info);
+       Elm_Object_Item *item;
+} _command_item_info;
+
+
+static void on_invite_friends_clicked(void *data, Evas_Object *obj, void *event_info);
+static void on_group_chat_clicked(void *data, Evas_Object *obj, void *event_info);
+static void on_secret_chat_clicked(void *data, Evas_Object *obj, void *event_info);
+
+static _command_item_info contact_screen_command_item_list[COMMAND_MENU_ITEM_COUNT] = {
+       {"invites friends",     "telegram_list_thumb_image_add.png",    on_invite_friends_clicked, NULL},
+       {"group chat",          "telegram_list_thumb_image_multi.png", on_group_chat_clicked, NULL},
+       /*{"secret chat",               "telegram_list_thumb_image_secrete.png", on_secret_chat_clicked, NULL},*/
+};
+
+
+char* _util_get_first_char(char *input_text)
+
+
+{      /*
+       int unicode_len = eina_unicode_utf8_get_len(input_text);
+       int str_len = strlen(input_text);
+       int lang_byte = str_len / unicode_len + (str_len % unicode_len > 0 ? 1 : 0);
+
+       first_char = strndup(input_text, lang_byte);
+       */
+       char *first_char = NULL;
+       int count;
+       int flag;
+       unsigned char mask = 0x80;
+
+       count = 0;
+       while (*input_text & mask) {
+               mask = mask >> 1;
+               count++;
+       }
+
+       count = count == 0 ? 1 : count;
+       first_char = strndup(input_text, count);
+
+       return first_char;
+}
+
+
+
 static Evas_Object* create_image_object_from_file(const char *icon_name, Evas_Object *parent)
 {
        Evas_Object *icon = elm_image_add(parent);
@@ -19,37 +69,22 @@ static Evas_Object* create_image_object_from_file(const char *icon_name, Evas_Ob
        return icon;
 }
 
+
 char* on_peer_list_name_requested(void *data, Evas_Object *obj, const char *part)
 {
-
        int id = (int) data;
 
        appdata_s* ad = evas_object_data_get(obj, "app_data");
 
-       int size = eina_list_count(ad->search_peer_list);
-
-       if (size <= 0) {
-               if (!strcmp(part,"elm.text")){
-                       char buf[512] = {'\0'};
-                       snprintf(buf, 512, "<align=left><font_size=35><color=#000000>%s</color></font_size></align>", "No Items");
-                       return strdup(buf);
-
-               } else if (!strcmp(part, "elm.text.sub")) {
-                       return NULL;
-               }
-       }
-
        peer_with_pic_s* item = eina_list_nth(ad->search_peer_list, id);
+       if(!item) {
+               return NULL;
+       }
        tg_peer_info_s* user = item->use_data;
 
-       if (!strcmp(part,"elm.text")){
-               char* user_name = replace(user->print_name, '_', " ");
-               char buf[512] = {'\0'};
-               snprintf(buf, 512, "<align=left><font_size=35><color=#000000>%s</color></font_size></align>", user_name);
-               free(user_name);
-               return strdup(buf);
-
-       } else if (!strcmp(part, "elm.text.sub")) {
+       if (!strcmp(part,"elm.text.main.left.top") || !strcmp(part,"elm.text")){
+               return strdup(user->print_name);
+       } else if (!strcmp(part, "elm.text.sub.left.bottom") || !strcmp(part,"elm.text.sub")) {
                if (user->peer_type == TGL_PEER_USER) {
                        char* last_seen = get_budy_state(ad, user->peer_id);
                        if (last_seen) {
@@ -61,6 +96,51 @@ char* on_peer_list_name_requested(void *data, Evas_Object *obj, const char *part
        return NULL;
 }
 
+char* _on_command_name_requested(void *data, Evas_Object *obj, const char *part)
+{
+       int row = (int)data;
+
+       if (!strcmp(part,"elm.text.main.left.top") || !strcmp(part,"elm.text")){
+               char buf[512] = {'\0'};
+               snprintf(buf, 512, "<align=left><font_size=45><color=#1776D2>%s</color></font_size></align>", contact_screen_command_item_list[row].string);
+               return strdup(buf);
+       }
+
+       return NULL;
+}
+
+Evas_Object* _on_command_name_image_requested(void *data, Evas_Object *obj, const char *part)
+{
+       int row = (int)data;
+
+       Evas_Object *eo = NULL;
+       char path[256] = {0,};
+
+       if (!strcmp(part, "elm.icon.left") || !strcmp(part, "elm.icon.1") || !strcmp(part, "elm.swallow.icon")  ) {
+
+               sprintf(path, "%s%s", FM_ICON_PATH, contact_screen_command_item_list[row].image_path);
+
+               Evas_Object *profile_pic = create_image_object_from_file(ui_utils_get_resource(path), obj);
+               evas_object_color_set(profile_pic, 155, 216, 226, 255);
+
+               char edj_path[PATH_MAX] = {0, };
+               app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
+
+               Evas_Object* user_pic_layout = elm_layout_add(obj);
+               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);
+
+               eo = elm_layout_add(obj);
+               elm_layout_theme_set(eo, "layout", "list/B/type.2", "default");
+               elm_layout_content_set(eo, "elm.swallow.content", user_pic_layout);
+       }
+       return eo;
+}
+
+
 void on_peer_icon_deleted(void *data, Evas *e, Evas_Object *icon, void *event_info)
 {
        peer_with_pic_s *item  = data;
@@ -70,7 +150,7 @@ void on_peer_icon_deleted(void *data, Evas *e, Evas_Object *icon, void *event_in
 Evas_Object* on_peer_list_image_requested(void *data, Evas_Object *obj, const char *part)
 {
        Evas_Object *eo = NULL;
-       if (!strcmp(part, "elm.swallow.icon")) {
+       if (!strcmp(part, "elm.icon.left") || !strcmp(part, "elm.icon.1") || !strcmp(part, "elm.swallow.icon")  ) {
 
                int id = (int) data;
                appdata_s* ad = evas_object_data_get(obj, "app_data");
@@ -87,6 +167,7 @@ Evas_Object* on_peer_list_image_requested(void *data, Evas_Object *obj, const ch
                        profile_pic = create_image_object_from_file(ui_utils_get_resource(DEFAULT_PROFILE_PIC), obj);
                }
 
+
                item->contact_icon = profile_pic;
                evas_object_event_callback_add(item->contact_icon, EVAS_CALLBACK_DEL, on_peer_icon_deleted, item);
 
@@ -100,7 +181,7 @@ Evas_Object* on_peer_list_image_requested(void *data, Evas_Object *obj, const ch
                elm_object_part_content_set(user_pic_layout, "content", profile_pic);
 
                eo = elm_layout_add(obj);
-               elm_layout_theme_set(eo, "layout", "list/C/type.3", "default");
+               elm_layout_theme_set(eo, "layout", "list/B/type.2", "default");
                elm_layout_content_set(eo, "elm.swallow.content", user_pic_layout);
        }
        return eo;
@@ -133,6 +214,30 @@ static void clear_search_list(appdata_s *ad)
        ad->search_peer_list = NULL;
 }
 
+static void on_invite_friends_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = event_info;
+       elm_genlist_item_selected_set(it, EINA_FALSE);
+
+       show_toast(data, "on_invite_friends_clicked");
+}
+
+static void on_group_chat_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = event_info;
+       elm_genlist_item_selected_set(it, EINA_FALSE);
+
+       show_toast(data, "on_group_chat_clicked");
+}
+
+static void on_secret_chat_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = event_info;
+       elm_genlist_item_selected_set(it, EINA_FALSE);
+
+       show_toast(data, "on_secret_chat_clicked");
+}
+
 static void on_peer_item_clicked(void *data, Evas_Object *obj, void *event_info)
 {
        Elm_Object_Item *it = event_info;
@@ -187,148 +292,402 @@ static void on_peer_item_clicked(void *data, Evas_Object *obj, void *event_info)
        }
 }
 
-static void on_search_content_changed(void *data, Evas_Object *obj, void *event_info)
+static void _update_index_item(void *data, void *item_data, int id)
 {
        appdata_s* ad = data;
-       char buf[256] = {'\0',};
-       snprintf(buf, sizeof(buf), "%s", elm_object_text_get(obj));
-       char *org_name = trim(buf);
-       if (strlen(org_name) > 0) {
-               Evas_Object *search_list = evas_object_data_get(ad->nf, "search_list");
-               if (search_list) {
-                       elm_genlist_clear(search_list);
-                       clear_search_list(ad);
-                       ad->search_peer_list = load_peer_data_by_name(org_name);
-                       int i = 0;
-                       static Elm_Genlist_Item_Class itc1;
-                       itc1.item_style = "double_label";
-                       itc1.func.text_get = on_peer_list_name_requested;
-                       itc1.func.content_get = on_peer_list_image_requested;
-                       itc1.func.state_get = NULL;
-                       itc1.func.del = NULL;
-
-                       int size = eina_list_count(ad->search_peer_list);
-
-                       if(size > 0) {
-                               for (i = 0; i < size; i++) {
-                                       elm_genlist_item_append(search_list, &itc1, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_peer_item_clicked, (void*) i);
-                               }
-                       } else {
-                               i = 1;
-                               elm_genlist_item_append(search_list, &itc1, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
-                       }
-                       evas_object_show(search_list);
+       peer_with_pic_s* item = eina_list_nth(ad->search_peer_list, id);
+       tg_peer_info_s* user = item->use_data;
+
+       Evas_Object *index = evas_object_data_get(ad->nf, "fs_index");
+       /*
+       char *index_text = NULL;
+       int unicode_len = eina_unicode_utf8_get_len(user->print_name);
+       int str_len = strlen(user->print_name);
+       int lang_byte = str_len / unicode_len + (str_len % unicode_len > 0 ? 1 : 0);
+
+       index_text = strndup(user->print_name, lang_byte);
+       */
+       char *index_text = _util_get_first_char(user->print_name);
+
+       Elm_Object_Item *it = elm_index_item_append(index, index_text, NULL, NULL);
+
+       elm_object_item_data_set(it, item_data);
+
+}
+
+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 = "2line.top";
+       itc.item_style = "type1";
+       itc.func.text_get = on_peer_list_name_requested;
+       itc.func.content_get = on_peer_list_image_requested;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+
+       int count = eina_list_count(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_peer_item_clicked, (void*) i);
+                       _update_index_item(ad, item, i);
                }
+       } else {
+               i = 1;
+               elm_genlist_item_append(genlist, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
        }
-       else {
-               Evas_Object *search_list = evas_object_data_get(ad->nf, "search_list");
-               if (search_list) {
-                       elm_genlist_clear(search_list);
-                       clear_search_list(ad);
-                       ad->search_peer_list = load_peer_data_by_name(NULL);
-                       int i = 0;
-                       static Elm_Genlist_Item_Class itc1;
-                       itc1.item_style = "double_label";
-                       itc1.func.text_get = on_peer_list_name_requested;
-                       itc1.func.content_get = on_peer_list_image_requested;
-                       itc1.func.state_get = NULL;
-                       itc1.func.del = NULL;
-
-                       int size = eina_list_count(ad->search_peer_list);
-
-                       if(size > 0) {
-                               for (i = 0; i < size; i++) {
-                                       elm_genlist_item_append(search_list, &itc1, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_peer_item_clicked, (void*) i);
-                               }
-                       } else {
-                               i = 1;
-                               elm_genlist_item_append(search_list, &itc1, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
-                       }
-                       evas_object_show(search_list);
+}
+
+static void _append_command_item(Evas_Object *genlist, appdata_s *ad)
+{
+       int i;
+       static Elm_Genlist_Item_Class itc;
+       Elm_Object_Item* item = NULL;
+
+       //itc.item_style = "2line.top";
+       itc.item_style = "type1";
+       itc.func.text_get = _on_command_name_requested;
+       itc.func.content_get = _on_command_name_image_requested;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+
+       for (i = 0; i < COMMAND_MENU_ITEM_COUNT; i++) {
+               elm_genlist_item_append(genlist, &itc, i, NULL, ELM_GENLIST_ITEM_NONE, contact_screen_command_item_list[i].func, ad);
+       }
+
+
+}
+
+static void _append_index_item(Evas_Object *genlist, appdata_s *ad)
+{
+       int i;
+       static Elm_Genlist_Item_Class itc;
+       Elm_Object_Item* item = NULL;
+
+       //itc.item_style = "2line.top";
+       itc.item_style = "type1";
+       itc.func.text_get = on_peer_list_name_requested;
+       itc.func.content_get = on_peer_list_image_requested;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+
+       int count = eina_list_count(ad->search_peer_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_peer_item_clicked, (void*) i);
+                       _update_index_item(ad, item, i);
                }
+       } else {
+               i = 1;
+               elm_genlist_item_append(genlist, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
+       }
+}
+
+
+void _group_index_selected_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item*)event_info;
+       elm_genlist_item_selected_set(it, EINA_FALSE);
+
+       Evas_Object *check = elm_object_item_part_content_get(it, "elm.swallow.end");
+       if (!check) {
+               check = elm_object_item_part_content_get(it, "elm.icon.right");
        }
-       if (org_name) {
-               free(org_name);
-               org_name = NULL;
+
+       if (check) {
+               elm_check_state_set(check, !elm_check_state_get(check));
+               evas_object_smart_callback_call(check, "changed", NULL);
        }
 }
 
+/*
+char* _group_index_text_get_cb(void *data, Evas_Object *obj, const char *part)
+{
+       char *text = (char*)data;
 
-void launch_start_peer_search_view(appdata_s* ad)
+       if (!strcmp(part, "elm.text.main")) {
+               return strdup(text);
+       }
+}
+
+void _append_gl_group_index(Evas_Object *genlist, char* text) {
+       static Elm_Genlist_Item_Class itc;
+       ret_if(!itc);
+
+       itc.item_style = "groupindex";
+       itc.func.text_get = _group_index_text_get_cb;
+       itc.func.content_get = NULL;
+       itc.func.del = gl_del_cb;
+
+       elm_genlist_item_append(genlist, &itc, strdup(text), NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+}*/
+
+
+
+
+
+static void _on_search_entry_changed(void *data, Evas_Object *obj, void *event_info)
 {
-       if (!ad)
-               return;
+       appdata_s* ad = data;
+       char* entry_text = NULL;
 
-       ad->current_app_state = TG_PEER_SEARCH_VIEW_STATE;
+       Evas_Object *search_list = evas_object_data_get(ad->nf, "search_list");
+       Evas_Object *main_layout = evas_object_data_get(ad->nf, "main_layout");
+       Evas_Object *index = evas_object_data_get(ad->nf, "fs_index");
 
+       if (!search_list) {
+               DBG("search_list is null");
+               return;
+       }
 
+       elm_genlist_clear(search_list);
        clear_search_list(ad);
+       elm_index_item_clear(index);
 
+       entry_text = trim(elm_object_text_get(obj));
 
-       ad->search_peer_list = load_peer_data_by_name(NULL);
+       if (strlen(entry_text) > 0) {
+               ad->search_peer_list = load_peer_data_by_name(entry_text);
+       } else {
+               ad->search_peer_list = load_peer_data_by_name(NULL);
+       }
+
+       if (ad->search_peer_list) {
+               Evas_Object *fs_layout = evas_object_data_get(ad->nf, "fs_layout");
+               _append_peer_item(search_list, data, ad->search_peer_list);
+               elm_object_part_content_unset(main_layout, "elm.swallow.content");
+               elm_object_part_content_set(main_layout, "elm.swallow.content", fs_layout);
+       } else {
+               Evas_Object *no_contents = evas_object_data_get(ad->nf, "no_contents_layout");
+
+               elm_object_part_content_unset(main_layout, "elm.swallow.content");
+               elm_object_part_content_set(main_layout, "elm.swallow.content", no_contents);
+       }
+
+       elm_index_level_go(index, 0);
+
+       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", "");
+       }
+
+}
+
+
+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* scroller = elm_scroller_add(ad->nf);
-       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
-       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       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);
+       //evas_object_event_callback_add(searchbar_layout, EVAS_CALLBACK_DEL, _searchbar_layout_del_cb, NULL);
+
+       /* 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);
+       //elm_object_tree_focus_allow_set(searchbar_entry, EINA_FALSE);
+       //evas_object_event_callback_add(searchbar_entry, EVAS_CALLBACK_DEL, _searchbar_entry_del_cb, NULL);
+
+       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, "focused", _on_search_entry_focused, searchbar_layout);
+       /*
+       evas_object_smart_callback_add(ad->searchbar_entry, "maxlength,reached", _searchbar_entry_max_length_reached_cb, data);
+       evas_object_smart_callback_add(ad->searchbar_entry,     "preedit,changed", _searchbar_entry_preedit_changed_cb, data);
+       evas_object_smart_callback_add(ad->searchbar_entry, "language,changed", _searchbar_entry_lang_changed, data);
+        */
+
+       elm_object_part_content_set(searchbar_layout, "elm.swallow.content", searchbar_entry);
+       return searchbar_layout;
+}
+
+static void _index_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+#if 0
+       appdata_s* ad = data;
+       Evas_Object *search_list = evas_object_data_get(ad->nf, "search_list");
+       //Elm_Object_Item *gl_item = elm_genlist_first_item_get(search_list);
+
+       peer_with_pic_s* gl_item = NULL;//eina_list_nth(ad->search_peer_list, 0);
+
+       //tg_peer_info_s* user = item->use_data;
+       Eina_List* list = ad->search_peer_list;
+
+       while (list) {
+               //const char *part_text = elm_object_item_part_text_get(gl_item, "elm.text");
+
+               //const char *part_text = elm_object_item_data_get(gl_item);
+               gl_item = eina_list_data_get(list);
+               char *part_text = gl_item->use_data->print_name;
+               int id = gl_item->use_data->peer_id;
+               const char *index_letter = elm_index_item_letter_get(event_info);
+
+               int unicode_len = eina_unicode_utf8_get_len(part_text);
+               int str_len = strlen(part_text);
+               int lang_byte = str_len/unicode_len+(str_len%unicode_len > 0 ? 1: 0);
+               char *compare_text = strndup(part_text, lang_byte);
+
+               Elm_Object_Item *item = elm_genlist_nth_item_get(search_list, id);
+
+               if (!strcmp(index_letter, compare_text)) {
+                       elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+                       break;
+               }
+
+               //gl_item = elm_genlist_item_next_get(gl_item);
+               list = eina_list_next(list);
+
+       }
+
+#endif
+       elm_genlist_item_show(elm_object_item_data_get(event_info), ELM_GENLIST_ITEM_SCROLLTO_TOP);
+       elm_index_item_selected_set(event_info, EINA_FALSE);
+}
+
+static Evas_Object* create_fastscroll(appdata_s *ad)
+{
+       Evas_Object *parent = ad->nf;
+       Evas_Object *index;
+       int i = 0, j, len;
+       char *str;
+       char buf[PATH_MAX] = {0, };
+
+       index = elm_index_add(parent);
+       elm_object_part_content_set(parent, "elm.swallow.fastscroll", index);
+       elm_index_autohide_disabled_set(index, EINA_TRUE);
+       elm_index_omit_enabled_set(index, EINA_TRUE);
+
+       /* 1. Special character & Numbers */
+       elm_index_item_append(index, "#", NULL, NULL);
+
+#if 1
+       /* 2. Local language */
+       str = dgettext("efl-extension", "IDS_EA_BODY_ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+       len = strlen(str);
+
+       while (i < len) {
+               j = i;
+               eina_unicode_utf8_next_get(str, &i);
+               snprintf(buf, i - j + 1, "%s", str + j);
+               buf[i - j + 1] = 0;
+
+               elm_index_item_append(index, buf, NULL, NULL);
+       }
+#endif
+       elm_index_level_go(index, 0);
+
+       evas_object_smart_callback_add(index, "selected", _index_selected_cb, ad);
+       //evas_object_smart_callback_add(index, "changed", _index_changed_cb, NULL);
+       //evas_object_smart_callback_add(index, "language,changed", _index_language_changed_cb, NULL);
+
+       return index;
+}
+
+
+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_data_set(list, "app_data", ad);
+       elm_object_part_content_set(layout, "elm.swallow.content", list);
+       evas_object_show(list);
+       elm_object_focus_set(list, EINA_TRUE);
+
+       return list;
+}
+
+
+void launch_start_peer_search_view(appdata_s* ad)
+{
+       if (!ad)
+               return;
+
+       ad->current_app_state = TG_PEER_SEARCH_VIEW_STATE;
+
+       clear_search_list(ad);
+       ad->search_peer_list = load_peer_data_by_name(NULL);
+
+       /* main layout */
        Evas_Object* layout = elm_layout_add(ad->nf);
-       elm_layout_file_set(layout, edj_path, "peer_search_main_layout");
+       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);
-       elm_object_content_set(scroller, layout);
-
-       Evas_Object* search_content = elm_entry_add(layout);
-       elm_object_part_text_set(search_content, "elm.guide", "<font=Tizen:style=Regular color=#666362 align=left><font_size=36>Search contact</font_size></font>");
-       elm_entry_cursor_end_set(search_content);
-       evas_object_size_hint_weight_set(search_content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(search_content, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_entry_single_line_set(search_content,  EINA_TRUE);
-       elm_entry_scrollable_set (search_content, EINA_FALSE);
-       elm_entry_cnp_mode_set(search_content, ELM_CNP_MODE_NO_IMAGE);
-       elm_entry_context_menu_disabled_set(search_content, EINA_TRUE);
-       elm_entry_text_style_user_push(search_content, "DEFAULT='color=#000000'");
-       evas_object_show(search_content);
+       evas_object_data_set(ad->nf, "main_layout", layout);
 
-       limit_filter_data.max_char_count = 255;
-       elm_entry_markup_filter_append(search_content, elm_entry_filter_limit_size, &limit_filter_data);
-       evas_object_smart_callback_add(search_content, "changed", on_search_content_changed, ad);
-       elm_object_part_content_set(layout, "swallow.search_area", search_content);
+       /* search field */
+       Evas_Object* searchbar_layout = _create_searchbar(layout, ad);
+       elm_object_part_content_set(layout, "searchbar", searchbar_layout);
 
-       int i;
-       static Elm_Genlist_Item_Class itc1;
-       Evas_Object *peer_list = elm_genlist_add(ad->nf);
-       elm_list_mode_set(peer_list, ELM_LIST_COMPRESS);
-       elm_genlist_mode_set(peer_list, ELM_LIST_COMPRESS);
-       evas_object_size_hint_weight_set(peer_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(peer_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_data_set(peer_list, "app_data", ad);
-
-       itc1.item_style = "double_label";
-       itc1.func.text_get = on_peer_list_name_requested;
-       itc1.func.content_get = on_peer_list_image_requested;
-       itc1.func.state_get = NULL;
-       itc1.func.del = NULL;
-
-       int size = eina_list_count(ad->search_peer_list);
-
-       if(size > 0) {
-               for (i = 0; i < size; i++) {
-                       elm_genlist_item_append(peer_list, &itc1, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_peer_item_clicked, (void*) i);
-               }
-       } else {
-               i = 1;
-               elm_genlist_item_append(peer_list, &itc1, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
-       }
+       /* fastscroll layout */
+       Evas_Object* fs_layout = elm_layout_add(layout);
+       elm_layout_theme_set(fs_layout, "layout", "application", "fastscroll");
+       elm_object_part_content_set(layout, "elm.swallow.content", fs_layout);
+       evas_object_data_set(ad->nf, "fs_layout", fs_layout);
+
+       /* fastscroll */
+       Evas_Object* index = create_fastscroll(ad);
+       elm_object_part_content_set(fs_layout, "elm.swallow.fastscroll", index);
+       evas_object_data_set(ad->nf, "fs_index", index);
 
-       evas_object_show(peer_list);
-       elm_object_part_content_set(layout, "swallow.peerlist", peer_list);
+       /* peer list - Genlist */
+       Evas_Object* peer_list = create_genlist(ad, fs_layout);
 
+       _append_command_item(peer_list, ad);
+       _append_peer_item(peer_list, ad, ad->search_peer_list);
        evas_object_data_set(ad->nf, "search_list", peer_list);
 
-       //Elm_Object_Item* navi_item = elm_naviframe_item_push(ad->nf, "<font=Tizen:style=Regular color=#ffffff align=left><font_size=40>Search contact</font_size></font>", NULL, NULL, scroller, NULL);
-       elm_naviframe_item_simple_push(ad->nf, scroller);
+       /* 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", "No Items");
+       evas_object_data_set(ad->nf, "no_contents_layout", nocontents);
+
+       Elm_Object_Item* navi_item = elm_naviframe_item_push(ad->nf, "Telegram", NULL, NULL, layout, NULL);
+       elm_naviframe_prev_btn_auto_pushed_set(ad->nf, EINA_FALSE);
+       eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_BACK, eext_naviframe_back_cb, NULL);
+
+
+       //elm_naviframe_item_simple_push(ad->nf, scroller);
+       //elm_naviframe_item_simple_push(ad->nf, layout);
 }
index b2d92d1..11b5514 100644 (file)
@@ -363,6 +363,8 @@ void on_camera_button_clicked(void *data, Evas_Object *obj, void *event_info)
 /**************************************************************************/
 
 
+
+
 void on_chat_bg_select_result_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
 {
        if (result == APP_CONTROL_RESULT_SUCCEEDED) {
@@ -425,9 +427,6 @@ void on_chat_bg_change_option_selected_cb(void *data, Evas_Object *obj, void *ev
                return;
        }
        if (id == 0) {
-
-
-
                if (ad->chat_background) {
                        free(ad->chat_background);
                        ad->chat_background = NULL;
@@ -443,6 +442,8 @@ void on_chat_bg_change_option_selected_cb(void *data, Evas_Object *obj, void *ev
                app_control_set_mime(app_control, "image/jpg");
                app_control_send_launch_request(app_control, &on_chat_bg_select_result_cb, ad);
        } else {
+               app_control_set_launch_mode(app_control, APP_CONTROL_LAUNCH_MODE_GROUP);
+               app_control_set_app_id(app_control, "ug-gallery-efl");
                app_control_set_operation(app_control, APP_CONTROL_OPERATION_PICK);
                app_control_set_mime(app_control,"image/*");
                app_control_send_launch_request(app_control, &on_chat_bg_select_result_cb, ad);
@@ -452,9 +453,6 @@ void on_chat_bg_change_option_selected_cb(void *data, Evas_Object *obj, void *ev
        evas_object_del(popup);
 }
 
-
-
-
 char* on_chat_bg_load_text_get_cb(void *data, Evas_Object *obj, const char *part)
 {
        int id = (int) data;
@@ -517,7 +515,7 @@ void on_settings_info_item_clicked(void *data, Evas_Object *obj, void *event_inf
 }
 
 /*************************************************************************/
-
+#if 0
 void launch_settings_screen(appdata_s* ad)
 {
        if (!ad) {
@@ -544,6 +542,7 @@ void launch_settings_screen(appdata_s* ad)
        evas_object_show(layout);
        elm_object_content_set(scroller, layout);
 
+
        /**************** user info *********************/
        Evas_Object *pic_name_list = NULL;
        static Elm_Genlist_Item_Class itc;
@@ -670,3 +669,108 @@ void launch_settings_screen(appdata_s* ad)
        Elm_Object_Item* navi_item = elm_naviframe_item_push(ad->nf, "Settings", NULL, NULL, scroller, NULL);
 }
 
+#endif
+
+
+char* _text_requested_cb(void *data, Evas_Object *obj, const char *part)
+{
+       int id = (int) data;
+
+       appdata_s* ad = evas_object_data_get(obj, "app_data");
+
+       if (!strcmp(part,"elm.text.main.left.top") || !strcmp(part,"elm.text")){
+               switch(id) {
+                       case 0:
+                               return strdup(ad->current_user_data->print_name);
+                       case 1:
+                               return strdup("Set Background image");
+                       default:
+                               break;
+               }
+
+
+       } else if (!strcmp(part, "elm.text.sub.left.bottom") || !strcmp(part,"elm.text.sub")) {
+               switch(id) {
+                       case 0:
+                       if (ad->current_user_data->online) {
+                               return strdup("online");
+                       } else {
+                               return strdup("offine");
+                       }
+                       break;
+               }
+       }
+
+       return NULL;
+}
+
+Evas_Object* _content_requested_cb(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *eo = NULL;
+       if (!strcmp(part, "elm.icon.left") || !strcmp(part, "elm.icon.1") || !strcmp(part, "elm.swallow.icon")  ) {
+               appdata_s* ad = evas_object_data_get(obj, "app_data");
+
+               int id = (int) data;
+               if (id == 0) {
+
+                       Evas_Object *profile_pic = NULL;
+
+                       if (ad->current_user_data->photo_path && strlen(ad->current_user_data->photo_path) > 0 && strstr(ad->current_user_data->photo_path, "_null_") == NULL) {
+                               profile_pic = get_image_from_path(ad->current_user_data->photo_path, ad->nf);
+                       } else  {
+                               profile_pic = get_image_from_path(ui_utils_get_resource(DEFAULT_PROFILE_PIC), ad->nf);
+                       }
+
+                       char edj_path[PATH_MAX] = {0, };
+                       app_get_resource(TELEGRAM_INIT_VIEW_EDJ, edj_path, (int)PATH_MAX);
+                       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);
+
+                       eo = elm_layout_add(obj);
+                       elm_layout_theme_set(eo, "layout", "list/B/type.1", "default");
+                       elm_layout_content_set(eo, "elm.swallow.content", user_pic_layout);
+               }
+
+       }
+       return eo;
+}
+
+void launch_settings_screen(appdata_s* ad)
+{
+       if (!ad) {
+               return;
+       }
+
+       ad->current_app_state = TG_SETTINGS_SCREEN_STATE;
+
+       if (!ad->current_user_data) {
+               load_registered_user_data(ad);
+       }
+
+       static Elm_Genlist_Item_Class itc;
+       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);
+
+       evas_object_data_set(list, "app_data", ad);
+
+       itc.item_style = "type1";
+       itc.func.text_get = _text_requested_cb;
+       itc.func.content_get = _content_requested_cb;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+
+       elm_genlist_item_append(list, &itc, (void*) 0, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) 0);
+       elm_genlist_item_append(list, &itc, (void*) 1, NULL, ELM_GENLIST_ITEM_NONE, on_settings_info_item_clicked, (void*)1);
+
+       Elm_Object_Item* navi_item = elm_naviframe_item_push(ad->nf, "Settings", NULL, NULL, list, NULL);
+
+}
+
index 646cc1d..4ce74cd 100644 (file)
@@ -5,7 +5,9 @@
 #include "tg_db_wrapper.h"
 #include <media_content.h>
 #include "tg_start_messaging_view.h"
-
+#include "tg_search_peer_view.h"
+#include "tg_settings_view.h"
+#include "tg_add_contact.h"
 void app_get_resource(const char *edj_file_in, char *edj_path_out, int edj_path_max)
 {
        char *res_path = app_get_resource_path();
@@ -411,8 +413,47 @@ void on_new_message_clicked(void *data, Evas_Object *obj, void *event_info)
        if (!ad->buddy_list || eina_list_count(ad->buddy_list) <= 0) {
                load_buddy_list_data(ad);
        }
-       delete_floating_button(ad);
+       //delete_floating_button(ad);
        launch_start_messaging_view(ad);
+
+       //update_floating_button(ad, 1);
+       //launch_start_peer_search_view(ad);
+
+       //delete_floating_button(ad);
+       //launch_settings_screen(ad);
+}
+
+
+
+void on_floating_icon_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       appdata_s* ad = data;
+
+       Evas_Object* image = (Evas_Object*)evas_object_data_get(ad->floating_btn, "image");
+
+       switch(ad->current_app_state) {
+       case TG_PEER_SEARCH_VIEW_STATE:
+               elm_image_file_set(image, ui_utils_get_resource(TG_ICON_FLOATING_PENCIL), NULL);
+               launch_settings_screen(ad);
+               break;
+       case TG_USER_MAIN_VIEW_STATE:
+               elm_image_file_set(image, ui_utils_get_resource(TG_ICON_FLOATING_ADD), NULL);
+               launch_start_peer_search_view(ad);
+               break;
+       default :
+               delete_floating_button(ad);
+               break;
+       }
+}
+
+void on_add_contact_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       appdata_s* ad = data;
+
+       if (!ad->buddy_list || eina_list_count(ad->buddy_list) <= 0) {
+               load_buddy_list_data(ad);
+       }
+       show_toast(ad, "on_add_contact_clicked");
 }
 
 
@@ -423,17 +464,20 @@ void create_floating_button(appdata_s* ad)
        if (ad->floating_btn)
                return;
 
-    Evas_Object *pencil_icon = elm_image_add(ad->nf);
-    elm_image_file_set(pencil_icon, ui_utils_get_resource(TG_ICON_FLOATING_PENCIL), NULL);
-    evas_object_show(pencil_icon);
+    Evas_Object *icon = elm_image_add(ad->nf);
+    elm_image_file_set(icon, ui_utils_get_resource(TG_ICON_FLOATING_PENCIL), NULL);
+    evas_object_show(icon);
        ad->floating_btn = eext_floatingbutton_add(ad->layout);
        evas_object_color_set(ad->floating_btn, 255, 255, 255, 255);
        elm_object_part_content_set(ad->layout, "elm.swallow.floatingbutton", ad->floating_btn);
        /* Floating Button 1 */
-       Evas_Object *new_msg_btn = elm_button_add(ad->floating_btn);
-       evas_object_smart_callback_add(new_msg_btn, "clicked", on_new_message_clicked, ad);
-       elm_object_part_content_set(ad->floating_btn, "button1", new_msg_btn);
-       elm_object_part_content_set(new_msg_btn, "icon", pencil_icon);
+       Evas_Object *btn = elm_button_add(ad->floating_btn);
+       evas_object_smart_callback_add(btn, "clicked", on_floating_icon_clicked, ad);
+
+       elm_object_part_content_set(ad->floating_btn, "button1", btn);
+       elm_object_part_content_set(btn, "icon", icon);
+
+       evas_object_data_set(ad->floating_btn, "image", icon);
 }
 
 void delete_floating_button(appdata_s* ad)
@@ -442,7 +486,20 @@ void delete_floating_button(appdata_s* ad)
                return;
 
        if (ad->floating_btn){
-               evas_object_del(ad->floating_btn);
-               ad->floating_btn = NULL;
+               evas_object_hide(ad->floating_btn);
        }
 }
+
+void update_floating_button(appdata_s* ad, int mode)
+{
+    Evas_Object *plus_icon = elm_image_add(ad->nf);
+    elm_image_file_set(plus_icon, ui_utils_get_resource(TG_ICON_FLOATING_ADD), NULL);
+    evas_object_show(plus_icon);
+
+       Evas_Object *new_msg_btn = elm_button_add(ad->floating_btn);
+       evas_object_smart_callback_add(new_msg_btn, "clicked", on_add_contact_clicked, ad);
+       elm_object_part_content_set(new_msg_btn, "icon", plus_icon);
+
+       elm_object_part_content_set(ad->floating_btn, "button1", new_msg_btn);
+
+}
index b5c0111..e7c6357 100644 (file)
 
 #define TG_ICON_FLOATING_PENCIL       FM_ICON_PATH"telegram_floating_btn_ic.png"
 #define TG_ICON_FLOATING_BG       FM_ICON_PATH"floating_pressed.png"
+#define TG_ICON_FLOATING_ADD   FM_ICON_PATH"telegram_button_add.png"
 #define TG_SEARCH_ICON       FM_ICON_PATH"ic_ab_search.png"
 #define TG_SEARCH_PRESSED_ICON       FM_ICON_PATH"ic_ab_search_pressed.png"
 
+
 #define TG_MENU_GROUP       FM_ICON_PATH"menu_newgroup.png"
 #define TG_MENU_INVITE       FM_ICON_PATH"menu_invite.png"
 #define TG_MENU_CONTACTS       FM_ICON_PATH"menu_contacts.png"
@@ -547,6 +549,7 @@ typedef struct appdata {
        TelegramAppDirection target_direction;
        Evas_Object *floating_btn;
        Elm_Theme *theme;
+       int screen_mode_for_fb; // for floating button icon
 } appdata_s;
 
 extern void show_toast(appdata_s* ad, char* value);
@@ -1083,6 +1086,8 @@ extern void create_floating_button(appdata_s* ad);
 
 extern void delete_floating_button(appdata_s* ad);
 
+extern void update_floating_button(appdata_s* ad, int mode);
+
 extern void on_new_message_clicked(void *data, Evas_Object *obj, void *event_info);
 
 #endif /* TG_COMMON_H_ */