2 * Copyright 2012 Samsung Electronics Co., Ltd
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
8 * http://floralicense.org/license/
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.
20 #include <vconf-keys.h>
22 #include <app_service.h>
24 #include <ui-gadget-module.h>
29 #include "ct-list-utils.h"
30 #include "ct-list-contact-view.h"
32 #define KEY_GROUP_DATA "cgroup_d"
45 Ecore_Timer *update_timer;
46 Ecore_Timer *waiting_timer;
47 Evas_Object *ctrl_button;
48 Evas_Object *delete_button;
49 Elm_Object_Item *navi_item;
69 GROUP_ITC_GROUP_TITLE,
73 static Elm_Gengrid_Item_Class group_itcs[] = {
74 {.item_style="groupitem.1image"},
75 {.item_style="groupitem.2image"},
76 {.item_style="groupitem.3image"},
77 {.item_style="groupitem.6image"},
78 {.item_style="group_index"},
82 static Eina_Bool group_changed(void *user_data);
84 static void group_gl_del(void *data, Evas_Object *obj)
87 ct_group_list *info = data;
88 p_retm_if(NULL == info, "data is NULL");
91 free(info->img_list[i]);
97 static char* group_gl_label_get(void *data, Evas_Object *obj, const char *part)
99 char buf[PH_TEXT_MAX_LEN];
100 ct_group_list *info = data;
101 ct_group_data *cgroup_d;
103 p_retvm_if(NULL == data, NULL, "The parameter(data) is NULL");
105 cgroup_d = evas_object_data_get(obj, KEY_GROUP_DATA);
106 p_retvm_if(NULL == cgroup_d, NULL, "evas_object_data_get() return NULL");
108 if ((0 == strcmp(part, "text.name") && cgroup_d->group_mode == GROUP_MODE_NORMAL) ||
109 (0 == strcmp(part, "text.edit.name") && cgroup_d->group_mode == GROUP_MODE_EDIT)) {
111 return strdup(info->name);
113 return strdup("Noname");
115 else if ((0 == strcmp(part, "text.count") && cgroup_d->group_mode == GROUP_MODE_NORMAL) ||
116 (0 == strcmp(part, "text.edit.count") && cgroup_d->group_mode == GROUP_MODE_EDIT)) {
117 snprintf(buf, sizeof(buf), "%d", info->count);
123 static char* group_gl_index_label_get(void *data, Evas_Object *obj, const char *part)
129 return strdup((const char *)data);
134 static void group_popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
138 ct_group_data *cgroup_d = data;
139 btn = evas_object_data_get(obj, "expand_btn");
142 icon = elm_object_part_content_get(btn, "icon");
143 elm_icon_file_set(icon, CTUI_IMG_ICON_EXPAND_OPENED, NULL);
144 elm_object_part_content_set(btn, "icon", icon);
146 evas_object_del(cgroup_d->popup);
147 cgroup_d->popup = NULL;
150 static void group_destroy_child_ug(void *data)
152 ct_group_data *cgroup_d = data;
153 cgroup_d->child_ug = NULL;
156 API void phone_group_message_result_cb(void *data, int *list, int cnt)
160 struct ug_cbs cbs = {0};
161 struct ug_priv_data *priv_data;
162 ct_group_data *cgroup_d = data;
163 char buf[PH_TEXT_MAX_LEN] = {'\0'};
164 char temp[PH_TEXT_MAX_LEN+1] = {'\0'};
166 contacts_record_h number_record = NULL;
169 p_retm_if(NULL == cgroup_d, "parameter(cgroup_d) is NULL");
170 p_retm_if(0 == cnt || NULL == list, "parameter(list) is NULL");
172 priv_data = calloc(1, sizeof(struct ug_priv_data));
173 p_retm_if(NULL == priv_data, "calloc is failed");
175 priv_data->destroy_cb = group_destroy_child_ug;
176 priv_data->cb_param = cgroup_d;
178 service_create(&service);
180 for(i = 0; i < cnt; i++){
181 ret = contacts_db_get_record(_contacts_number._uri,list[i],&number_record);
182 if(CONTACTS_ERROR_NONE != ret) {
183 ERR("contacts_db_get_record() Failed(%d)", ret);
187 contacts_record_get_str_p(number_record,_contacts_number.number,&number);
188 if (number && *number) {
190 snprintf(temp, sizeof(temp), "%s", buf);
192 snprintf(buf, sizeof(buf), "%s,%s", temp, number);
194 snprintf(buf, sizeof(buf), "%s", number);
196 contacts_record_destroy(number_record, true);
199 PH_DBG("number %s", buf);
200 service_add_extra_data(service, "TO", buf);
202 cbs.priv = priv_data;
203 cbs.layout_cb = ug_common_layout_cb;
204 cbs.result_cb = NULL;
205 cbs.destroy_cb = ug_common_destroy_cb;
207 ug = ug_create(cgroup_d->ug, MSG_COMPOSER_UG, UG_MODE_FULLVIEW, service, &cbs);
208 service_destroy(service);
212 ERR("%s ug_create is failed", MSG_COMPOSER_UG);
214 evas_object_smart_callback_del(cgroup_d->navi, "transition,finished", ctui_list_edit_navi_pop);
215 cgroup_d->child_ug = ug;
219 API void phone_group_email_result_cb(void *data, int *list, int cnt)
222 Ecore_X_Window win_id;
223 ct_group_data *cgroup_d = data;
226 contacts_record_h email_record = NULL;
227 char buf[PH_TEXT_MAX_LEN+1] = {'\0'};
228 char temp[PH_TEXT_MAX_LEN+1] = {'\0'};
230 p_retm_if(NULL == cgroup_d, "parameter(cgroup_d) is NULL");
231 p_retm_if(0 == cnt || NULL == list, "parameter(list) is NULL");
233 win_id = elm_win_xwindow_get(cgroup_d->win);
234 service_create(&service);
235 service_set_app_id(service, EMAIL_COMPOSER_PKG);
236 service_set_window(service, win_id);
238 for(i = 0; i < cnt; i++){
239 ret = contacts_db_get_record(_contacts_email._uri,list[i],&email_record);
240 if (CONTACTS_ERROR_NONE != ret) {
241 ERR("contacts_db_get_record() Failed(%d)", ret);
244 contacts_record_get_str_p(email_record,_contacts_email.email,&email);
245 if (email && *email) {
247 snprintf(temp, sizeof(temp), "%s", buf);
250 snprintf(buf, sizeof(buf), "%s;%s", temp, email);
252 snprintf(buf, sizeof(buf), "%s", email);
254 contacts_record_destroy(email_record, true);
257 PH_DBG("email %s", buf);
258 service_add_extra_data(service, SERVICE_DATA_TO, buf);
261 service_send_launch_request(service, NULL, NULL);
262 service_destroy(service);
265 static void group_notify_update(ct_group_data *cgroup_d)
267 if (GROUP_MODE_NORMAL == cgroup_d->group_mode)
268 phone_hide_notify(cgroup_d->layout);
270 if (0 < cgroup_d->count) {
271 char buf[PH_TEXT_MAX_LEN+1];
272 snprintf(buf, sizeof(buf), "%s (%d)", S_(PH_SYS_POP_SELECTED), cgroup_d->count);
273 phone_show_notify(cgroup_d->layout, buf);
276 phone_show_notify(cgroup_d->layout, T_(CT_GET_TEXT_BASE_OP, CTTEXT_SELECT_GROUP));
280 static void group_edit_result_cb(int grp_id,void *data, bool changed)
282 ct_group_data *cgroup_d = data;
283 group_notify_update(data);
286 cgroup_d->group_mode = GROUP_MODE_NORMAL;
287 phone_hide_notify(cgroup_d->layout);
288 phone_group_set_navi(cgroup_d->layout);
292 static void group_edit_btn_cb(void *data, Evas_Object *obj, void *event_info)
294 ct_group_data *cgroup_d;
295 ct_group_list *info = data;
297 cgroup_d = evas_object_data_get(elm_object_item_widget_get(info->item), "cgroup_d");
298 p_retm_if(NULL == cgroup_d, "evas_object_data_get() return NULL");
300 phone_hide_notify(cgroup_d->layout);
301 ctui_create_group_input_view(cgroup_d->win, cgroup_d->navi, data, group_edit_result_cb, cgroup_d);
304 static void group_navi_item_update(ct_group_data *cgroup_d)
306 if (0 < cgroup_d->count)
307 elm_object_disabled_set(cgroup_d->delete_button, EINA_FALSE);
309 elm_object_disabled_set(cgroup_d->delete_button, EINA_TRUE);
312 static void group_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
314 ct_group_list *info = data;
315 ct_group_data *cgroup_d;
316 p_retm_if(NULL == data, "data is NULL");
318 cgroup_d = evas_object_data_get(elm_object_item_widget_get(info->item), "cgroup_d");
319 p_retm_if(NULL == cgroup_d, "evas_object_data_get() return NULL");
321 if (EINA_TRUE == info->selected && false == info->is_read_only)
325 group_navi_item_update(cgroup_d);
326 group_notify_update(cgroup_d);
329 static Evas_Object* group_gl_content_get(void *data, Evas_Object *obj, const char *part)
334 ct_group_data *cgroup_d;
335 ct_group_list *info = data;
337 cgroup_d = evas_object_data_get(obj, "cgroup_d");
338 p_retvm_if(NULL == cgroup_d, NULL, "evas_object_data_get() return NULL");
340 if (0 == strcmp(part, "swallow.icon")) {
341 if (CT_UG_REQUEST_SELECT_GROUP == cgroup_d->ug_request ||
342 CT_UG_REQUEST_SELECT_GROUP_ADD_TO_HOME == cgroup_d->ug_request)
344 if (GROUP_MODE_NORMAL == cgroup_d->group_mode)
346 else if (info->id_grp) {
347 button = elm_button_add(obj);
348 p_retvm_if(NULL == button, NULL, "elm_button_add() return NULL");
349 evas_object_propagate_events_set(button, EINA_FALSE);
350 elm_object_style_set(button, "rename");
351 evas_object_smart_callback_add(button, "clicked", group_edit_btn_cb, info);
355 else if (0 == strncmp(part, "swallow.content", 15)) {
357 sscanf(part, "swallow.content%d", &index);
358 p_retvm_if(index<1 || 6<index, NULL, "index(%d) is out of range", index);
360 if (info->img && *info->img) {
361 icon = elm_icon_add(obj);
362 p_retvm_if(NULL == icon, NULL, "elm_icon_add() return NULL");
363 elm_icon_file_set(icon, info->img, NULL);
364 evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_NONE, 1, 1);
365 evas_object_size_hint_align_set(icon, 0.5, EVAS_HINT_FILL);
368 else if (info->img_list[index-1] && *info->img_list[index-1]) {
369 icon = elm_icon_add(obj);
370 p_retvm_if(NULL == icon, NULL, "elm_icon_add() return NULL");
371 elm_icon_file_set(icon, info->img_list[index-1], NULL);
372 evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_NONE, 1, 1);
373 evas_object_size_hint_align_set(icon, 0.5, EVAS_HINT_FILL);
377 else if(0 == strcmp(part, "swallow.edit.icon") && GROUP_MODE_EDIT == cgroup_d->group_mode){
378 if (CT_UG_REQUEST_SELECT_GROUP == cgroup_d->ug_request)
380 if(info->is_read_only == true){
381 check = elm_check_add(obj);
382 p_retvm_if(NULL == check, NULL, "elm_check_add() return NULL");
383 evas_object_show(check);
384 elm_object_disabled_set(check,EINA_TRUE);
388 check = elm_check_add(obj);
389 p_retvm_if(NULL == check, NULL, "elm_check_add() return NULL");
390 evas_object_show(check);
391 evas_object_propagate_events_set(check, EINA_FALSE);
392 elm_check_state_pointer_set(check, &info->selected);
393 elm_check_state_set(check, info->selected);
394 evas_object_smart_callback_add(check, "changed", group_check_changed_cb, info);
400 static void __group_return_id(ui_gadget_h ug, int group_id)
403 service_h service = NULL;
404 char buf[16] = {0, };
406 service_create(&service);
409 snprintf(buf, sizeof(buf), "%d", group_id);
410 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_GROUP_ID, buf);
413 PH_DBG("group_id=%d", group_id);
414 ug_send_result(ug, service);
416 service_destroy(service);
420 static void group_gl_sel(void *data, Evas_Object *obj, void *event_info)
423 Elm_Object_Item *item = event_info;
424 ct_group_data *cgroup_d = data;
425 ct_group_list *info = elm_object_item_data_get(item);
426 ph_view_info *view_info;
427 p_retm_if(NULL == info, "elm_object_item_data_get() return NULL");
429 elm_gengrid_item_selected_set(item, EINA_FALSE);
431 if (CT_UG_REQUEST_SELECT_GROUP == cgroup_d->ug_request) {
432 __group_return_id(cgroup_d->ug, info->id_grp);
433 ug_destroy_me(cgroup_d->ug);
436 else if (GROUP_MODE_NORMAL == cgroup_d->group_mode) {
437 view_info = calloc(1, sizeof(ph_view_info));
438 phone_set_view_info(view_info, cgroup_d->win, cgroup_d->navi, cgroup_d->ug, cgroup_d->ug_request,
439 cgroup_d->ug_cnt_max, cgroup_d->ug_data);
441 if (0 < info->id_grp)
442 ctui_list_create_contact_view_with_info(view_info, CT_GET_LIST_PERSON_OF_GROUP_ID, info);
444 ctui_list_create_contact_view_with_info(view_info, CT_GET_LIST_PERSON_NOT_ASSIGNED_OF_ADDRBOOK_ID, info);
449 if(info->is_read_only == true)return; //skip default group
451 info->selected = !info->selected;
452 elm_gengrid_item_update(info->item);
454 if (EINA_TRUE == info->selected)
459 group_navi_item_update(cgroup_d);
460 group_notify_update(cgroup_d);
464 static void group_create_itcs()
466 group_itcs[GROUP_ITC_GROUP_TITLE].func.text_get = group_gl_index_label_get;
468 group_itcs[GROUP_ITC_1IMAGE].func.text_get = group_gl_label_get;
469 group_itcs[GROUP_ITC_1IMAGE].func.content_get = group_gl_content_get;
470 group_itcs[GROUP_ITC_1IMAGE].func.del = group_gl_del;
472 group_itcs[GROUP_ITC_2IMAGE].func.text_get = group_gl_label_get;
473 group_itcs[GROUP_ITC_2IMAGE].func.content_get = group_gl_content_get;
474 group_itcs[GROUP_ITC_2IMAGE].func.del = group_gl_del;
476 group_itcs[GROUP_ITC_3IMAGE].func.text_get = group_gl_label_get;
477 group_itcs[GROUP_ITC_3IMAGE].func.content_get = group_gl_content_get;
478 group_itcs[GROUP_ITC_3IMAGE].func.del = group_gl_del;
480 group_itcs[GROUP_ITC_6IMAGE].func.text_get = group_gl_label_get;
481 group_itcs[GROUP_ITC_6IMAGE].func.content_get = group_gl_content_get;
482 group_itcs[GROUP_ITC_6IMAGE].func.del = group_gl_del;
485 static Elm_Gengrid_Item_Class* group_get_gengrid_item_class(const char *img, int count)
488 if ((img && *img) || count < 2)
489 return &group_itcs[GROUP_ITC_1IMAGE];
491 return &group_itcs[GROUP_ITC_2IMAGE];
493 return &group_itcs[GROUP_ITC_3IMAGE];
495 return &group_itcs[GROUP_ITC_6IMAGE];
498 static contacts_filter_h group_create_filter_int(contacts_filter_h filter, const char *view_uri, int property_id, contacts_match_int_flag_e flag, int match_value)
500 contacts_error_e err = CONTACTS_ERROR_NONE;
502 if (NULL == filter) {
503 err = contacts_filter_create(view_uri, &filter);
504 p_retvm_if(CONTACTS_ERROR_NONE != err, NULL, "contacts_filter_create() Failed(%d)", err);
507 err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND);
508 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_filter_add_operator() Failed(%d)", err);
511 err = contacts_filter_add_int(filter, property_id, flag, match_value);
512 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_filter_add_int() Failed(%d)", err);
517 static void __group_get_images(ct_group_list *info, contacts_list_h person_list)
520 contacts_error_e err = CONTACTS_ERROR_NONE;
521 contacts_record_h record = NULL;
523 if(person_list == NULL) {
524 ERR("person list is null");
528 err = contacts_list_get_current_record_p(person_list, &record);
529 p_retm_if(CONTACTS_ERROR_NONE != err, "phone_cts_get_list() Failed(%d)", err);
533 contacts_record_get_str_p(record,_contacts_person_grouprel.image_thumbnail_path, &path);
534 info->img_list[cnt++] = SAFE_STRDUP(path);
535 err = contacts_list_next(person_list);
536 if (CONTACTS_ERROR_NONE != err)
538 contacts_list_get_current_record_p(person_list, &record);
545 static void __group_append_gengrid_of_ab(ct_group_data *cgroup_d, int ab_id, int ab_mode)
548 contacts_error_e err = CONTACTS_ERROR_NONE;
549 unsigned int count = 0;
551 contacts_record_h record = NULL;
552 contacts_list_h group_list = NULL;
553 contacts_list_h person_list = NULL;
554 contacts_filter_h filter = NULL;
555 contacts_query_h query = NULL;
557 unsigned int person_grouprel_projection[] = {
558 _contacts_person_grouprel.person_id,
559 _contacts_person_grouprel.status,
560 _contacts_person_grouprel.display_name,
561 _contacts_person_grouprel.display_name_index,
562 _contacts_person_grouprel.addressbook_ids,
563 _contacts_person_grouprel.image_thumbnail_path,
564 _contacts_person_grouprel.link_count,
567 err = phone_cts_get_list(_contacts_group._uri, _contacts_group.address_book_id, ab_id, &group_list);
568 p_warn_if(CONTACTS_ERROR_NONE != err, "phone_cts_get_list() Failed(%d)", err);
570 err = contacts_list_get_current_record_p(group_list, &record);
571 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_get_current_record_p() Failed(%d)", err);
576 char* group_system_id = NULL;
577 bool is_read_only = false;
579 err = contacts_record_get_int(record,_contacts_group.id, &grp_id);
580 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_int() Failed(%d)", err);
581 info = calloc(1, sizeof(ct_group_list));
583 ERR("calloc() return NULL");
587 info->mode = ab_mode;
588 info->id_grp = grp_id;
589 err = contacts_record_get_str_p(record,_contacts_group.image_path,&img);
591 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err);
592 info->img = SAFE_STRDUP(img);
594 contacts_record_get_str_p(record, _contacts_group.extra_data, &group_system_id);
595 if (NULL != group_system_id) {
596 if (strcmp(group_system_id,"friends")==0)
597 info->name = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_FRIENDS));
598 else if (strcmp(group_system_id,"family")==0)
599 info->name = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_FAMILY));
600 else if (strcmp(group_system_id,"coworkers")==0)
601 info->name = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_CO_WORKERS));
603 info->name = strdup(T_(CT_GET_TEXT_ERR, CTTEXT_NONAME));
606 err = contacts_record_get_str_p(record,_contacts_group.name,&gname);
607 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err);
608 info->name = SAFE_STRDUP(gname);
611 err = phone_cts_get_list(_contacts_person_grouprel._uri, _contacts_person_grouprel.group_id, grp_id, &person_list);
612 p_retm_if(CONTACTS_ERROR_NONE != err, "phone_cts_get_list() Failed(%d)", err);
614 err = contacts_record_get_bool(record,_contacts_group.is_read_only, &is_read_only);
615 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_bool() Failed(%d)", err);
616 info->is_read_only = is_read_only;
618 err = contacts_list_get_count(person_list,&count);
619 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_list_get_count() Failed(%d)", err);
621 __group_get_images(info, person_list);
623 info->item = elm_gengrid_item_append(cgroup_d->gengrid, group_get_gengrid_item_class(info->img, info->count), info, group_gl_sel, cgroup_d);
625 err = contacts_list_next(group_list);
626 if (CONTACTS_ERROR_NONE != err) {
627 ERR("contacts_list_next() Failed(%d)", err);
630 err = contacts_list_get_current_record_p(group_list, &record);
631 if (CONTACTS_ERROR_NONE != err) {
632 ERR("contacts_list_get_current_record_p() Failed(%d)", err);
636 err = contacts_list_destroy(group_list, true);
637 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_list_get_current_record_p() Failed(%d)", err);
639 err = contacts_query_create(_contacts_person_grouprel._uri, &query);
640 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_query_create() Failed(%d)", err);
642 filter = group_create_filter_int(filter, _contacts_person_grouprel._uri, _contacts_person_grouprel.address_book_id, CONTACTS_MATCH_EQUAL, ab_id);
643 filter = group_create_filter_int(filter, _contacts_person_grouprel._uri, _contacts_person_grouprel.group_id, CONTACTS_MATCH_NONE, 0);
646 if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter))) break;
647 if (CONTACTS_ERROR_NONE != (err = contacts_query_set_distinct(query, true))) break;
648 if (CONTACTS_ERROR_NONE != (err = contacts_query_set_projection(query, person_grouprel_projection, sizeof(person_grouprel_projection)/sizeof(int)))) break;
649 if (CONTACTS_ERROR_NONE != (err = contacts_db_get_records_with_query(query, 0, 0, &person_list))) break;
651 err = contacts_list_get_count(person_list, &count);
652 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_list_get_count() Failed(%d)", err);
654 if (0 < count && cgroup_d->group_mode == GROUP_MODE_NORMAL ) {
655 info = calloc(1, sizeof(ct_group_list));
656 p_retm_if(NULL == info, "calloc() return NULL");
659 info->mode = ab_mode;
661 info->name = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_NOT_ASSIGNED));
663 info->name = strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_ALL_CONTACTS));
664 __group_get_images(info, person_list);
665 info->item = elm_gengrid_item_append(cgroup_d->gengrid, group_get_gengrid_item_class(info->img, info->count), info, group_gl_sel, cgroup_d);
669 contacts_query_destroy(query);
670 contacts_filter_destroy(filter);
673 static void __group_fill_layout(ct_group_data *cgroup_d)
676 contacts_record_h record = NULL;
677 contacts_list_h addressbook_list = NULL;
679 ret = contacts_db_get_all_records(_contacts_address_book._uri, 0,0, &addressbook_list);
680 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_db_get_all_records() Failed(%d)", ret);
681 ret = contacts_list_get_current_record_p(addressbook_list, &record);
682 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_get_current_record_p() Failed(%d)", ret);
688 ret = contacts_record_get_int(record,_contacts_address_book.id,&ab_id);
689 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_record_get_int() Failed(%d)", ret);
691 name = (char *)T_(CT_GET_TEXT_BASIC, CTTEXT_PHONE);
693 ret = contacts_record_get_str_p(record,_contacts_address_book.name,&name);
694 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_record_get_str() Failed(%d)", ret);
696 ret = contacts_record_get_int(record,_contacts_address_book.mode,&ab_mode);
697 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_record_get_int() Failed(%d)", ret);
699 if (GROUP_MODE_NORMAL == cgroup_d->group_mode || CONTACTS_ADDRESS_BOOK_MODE_READONLY != ab_mode) {
700 elm_gengrid_item_append(cgroup_d->gengrid, &group_itcs[GROUP_ITC_GROUP_TITLE], name, NULL, NULL);
701 __group_append_gengrid_of_ab(cgroup_d, ab_id, ab_mode);
703 ret = contacts_list_next(addressbook_list);
704 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_next() Failed(%d)", ret);
705 ret = contacts_list_get_current_record_p(addressbook_list, &record);
706 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_get_current_record_p() Failed(%d)", ret);
708 ret = contacts_list_destroy(addressbook_list, true);
709 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_destroy() Failed(%d)", ret);
712 static void group_edit_mode_end(ct_group_data *cgroup_d, bool redraw)
714 p_retm_if(NULL == cgroup_d, "parameter(cgroup_d) is NULL");
716 phone_hide_notify(cgroup_d->layout);
717 cgroup_d->group_mode = GROUP_MODE_NORMAL;
719 phone_group_set_navi(cgroup_d->layout);
720 elm_gengrid_clear(cgroup_d->gengrid);
721 __group_fill_layout(cgroup_d);
724 static Eina_Bool group_wait_changed(void *user_data)
726 ct_group_data *cgroup_d = user_data;
727 ecore_timer_del(cgroup_d->waiting_timer);
728 cgroup_d->waiting_timer = NULL;
729 if(cgroup_d->need_update) {
730 PH_DBG("need to update");
731 cgroup_d->need_update = false;
732 group_changed(cgroup_d);
734 return ECORE_CALLBACK_CANCEL;
738 static Eina_Bool group_changed(void *user_data)
740 ct_group_data *cgroup_d = user_data;
741 PH_DBG("group_changed");
742 if(cgroup_d->update_timer) {
743 ecore_timer_del(cgroup_d->update_timer);
744 cgroup_d->update_timer = NULL;
747 if(cgroup_d->waiting_timer) {
748 PH_DBG("waiting 3 seconds for group change");
749 cgroup_d->need_update = true;
750 return ECORE_CALLBACK_RENEW;;
753 cgroup_d->waiting_timer = ecore_timer_add(3.0, group_wait_changed, cgroup_d);
756 elm_gengrid_clear(cgroup_d->gengrid);
757 __group_fill_layout(cgroup_d);
759 return ECORE_CALLBACK_CANCEL;
762 static void group_data_lazy_update(const char* view_uri,void *data)
765 ct_group_data *cgroup_d = data;
767 if (cgroup_d->update_timer) {
768 ecore_timer_del(cgroup_d->update_timer);
769 cgroup_d->update_timer = NULL;
772 PH_DBG("cgroup_d->is_background = %d", cgroup_d->is_background);
774 if (cgroup_d->is_background)
775 cgroup_d->update_timer = ecore_timer_add(3.0, group_changed, cgroup_d);
777 group_changed(cgroup_d);
779 if(cgroup_d->group_mode == GROUP_MODE_EDIT)
780 group_edit_mode_end(cgroup_d, true);
783 static void group_delete_btn_cb(void *data, Evas_Object *obj, void *event_info)
786 bool completed = true;
787 Elm_Object_Item *item;
788 const Elm_Gengrid_Item_Class *itc_temp;
789 ct_group_data *cgroup_d = data;
791 group_popup_hide_cb(cgroup_d, NULL, NULL);
793 item = elm_gengrid_first_item_get(cgroup_d->gengrid);
796 itc_temp = elm_gengrid_item_item_class_get(item);
797 if (0 == strcmp(itc_temp->item_style, group_itcs[GROUP_ITC_GROUP_TITLE].item_style)) {
798 item = elm_gengrid_item_next_get(item);
802 ct_group_list *info = elm_object_item_data_get(item);
803 if (info && info->selected) {
804 ret = contacts_db_delete_record(_contacts_group._uri,info->id_grp);
805 if (CONTACTS_ERROR_NONE != ret) {
806 ERR("Error : contacts_db_delete_record() Failed(%d)", ret);
811 item = elm_gengrid_item_next_get(item);
814 phone_show_tickernoti(S_(PH_SYS_POP_DELETED));
816 phone_show_tickernoti(S_(PH_SYS_POP_FAILED));
818 group_edit_mode_end(cgroup_d, true);
822 static void group_cacnel_btn_cb(void *data, Evas_Object *obj, void *event_info)
824 Elm_Object_Item *item;
825 ct_group_data *cgroup_d = data;
827 const Elm_Gengrid_Item_Class *itc_temp;
829 item = elm_gengrid_first_item_get(cgroup_d->gengrid);
831 itc_temp = elm_gengrid_item_item_class_get(item);
832 if (0 == strcmp(itc_temp->item_style, group_itcs[GROUP_ITC_GROUP_TITLE].item_style)) {
833 item = elm_gengrid_item_next_get(item);
837 info = elm_object_item_data_get(item);
838 if (NULL == info) continue;
839 info->selected = EINA_FALSE;
840 item = elm_gengrid_item_next_get(item);
842 group_edit_mode_end(cgroup_d, true);
845 static void group_edit_cb(void *data, Evas_Object *obj, void *event_info)
847 ct_group_data *cgroup_d = data;
848 if (cgroup_d->popup){
849 evas_object_del(cgroup_d->popup);
850 cgroup_d->popup = NULL;
853 cgroup_d->group_mode = GROUP_MODE_EDIT;
854 phone_group_set_navi(cgroup_d->layout);
855 elm_gengrid_clear(cgroup_d->gengrid);
856 __group_fill_layout(cgroup_d);
857 phone_show_notify(cgroup_d->layout, T_(CT_GET_TEXT_BASE_OP, CTTEXT_SELECT_GROUP));
861 static void group_account_cb(void *data, Evas_Object *obj, void *event_info)
863 ct_group_data *cgroup_d = data;
864 if (cgroup_d->popup){
865 evas_object_del(cgroup_d->popup);
866 cgroup_d->popup = NULL;
869 cgroup_d->child_ug = ctui_account_ug(cgroup_d->ug, NULL, NULL,
870 ctui_destroy_child_ug, &cgroup_d->child_ug);
873 static void group_more_cb(void *data, Evas_Object *obj, void *event_info)
877 ct_group_data *cgroup_d = data;
879 if (cgroup_d->popup){
880 evas_object_del(cgroup_d->popup);
881 cgroup_d->popup = NULL;
884 cgroup_d->popup = elm_ctxpopup_add(cgroup_d->navi);
885 p_retm_if(NULL == cgroup_d->popup, "elm_ctxpopup_add() return NULL");
887 rotate = (int)evas_object_data_get(cgroup_d->navi, "phone_rotate");
888 if (0 == rotate || 180 == rotate)
889 elm_ctxpopup_direction_priority_set(cgroup_d->popup, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_UP,
890 ELM_CTXPOPUP_DIRECTION_LEFT, ELM_CTXPOPUP_DIRECTION_RIGHT);
892 evas_object_smart_callback_add(cgroup_d->popup, "dismissed", group_popup_hide_cb, cgroup_d);
894 elm_ctxpopup_item_append(cgroup_d->popup, S_(PH_SYS_SK_EDIT), NULL,
895 group_edit_cb, cgroup_d);
897 evas_object_geometry_get(cgroup_d->ctrl_button, &x, &y, &w, &h);
898 evas_object_move(cgroup_d->popup, w/2, y+h/2);
899 evas_object_show(cgroup_d->popup);
902 static void group_add_cb(void *data, Evas_Object *obj, void *event_info)
904 ct_group_data *cgroup_d = data;
905 evas_object_data_set(cgroup_d->navi, "navi_it_pop_to", cgroup_d->navi_item);
906 ctui_create_group_input_view(cgroup_d->win, cgroup_d->navi,NULL, NULL, NULL);
909 #ifdef _CT_GROUP_DEFAULT_GROUP_UPDATE_DB
910 static void group_update_default_group_name(keynode_t *key, void *data)
915 contacts_record_h record = NULL;
916 contacts_record_h group_record = NULL;
917 contacts_list_h group_list = NULL;
920 ret = contacts_db_get_all_records( _contacts_group._uri,0,0,&group_list);
921 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_db_get_all_records() Failed(%d)", ret);
922 ret = contacts_list_get_current_record_p(group_list, &record);
923 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_get_current_record_p() Failed(%d)", ret);
929 ret = contacts_record_get_int(record,_contacts_group.id,&grp_id);
930 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_record_get_int() Failed(%d)", ret);
931 ret = contacts_record_get_str_p(record,_contacts_group.extra_data,&group_sysid);
932 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_record_get_str_p() Failed(%d)", ret);
933 ret = contacts_record_get_str_p(record,_contacts_group.name,&group_name);
934 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_record_get_str_p() Failed(%d)", ret);
935 if(group_sysid == NULL){
936 PH_DBG("sysid null ,group_name__ = %s ", group_name);
938 ret = contacts_list_next(group_list);
939 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_next() Failed(%d)", ret);
941 ret = contacts_list_get_current_record_p(group_list, &record);
942 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_get_current_record_p() Failed(%d)", ret);
945 PH_DBG("group_sysid = %s",group_sysid);
946 if(strcmp(group_sysid,"friends")==0)
947 text_index = CTTEXT_FRIENDS;
948 else if(strcmp(group_sysid,"family")==0)
949 text_index = CTTEXT_FRIENDS+1;
950 else if(strcmp(group_sysid,"coworkers")==0)
951 text_index = CTTEXT_FRIENDS+2;
953 ret = contacts_list_next(group_list);
954 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_next() Failed(%d)", ret);
956 ret = contacts_list_get_current_record_p(group_list, &record);
957 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_get_current_record_p() Failed(%d)", ret);
961 if(text_index == -1){
962 ret = contacts_list_next(group_list);
963 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_next() Failed(%d)", ret);
965 ret = contacts_list_get_current_record_p(group_list, &record);
966 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_get_current_record_p() Failed(%d)", ret);
967 ERR("text_index is -1, failed");
971 PH_DBG("text_index = %d",text_index);
973 PH_DBG("group = %s , %s", group_name,T_(CT_GET_TEXT_BASIC, text_index));
975 if(strcmp(group_name,T_(CT_GET_TEXT_BASIC, text_index)) != 0){
976 ret = contacts_db_get_record(_contacts_group._uri,grp_id,&group_record);
977 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_db_get_record() Failed(%d)", ret);
979 ret = contacts_record_set_str(group_record,_contacts_group.name,T_(CT_GET_TEXT_BASIC, text_index));
980 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_record_set_str() Failed(%d)", ret);
982 ret = contacts_db_update_record(group_record);
983 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_db_update_record() Failed(%d)", ret);
985 ret = contacts_record_destroy(group_record, true);
986 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_record_destroy() Failed(%d)", ret);
988 ret = contacts_list_next(group_list);
989 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_next() Failed(%d)", ret);
991 ret = contacts_list_get_current_record_p(group_list, &record);
992 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_get_current_record_p() Failed(%d)", ret);
994 ret = contacts_list_destroy(group_list, true);
995 p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_list_destroy() Failed(%d)", ret);
1000 static void __group_pop_as_topmost(void *data, Evas_Object *obj, void *event_info)
1002 ct_group_data *cgroup_d = data;
1003 if(cgroup_d->navi_item == elm_naviframe_top_item_get(obj)) {
1004 group_notify_update(cgroup_d);
1008 static void group_view_delete_cb(void *data, Evas *e, Evas_Object *obj,
1012 ct_group_data *cgroup_d = data;
1013 p_retm_if(NULL == cgroup_d, "parameter(cgroup_d) is NULL");
1016 ret = contacts_db_remove_changed_cb(_contacts_contact._uri,group_data_lazy_update,cgroup_d);
1017 p_warn_if(CONTACTS_ERROR_NONE, "contacts_db_remove_changed_cb() Failed(%d)", ret);
1018 ret = contacts_db_remove_changed_cb(_contacts_group._uri,group_data_lazy_update,cgroup_d);
1019 p_warn_if(CONTACTS_ERROR_NONE, "contacts_db_remove_changed_cb() Failed(%d)", ret);
1020 ret = contacts_db_remove_changed_cb(_contacts_person._uri, group_data_lazy_update, cgroup_d);
1021 p_warn_if(CONTACTS_ERROR_NONE, "contacts_db_remove_changed_cb() Failed(%d)", ret);
1023 #ifdef _CT_GROUP_DEFAULT_GROUP_UPDATE_DB
1024 ret = vconf_ignore_key_changed(VCONFKEY_LANGSET, group_update_default_group_name);
1025 p_warn_if(-1 == ret, "vconf_ignore_key_changed() Failed");
1029 elm_theme_extension_del(cgroup_d->th, GROUP_THEME_EDJ);
1030 elm_theme_extension_del(cgroup_d->th, CONTACT_BUTTON_THEME_EDJ);
1031 elm_theme_free(cgroup_d->th);
1034 if (cgroup_d->child_ug)
1035 ug_destroy(cgroup_d->child_ug);
1037 if (cgroup_d->crop_ug)
1038 ug_destroy(cgroup_d->crop_ug);
1040 if (cgroup_d->src_ug)
1041 ug_destroy(cgroup_d->src_ug);
1043 if (cgroup_d->popup)
1044 evas_object_del(cgroup_d->popup);
1046 if (cgroup_d->update_timer)
1047 ecore_timer_del(cgroup_d->update_timer);
1049 if (cgroup_d->waiting_timer)
1050 ecore_timer_del(cgroup_d->waiting_timer);
1052 evas_object_smart_callback_del(cgroup_d->navi, "transition,finished", __group_pop_as_topmost);
1057 static int group_create_layout(ct_group_data *cgroup_d, Evas_Object *parent)
1061 const int CT_GROUP_ITEM_WIDTH = 360;
1062 const int CT_GROUP_ITEM_HEIGHT = 340;
1064 Evas_Object *layout;
1066 Evas_Object *gengrid;
1067 cgroup_d->navi = parent;
1069 base = elm_layout_add(cgroup_d->navi);
1070 p_retvm_if(NULL == base, -1, "elm_layout_add() return NULL");
1071 elm_layout_file_set(base, SELECTION_INFO_EDJ, "selectioninfo_layout");
1072 layout = phone_create_base_layout(base, false);
1073 p_retvm_if(NULL == layout, -1, "phone_create_base_layout() return NULL");
1074 elm_object_part_content_set(base, "contents", layout);
1075 cgroup_d->layout = base;
1077 gengrid = elm_gengrid_add(layout);
1078 p_retvm_if(NULL == gengrid, -1, "elm_gengrid_add() return NULL");
1079 elm_object_theme_set(gengrid, cgroup_d->th);
1080 evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1081 elm_gengrid_align_set(gengrid, 0.5, 0.0);
1082 evas_object_data_set(gengrid, "cgroup_d", cgroup_d);
1084 scale = elm_config_scale_get();
1085 elm_gengrid_group_item_size_set(gengrid, (int)(720*scale), (int)(50*scale));
1086 elm_gengrid_item_size_set(gengrid, (int)(CT_GROUP_ITEM_WIDTH*scale), (int)(CT_GROUP_ITEM_HEIGHT*scale));
1087 elm_gengrid_horizontal_set(gengrid, EINA_FALSE);
1089 elm_gengrid_scroller_policy_set(gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
1090 elm_object_part_content_set(layout, "elm.swallow.content", gengrid);
1091 cgroup_d->gengrid = gengrid;
1093 #ifdef _CT_GROUP_DEFAULT_GROUP_UPDATE_DB
1094 group_update_default_group_name(NULL, NULL);
1095 ret = vconf_notify_key_changed(VCONFKEY_LANGSET, group_update_default_group_name, NULL);
1096 p_warn_if(-1 == ret, "vconf_notify_key_changed() Failed");
1099 group_create_itcs();
1100 __group_fill_layout(cgroup_d);
1102 evas_object_event_callback_add(cgroup_d->layout, EVAS_CALLBACK_DEL, group_view_delete_cb, cgroup_d);
1104 ret = contacts_db_add_changed_cb(_contacts_contact._uri, group_data_lazy_update, cgroup_d);
1105 p_warn_if(CONTACTS_ERROR_NONE, "contacts_db_add_changed_cb() Failed(%d)", ret);
1107 ret = contacts_db_add_changed_cb(_contacts_group._uri, group_data_lazy_update, cgroup_d);
1108 p_warn_if(CONTACTS_ERROR_NONE, "contacts_db_add_changed_cb() Failed(%d)", ret);
1110 ret = contacts_db_add_changed_cb(_contacts_person._uri, group_data_lazy_update, cgroup_d);
1111 p_warn_if(CONTACTS_ERROR_NONE, "contacts_db_add_changed_cb() Failed(%d)", ret);
1117 API void phone_group_set_navi(Evas_Object *layout)
1119 ct_group_data *cgroup_d;
1120 Elm_Object_Item *navi_it;
1123 cgroup_d = evas_object_data_get(layout, KEY_GROUP_DATA);
1124 p_retm_if(NULL == cgroup_d, "cgroup_d is NULL");
1125 navi_it = elm_naviframe_bottom_item_get(cgroup_d->navi);
1126 p_retm_if(NULL == navi_it, "navi item is NULL");
1128 phone_navi_item_clear(cgroup_d->navi_item);
1131 r_btn = phone_create_toolbar_btn(cgroup_d->navi, S_(PH_SYS_SK_CANCEL), phone_ug_destroy_me_cb, cgroup_d->ug);
1132 elm_object_item_part_content_set(cgroup_d->navi_item, "toolbar_button1", r_btn);
1135 if (GROUP_MODE_NORMAL == cgroup_d->group_mode) {
1136 Evas_Object *group_button;
1138 cgroup_d->ctrl_button = ctui_create_more_btn(cgroup_d->navi, group_more_cb, cgroup_d);
1139 elm_object_item_part_content_set(navi_it, "toolbar_more_btn", cgroup_d->ctrl_button);
1141 group_button = phone_create_toolbar_btn(cgroup_d->navi, S_(CT_SYS_BODY_CREATE), group_add_cb, cgroup_d);
1142 elm_object_item_part_content_set(navi_it, "toolbar_button1", group_button);
1144 r_btn = elm_button_add(cgroup_d->navi);
1145 elm_object_style_set(r_btn, "naviframe/back_btn/default");
1146 evas_object_smart_callback_add(r_btn, "clicked", phone_back_btn_clicked_cb, cgroup_d->win);
1147 elm_object_item_part_content_set(navi_it, "prev_btn", r_btn);
1150 phone_navi_item_clear(navi_it);
1151 cgroup_d->delete_button = phone_create_toolbar_btn(cgroup_d->navi, S_(PH_SYS_SK_DELETE), group_delete_btn_cb, cgroup_d);
1152 elm_object_item_part_content_set(navi_it, "toolbar_button1", cgroup_d->delete_button);
1153 elm_object_disabled_set(cgroup_d->delete_button, EINA_TRUE);
1155 r_btn = phone_create_toolbar_btn(cgroup_d->navi, S_(PH_SYS_SK_CANCEL), group_cacnel_btn_cb, cgroup_d);
1156 elm_object_item_part_content_set(cgroup_d->navi_item, "toolbar_button2", r_btn);
1161 API Evas_Object* phone_create_group_view(ph_view_info *view_info)
1165 ct_group_data *cgroup_d= calloc(1, sizeof(ct_group_data));
1166 p_retvm_if(NULL == cgroup_d, NULL, "Fail to calloc ct_group_data");
1167 cgroup_d->ug = view_info->ug;
1168 cgroup_d->ug_request = view_info->ug_request;
1169 cgroup_d->ug_cnt_max = view_info->ug_cnt_max;
1170 cgroup_d->ug_data = view_info->ug_data;
1171 cgroup_d->win = view_info->win;
1172 cgroup_d->navi_item = elm_naviframe_bottom_item_get(view_info->navi);
1173 cgroup_d->is_background = true;
1175 th = elm_theme_new();
1176 elm_theme_ref_set(th, NULL);
1177 elm_theme_extension_add(th, GROUP_THEME_EDJ);
1178 elm_theme_extension_add(th, CONTACT_BUTTON_THEME_EDJ);
1181 ret = group_create_layout(cgroup_d, view_info->navi);
1187 evas_object_data_set(cgroup_d->layout, KEY_GROUP_DATA, cgroup_d);
1188 evas_object_data_set(cgroup_d->navi, KEY_GROUP_DATA, cgroup_d);
1190 evas_object_smart_callback_add(view_info->navi, "transition,finished", __group_pop_as_topmost, cgroup_d);
1192 return cgroup_d->layout;
1195 API void phone_group_view_reset(Evas_Object *base)
1198 ct_group_data *cgroup_d;
1199 Elm_Object_Item *item;
1201 cgroup_d = evas_object_data_get(base, KEY_GROUP_DATA);
1202 p_retm_if(NULL == cgroup_d, "cgroup_d is null");
1204 if (cgroup_d->child_ug) {
1205 ug_destroy(cgroup_d->child_ug);
1206 cgroup_d->child_ug = NULL;
1209 item = elm_naviframe_bottom_item_get(cgroup_d->navi);
1210 if (elm_naviframe_top_item_get(cgroup_d->navi) != item)
1211 elm_naviframe_item_pop_to(item);
1213 if (GROUP_MODE_EDIT == cgroup_d->group_mode)
1214 group_edit_mode_end(cgroup_d, false);
1217 API void phone_group_view_language_changed(Evas_Object *base)
1219 ct_group_data *cgroup_d;
1220 cgroup_d = evas_object_data_get(base, KEY_GROUP_DATA);
1221 p_retm_if(NULL == cgroup_d, "evas_object_data_get() return NULL");
1222 group_changed(cgroup_d);
1224 if(cgroup_d->group_mode == GROUP_MODE_EDIT)
1225 group_notify_update(cgroup_d);
1228 API void phone_group_set_background(Evas_Object *obj, bool is_background)
1230 ct_group_data *cgroup_d;
1231 cgroup_d = evas_object_data_get(obj, KEY_GROUP_DATA);
1232 p_retm_if(NULL == cgroup_d, "group data is null");
1234 cgroup_d->is_background = is_background;
1235 if (cgroup_d->update_timer) {
1236 ecore_timer_del(cgroup_d->update_timer);
1237 cgroup_d->update_timer = NULL;
1238 group_changed(cgroup_d);
1242 API Evas_Object* phone_create_group_view_ug(ui_gadget_h ug, Evas_Object *parent, int ug_request)
1246 ct_group_data *cgroup_d= calloc(1, sizeof(ct_group_data));
1247 p_retvm_if(NULL == cgroup_d, NULL, "Fail to calloc ct_group_data");
1249 cgroup_d->ug_request = ug_request;
1250 cgroup_d->navi = elm_naviframe_add(parent);
1251 p_retvm_if(NULL == cgroup_d->navi, FALSE, "elm_naviframe_add() return NULL");
1252 elm_object_part_content_set(parent, "elm.swallow.content", cgroup_d->navi);
1253 evas_object_show(cgroup_d->navi);
1255 th = elm_theme_new();
1256 elm_theme_ref_set(th, NULL);
1257 elm_theme_extension_add(th, GROUP_THEME_EDJ);
1258 elm_theme_extension_add(th, CONTACT_BUTTON_THEME_EDJ);
1261 ret = group_create_layout(cgroup_d, cgroup_d->navi);
1266 cgroup_d->navi_item = elm_naviframe_item_push(cgroup_d->navi, T_(CT_GET_TEXT_BASIC, CTTEXT_GROUP), NULL, NULL, cgroup_d->layout, NULL);
1267 evas_object_data_set(cgroup_d->layout, KEY_GROUP_DATA, cgroup_d);
1268 return cgroup_d->layout;