Made changes as per GUI guidelines 35/49835/2
authorpolu.sandeep <polu.sandeep@samsung.com>
Tue, 20 Oct 2015 13:00:26 +0000 (22:00 +0900)
committerSung-jae Park <nicesj@nicesj.com>
Thu, 22 Oct 2015 02:16:02 +0000 (19:16 -0700)
Change-Id: Ie8d4b46adc837296aea4f7fd0d3da4f95437b0c7

13 files changed:
TelegramTizen/inc/server_requests.h
TelegramTizen/src/server_requests.c
TelegramTizen/src/telegramtizen.c
TelegramTizen/src/tg_main_item_deletion_view.c
TelegramTizen/src/tg_messaging_view.c
TelegramTizen/src/tg_user_main_view.c
TelegramTizen/tg_utils/tg_common.h
tg-engine-service/db_manager/tg_db_manager.c
tg-engine-service/inc/server_response.h
tg-engine-service/src/server_response.c
tg-engine-service/src/tg-engine-service.c
tg-engine-service/tg_engine/tg_engine.c
tg-engine-service/tg_engine/tg_engine.h

index 18c2a1f..37f2142 100644 (file)
@@ -16,6 +16,7 @@ void send_request_for_validation(service_client* service_client, const char* sms
 // type_of_chat 0-buddy, 1-group_chat 2-encrpted_chat
 void send_request_for_message_transport(appdata_s *ad, service_client* service_client, const int buddy_id, const int message_id, const int msg_type, const char* data, const int type_of_chat);
 void send_request_for_marked_as_read(service_client* service_client, const int buddy_id, const int type_of_chat);
+void send_delete_selected_group_chats_request(service_client* service_client, Eina_List *sel_grp_chats);
 void send_delete_group_chat_request(service_client* service_client, const int chat_id);
 void send_add_buddy_request(service_client* service_client, const int buddy_id, const char *first_name, const char *last_name, const char *phone_number);
 void send_delete_buddy_request(service_client* service_client, const int buddy_id);
index d2d4673..0782d0a 100644 (file)
@@ -363,6 +363,69 @@ void send_unblock_buddy_request(service_client* service_client, const int buddy_
 }
 
 
+
+
+void send_delete_selected_group_chats_request(service_client* service_client, Eina_List *sel_grp_chats)
+{
+       if (!service_client || !sel_grp_chats) {
+               // error
+               return;
+       }
+       bundle *msg;
+       char tmp[50];
+       char chat_id_key[50];
+       int result;
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
+       if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
+               ERR("Failed to add data by key to bundle");
+               bundle_free(msg);
+               return;
+       }
+
+       if (bundle_add_str(msg, "command", "delete_selected_group_chats_request") != 0) {
+               ERR("Failed to add data by key to bundle");
+               bundle_free(msg);
+               return;
+       }
+
+       // add count
+       int list_size = eina_list_count(sel_grp_chats);
+
+       char cnt_str[50] = {0,};
+       sprintf(cnt_str, "%d", list_size);
+
+       if (bundle_add_str(msg, "list_size", cnt_str) != 0) {
+               ERR("Failed to add data by key to bundle");
+               bundle_free(msg);
+               return;
+       }
+
+       // add chat ids
+       for (int i = 0; i < list_size ; i++) {
+               tg_main_list_item_s *item = eina_list_nth(sel_grp_chats, i);
+               snprintf(tmp, sizeof(tmp) - 1, "%d", item->peer_id);
+               snprintf(chat_id_key, sizeof(chat_id_key) - 1, "chat_id_%d", i);
+
+               if (bundle_add_str(msg, chat_id_key, tmp) != 0) {
+                       ERR("Failed to add data by key to bundle");
+                       bundle_free(msg);
+                       return;
+               }
+       }
+
+       result = service_client_send_message(service_client, msg);
+       if(result != SVC_RES_OK) {
+               // error
+       }
+       bundle_free(msg);
+}
+
+
+
 void send_delete_group_chat_request(service_client* service_client, const int chat_id)
 {
        if (!service_client) {
@@ -395,8 +458,6 @@ void send_delete_group_chat_request(service_client* service_client, const int ch
                bundle_free(msg);
                return;
        }
-
-
        result = service_client_send_message(service_client, msg);
        if(result != SVC_RES_OK) {
                // error
index 79a5aca..df5eeb7 100644 (file)
@@ -1770,6 +1770,18 @@ static int _on_service_client_msg_received_cb(void *data, bundle *const rec_msg)
                if (app->current_app_state == TG_SET_USER_INFO_STATE) {
                        on_user_unblock_response_received(app, buddy_id, is_success);
                }
+       } else if (strcmp(rec_key_val, "selected_group_chats_deleted_response") == 0) {
+
+               if (app->current_app_state == TG_USER_MAIN_VIEW_SELECTION_STATE) {
+                       elm_naviframe_item_pop(app->nf);
+                       app->current_app_state = TG_USER_MAIN_VIEW_STATE;
+                       show_floating_button(app);
+                       load_buddy_list_data(app);
+                       load_unknown_buddy_list_data(app);
+                       load_peer_data(app);
+                       load_main_list_data(app);
+                       refresh_main_list_view(app, EINA_FALSE);
+               }
 
        } else if (strcmp(rec_key_val, "group_chat_deleted_response") == 0) {
                char* chat_id_str = NULL;
@@ -2821,6 +2833,7 @@ app_create(void *data)
        ad->s_notififcation = NULL;
        ad->panel = NULL;
        ad->is_server_ready = EINA_FALSE;
+       ad->msg_count = 0;
        create_base_gui(ad);
        int err = badge_new(TELEGRAM_APP_ID);
        if (BADGE_ERROR_NONE != err) {
index 3d5acf1..e846094 100644 (file)
@@ -5,8 +5,10 @@
  *      Author: sandeep
  */
 
-
 #include "tg_main_item_deletion_view.h"
+#include "tg_user_main_view.h"
+#include "tg_db_manager.h"
+#include "server_requests.h"
 
 static Evas_Object* create_image_object_from_file(const char *icon_name, Evas_Object *parent)
 {
@@ -18,16 +20,8 @@ static Evas_Object* create_image_object_from_file(const char *icon_name, Evas_Ob
        return icon;
 }
 
-static Evas_Object* create_check(Evas_Object *parent)
-{
-       Evas_Object *check;
-       check = elm_check_add(parent);
-       return check;
-}
-
 char* on_mainlist_title_requested(void *data, Evas_Object *obj, const char *part)
 {
-
        int org_id = (int) data;
        if (org_id == 0) {
                if (!strcmp(part,"elm.text.main.left.top") || !strcmp(part,"elm.text")){
@@ -35,9 +29,7 @@ char* on_mainlist_title_requested(void *data, Evas_Object *obj, const char *part
                }
                return NULL;
        }
-
        int id = org_id - 1;
-
        appdata_s* ad = evas_object_data_get(obj, "app_data");
 
        if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
@@ -63,32 +55,122 @@ char* on_mainlist_title_requested(void *data, Evas_Object *obj, const char *part
        }
 }
 
+
+void change_main_item_selection_state(appdata_s *ad, Evas_Object *gen_list, Eina_Bool checked, int org_id)
+{
+       if (!ad || !gen_list) {
+               return;
+       }
+       if (ad->main_list && eina_list_count(ad->main_list) > 0) {
+               if (org_id ==0) {
+                       for (int i = 0 ; i < eina_list_count(ad->main_list) ; i++) {
+                               tg_main_list_item_s *item = eina_list_nth(ad->main_list, i);
+                               item->is_selected = checked;
+                               Eina_Bool all_items_selected = checked;
+                               evas_object_data_set(gen_list, "all_selected", (void *)((int)all_items_selected));
+                               Elm_Object_Item* list_item = elm_genlist_nth_item_get(gen_list, i + 1);
+                               if (list_item) {
+                                       elm_genlist_item_selected_set(list_item, EINA_FALSE);
+                                       Evas_Object *llayout = elm_object_item_part_content_get(list_item, "elm.swallow.end");
+                                       Evas_Object *lcheckbox = elm_object_part_content_get(llayout, "elm.swallow.content");
+                                       elm_check_state_set(lcheckbox, checked);
+                               }
+                       }
+               } else {
+                       tg_main_list_item_s *item = eina_list_nth(ad->main_list, org_id - 1);
+                       item->is_selected = checked;
+
+                       if (!checked) {
+                               Elm_Object_Item* list_item = elm_genlist_nth_item_get(gen_list, 0);
+                               if (list_item) {
+                                       elm_genlist_item_selected_set(list_item, EINA_FALSE);
+                                       Evas_Object *llayout = elm_object_item_part_content_get(list_item, "elm.swallow.end");
+                                       Evas_Object *lcheckbox = elm_object_part_content_get(llayout, "elm.swallow.content");
+                                       elm_check_state_set(lcheckbox, EINA_FALSE);
+                               }
+                       } else {
+                               Eina_Bool all_items_selected = EINA_TRUE;
+                               for (int i = 0 ; i < eina_list_count(ad->main_list) ; i++) {
+                                       tg_main_list_item_s *item = eina_list_nth(ad->main_list, i);
+                                       if (!item->is_selected) {
+                                               all_items_selected = EINA_FALSE;
+                                               break;
+                                       }
+                               }
+                               Elm_Object_Item* list_item = elm_genlist_nth_item_get(gen_list, 0);
+                               if (list_item) {
+                                       elm_genlist_item_selected_set(list_item, EINA_FALSE);
+                                       Evas_Object *llayout = elm_object_item_part_content_get(list_item, "elm.swallow.end");
+                                       Evas_Object *lcheckbox = elm_object_part_content_get(llayout, "elm.swallow.content");
+                                       elm_check_state_set(lcheckbox, all_items_selected);
+                               }
+                       }
+               }
+       }
+}
+
+void on_main_item_checkbox_sel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int org_id = (int) data;
+       appdata_s *ad = evas_object_data_get(obj, "app_data");
+       Evas_Object *gen_list = evas_object_data_get(obj, "selection_gen_list");
+       Eina_Bool checked = elm_check_state_get(obj);
+       change_main_item_selection_state(ad, gen_list, checked, org_id);
+}
+
+void on_main_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       int org_id = (int) data;
+       Elm_Object_Item *it = event_info;
+       elm_genlist_item_selected_set(it, EINA_FALSE);
+       Evas_Object *layout = elm_object_item_part_content_get(event_info, "elm.swallow.end");
+       Evas_Object *checkbox = elm_object_part_content_get(layout, "elm.swallow.content");
+       Eina_Bool checked = elm_check_state_get(checkbox);
+       appdata_s *ad = evas_object_data_get(checkbox, "app_data");
+       checked = !checked;
+       elm_check_state_set(checkbox, checked);
+       change_main_item_selection_state(ad, obj, checked, org_id);
+}
+
 Evas_Object* on_mainlist_content_requested(void *data, Evas_Object *obj, const char *part)
 {
        int org_id = (int) data;
+       appdata_s* ad = evas_object_data_get(obj, "app_data");
+       Evas_Object *eo = NULL;
+       int id = org_id - 1;
+       if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
+               return NULL;
+       }
 
        if (!strcmp("elm.swallow.end", part)) {
-               return create_check(obj);
+               eo = elm_layout_add(obj);
+               elm_layout_theme_set(eo, "layout", "list/C/type.2", "default");
+               Evas_Object *check = elm_check_add(obj);
+               elm_object_focus_set(check, EINA_FALSE);
+               evas_object_propagate_events_set(check, EINA_FALSE);
+               evas_object_data_set(check, "app_data", ad);
+               evas_object_data_set(check, "selection_gen_list", obj);
+               evas_object_smart_callback_add(check, "changed", on_main_item_checkbox_sel_cb, data);
+               elm_layout_content_set(eo, "elm.swallow.content", check);
+               if (org_id == 0) {
+                       Eina_Bool all_items_selected = (Eina_Bool)evas_object_data_get(obj, "all_selected");
+                       elm_check_state_set(check, all_items_selected);
+               } else {
+                       tg_main_list_item_s* item = eina_list_nth(ad->main_list, id);
+                       elm_check_state_set(check, item->is_selected);
+               }
+               return eo;
        }
 
        if (org_id == 0) {
                return NULL;
        }
 
-       int id = org_id - 1;
-
-       appdata_s* ad = evas_object_data_get(obj, "app_data");
-
-       if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
-               return NULL;
-       }
        tg_main_list_item_s* item = eina_list_nth(ad->main_list, id);
        if (!item) {
                return NULL;
        }
 
-
-       Evas_Object *eo = NULL;
        if (!strcmp(part, "elm.icon.left") || !strcmp(part, "elm.icon.1") || !strcmp(part, "elm.swallow.icon")) {
                //if (item->profile_pic == NULL) {
                        Evas_Object *profile_pic = NULL;
@@ -142,6 +224,76 @@ Evas_Object* on_mainlist_content_requested(void *data, Evas_Object *obj, const c
 }
 
 
+void on_delete_selected_items_clicked(void *data, Evas_Object *object, void *event_info)
+{
+       appdata_s *ad = data;
+       if (!ad)
+               return;
+
+       show_loading_popup(ad);
+       // delete  users.
+
+       Eina_List *sel_grp_chat = NULL;
+
+       for (int i = 0; i < eina_list_count(ad->main_list); i++) {
+               tg_main_list_item_s* sel_item = eina_list_nth(ad->main_list, i);
+               if (sel_item && sel_item->is_selected) {
+                       if (sel_item->peer_type == TGL_PEER_USER) {
+                               char* tablename = get_table_name_from_number(sel_item->peer_id);
+                               delete_all_records(tablename);
+                               free(tablename);
+
+                               // delete from main list
+                               if (sel_item->peer_print_name) {
+                                       free(sel_item->peer_print_name);
+                                       sel_item->peer_print_name = NULL;
+                               }
+                               if (sel_item->last_message) {
+                                       free(sel_item->last_message);
+                                       sel_item->last_message = NULL;
+                               }
+                               if (sel_item->profile_pic_path) {
+                                       free(sel_item->profile_pic_path);
+                                       sel_item->profile_pic_path = NULL;
+                               }
+                               sel_item->date_lbl = NULL;
+                               sel_item->msg_status_lbl = NULL;
+                               sel_item->main_item_layout = NULL;
+                               sel_item->profile_pic = NULL;
+                               sel_item->profile_pic_path = NULL;
+                               sel_item->status_lbl = NULL;
+                               sel_item->user_name_lbl = NULL;
+                               //ad->main_list
+                               ad->main_list = eina_list_remove(ad->main_list, sel_item);
+                       } else if (sel_item->peer_type == TGL_PEER_CHAT) {
+                               sel_grp_chat = eina_list_append(sel_grp_chat, sel_item);
+                       }
+               }
+       }
+
+       if (sel_grp_chat && eina_list_count(sel_grp_chat) > 0) {
+               send_delete_selected_group_chats_request(ad->service_client, sel_grp_chat);
+       } else {
+               refresh_main_list_view(ad, EINA_FALSE);
+               elm_naviframe_item_pop(ad->nf);
+               ad->current_app_state = TG_USER_MAIN_VIEW_STATE;
+               show_floating_button(ad);
+               hide_loading_popup(ad);
+       }
+}
+
+void on_selection_cancel_clicked(void *data, Evas_Object *object, void *event_info)
+{
+       appdata_s *ad = data;
+       if (!ad)
+               return;
+
+       elm_naviframe_item_pop(ad->nf);
+       ad->current_app_state = TG_USER_MAIN_VIEW_STATE;
+       show_floating_button(ad);
+}
+
+
 void launch_main_item_deletion_view_cb(appdata_s* ad)
 {
        if (!ad)
@@ -171,6 +323,8 @@ void launch_main_item_deletion_view_cb(appdata_s* ad)
        evas_object_show(bg_box);
        elm_object_part_content_set(layout, "main_box", bg_box);
 
+
+
        if (ad->main_list == NULL || eina_list_count(ad->main_list) <= 0) {
                return;
        } else {
@@ -184,6 +338,10 @@ void launch_main_item_deletion_view_cb(appdata_s* ad)
                evas_object_data_set(buddy_list, "app_data", ad);
                elm_genlist_homogeneous_set(buddy_list, EINA_TRUE);
 
+               evas_object_data_set(buddy_list, "app_data", ad);
+               Eina_Bool all_items_selected = EINA_FALSE;
+               evas_object_data_set(buddy_list, "all_selected", (void *)((int)all_items_selected));
+
                itc.item_style = "type1";
                itc.func.text_get = on_mainlist_title_requested;
                itc.func.content_get = on_mainlist_content_requested;
@@ -193,7 +351,11 @@ void launch_main_item_deletion_view_cb(appdata_s* ad)
                int size = eina_list_count(ad->main_list);
                if(size > 0) {
                        for (i = 0; i <= size; i++) {
-                               elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
+                               if (i < size) {
+                                       tg_main_list_item_s *item = eina_list_nth(ad->main_list, i);
+                                       item->is_selected = EINA_FALSE;
+                               }
+                               elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_main_item_selected, (void*) i);
                        }
                } else {
                        i = 1;
@@ -203,7 +365,21 @@ void launch_main_item_deletion_view_cb(appdata_s* ad)
                elm_box_pack_end(bg_box, buddy_list);
        }
        evas_object_data_set(ad->nf, "main_list_box", bg_box);
-       elm_naviframe_item_push(ad->nf, i18n_get_text("IDS_TGRAM_HEADER_SELECT_CHATS_ABB"), NULL, NULL, scroller, NULL);
-
+       Elm_Object_Item* buddy_sel_nav_item = elm_naviframe_item_push(ad->nf, i18n_get_text("IDS_TGRAM_HEADER_SELECT_CHATS_ABB"), NULL, NULL, scroller, NULL);
+
+       Evas_Object* delete_btn = elm_button_add(ad->layout);
+       elm_object_style_set(delete_btn, "naviframe/title_left");
+       evas_object_smart_callback_add(delete_btn, "clicked", on_delete_selected_items_clicked, ad);
+       elm_object_text_set(delete_btn, i18n_get_text("IDS_TGRAM_OPT_DELETE"));
+       evas_object_show(delete_btn);
+
+       Evas_Object* cancel_btn = elm_button_add(ad->layout);
+       elm_object_style_set(cancel_btn, "naviframe/title_right");
+       evas_object_smart_callback_add(cancel_btn, "clicked", on_selection_cancel_clicked, ad);
+       elm_object_text_set(cancel_btn, i18n_get_text("IDS_TGRAM_BUTTON_CANCEL_ABB5"));
+       evas_object_show(cancel_btn);
+
+       elm_object_item_part_content_set(buddy_sel_nav_item, "title_right_btn", delete_btn);
+       elm_object_item_part_content_set(buddy_sel_nav_item, "title_left_btn", cancel_btn);
 }
 
index e6cf0d4..826ac68 100644 (file)
@@ -860,7 +860,7 @@ Evas_Object *on_message_item_content_get_cb(void *data, Evas_Object *obj, const
 
                                Evas_Object *ser_lbl = elm_label_add(obj);
                                char temp_msg[4*256] = {0,};
-                               snprintf(temp_msg, sizeof(temp_msg), "<font=Tizen:style=Bold color=#008000 align=center><font_size=30>%s</font_size></font>", msg->message);
+                               snprintf(temp_msg, sizeof(temp_msg), "<font=Tizen:style=Bold color=#808080 align=center><font_size=27>%s</font_size></font>", msg->message);
                                elm_object_text_set(ser_lbl, temp_msg);
                                elm_label_ellipsis_set(ser_lbl, EINA_TRUE);
                                //evas_object_resize(ser_lbl, 200, 15);
@@ -1281,7 +1281,8 @@ static Eina_Bool on_new_text_message_send_cb(void *data)
        if (!text_to_send || (strlen(text_to_send) == 0))
                return ECORE_CALLBACK_CANCEL;
 
-       int unique_id = time(NULL);
+       ad->msg_count = ad->msg_count + 1001;
+       int unique_id = time(NULL) + ad->msg_count;
        tg_message_s msg;
        msg.msg_id = unique_id;
        msg.from_id = ad->current_user_data->user_id.id;
@@ -1346,11 +1347,11 @@ static void on_text_message_send_clicked(void *data, Evas_Object *obj, void *eve
                return;
 
        if(add_date_item_to_chat(data)) {
-               ecore_timer_add(3, on_new_text_message_send_cb, chat_list);
+               ecore_timer_add(1, on_new_text_message_send_cb, chat_list);
                return;
        }
-
-       int unique_id = time(NULL);
+       ad->msg_count = ad->msg_count + 1001;
+       int unique_id = time(NULL) + ad->msg_count;
        tg_message_s msg;
        msg.msg_id = unique_id;
        msg.from_id = ad->current_user_data->user_id.id;
@@ -1527,20 +1528,35 @@ void on_user_presence_state_changed(appdata_s* ad, int buddy_id)
        }
 }
 
+static Eina_Bool on_change_input_type_requested(void *data)
+{
+       Evas_Object* text_entry = data;
+
+       elm_entry_input_panel_layout_set(text_entry, ELM_INPUT_PANEL_LAYOUT_EMOTICON);
+       elm_object_focus_set(text_entry, EINA_TRUE);
+       elm_entry_input_panel_show(text_entry);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
 static void on_message_smiley_clicked(void *data, Evas_Object *obj, void *event_info)
 {
        Evas_Object* text_entry = data;
-       //elm_entry_input_panel_hide(text_entry);
-       elm_entry_input_panel_layout_set(text_entry,ELM_INPUT_PANEL_LAYOUT_EMOTICON);
+       elm_object_focus_set(obj, EINA_FALSE);
+       elm_object_focus_set(text_entry, EINA_FALSE);
+       elm_entry_input_panel_hide(text_entry);
+       ecore_timer_add(0.3, on_change_input_type_requested, text_entry);
+       /*
+       elm_entry_input_panel_layout_set(text_entry, ELM_INPUT_PANEL_LAYOUT_EMOTICON);
        elm_object_focus_set(text_entry, EINA_TRUE);
-       //elm_entry_input_panel_show(text_entry);
+       elm_entry_input_panel_show(text_entry);*/
 }
 
 static void on_message_text_entry_clicked(void *data, Evas_Object *obj, void *event_info)
 {
-       //elm_entry_input_panel_hide(obj);
+       elm_entry_input_panel_hide(obj);
        elm_entry_input_panel_layout_set(obj,ELM_INPUT_PANEL_LAYOUT_NORMAL);
-       //elm_entry_input_panel_show(obj);
+       elm_entry_input_panel_show(obj);
 }
 
 
@@ -1572,7 +1588,8 @@ static Eina_Bool on_new_contact_message_send_cb(void *data)
 
        peer_with_pic_s *sel_item =  eina_list_nth(ad->peer_list, user_id);
 
-       int unique_id = time(NULL);
+       ad->msg_count = ad->msg_count + 1001;
+       int unique_id = time(NULL) + ad->msg_count;
 
        char unique_id_str[50];
        sprintf(unique_id_str, "%d", unique_id);
@@ -1641,14 +1658,15 @@ void send_contact_message_to_buddy(void *data, char *first_name, char *last_name
                evas_object_data_set(chat_list, "contact_last_name", strdup(last_name));
                evas_object_data_set(chat_list, "contact_phone_number", strdup(phone_number));
 
-               ecore_timer_add(3, on_new_contact_message_send_cb, chat_list);
+               ecore_timer_add(1, on_new_contact_message_send_cb, chat_list);
                return;
        }
 
 
        peer_with_pic_s *sel_item =  eina_list_nth(ad->peer_list, user_id);
 
-       int unique_id = time(NULL);
+       ad->msg_count = ad->msg_count + 1001;
+       int unique_id = time(NULL) + ad->msg_count;
 
        char unique_id_str[50];
        sprintf(unique_id_str, "%d", unique_id);
@@ -1705,7 +1723,8 @@ static Eina_Bool on_new_location_message_send_cb(void *data)
 
        peer_with_pic_s *sel_item =  eina_list_nth(ad->peer_list, user_id);
 
-       int unique_id = time(NULL);
+       ad->msg_count = ad->msg_count + 1001;
+       int unique_id = time(NULL) + ad->msg_count;
 
        char unique_id_str[50];
        sprintf(unique_id_str, "%d", unique_id);
@@ -1767,13 +1786,14 @@ void send_location_message_to_buddy(void *data, char *latitude, char *longitude)
        if(add_date_item_to_chat(data)) {
                evas_object_data_set(chat_list, "contact_latitude", strdup(latitude));
                evas_object_data_set(chat_list, "contact_longitude", strdup(longitude));
-               ecore_timer_add(3, on_new_location_message_send_cb, chat_list);
+               ecore_timer_add(1, on_new_location_message_send_cb, chat_list);
                return;
        }
 
        peer_with_pic_s *sel_item =  eina_list_nth(ad->peer_list, user_id);
 
-       int unique_id = time(NULL);
+       ad->msg_count = ad->msg_count + 1001;
+       int unique_id = time(NULL) + ad->msg_count;
 
        char unique_id_str[50];
        sprintf(unique_id_str, "%d", unique_id);
@@ -1829,7 +1849,8 @@ static Eina_Bool on_new_media_message_send_cb(void *data)
 
        peer_with_pic_s *sel_item =  eina_list_nth(ad->peer_list, user_id);
 
-       int unique_id = time(NULL);
+       ad->msg_count = ad->msg_count + 1001;
+       int unique_id = time(NULL) + ad->msg_count;
 
        char unique_id_str[50];
        sprintf(unique_id_str, "%d", unique_id);
@@ -1905,12 +1926,13 @@ void send_media_message_to_buddy(void *data, const char* file_path, enum tgl_mes
                evas_object_data_set(chat_list, "file_type", strdup(file_type_char));
                evas_object_data_set(chat_list, "file_path", strdup(file_path));
 
-               ecore_timer_add(3, on_new_media_message_send_cb, chat_list);
+               ecore_timer_add(1, on_new_media_message_send_cb, chat_list);
                return;
        }
        peer_with_pic_s *sel_item =  eina_list_nth(ad->peer_list, user_id);
 
-       int unique_id = time(NULL);
+       ad->msg_count = ad->msg_count + 1001;
+       int unique_id = time(NULL) + ad->msg_count;
 
        char unique_id_str[50];
        sprintf(unique_id_str, "%d", unique_id);
@@ -2465,6 +2487,15 @@ static void on_message_smiley_unpressed(void *data, Evas_Object *obj, void *even
                evas_object_color_set(data, 45, 165, 224, 178);
 }
 
+void on_message_back_button_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       appdata_s *ad = data;
+       if (!ad)
+               return;
+
+       app_nf_back_cb(data, obj, event_info);
+}
+
 void on_user_info_button_clicked(void *data, Evas_Object *obj, void *event_info)
 {
        appdata_s *ad = data;
@@ -2622,6 +2653,7 @@ void launch_messaging_view_cb(appdata_s* ad, int user_id)
        elm_object_part_content_set(main_layout, "swallow.item", title_layout);
 
        Evas_Object *back_btn = create_button(ad->nf, "naviframe/back_btn/default", NULL);
+       evas_object_smart_callback_add(back_btn, "clicked", on_message_back_button_clicked, ad);
        elm_object_part_content_set(title_layout, "swallow.back_arrow", back_btn);
 
 
index b233535..b04153d 100644 (file)
@@ -333,8 +333,6 @@ void on_chat_long_press_option_selected_cb(void *data, Evas_Object *obj, void *e
        tg_main_list_item_s  *sel_item = (tg_main_list_item_s*)evas_object_data_get(popup, "selected_chat_item");
        int item_id = (int)evas_object_data_get(popup, "selected_chat_item_index");
 
-
-
        Elm_Object_Item *it = event_info;
        elm_genlist_item_selected_set(it, EINA_FALSE);
        int id = (int)elm_object_item_data_get(it);
@@ -924,7 +922,7 @@ void reload_main_list_view(appdata_s* ad)
 
                int i = 0;
                static Elm_Genlist_Item_Class itc;
-               itc.item_style = "type1";
+               itc.item_style = "full";
                itc.func.text_get = NULL;
                itc.func.content_get = on_chat_item_load_requested;
                itc.func.state_get = NULL;
@@ -950,7 +948,7 @@ void refresh_main_list_view(appdata_s* ad, Eina_Bool is_new_item)
        if (buddy_list) {
                if (is_new_item) {
                        static Elm_Genlist_Item_Class itc;
-                       itc.item_style = "type1";
+                       itc.item_style = "full";
                        itc.func.text_get = NULL;
                        itc.func.content_get = on_chat_item_load_requested;
                        itc.func.state_get = NULL;
@@ -959,6 +957,28 @@ void refresh_main_list_view(appdata_s* ad, Eina_Bool is_new_item)
                        int size = eina_list_count(ad->main_list);
                        int i = size - 1;
                        elm_genlist_item_append(buddy_list, &itc, (void*) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
+               } else {
+                       elm_genlist_clear(buddy_list);
+
+                       static Elm_Genlist_Item_Class itc;
+                       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 i = 0;
+                       if (ad->main_list) {
+                               int size = eina_list_count(ad->main_list);
+                               if(size > 0) {
+                                       for (i = 0; i < size; i++) {
+                                               elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
+                                       }
+                               } else {
+                                       i = 1;
+                                       elm_genlist_item_append(buddy_list, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, NULL, (void*) i);
+                               }
+                       }
                }
                elm_genlist_realized_items_update(buddy_list);
        } else {
@@ -982,7 +1002,7 @@ void refresh_main_list_view(appdata_s* ad, Eina_Bool is_new_item)
                                evas_object_size_hint_align_set(buddy_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
                                evas_object_data_set(buddy_list, "app_data", ad);
 
-                               itc.item_style = "type1";
+                               itc.item_style = "full";
                                itc.func.text_get = NULL;
                                itc.func.content_get = on_chat_item_load_requested;
                                itc.func.state_get = NULL;
index e160e53..f40b5df 100644 (file)
@@ -509,6 +509,7 @@ typedef struct tg_main_list_item {
        Evas_Object* date_lbl;
        Evas_Object* msg_status_lbl;
        Evas_Object* main_item_layout;
+       Eina_Bool is_selected;
 } tg_main_list_item_s;
 
 typedef struct appdata {
@@ -559,6 +560,7 @@ typedef struct appdata {
        Elm_Theme *theme;
        int screen_mode_for_fb; // for floating button icon
        Evas_Object *menu_popup;
+       int msg_count;
 } appdata_s;
 
 extern void show_toast(appdata_s* ad, char* value);
index 8689429..0f4b621 100644 (file)
@@ -663,6 +663,7 @@ Eina_Bool delete_record(char *tablename, const char* where_clause)
        ret = sqlite3_exec(db,var_query, NULL, NULL, &err_msg);
        close_database(db);
        if( ret != SQLITE_OK ){
+               free(var_query);
                sqlite3_free(err_msg);
                return EINA_FALSE;
        }
index 23462f3..d5fc258 100644 (file)
@@ -15,6 +15,7 @@ extern void process_validation_command(tg_engine_data_s *tg_data, char *code);
 extern void process_send_message_command(int buddy_id, int message_id, int msg_type, char* msg_data, int type_of_chat);
 extern void process_marked_as_read_command(int buddy_id, int type_of_chat);
 extern void process_delete_group_chat_request(tg_engine_data_s* tg_data, int chat_id);
+extern void process_delete_selected_group_chats_request(tg_engine_data_s* tg_data, Eina_List *sel_grp_chats);
 extern void process_add_user_request(tg_engine_data_s* tg_data, int buddy_id, char *first_name, char *last_name, char *phone_num);
 extern void process_update_chat_request(tg_engine_data_s* tg_data, int chat_id);
 extern void process_delete_user_request(tg_engine_data_s* tg_data, int buddy_id);
@@ -42,6 +43,7 @@ extern void send_buddy_profile_pic_updated_response(tg_engine_data_s *tg_data, i
 extern void send_message_received_response(tg_engine_data_s *tg_data, int from_id, int to_id, long long message_id, int type_of_chat);
 extern void send_message_sent_to_buddy_response(tg_engine_data_s *tg_data, int buddy_id, int message_id, char* table_name, Eina_Bool is_success, int type_of_chat);
 extern void send_group_chat_deleted_response(tg_engine_data_s *tg_data, int chat_id, Eina_Bool is_success);
+extern void send_selected_group_chats_deleted_response(tg_engine_data_s *tg_data);
 extern void send_message_read_by_buddy_response(tg_engine_data_s *tg_data, int buddy_id, int message_id, char* table_name, char* phone, int type_of_chat);
 extern void send_media_download_completed_response(tg_engine_data_s *tg_data, int buddy_id, int to_id, long long media_id, const char* filename);
 extern void send_video_thumb_download_completed_response(tg_engine_data_s *tg_data, int buddy_id, int to_id, long long media_id, const char* filename);
index ce8c7d4..c2762fc 100644 (file)
@@ -63,6 +63,14 @@ void process_send_message_command(int buddy_id, int message_id, int msg_type, ch
        send_message_to_buddy(buddy_id, message_id, msg_type, msg_data, type_of_chat);
 }
 
+void process_delete_selected_group_chats_request(tg_engine_data_s* tg_data, Eina_List *sel_grp_chats)
+{
+       if (!tgl_engine_get_TLS()) {
+               return;
+       }
+       delete_selected_group_chat(tg_data, sel_grp_chats);
+}
+
 void process_delete_group_chat_request(tg_engine_data_s* tg_data, int chat_id)
 {
        if (!tgl_engine_get_TLS()) {
@@ -1026,6 +1034,27 @@ void send_buddy_unblocked_response(tg_engine_data_s *tg_data, int buddy_id, Eina
 
 }
 
+void send_selected_group_chats_deleted_response(tg_engine_data_s *tg_data)
+{
+       bundle *msg = bundle_create();
+       if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
+               ERR("Failed to add data by key to bundle");
+               bundle_free(msg);
+       }
+
+       if (bundle_add_str(msg, "command", "selected_group_chats_deleted_response") != 0) {
+               ERR("Failed to add data by key to bundle");
+               bundle_free(msg);
+       }
+       int result = SVC_RES_FAIL;
+       result = tg_server_send_message(tg_data->tg_server, msg);
+
+       if(result != SVC_RES_OK) {
+               // error: cient not ready
+       }
+       bundle_free(msg);
+}
+
 void send_group_chat_deleted_response(tg_engine_data_s *tg_data, int chat_id, Eina_Bool is_success)
 {
        bundle *msg = bundle_create();
index 80e0549..f7fecdf 100644 (file)
@@ -81,6 +81,34 @@ static int _on_tg_server_msg_received_cb(void *data, bundle *const rec_msg)
        int chat_id = atoi(chat_id_str);
 
        process_delete_group_chat_request(tg_data, chat_id);
+
+       } else if (strcmp(cmd_key_val, "delete_selected_group_chats_request") == 0) {
+
+               char* count_str = NULL;
+               res = bundle_get_str(rec_msg, "list_size", &count_str);
+               int size = atoi(count_str);
+               Eina_List* chat_id_list = NULL;
+
+               for (int count = 0 ; count < size ; count++) {
+                       char count_str[10];
+                       sprintf(count_str, "%d", count);
+
+                       char chat_id_key[20];
+                       strcpy(chat_id_key, "chat_id_");
+                       strcat(chat_id_key, count_str);
+
+                       char* chat_id_str = NULL;
+                       res = bundle_get_str(rec_msg, chat_id_key, &chat_id_str);
+
+
+                       int chat_id = atoi(chat_id_str);
+                       chat_id_list = eina_list_append(chat_id_list, chat_id);
+               }
+
+               if (chat_id_list && eina_list_count(chat_id_list) > 0) {
+                       process_delete_selected_group_chats_request(tg_data, chat_id_list);
+               }
+
     } else if (strcmp(cmd_key_val, "add_buddy") == 0) {
 
        char* buddy_id_str = NULL;
index 7267034..f899101 100644 (file)
@@ -1865,6 +1865,11 @@ void on_contacts_and_chats_loaded(struct tgl_state *TLS, void *callback_extra, i
        }
        for (int i = size - 1; i >= 0; i--) {
                tgl_peer_t* UC = tgl_peer_get(TLS, peers[i]);
+        // user exited from chat
+               if(UC->flags == 144) {
+                       continue;
+               }
+
                // insert into peer table
                insert_peer_into_database(UC, last_msg_id[i], unread_count[i], 0);
                switch (tgl_get_peer_type(peers[i])) {
@@ -2815,6 +2820,57 @@ void do_unblock_buddy(int buddy_id)
        tgl_do_unblock_user(s_info.TLS, peer_id, &on_user_unblock_response , (void*)(buddy_id));
 }
 
+void on_selected_group_chats_delete_reponse(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_message *M)
+{
+       Eina_List *sel_grp_chats = callback_extra;
+       tg_engine_data_s *tg_data = TLS->callback_data;
+       int chat_id = eina_list_nth(sel_grp_chats, tg_data->current_group_chat_index);
+
+       if (success) {
+               // update database
+               // delete from peer table
+               delete_chat_from_db(chat_id);
+               char* msg_table = get_table_name_from_number(chat_id);
+               drop_table(msg_table);
+               free(msg_table);
+       } else {
+
+       }
+
+       tg_data->current_group_chat_index = tg_data->current_group_chat_index + 1;
+
+       if (tg_data->current_group_chat_index < eina_list_count(sel_grp_chats)) {
+               int group_chat_id = (int)eina_list_nth(sel_grp_chats, tg_data->current_group_chat_index);
+
+               tgl_peer_id_t chat_id;
+               chat_id.id = group_chat_id;
+               chat_id.type = TGL_PEER_CHAT;
+
+               tgl_peer_id_t self_id = tg_data->id;
+
+               tgl_do_del_user_from_chat(s_info.TLS, chat_id, self_id, on_selected_group_chats_delete_reponse, (void*)(sel_grp_chats));
+       } else {
+               send_selected_group_chats_deleted_response(tg_data);
+       }
+}
+
+void delete_selected_group_chat(tg_engine_data_s *tg_data, Eina_List *sel_grp_chats)
+{
+       if (sel_grp_chats && eina_list_count(sel_grp_chats) > 0) {
+
+               tg_data->current_group_chat_index = 0;
+               int group_chat_id = (int)eina_list_nth(sel_grp_chats, tg_data->current_group_chat_index);
+
+               tgl_peer_id_t chat_id;
+               chat_id.id = group_chat_id;
+               chat_id.type = TGL_PEER_CHAT;
+
+               tgl_peer_id_t self_id = tg_data->id;
+
+               tgl_do_del_user_from_chat(s_info.TLS, chat_id, self_id, on_selected_group_chats_delete_reponse, (void*)(sel_grp_chats));
+       }
+}
+
 void on_group_chat_delete_reponse(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_message *M)
 {
        int chat_id = (int)callback_extra;
@@ -2842,6 +2898,7 @@ void leave_group_chat(tg_engine_data_s *tg_data, int group_chat_id)
 
        tgl_do_del_user_from_chat(s_info.TLS, chat_id, self_id, on_group_chat_delete_reponse, (void*)(group_chat_id));
 }
+
 #if 0
 void on_new_msg_requested_chat_info_received(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_chat *chat_info)
 {
index 86cd61d..5e25f65 100644 (file)
@@ -148,6 +148,7 @@ typedef struct tg_engine_data {
 
        Eina_List *buddy_list;
        int current_buddy_index;
+       int current_group_chat_index;
 } tg_engine_data_s;
 
 typedef struct contact_data {
@@ -171,6 +172,7 @@ extern void set_user_name(tg_engine_data_s *tg_data, int buddy_id, const char *u
 extern void request_for_code_via_call(struct tgl_state *TLS, char* phone_no, Eina_Bool trough_sms);
 extern void free_contact_data(Eina_List *contact_data);
 extern void leave_group_chat(tg_engine_data_s *tg_data, int group_chat_id);
+extern void delete_selected_group_chat(tg_engine_data_s *tg_data, Eina_List *sel_grp_chats);
 extern void do_delete_buddy(int buddy_id);
 extern void do_add_buddy(int buddy_id, char *first_name, char *last_name, char *phone_num);
 extern void do_update_chat_info(int chat_id);