change group system id as extra data
[apps/home/phone-contacts.git] / lib / details / ct-group-assign-view.c
1 /*
2 * Copyright 2012 Samsung Electronics Co., Ltd
3 *
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://floralicense.org/license/
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17
18 #include "phone.h"
19 #include "ct-list.h"
20 #include "ct-input-utils.h"
21 #include "ct-detail-utils.h"
22 #include "ct-group-assign-view.h"
23
24 static Elm_Genlist_Item_Class grp_itc;
25 typedef struct{
26         int selected_radio_index;
27         int contact_id;
28 }ct_selected_radio_info;
29
30 typedef struct {
31         Evas_Object *navi_content;
32         Evas_Object *genlist;
33         Evas_Object *radio_main;
34         Evas_Object *navi;
35         contacts_record_h contact_record;
36         Eina_List *selected_radio_info;
37         bool from_detailview;
38         ct_assign_result_cb assign_cb;
39         void *assign_cb_data;
40         Eina_List *list_contact_id;
41
42         int id_person; //for entry detail view
43         int id_addressbook; //for entry iuput view
44 }ct_assign_group_data;
45
46 typedef struct {
47         Evas_Object *radio_main;
48         int grp_id;
49         int contact_id;
50         int radio_index;
51         char *name;
52         bool selected;
53         bool radio_list;
54         bool group_index;
55         Elm_Object_Item *item;
56 }ct_assign_list;
57
58 static void grp_assign_notify_update(ct_assign_group_data *cgassign_d)
59 {
60         ct_assign_list *info = NULL;
61         Elm_Object_Item *item;
62         int count = 0;
63         p_retm_if(NULL == cgassign_d, "ct_assign_group_data(cgassign_d) is null");
64
65         item = elm_genlist_first_item_get(cgassign_d->genlist);
66         while (item) {
67                 info = elm_object_item_data_get(item);
68                 if (info->selected)
69                         count++;
70                 item = elm_genlist_item_next_get(item);
71         }
72
73         if (0 < count) {
74                 char buf[PH_TEXT_SHORT_LEN];
75                 snprintf(buf, sizeof(buf), "%s (%d)", S_(PH_SYS_POP_SELECTED), count);
76                 phone_show_notify(cgassign_d->navi_content, buf);
77         }
78         else
79                 phone_show_notify(cgassign_d->navi_content, T_(CT_GET_TEXT_BASE_OP, CTTEXT_SELECT_GROUP));
80 }
81
82 static void grp_assign_gl_del(void *data, Evas_Object *obj)
83 {
84         ct_assign_list *info = data;
85         p_retm_if(NULL == data, "data is NULL");
86
87         free(info->name);
88         free(info);
89 }
90
91 static char* grp_assign_gl_label_get(void *data, Evas_Object *obj,
92                 const char *part)
93 {
94         ct_assign_list *info = data;
95         p_retvm_if(NULL == data, NULL, "The parameter(data) is NULL");
96
97         if (!strcmp(part, "elm.text") && info->name)
98                 return strdup(info->name);
99         return NULL;
100 }
101
102 static void grp_assign_check_btn_cb(void *data, Evas_Object *obj, void *event_info)
103 {
104         ct_assign_group_data *cgassign_d;
105         ct_assign_list *info = data;
106         p_retm_if(NULL == data, "The parameter(data) is NULL");
107
108         if (EINA_TRUE == elm_check_state_get(obj))
109                 info->selected = true;
110         else
111                 info->selected = false;
112         cgassign_d = evas_object_data_get(elm_object_item_widget_get(info->item), "cgassign_d");
113         p_retm_if(NULL == cgassign_d, "evas_object_data_get() return NULL");
114         grp_assign_notify_update(cgassign_d);
115 }
116
117 static Evas_Object* grp_assign_gl_icon_get(void *data, Evas_Object *obj,
118                 const char *part)
119 {
120         ct_assign_list *gl = data;
121         p_retvm_if(NULL == data, NULL, "The parameter(data) is NULL");
122
123         if (!strcmp(part, "elm.icon")) {
124                 if(gl->radio_list){
125                         Evas_Object *radio = elm_radio_add(obj);
126                         elm_radio_state_value_set(radio, gl->radio_index);
127                         elm_radio_group_add(radio, gl->radio_main);
128                         if(gl->selected)
129                                 elm_radio_value_set(gl->radio_main, gl->radio_index);
130                         evas_object_smart_callback_add(radio, "changed", grp_assign_check_btn_cb, data);
131                         return radio;
132                 }
133                 else{
134                         Evas_Object *btn = elm_check_add(obj);
135                         elm_check_state_set(btn, gl->selected);
136                         evas_object_propagate_events_set(btn, EINA_FALSE);
137                         evas_object_smart_callback_add(btn, "changed", grp_assign_check_btn_cb, data);
138                         return btn;
139                 }
140         }
141         return NULL;
142 }
143 static void grp_person_assign_done_cb(void *data, Evas_Object *obj, void *event_info)
144 {
145         PH_FN_CALL;
146
147         int i;
148         int err;
149         int group_id;
150         int contact_id = 0;
151         unsigned int relation_count = 0;
152         void *eina_data;
153         char display[PH_TEXT_MAX_LEN];
154         Eina_List *l;
155         contacts_record_h grouprel_record = NULL;
156         contacts_record_h contact_record = NULL;
157         Elm_Object_Item *item;
158         ct_assign_group_data *cgassign_d = data;
159
160         display[0]= '\0';
161         //remove relation field
162
163         EINA_LIST_FOREACH(cgassign_d->list_contact_id, l, eina_data) {
164                 contact_id = (int)eina_data;
165                 err = contacts_db_get_record(_contacts_contact._uri, contact_id, &contact_record );
166                 if(CONTACTS_ERROR_NONE != err){
167                         PH_DBG("contacts_db_get_record() is Failed(%d)", err);
168                         continue;
169                 }
170                 err = contacts_record_get_child_record_count(contact_record,_contacts_contact.group_relation,&relation_count);
171                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_child_record_count() Failed(%d)", err);
172
173                 for (i = relation_count-1; i >= 0; i--) {
174                         err = contacts_record_get_child_record_at_p(contact_record, _contacts_contact.group_relation, i, &grouprel_record);
175                         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_child_record_at_p() Failed(%d)", err);
176
177                         err = contacts_record_get_int(grouprel_record,_contacts_group_relation.group_id,&group_id);
178                         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err);
179                         err = contacts_record_get_int(grouprel_record,_contacts_group_relation.contact_id,&contact_id);
180                         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err);
181
182                         PH_DBG("remove relation group_id=%d, contact_id=%d", group_id,contact_id);
183                         err = contacts_group_remove_contact(group_id,contact_id);
184                         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_group_remove_contact() Failed(%d)", err);
185                 }
186         }
187
188         if (NULL == cgassign_d->genlist) {
189                 if (cgassign_d->assign_cb)
190                         cgassign_d->assign_cb(cgassign_d->assign_cb_data);
191                 elm_naviframe_item_pop(cgassign_d->navi);
192                 return;
193         }
194
195         item = elm_genlist_first_item_get(cgassign_d->genlist);
196         while(item){
197                 ct_assign_list *info = NULL;
198                 info = elm_object_item_data_get(item);
199                 if(info->group_index == true){
200                         item = elm_genlist_item_next_get(item);
201                         continue;
202                 }
203                 ct_selected_radio_info *radio_info;
204                 PH_DBG("contact_id = %d ",info->contact_id);
205                         PH_DBG("info->selected = %d, info->grp_id = %d ",info->selected,info->grp_id);
206                         if(info->selected == true){
207                                 err = contacts_group_add_contact(info->grp_id, info->contact_id);
208                                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_group_add_contact() Failed(%d)", err);
209                         }
210                 item = elm_genlist_item_next_get(item);
211         }
212
213         if (cgassign_d->assign_cb)
214                 cgassign_d->assign_cb(cgassign_d->assign_cb_data);
215
216         phone_hide_notify(cgassign_d->navi_content);
217         elm_naviframe_item_pop(cgassign_d->navi);
218 }
219
220 static void grp_assign_done_cb(void *data, Evas_Object *obj, void *event_info)
221 {
222         PH_FN_CALL;
223         Elm_Object_Item *item;
224         char display[PH_TEXT_MAX_LEN];
225         ct_assign_group_data *cgassign_d = data;
226         int err,i;
227         int group_id,contact_id = 0;
228         display[0]= '\0';
229         contacts_record_h grouprel_record = NULL;
230         Eina_List *l;
231
232         //remove relation field
233         unsigned int relation_count = 0;
234         err = contacts_record_get_child_record_count(cgassign_d->contact_record, _contacts_contact.group_relation, &relation_count);
235         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_child_record_count() Failed(%d)", err);
236         for (i = relation_count-1; i >= 0; i--) {
237                 err = contacts_record_get_child_record_at_p(cgassign_d->contact_record, _contacts_contact.group_relation, i, &grouprel_record);
238                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_child_record_at_p() Failed(%d)", err);
239
240                 err = contacts_record_get_int(grouprel_record, _contacts_group_relation.group_id, &group_id);
241                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err);
242                 err = contacts_record_get_int(grouprel_record, _contacts_group_relation.contact_id, &contact_id);
243                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err);
244
245                 err = contacts_record_remove_child_record(cgassign_d->contact_record, _contacts_contact.group_relation, grouprel_record);
246                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_remove_child_record() Failed(%d)", err);
247
248                 err = contacts_record_destroy(grouprel_record, true);
249                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
250         }
251
252         if (NULL == cgassign_d->genlist) {
253                 if (cgassign_d->assign_cb)
254                         cgassign_d->assign_cb(cgassign_d->assign_cb_data);
255                 elm_naviframe_item_pop(cgassign_d->navi);
256                 return;
257         }
258
259         item = elm_genlist_first_item_get(cgassign_d->genlist);
260
261                 while (item) {
262                         ct_assign_list *info = elm_object_item_data_get(item);
263                         if(info->group_index == true){
264                                 item = elm_genlist_item_next_get(item);
265                                 continue;
266                         }
267                         PH_DBG("info->selected = %d, info->grp_id = %d ",info->selected,info->grp_id);
268                         if(info->selected == true){
269                                 err = contacts_record_create(_contacts_group_relation._uri, &grouprel_record);
270                                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_create() Failed(%d)", err);
271
272                                 err = contacts_record_set_int(grouprel_record,_contacts_group_relation.group_id,info->grp_id);
273                                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_set_int() Failed(%d)", err);
274
275                                 err = contacts_record_add_child_record(cgassign_d->contact_record, _contacts_contact.group_relation, grouprel_record);
276                                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_add_child_record() Failed(%d)", err);
277                         }
278                         item = elm_genlist_item_next_get(item);
279                 }
280         if (cgassign_d->assign_cb)
281                 cgassign_d->assign_cb(cgassign_d->assign_cb_data);
282
283         phone_hide_notify(cgassign_d->navi_content);
284         elm_naviframe_item_pop(cgassign_d->navi);
285
286 }
287
288 static inline void grp_assign_back_cb(void *data, Evas_Object *obj, void *event_info)
289 {
290         ct_assign_group_data *cgassign_d = data;
291
292         if (cgassign_d->assign_cb)
293                 cgassign_d->assign_cb(cgassign_d->assign_cb_data);
294
295         phone_hide_notify(cgassign_d->navi_content);
296         elm_naviframe_item_pop(cgassign_d->navi);
297 }
298
299 static void grp_assign_gl_sel(void *data, Evas_Object *obj, void *event_info)
300 {
301         ct_assign_group_data *cgassign_d = data;
302         ct_assign_list *info;
303         Elm_Object_Item *item = event_info;
304         p_retm_if(NULL == data, "data is NULL");
305         info = elm_object_item_data_get(item);
306         p_retm_if(NULL == info, "elm_object_item_data_get() return NULL");
307         ct_selected_radio_info *radio_info;
308         Eina_List *l;
309         if(info->radio_list){
310                 EINA_LIST_FOREACH(cgassign_d->selected_radio_info,l,radio_info){
311                         if(radio_info->contact_id == info->contact_id)
312                                 radio_info->selected_radio_index = info->radio_index;
313                 }
314                 PH_DBG("selected_radio_index = %d",info->radio_index);
315                 elm_genlist_item_selected_set(item, EINA_FALSE);
316                 elm_genlist_item_update(item);
317                 elm_radio_value_set(info->radio_main, info->radio_index);
318         }
319         else{
320                 info->selected = !info->selected;
321                 elm_genlist_item_selected_set(item, EINA_FALSE);
322                 elm_genlist_item_update(item);
323         }
324         grp_assign_notify_update(cgassign_d);
325 }
326
327 static void grp_assign_fill_genlist(ct_assign_group_data *cgassign_d, contacts_list_h list_groups, int contact_id)
328 {
329         PH_FN_CALL;
330         contacts_record_h grouprel_record = NULL;
331         contacts_error_e err;
332         ct_assign_list *gl;
333         unsigned int relation_count = 0;
334         int radio_index = 1;
335         int i = 0;
336         int group_id = 0;
337         char *system_id = NULL;
338
339         grp_itc.item_style = "1text.1icon.2";
340         grp_itc.func.text_get = grp_assign_gl_label_get;
341         grp_itc.func.content_get = grp_assign_gl_icon_get;
342         grp_itc.func.state_get = NULL;
343         grp_itc.func.del = grp_assign_gl_del;
344
345         do {
346                 gl = calloc(1, sizeof(ct_assign_list));
347
348                 err = phone_cts_get_int_from_list(list_groups, _contacts_group.id, &(gl->grp_id));
349                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err);
350                 PH_DBG("id=%d",gl->grp_id);
351                 gl->contact_id = contact_id;
352
353                 err = phone_cts_get_str_from_list(list_groups, _contacts_group.extra_data, &system_id);
354                 p_warn_if(CONTACTS_ERROR_NONE != err, "phone_cts_get_str_from_list() Failed(%d)", err);
355                 if (NULL != system_id) {
356                         if (strcmp(system_id,"friends")==0)
357                                 gl->name = SAFE_STRDUP(T_(CT_GET_TEXT_BASIC, CTTEXT_FRIENDS));
358                         else if (strcmp(system_id,"family")==0)
359                                 gl->name = SAFE_STRDUP(T_(CT_GET_TEXT_BASIC, CTTEXT_FAMILY));
360                         else if (strcmp(system_id,"coworkers")==0)
361                                 gl->name = SAFE_STRDUP(T_(CT_GET_TEXT_BASIC, CTTEXT_CO_WORKERS));
362                         else
363                                 gl->name = SAFE_STRDUP(T_(CT_GET_TEXT_ERR, CTTEXT_NONAME));
364                 }
365                 else {
366                         err = phone_cts_get_str_from_list(list_groups, _contacts_group.name, &(gl->name));
367                         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str() Failed(%d)", err);
368                         PH_DBG("name=%s",gl->name);
369                 }
370
371                 if(cgassign_d->contact_record) {
372                         err = contacts_record_get_child_record_count(cgassign_d->contact_record, _contacts_contact.group_relation, &relation_count);
373                         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_child_record_count() Failed(%d)", err);
374                         for (i = relation_count-1; i >= 0; i--) {
375                                 err = contacts_record_get_child_record_at_p(cgassign_d->contact_record, _contacts_contact.group_relation, i, &grouprel_record);
376                                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_child_record_at_p() Failed(%d)", err);
377                                 err = contacts_record_get_int(grouprel_record, _contacts_group_relation.group_id, &group_id);
378                                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err);
379                                 if (group_id == gl->grp_id) {
380                                         gl->selected = true;
381                         }
382                 }
383         }
384                 gl->item = elm_genlist_item_append(cgassign_d->genlist, &grp_itc, gl, NULL, ELM_GENLIST_ITEM_NONE, grp_assign_gl_sel, cgassign_d);
385         }while (CONTACTS_ERROR_NONE == contacts_list_next(list_groups));
386 }
387 static char *_account_group_label_get(void *data, Evas_Object *obj, const char *part)
388 {
389         ct_assign_list *gl = data;
390         if (0 == strcmp(part, "elm.text"))
391                 return strdup(gl->name);
392         else
393                 return NULL;
394 }
395 static Elm_Genlist_Item_Class group_index =
396 {
397         .item_style = "grouptitle",
398         .func.text_get = _account_group_label_get,
399 };
400 static void grp_person_assign_fill_layout(ct_assign_group_data *cgassign_d)
401 {
402         PH_FN_CALL;
403         unsigned int count = 0;
404         contacts_error_e err;
405         contacts_record_h contacts_record;
406         contacts_record_h addressbook_record;
407         contacts_list_h group_list;
408         Eina_List *l;
409         int contact_id = -1;
410         int address_book_id = -1;
411         Elm_Object_Item *item;
412         char *address_name;
413         char *contact_name;
414         char temp[PH_TEXT_MAX_LEN+1] ={0,};
415         ct_assign_list *gl;
416         void *data;
417
418         if (NULL == cgassign_d->genlist) {
419                 cgassign_d->genlist = elm_genlist_add(cgassign_d->navi_content);
420                 elm_object_part_content_set(cgassign_d->navi_content, "contents", cgassign_d->genlist);
421                 evas_object_data_set(cgassign_d->genlist, "cgassign_d", cgassign_d);
422         }
423
424         EINA_LIST_FOREACH(cgassign_d->list_contact_id, l, data) {
425                 contact_id = (int)data;
426
427                 err = contacts_db_get_record(_contacts_contact._uri, contact_id, &contacts_record);
428                 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_record() is Failed(%d)", err);
429
430                 err = contacts_record_get_int(contacts_record, _contacts_contact.address_book_id, &address_book_id);
431                 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() is Failed(%d)", err);
432
433                 err = contacts_record_get_str_p(contacts_record, _contacts_contact.display_name, &contact_name);
434                 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() is Failed(%d)", err);
435
436                 err = phone_cts_get_list(_contacts_group._uri, _contacts_group.address_book_id, address_book_id, &group_list);
437                 p_retm_if(CONTACTS_ERROR_NONE != err, "phone_cts_get_list() is Failed(%d)", err);
438
439                 err = contacts_list_get_count(group_list, &count);
440                 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_list_get_count() Failed(%d)", err);
441
442                 if (count >0) {
443                         err = contacts_db_get_record(_contacts_address_book._uri, address_book_id, &addressbook_record);
444                         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_record() Failed(%d)", err);
445                         contacts_record_get_str_p(addressbook_record, _contacts_address_book.name, &address_name);
446                         snprintf(temp, PH_TEXT_MAX_LEN, "%s_%s", address_name, contact_name);
447                         gl = calloc(1, sizeof(ct_assign_list));
448                         gl->name = strdup(temp);
449                         gl->group_index = true;
450                         item = elm_genlist_item_append(cgassign_d->genlist, &group_index, gl , NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
451                         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
452                         cgassign_d->contact_record = contacts_record;
453                         grp_assign_fill_genlist(cgassign_d, group_list, contact_id);
454                         err = contacts_record_destroy(addressbook_record, true);
455                         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_destroy() Failed(%d)", err);
456                 }
457                 err = contacts_list_destroy(group_list, true);
458                 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_destroy() Failed(%d)", err);
459         }
460         grp_assign_notify_update(cgassign_d);
461         evas_object_show(cgassign_d->genlist);
462
463 /*
464         Evas_Object *noc;
465         noc = phone_create_nocontents(cgassign_d->navi_content, T_(CT_GET_TEXT_ERR, CTTEXT_NO_GROUP));
466         p_retm_if(NULL == noc, "phone_create_nocontents() return NULL");
467         elm_object_part_content_set(cgassign_d->navi_content, "contents", noc);
468         evas_object_show(noc);
469         cgassign_d->genlist = NULL;
470 */
471 }
472
473 static void grp_assign_fill_layout(const char *view_uri, void *data)
474 {
475         PH_FN_CALL;
476         unsigned int count = 0;
477         contacts_error_e err;
478         contacts_list_h list;
479         int contact_id = 0;
480         ct_assign_group_data *cgassign_d = data;
481
482         err = phone_cts_get_list(_contacts_group._uri, _contacts_group.address_book_id, cgassign_d->id_addressbook, &list);
483         p_retm_if(CONTACTS_ERROR_NONE != err, "phone_cts_get_list() is Failed(%d)", err);
484
485         err = contacts_list_get_count(list, &count);
486         p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_list_get_count() Failed(%d)", err);
487
488         if (count) {
489                 if (NULL == cgassign_d->genlist) {
490                         cgassign_d->genlist = elm_genlist_add(cgassign_d->navi_content);
491                         elm_object_part_content_set(cgassign_d->navi_content, "contents", cgassign_d->genlist);
492                         evas_object_data_set(cgassign_d->genlist, "cgassign_d", cgassign_d);
493                 }
494                 else
495                         elm_genlist_clear(cgassign_d->genlist);
496                 contact_id = (int)eina_list_nth(cgassign_d->list_contact_id,0);//number of contac id  is only one at input view
497                 grp_assign_fill_genlist(cgassign_d, list,contact_id);
498                 grp_assign_notify_update(cgassign_d);
499                 evas_object_show(cgassign_d->genlist);
500         }
501         else {
502                 Evas_Object *noc;
503                 noc = phone_create_nocontents(cgassign_d->navi_content, T_(CT_GET_TEXT_ERR, CTTEXT_NO_GROUP));
504                 p_retm_if(NULL == noc, "phone_create_nocontents() return NULL");
505                 elm_object_part_content_set(cgassign_d->navi_content, "contents", noc);
506                 evas_object_show(noc);
507                 cgassign_d->genlist = NULL;
508         }
509         err = contacts_list_destroy(list, true);
510         p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_destroy() Failed(%d)", err);
511 }
512
513 static void grp_assign_view_delete_cb(void *data, Evas *e, Evas_Object *obj,
514                 void *event_info)
515 {
516         int ret;
517         Eina_List* l;
518         ct_selected_radio_info *info;
519         ct_assign_group_data *cgassign_d = data;
520         ret = contacts_db_remove_changed_cb(_contacts_group._uri, grp_assign_fill_layout, cgassign_d);
521         p_warn_if(CONTACTS_ERROR_NONE, "contacts_db_remove_changed_cb() Failed(%d)", ret);
522
523
524
525
526         EINA_LIST_FOREACH(cgassign_d->selected_radio_info, l, info)
527                 if (info) free(info);
528
529         eina_list_free(cgassign_d->selected_radio_info);
530
531         free(cgassign_d);
532 }
533
534 static void grp_assign_create_layout(ct_assign_group_data *cgassign_d)
535 {
536         Evas_Object *base;
537         Evas_Object *l_btn;
538         Evas_Object *layout;
539         Elm_Object_Item *navi_item;
540
541         base = phone_create_base_layout(cgassign_d->navi, false);
542
543         layout = elm_layout_add(base);
544         elm_object_part_content_set(base, "elm.swallow.content", layout);
545
546         p_retm_if(NULL == layout, "elm_layout_add return NULL");
547         elm_layout_file_set(layout, SELECTION_INFO_EDJ, "selectioninfo_layout");
548
549         cgassign_d->navi_content = layout;
550
551         evas_object_show(layout);
552
553         if(cgassign_d->id_person > 0)
554                 grp_person_assign_fill_layout(cgassign_d);
555         else
556                 grp_assign_fill_layout(_contacts_group._uri, cgassign_d);
557
558
559         navi_item = elm_naviframe_item_push(cgassign_d->navi,
560                         T_(CT_GET_TEXT_BASE_OP, CTTEXT_SELECT_GROUP), NULL, NULL, layout, NULL);
561
562         if(cgassign_d->from_detailview == true) {
563                 Evas_Object *toolbar_btn = phone_create_toolbar_btn(cgassign_d->navi, S_(CT_SYS_SK_DONE), grp_person_assign_done_cb, cgassign_d);
564                 elm_object_style_set(toolbar_btn, "naviframe/toolbar/left");
565                 elm_object_item_part_content_set(navi_item, "toolbar_button1", toolbar_btn);
566         }
567         else {
568                 Evas_Object *toolbar_btn = phone_create_toolbar_btn(cgassign_d->navi, S_(CT_SYS_SK_DONE), grp_assign_done_cb, cgassign_d);
569                 elm_object_style_set(toolbar_btn, "naviframe/toolbar/left");
570                 elm_object_item_part_content_set(navi_item, "toolbar_button1", toolbar_btn);
571         }
572
573         l_btn = phone_create_toolbar_btn(cgassign_d->navi, S_(PH_SYS_SK_CANCEL), grp_assign_back_cb, cgassign_d);
574         elm_object_style_set(l_btn, "naviframe/toolbar/right");
575         elm_object_item_part_content_set(navi_item, "toolbar_button2", l_btn);
576
577         evas_object_event_callback_add(cgassign_d->navi_content, EVAS_CALLBACK_DEL,
578                         grp_assign_view_delete_cb, cgassign_d);
579 }
580
581 void ct_grp_assign_create_view(Evas_Object *navi, contacts_record_h contact, int id_ab, ct_assign_result_cb assign_cb, void *assign_cb_data)
582 {
583         PH_FN_CALL;
584         int ret;
585         int contact_id;
586         ct_assign_group_data *cgassign_d;
587
588         cgassign_d = calloc(1, sizeof(ct_assign_group_data));
589         cgassign_d->navi = navi;
590         cgassign_d->contact_record = contact;
591         cgassign_d->id_addressbook = id_ab;
592         cgassign_d->assign_cb = assign_cb;
593         cgassign_d->assign_cb_data = assign_cb_data;
594         cgassign_d->from_detailview = false;
595
596         ret = contacts_record_get_int(contact,_contacts_contact.id,&contact_id);
597         p_warn_if(CONTACTS_ERROR_NONE, "contacts_record_get_int() Failed(%d)", ret);
598
599         cgassign_d->list_contact_id = eina_list_append(cgassign_d->list_contact_id,(void*)contact_id);
600         PH_DBG("id_ab = %d,contact_id = %d",id_ab, contact_id);
601         grp_assign_create_layout(cgassign_d);
602
603         contacts_db_add_changed_cb(_contacts_group._uri, grp_assign_fill_layout, cgassign_d);
604         p_warn_if(CONTACTS_ERROR_NONE, "contacts_db_add_changed_cb() Failed(%d)", ret);
605 }
606 void ct_person_grp_assign_create_view(Evas_Object *navi, int person_id, ct_assign_result_cb assign_cb, void *assign_cb_data)
607 {
608         PH_FN_CALL;
609         int ret;
610
611         ct_assign_group_data *cgassign_d;
612         contacts_list_h contact_list = NULL;
613         contacts_record_h record = NULL;
614
615         cgassign_d = calloc(1, sizeof(ct_assign_group_data));
616         cgassign_d->navi = navi;
617         cgassign_d->assign_cb = assign_cb;
618         cgassign_d->assign_cb_data = assign_cb_data;
619         cgassign_d->id_person = person_id;
620         cgassign_d->from_detailview = true;
621
622         ret = phone_cts_get_list(_contacts_simple_contact._uri,_contacts_simple_contact.person_id,person_id,&contact_list);
623         p_warn_if(CONTACTS_ERROR_NONE, "phone_cts_get_list() Failed(%d)", ret);
624         ret = contacts_list_get_current_record_p(contact_list, &record);
625         p_warn_if(CONTACTS_ERROR_NONE, "contacts_list_get_current_record_p() Failed(%d)", ret);
626         while(record){
627                 int contact_id;
628
629                 ret = contacts_record_get_int(record,_contacts_simple_contact.id,&contact_id );
630                 p_warn_if(CONTACTS_ERROR_NONE, "contacts_record_get_int() Failed(%d)", ret);
631                 cgassign_d->list_contact_id = eina_list_append(cgassign_d->list_contact_id,(void*)contact_id);
632                 ret = contacts_list_next(contact_list);
633                 p_warn_if(CONTACTS_ERROR_NONE, "contacts_list_next() Failed(%d)", ret);
634                 ret = contacts_list_get_current_record_p(contact_list, &record);
635                 p_warn_if(CONTACTS_ERROR_NONE, "contacts_list_get_current_record_p() Failed(%d)", ret);
636         }
637         ret = contacts_list_destroy(contact_list, true);
638         p_warn_if(CONTACTS_ERROR_NONE, "contacts_list_destroy() Failed(%d)", ret);
639         grp_assign_create_layout(cgassign_d);
640
641         ret = contacts_db_add_changed_cb(_contacts_group._uri,grp_assign_fill_layout,cgassign_d);
642         p_warn_if(CONTACTS_ERROR_NONE, "contacts_db_add_changed_cb() Failed(%d)", ret);
643 }
644