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 <ui-gadget-module.h>
21 #include <account-types.h>
22 #include <syspopup_caller.h>
24 #include <notification.h>
27 #include "phone-common.h"
30 #define CT_CBAR_ITEM_MAX 4
33 double ph_set_start_time(void)
38 gettimeofday(&tv, NULL);
39 curtime = tv.tv_sec * 1000 + (double)tv.tv_usec/1000;
43 double ph_exec_time(double start)
45 double end = ph_set_start_time();
46 return (end - start - ph_correction);
49 int ph_init_time(void)
52 temp_t = ph_set_start_time();
53 ph_correction = ph_exec_time(temp_t);
59 static void progress_popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
61 bool *is_alive = data;
65 void phone_free_contacts(Eina_List *list)
70 p_retm_if(NULL == list, "list is NULL");
72 EINA_LIST_FOREACH(list, l, cd) {
84 void ctui_list_edit_navi_pop(void *data, Evas_Object *obj, void *event_info)
90 int *result_list_number = NULL;
91 int *result_list_email = NULL;
92 int *result_list_person = NULL;
94 ct_person_list *person_info;
95 ct_list_data *clist_d = data;
97 cnt_checked = ctui_list_checked_cnt_get(clist_d->list);
99 PH_DBG("clist_d->ug_request %d count %d", clist_d->ug_request, cnt_checked);
100 if (CT_UG_REQUEST_CHECK_FOR_NUMBER == clist_d->ug_request)
101 result_list_number = calloc(cnt_checked, sizeof(int));
102 else if (CT_UG_REQUEST_CHECK_FOR_EMAIL == clist_d->ug_request)
103 result_list_email = calloc(cnt_checked, sizeof(int));
104 else if (CT_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL == clist_d->ug_request) {
105 result_list_number = calloc(cnt_checked, sizeof(int));
106 result_list_email = calloc(cnt_checked, sizeof(int));
109 result_list_person = calloc(cnt_checked, sizeof(int));
112 EINA_LIST_FOREACH(clist_d->list, l, person_info) {
113 if (NULL == person_info || !person_info->checked) continue;
114 if (1 == person_info->id_ret_type)
115 result_list_number[number_count++] = person_info->id_ret;
116 else if (2 == person_info->id_ret_type)
117 result_list_email[email_count++] = person_info->id_ret;
119 result_list_person[person_count++] = person_info->id;
122 // setting - import,export / group-view - message,email,chaton,calendar
123 if (clist_d->select_result_cb) { // called by setting view - check person_info
124 if (0 < cnt_checked) {
125 if (result_list_number)
126 clist_d->select_result_cb(clist_d->select_result_cb_data, result_list_number, number_count);
127 else if (result_list_email)
128 clist_d->select_result_cb(clist_d->select_result_cb_data, result_list_email, email_count);
130 clist_d->select_result_cb(clist_d->select_result_cb_data, result_list_person, person_count);
133 if(result_list_person)
134 free(result_list_person);
135 if(result_list_number)
136 free(result_list_number);
137 if(result_list_email)
138 free(result_list_email);
141 void phone_view_back_btn_cb(void *data, Evas_Object *obj, void *event_info)
143 /* TODO : remove evas_object_smart_callback_del, it will be controlled by WINSET */
144 evas_object_smart_callback_del(obj, "clicked", phone_view_back_btn_cb);
145 phone_hide_notify(data);
146 evas_object_smart_callback_del(data, "transition,finished", ctui_list_edit_navi_pop);
147 elm_naviframe_item_pop(data);
150 void ug_common_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
157 base = ug_get_layout(ug);
159 ERR("ug_get_layout() return NULL");
163 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
164 evas_object_show(base);
167 void ug_common_destroy_cb(ui_gadget_h ug, void *priv)
169 struct ug_priv_data *priv_data;
171 p_retm_if(NULL == ug, "ug is NULL");
174 p_retm_if(NULL == priv, "priv is NULL");
176 priv_data = (struct ug_priv_data *)priv;
178 if (priv_data->destroy_cb)
179 priv_data->destroy_cb(priv_data->cb_param);
186 void * phone_image_crop_ug(ui_gadget_h parent, const char *photo,
193 service_create(&service);
194 service_add_extra_data(service, "Path", photo);
195 service_add_extra_data(service, "View Mode", "SETAS");
196 service_add_extra_data(service, "Setas type", "CallerID");
197 service_add_extra_data(service, "Area Size", "100");
199 cbs->layout_cb = ug_common_layout_cb;
201 ug = ug_create(parent, IMG_VIEWER_UG, UG_MODE_FULLVIEW, service, cbs);
202 p_warn_if(NULL == ug, "ug_create() Failed");
204 service_destroy(service);
209 void* phone_launch_msg_composer_ug(void *parent_ug, char *number, int msg_id,
210 void(*destroy_cb)(void*), void *cb_param)
214 struct ug_cbs cbs = {0};
215 struct ug_priv_data *priv_data;
217 char ret[PH_TEXT_MAX_LEN] = {0};
219 priv_data = calloc(1, sizeof(struct ug_priv_data));
220 p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
221 priv_data->destroy_cb = destroy_cb;
222 priv_data->cb_param = cb_param;
224 service_create(&service);
225 if (number && *number)
226 service_add_extra_data(service, "TO", (char*)number);
228 service_add_extra_data(service, "type", "msg_id");
229 snprintf(ret, sizeof(ret), "%d", msg_id);
230 service_add_extra_data(service, "msgId", ret);
233 cbs.priv = priv_data;
234 cbs.layout_cb = ug_common_layout_cb;
235 cbs.result_cb = NULL;
236 cbs.destroy_cb = ug_common_destroy_cb;
238 ug = ug_create(parent_ug, MSG_COMPOSER_UG, UG_MODE_FULLVIEW, service, &cbs);
239 service_destroy(service);
243 ERR("%s ug_create is failed", MSG_COMPOSER_UG);
248 void* phone_launch_contact_detail_ug(void *parent_ug, int contact_index,
249 void(*destroy_cb)(void*), void *cb_param)
252 char buf[PH_TEXT_MAX_LEN] = {0};
253 struct ug_cbs cbs = {0};
256 struct ug_priv_data *priv_data;
258 priv_data = calloc(1, sizeof(struct ug_priv_data));
259 p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
260 priv_data->destroy_cb = destroy_cb;
261 priv_data->cb_param = cb_param;
263 service_create(&service);
265 snprintf(buf, sizeof(buf), "%d", contact_index);
266 service_add_extra_data(service, CT_UG_BUNDLE_ID, buf);
267 snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_DETAIL);
268 service_add_extra_data(service, CT_UG_BUNDLE_TYPE, buf);
270 cbs.priv = priv_data;
271 cbs.layout_cb = ug_common_layout_cb;
272 cbs.result_cb = NULL;
273 cbs.destroy_cb = ug_common_destroy_cb;
275 ug = ug_create(parent_ug, UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, service, &cbs);
276 service_destroy(service);
280 ERR("%s ug_create fail", UG_CONTACTS_DETAILS);
285 void* phone_launch_contact_add_list_edit_ug(void *parent_ug, char *data,
286 void (*destroy_cb)(void *), void *cb_param)
289 char buf[PH_TEXT_MAX_LEN] = {0};
290 struct ug_cbs cbs = {0};
291 struct ug_priv_data *priv_data;
295 priv_data = calloc(1, sizeof(struct ug_priv_data));
296 p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
297 priv_data->destroy_cb = destroy_cb;
298 priv_data->cb_param = cb_param;
300 service_create(&service);
302 snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_NUM);
303 service_add_extra_data(service, CT_UG_BUNDLE_TYPE, buf);
304 snprintf(buf, sizeof(buf), "%s", data);
305 service_add_extra_data(service, CT_UG_BUNDLE_NUM, buf);
306 PH_DBG("number %s", buf);
308 cbs.priv = priv_data;
309 cbs.layout_cb = ug_common_layout_cb;
310 cbs.result_cb = NULL;
311 cbs.destroy_cb = ug_common_destroy_cb;
313 ug = ug_create(parent_ug, UG_CONTACTS_LIST, UG_MODE_FULLVIEW, service, &cbs);
314 service_destroy(service);
317 ERR("%s ug_create fail", UG_CONTACTS_LIST);
322 static void ug_contact_list_result_cb(ui_gadget_h ug, service_h service, void *priv)
326 struct ug_priv_data *priv_data = priv;
328 p_retm_if(NULL == priv, "private data is NULL");
330 service_get_extra_data(service, "id", &temp_p);
333 if (priv_data->result_cb)
334 priv_data->result_cb(priv_data->cb_param, (void*)&id);
338 void* phone_launch_contact_list_ug(void *parent_ug, int request,
339 void(*result_cb)(void*, void*), void(*destroy_cb)(void*), void*cb_param)
342 char ug_request[PH_TEXT_MAX_LEN] = {0};
343 struct ug_priv_data *priv_data;
345 struct ug_cbs cbs = {0};
348 priv_data = calloc(1, sizeof(struct ug_priv_data));
349 p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
350 priv_data->destroy_cb = destroy_cb;
351 priv_data->result_cb = result_cb;
352 priv_data->cb_param = cb_param;
354 service_create(&service);
356 snprintf(ug_request, sizeof(ug_request), "%d", request);
357 service_add_extra_data(service, CT_UG_BUNDLE_TYPE, ug_request);
359 cbs.priv = priv_data;
360 cbs.layout_cb = ug_common_layout_cb;
361 cbs.destroy_cb = ug_common_destroy_cb;
362 cbs.result_cb = ug_contact_list_result_cb;
364 ug = ug_create(parent_ug, UG_CONTACTS_LIST, UG_MODE_FULLVIEW, service, &cbs);
365 service_destroy(service);
368 ERR("%s ug_create fail", UG_CONTACTS_LIST);
373 Evas_Object* phone_create_list_sweep_btn(Evas_Object *parent, char *fullpath)
378 btn = elm_button_add(parent);
379 p_retvm_if(NULL == btn, NULL, "elm_button_add() return NULL");
381 icon = elm_icon_add(btn);
382 p_retvm_if(NULL == icon, NULL, "phone_create_icon_with_img() return NULL");
384 elm_icon_file_set(icon, fullpath, NULL);
385 elm_icon_resizable_set(icon, EINA_FALSE, EINA_FALSE);
386 elm_object_part_content_set(btn, "icon", icon);
391 void phone_resize_notify(Evas_Object *parent, int rotate)
396 p_retm_if(NULL == parent, "parent is NULL");
397 notify = phone_get_notify(parent);
398 layout = elm_object_content_get(notify);
399 msg = edje_object_part_text_get(_EDJ(layout), "elm.text");
401 elm_layout_theme_set(layout, "standard", "selectioninfo", "center_text");
404 edje_object_part_text_set(_EDJ(layout), "elm.text", msg);
407 Evas_Object * phone_get_notify(Evas_Object *parent)
411 notify = evas_object_data_get(parent, "notify");
412 if (NULL == notify) {
413 Evas_Object *info_layout;
414 notify = phone_create_base_layout(parent, false);
415 elm_object_part_content_set(parent, "selectioninfo", notify);
416 info_layout = elm_layout_add(parent);
417 elm_object_part_content_set(notify, "elm.swallow.content", info_layout);
418 elm_layout_theme_set(info_layout, "standard", "selectioninfo", "center_text");
419 evas_object_data_set(parent, "notify", notify);
421 evas_object_show(notify);
425 void phone_show_tickernoti(const char *msg)
427 int err = notification_status_message_post(msg);
428 p_retm_if(NOTIFICATION_ERROR_NONE != err, "notification_status_message_post is failed");
431 void phone_show_notify(Evas_Object *parent, const char *msg)
433 Evas_Object *selectioninfo;
436 notify = phone_get_notify(parent);
437 selectioninfo = elm_object_part_content_get(notify, "elm.swallow.content");
438 elm_object_part_text_set(selectioninfo, "elm.text", msg);
439 elm_object_signal_emit(parent, "show,selection,info", "elm");
440 evas_object_show(selectioninfo);
443 void phone_hide_notify(Evas_Object *parent)
445 Evas_Object *selectioninfo;
448 notify = evas_object_data_get(parent, "notify");
449 selectioninfo = elm_object_part_content_get(notify, "elm.swallow.content");
450 elm_object_signal_emit(parent, "hide,selection,info", "elm");
451 evas_object_hide(notify);
452 evas_object_hide(selectioninfo);
455 static void popup_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info)
457 Evas_Object **popup = data;
458 evas_object_del(*popup);
462 void ctui_popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
464 evas_object_del(data);
467 Evas_Object *phone_show_popup(Evas_Object *parent, const char *desc, double timeout)
471 popup = evas_object_data_get(parent, "popup");
473 popup = elm_popup_add(parent);
474 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
475 evas_object_smart_callback_add(popup, "block,clicked", ctui_popup_hide_cb, NULL);
476 evas_object_show(popup);
478 elm_object_text_set(popup, desc);
479 elm_popup_timeout_set(popup, timeout);
483 Evas_Object* phone_create_confirm_popup(Evas_Object **popup, Evas_Object *win, const char* description,
484 void (*btn_clicked_cb)(void *, Evas_Object *, void *), void *cb_data)
486 Evas_Object *btn1, *btn2;
487 *popup = elm_popup_add(win);
488 evas_object_size_hint_weight_set(*popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
489 elm_object_text_set(*popup, description);
491 btn1 = elm_button_add(*popup);
492 elm_object_text_set(btn1, S_(PH_SYS_SK_YES));
493 elm_object_part_content_set(*popup, "button1", btn1);
494 elm_object_style_set(btn1, "popup_button/default");
495 evas_object_smart_callback_add(btn1, "clicked", btn_clicked_cb, cb_data);
497 btn2 = elm_button_add(*popup);
498 elm_object_text_set(btn2, S_(PH_SYS_SK_NO));
499 elm_object_part_content_set(*popup, "button2", btn2);
500 elm_object_style_set(btn2, "popup_button/default");
501 evas_object_smart_callback_add(btn2, "clicked", popup_cancel_btn_cb, &(*popup));
503 evas_object_show(*popup);
508 void phone_launch_voice_call(const int person_id, const char* number)
510 char buf[PH_TEXT_MAX_LEN] = {0};
514 ret = service_create(&service);
515 p_retm_if(SERVICE_ERROR_NONE != ret, "service_create() Failed(%d)", ret);
517 service_set_operation(service, SERVICE_OPERATION_CALL);
518 snprintf(buf, sizeof(buf), "tel:%s", number);
519 service_set_uri(service, buf);
522 char buf[PH_TEXT_MAX_LEN] = {0};
523 snprintf(buf, sizeof(buf), "%d", person_id);
524 service_add_extra_data(service, "ctindex", buf);
527 service_send_launch_request(service, NULL, NULL);
528 service_destroy(service);
531 Evas_Object* phone_create_base_layout(Evas_Object *parent, bool is_fullview)
535 base = elm_layout_add(parent);
536 p_retvm_if(NULL == base, NULL, "elm_layout_add() Failed");
538 elm_layout_theme_set(base, "layout", "application", "default");
540 elm_layout_theme_set(base, "layout", "application", "noindicator");
541 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
546 void phone_ug_destroy_me_cb(void *data, Evas_Object *obj, void *event_info)
554 void phone_back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
556 Evas_Object *win = data;
560 Evas_Object* phone_create_bg(Evas_Object *parent)
564 bg = elm_bg_add(parent);
565 p_retvm_if(NULL == bg, NULL, "elm_bg_add() return NULL");
567 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
568 elm_object_part_content_set(parent, "elm.swallow.bg", bg);
573 Evas_Object* phone_progressbar_popup(Evas_Object *parent, ph_progress_info *p_info, const char *title)
575 char buf[PH_TEXT_MAX_LEN];
579 Evas_Object *progressbar;
582 popup = elm_popup_add(parent);
583 p_retvm_if(NULL == popup, NULL, "elm_popup_add() return NULL");
585 layout = elm_layout_add(popup);
586 p_retvm_if(NULL == layout, NULL, "elm_layout_add() return NULL");
587 elm_layout_file_set(layout, PROGRESS_EDJ, "popup_center_text_progressview");
588 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
589 p_info->layout = layout;
591 label = elm_label_add(popup);
592 p_retvm_if(NULL == label, NULL, "elm_label_add() return NULL");
593 elm_object_style_set(label, "popup/progressview");
594 elm_label_line_wrap_set(label, ELM_WRAP_WORD);
595 elm_object_text_set(label, title);
596 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
597 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
598 evas_object_show(label);
600 progressbar = elm_progressbar_add(popup);
601 p_retvm_if(NULL == progressbar, NULL, "elm_progressbar_add() return NULL");
602 p_info->progressbar= progressbar;
604 if (0 < p_info->cnt_checked_total) {
605 elm_object_style_set(progressbar, "list_progress");
606 elm_progressbar_value_set(progressbar, 0.0);
609 elm_object_style_set(progressbar, "pending_list");
610 elm_progressbar_pulse(progressbar, EINA_TRUE);
613 evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
614 evas_object_show(progressbar);
616 elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
617 elm_object_part_content_set(layout, "elm.swallow.content", label);
618 elm_object_part_content_set(layout, "elm.swallow.end", progressbar);
619 evas_object_show(layout);
620 elm_object_content_set(popup, layout);
622 if(false == p_info->without_cancel_btn)
624 btn = elm_button_add(popup);
625 elm_object_text_set(btn, S_(PH_SYS_SK_CANCEL));
626 elm_object_part_content_set(popup, "button1", btn);
627 elm_object_style_set(btn, "popup_button/default");
628 evas_object_smart_callback_add(btn, "clicked", progress_popup_cancel_cb, &p_info->alive);
630 evas_object_show(popup);
634 void phone_navi_item_clear(Elm_Object_Item *navi_item)
637 Evas_Object *toolbar_button = NULL;
638 const char* toolbar_button_name[] = {
647 for (i=0;i<sizeof(toolbar_button_name)/sizeof(char*);i++) {
648 toolbar_button = elm_object_item_part_content_unset(navi_item, toolbar_button_name[i]);
650 evas_object_del(toolbar_button);
654 Evas_Object *phone_create_icon_with_img(Evas_Object *parent, char *full_path)
656 Evas_Object *ic = elm_icon_add(parent);
657 p_retvm_if(NULL == ic, NULL, "elm_icon_add() return NULL");
658 elm_icon_file_set(ic, full_path, NULL);
659 elm_icon_resizable_set(ic, EINA_TRUE, EINA_TRUE);
660 evas_object_image_smooth_scale_set(ic, EINA_FALSE);
665 contacts_error_e phone_cts_get_list(const char *view_uri, int property_id, int match_value, contacts_list_h *out_list)
667 contacts_error_e err = CONTACTS_ERROR_NONE;
668 contacts_filter_h filter = NULL;
669 contacts_query_h query = NULL;
671 p_retvm_if(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER, "parameter(out_list) is NULL");
673 unsigned int person_grouprel_projection[] = {
674 _contacts_person_grouprel.person_id,
675 _contacts_person_grouprel.status,
676 _contacts_person_grouprel.display_name,
677 _contacts_person_grouprel.display_name_index,
678 _contacts_person_grouprel.addressbook_ids,
679 _contacts_person_grouprel.image_thumbnail_path,
680 _contacts_person_grouprel.link_count,
683 err = contacts_filter_create(view_uri, &filter);
684 p_retvm_if(CONTACTS_ERROR_NONE != err, err, "contactcs_filter_create() Failed(%d)", err);
687 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, property_id, CONTACTS_MATCH_EQUAL, match_value))) break;
688 if (CONTACTS_ERROR_NONE != (err = contacts_query_create(view_uri, &query))) break;
689 if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter))) break;
691 if (0 == strcmp(view_uri, _contacts_person_grouprel._uri)) {
692 if (CONTACTS_ERROR_NONE != (err = contacts_query_set_distinct(query, true))) break;
693 if (CONTACTS_ERROR_NONE != (err = contacts_query_set_projection(query, person_grouprel_projection, sizeof(person_grouprel_projection)/sizeof(int)))) break;
696 if (CONTACTS_ERROR_NONE != (err = contacts_db_get_records_with_query(query, 0, 0, out_list))) break;
698 contacts_filter_destroy(filter);
699 contacts_query_destroy(query);
701 return CONTACTS_ERROR_NONE;
703 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_query_create() Failed(%d)", err);
705 contacts_filter_destroy(filter);
706 contacts_query_destroy(query);
711 void phone_cts_free_list(contacts_list_h list)
713 contacts_error_e err = CONTACTS_ERROR_NONE;
714 err = contacts_list_destroy(list, true);
715 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_destroy() Failed(%d)", err);
718 contacts_error_e phone_cts_get_int_from_list(contacts_list_h list, int property_id, int *out_int)
720 contacts_error_e err = CONTACTS_ERROR_NONE;
721 contacts_record_h record = NULL;
723 p_retvm_if(NULL == out_int, CONTACTS_ERROR_INVALID_PARAMETER, "parameter(out_int) is NULL");
724 p_retvm_if(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "parameter(list) is NULL");
726 err = contacts_list_get_current_record_p(list, &record);
727 if (CONTACTS_ERROR_NONE != err) {
728 ERR("contacts_list_get_current_record_p() Failed(%d)", err);
732 err = contacts_record_get_int(record, property_id, out_int);
733 if (CONTACTS_ERROR_NONE != err) {
734 ERR("contacts_record_get_int() Failed(%d)", err);
738 return CONTACTS_ERROR_NONE;
741 contacts_error_e phone_cts_get_str_from_list(contacts_list_h list, int property_id, char **out_str)
743 contacts_error_e err = CONTACTS_ERROR_NONE;
744 contacts_record_h record = NULL;
746 p_retvm_if(NULL == out_str, CONTACTS_ERROR_INVALID_PARAMETER, "parameter(out_int) is NULL");
747 p_retvm_if(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "parameter(list) is NULL");
749 err = contacts_list_get_current_record_p(list, &record);
750 if (CONTACTS_ERROR_NONE != err) {
751 ERR("contacts_list_get_current_record_p() Failed(%d)", err);
755 err = contacts_record_get_str(record, property_id, out_str);
756 if (CONTACTS_ERROR_NONE != err) {
757 ERR("contacts_record_get_str() Failed(%d)", err);
761 return CONTACTS_ERROR_NONE;
764 contacts_error_e phone_cts_get_bool_from_list(contacts_list_h list, int property_id, bool *out_bool)
766 contacts_error_e err = CONTACTS_ERROR_NONE;
767 contacts_record_h record = NULL;
769 p_retvm_if(NULL == out_bool, CONTACTS_ERROR_INVALID_PARAMETER, "parameter(out_bool) is NULL");
770 p_retvm_if(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER, "parameter(list) is NULL");
772 err = contacts_list_get_current_record_p(list, &record);
773 if (CONTACTS_ERROR_NONE != err) {
774 ERR("contacts_list_get_current_record_p() Failed(%d)", err);
778 err = contacts_record_get_bool(record, property_id, out_bool);
779 if (CONTACTS_ERROR_NONE != err) {
780 ERR("contacts_record_get_bool() Failed(%d)", err);
784 return CONTACTS_ERROR_NONE;
788 char* ctui_get_addressbook_icon_path(int addressbook_id)
793 char *addressbook_name = NULL;
795 contacts_error_e err = CONTACTS_ERROR_NONE;
796 contacts_record_h record = NULL;
798 err = contacts_db_get_record(_contacts_address_book._uri, addressbook_id, &record);
799 p_retvm_if(CONTACTS_ERROR_NONE != err, NULL, "phone_cts_get_list() Failed(%d)", err);
801 err = contacts_record_get_int(record, _contacts_address_book.account_id, &account_id);
802 if (CONTACTS_ERROR_NONE != err) {
803 ERR("contacts_record_get_int() Failed(%d)", err);
804 err = contacts_record_destroy(record, true);
805 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
808 err = contacts_record_get_str_p(record, _contacts_address_book.name, &addressbook_name);
809 if (CONTACTS_ERROR_NONE != err) {
810 ERR("contacts_record_get_int() Failed(%d)", err);
811 err = contacts_record_destroy(record, true);
812 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
816 if (0 == account_id){
817 return SAFE_STRDUP(CTUI_IMG_ACC_PHONE);
821 ret = account_connect();
822 p_retvm_if(ACCOUNT_ERROR_NONE != ret, NULL, "account_connect() Failed(%d)", ret);
825 ret = account_create(&account);
826 p_retvm_if(ACCOUNT_ERROR_NONE != ret, false, "account_create() Failed(%d)", ret);
828 ret = account_query_account_by_account_id(account_id, &account);
829 if (ACCOUNT_ERROR_NONE != ret) {
830 ERR("account_query_account_by_account_id() Failed(%d)", ret);
831 account_destroy(account);
832 account_disconnect();
835 p_retvm_if(ACCOUNT_ERROR_NONE != ret, NULL, "account_query_account_by_account_id() Failed(%d)", ret);
837 ret = account_get_icon_path(account, &icon_path);
838 if (ACCOUNT_ERROR_NONE != ret) {
839 ERR("account_get_icon_path() Failed(%d)", ret);
840 account_destroy(account);
841 account_disconnect();
844 account_destroy(account);
845 account_disconnect();
850 Evas_Object* phone_create_navi_btn(Evas_Object *parent, const char *style)
854 btn = elm_button_add(parent);
855 elm_object_style_set(btn, style);
856 evas_object_show(btn);
861 void phone_set_view_info(ph_view_info *view_info, Evas_Object *win, Evas_Object *navi,
862 void *ug, int ug_request, int cnt_max, char *ug_data)
864 view_info->win = win;
865 view_info->navi = navi;
867 view_info->ug_request = ug_request;
868 view_info->ug_cnt_max = cnt_max;
869 view_info->ug_data = ug_data;
872 void phone_list_ug_return_ids(ui_gadget_h ug, int *result_list, int cnt, const char *bd_key)
877 service_create(&service);
880 encoded_str = g_base64_encode((guchar *)result_list, cnt*sizeof(int));
881 service_add_extra_data(service, bd_key, encoded_str);
885 ug_send_result(ug, service);
887 service_destroy(service);
890 void phone_list_ug_return_values(service_h service, int *result_list, int cnt, const char *result_type)
895 char **result_array = NULL;
896 service_result_e result = SERVICE_RESULT_SUCCEEDED;
898 p_retm_if(result_list == NULL || cnt < 1 || result_type == NULL, "invalid input param");
900 service_create(&reply);
901 result_array = calloc(cnt, sizeof(char *));
903 if(strcmp(CT_OPERATION_RESULT_TYPE_PHONE, result_type) == 0) {
904 for (i = 0; i < cnt; i++) {
905 contacts_record_h number_record = NULL;
907 ct_ret = contacts_db_get_record(_contacts_number._uri, result_list[i], &number_record);
908 if (ct_ret != CONTACTS_ERROR_NONE) {
909 ERR("contacts_db_get_record number failed id %d", result_list[i]);
913 contacts_record_get_str_p(number_record, _contacts_number.number, &number);
914 result_array[i] = strdup(number);
915 PH_DBG("number %s", result_array[i]);
916 contacts_record_destroy(number_record, TRUE);
919 service_add_extra_data_array(reply, CT_OPERATION_PHONE, (const char **)result_array, cnt);
921 else if(strcmp(CT_OPERATION_RESULT_TYPE_EMAIL, result_type) == 0) {
922 for (i = 0; i < cnt; i++) {
923 contacts_record_h email_record = NULL;
925 ct_ret = contacts_db_get_record(_contacts_email._uri, result_list[i], &email_record);
926 if (ct_ret != CONTACTS_ERROR_NONE) {
927 ERR("contacts_db_get_record email faile id %d", result_list[i]);
931 contacts_record_get_str_p(email_record, _contacts_email.email, &email);
932 result_array[i] = strdup(email);
933 PH_DBG("email %s", result_array[i]);
934 contacts_record_destroy(email_record, TRUE);
937 service_add_extra_data_array(reply, CT_OPERATION_EMAIL, (const char **)result_array, cnt);
940 else if(strcmp(CT_OPERATION_RESULT_TYPE_ITEM_ID, result_type) == 0) {
941 for (i = 0; i < cnt; i++) {
943 snprintf(buf, sizeof(buf), "%d", result_list[i]);
944 result_array[i] = strdup(buf);
945 PH_DBG("person id %s", result_array[i]);
948 service_add_extra_data_array(reply, CT_OPERATION_ITEM_ID, (const char **)result_array, cnt);
952 ERR("wrong result type %s", result_type);
953 result = SERVICE_RESULT_FAILED;
956 service_reply_to_launch_request(reply, service, result);
957 service_destroy(reply);
959 for (j = 0; j < i; j++) {
960 free(result_array[j]);
965 void phone_service_reply_simple(service_h service, service_result_e result)
968 service_create(&reply);
969 service_reply_to_launch_request(reply, service, result);
970 service_destroy(reply);
973 void phone_list_ug_return_number_email_ids(ui_gadget_h ug, int *result_number_list, int number_list_count, int *result_email_list, int email_list_count)
977 service_create(&service);
979 if (result_number_list && number_list_count) {
980 encoded_str = g_base64_encode((guchar *)result_number_list, number_list_count*sizeof(int));
981 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_NUMBER_ID_LIST, encoded_str);
985 if (result_email_list && email_list_count) {
986 encoded_str = g_base64_encode((guchar *)result_email_list, email_list_count*sizeof(int));
987 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_EMAIL_ID_LIST, encoded_str);
991 ug_send_result(ug, service);
992 service_destroy(service);
996 #define CT_UG_BUNDLE_RESULT_ID "id"
997 #define CT_UG_BUNDLE_RESULT_VCARD "vcard"
999 void phone_ug_return_id(ui_gadget_h ug, int ct_id, int num_id, int email_id)
1004 service_create(&service);
1007 snprintf(buf, sizeof(buf), "%d", ct_id);
1008 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_ID, buf);
1009 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_PERSON_ID, buf);
1013 snprintf(buf, sizeof(buf), "%d", num_id);
1014 service_remove_extra_data(service, CT_UG_BUNDLE_RESULT_ID);
1015 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_ID, buf);
1016 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_NUMBER_ID, buf);
1020 snprintf(buf, sizeof(buf), "%d", email_id);
1021 service_remove_extra_data(service, CT_UG_BUNDLE_RESULT_ID);
1022 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_ID, buf);
1023 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_EMAIL_ID, buf);
1026 PH_DBG("ct_id =%d, num_id=%d,email_id=%d",ct_id,num_id,email_id);
1027 ug_send_result(ug, service);
1029 service_destroy(service);
1032 void phone_ug_return_value(service_h service, int person_id, int num_id, int email_id, int result_id)
1036 contacts_error_e err = CONTACTS_ERROR_NONE;
1037 contacts_record_h number_record = NULL;
1038 contacts_record_h email_record = NULL;
1040 service_create(&reply);
1043 char **result_array = NULL;
1044 result_array = calloc(1, sizeof(char *));
1046 snprintf(buf, sizeof(buf), "%d", person_id);
1047 PH_DBG("person id %s", buf);
1049 result_array[0] = strdup(buf);
1050 service_add_extra_data_array(reply, CT_OPERATION_ITEM_ID, (const char **)result_array, 1);
1052 service_reply_to_launch_request(reply, service, SERVICE_RESULT_SUCCEEDED);
1054 service_destroy(reply);
1056 free(result_array[0]);
1063 const char *number = NULL;
1064 char **result_array = NULL;
1065 result_array = calloc(1, sizeof(char *));
1067 err = contacts_db_get_record(_contacts_number._uri, num_id, &number_record);
1068 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_record() Failed(%d)", err);
1070 err = contacts_record_get_str_p(number_record, _contacts_number.number, (char**)&number);
1071 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err);
1073 PH_DBG("number=%d", number);
1075 result_array[0] = strdup(number);
1076 service_add_extra_data_array(reply, CT_OPERATION_RESULT_TYPE_PHONE, (const char **)result_array, 1);
1078 service_reply_to_launch_request(reply, service, SERVICE_RESULT_SUCCEEDED);
1080 err = contacts_record_destroy(number_record, true);
1081 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
1083 service_destroy(reply);
1085 free(result_array[0]);
1092 const char *email = NULL;
1093 char **result_array = NULL;
1094 result_array = calloc(1, sizeof(char *));
1096 err = contacts_db_get_record(_contacts_email._uri, email_id, &email_record);
1097 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_record() Failed(%d)", err);
1099 err = contacts_record_get_str_p(email_record, _contacts_email.email, (char**)&email);
1100 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err);
1102 PH_DBG("email=%d", email);
1104 result_array[0] = strdup(email);
1105 service_add_extra_data_array(reply, CT_OPERATION_RESULT_TYPE_EMAIL, (const char **)result_array, 1);
1107 service_reply_to_launch_request(reply, service, SERVICE_RESULT_SUCCEEDED);
1109 err = contacts_record_destroy(email_record, true);
1110 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
1112 service_destroy(reply);
1114 free(result_array[0]);
1121 snprintf(buf, sizeof(buf), "%d", person_id);
1122 PH_DBG("person id %s", buf);
1124 service_add_extra_data(reply, CT_OPERATION_ITEM_ID, buf);
1126 service_reply_to_launch_request(reply, service, SERVICE_RESULT_SUCCEEDED);
1128 service_destroy(reply);
1135 void phone_ug_operation_return_vcard(service_h service, int ct_id, char *vcard)
1139 service_create(&reply);
1142 service_add_extra_data(reply, CT_OPERATION_PATH, vcard);
1145 service_reply_to_launch_request(reply, service, SERVICE_RESULT_SUCCEEDED);
1147 service_destroy(reply);
1150 void phone_ug_return_vcard(ui_gadget_h ug, int ct_id, char *vcard)
1155 service_create(&service);
1158 snprintf(buf, sizeof(buf), "%d", ct_id);
1159 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_ID, buf);
1163 service_add_extra_data(service, CT_UG_BUNDLE_RESULT_VCARD, vcard);
1166 ug_send_result(ug, service);
1168 service_destroy(service);
1171 static void editfield_exceed_string_cb(void *data, Evas_Object *obj, void *event_info)
1173 phone_show_tickernoti(T_(CT_GET_TEXT_ERR, CTTEXT_EXCEED_LIMIT));
1176 static void editfield_changed_cb(void *data, Evas_Object *obj, void *event_info)
1178 if (!elm_entry_is_empty(obj))
1179 elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
1181 if (elm_object_focus_get(data)) {
1182 if (elm_entry_is_empty(obj))
1183 elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
1185 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
1188 static void editfield_focused_cb(void *data, Evas_Object *obj, void *event_info)
1190 if (!elm_entry_is_empty(obj))
1191 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
1192 elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
1195 static void editfield_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
1197 if (elm_entry_is_empty(obj))
1198 elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
1199 elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
1202 static void editfield_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
1204 elm_entry_entry_set(data, "");
1207 Evas_Object* ctui_create_editfield(Evas_Object *parent, const char *title, const char *guide, bool multiline)
1209 Evas_Object *layout, *entry;
1211 layout = elm_layout_add(parent);
1212 if (title && *title) {
1213 elm_layout_theme_set(layout, "layout", "editfield", "title");
1214 elm_object_part_text_set(layout, "elm.text", title);
1217 elm_layout_theme_set(layout, "layout", "editfield", "default");
1219 if (guide && *guide)
1220 elm_object_part_text_set(layout, "elm.guidetext", guide);
1222 entry = elm_entry_add(parent);
1224 elm_entry_scrollable_set(entry, EINA_TRUE);
1225 elm_entry_single_line_set(entry, EINA_TRUE);
1227 ctui_entry_limit_size_set(entry);
1228 elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
1229 elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
1230 evas_object_smart_callback_add(entry, "changed", editfield_changed_cb, layout);
1231 evas_object_smart_callback_add(entry, "preedit,changed", editfield_changed_cb, layout);
1232 evas_object_smart_callback_add(entry, "focused", editfield_focused_cb, layout);
1233 evas_object_smart_callback_add(entry, "unfocused", editfield_unfocused_cb, layout);
1234 evas_object_smart_callback_add(entry, "maxlength,reached", editfield_exceed_string_cb, layout);
1235 elm_object_part_content_set(layout, "elm.swallow.content", entry);
1236 elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", editfield_eraser_clicked_cb, entry);
1240 // This function is used in Contact view, Group view
1241 void* ctui_account_ug(void *data, Evas_Object *obj, void *event_info,
1242 void(*destroy_cb)(void*), void *cb_param)
1244 struct ug_cbs cbs = {0};
1247 struct ug_priv_data *priv_data;
1249 priv_data = calloc(1, sizeof(struct ug_priv_data));
1250 p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
1251 priv_data->destroy_cb = destroy_cb;
1252 priv_data->cb_param = cb_param;
1254 service_create(&service);
1255 service_add_extra_data(service, "mode", "account_list");
1256 service_add_extra_data(service, "capability_filter", ACCOUNT_SUPPORTS_CAPABILITY_CONTACT);
1258 cbs.layout_cb = ug_common_layout_cb;
1259 cbs.result_cb = NULL;
1260 cbs.destroy_cb = ug_common_destroy_cb;
1261 cbs.priv = priv_data;
1263 ug = ug_create(data, ACCOUNT_UG, UG_MODE_FULLVIEW, service, &cbs);
1264 p_warn_if(NULL == ug, "ug_create() Failed");
1266 service_destroy(service);
1270 Evas_Object* phone_create_nocontents(Evas_Object *parent, const char* label)
1272 Evas_Object *layout;
1274 layout = elm_layout_add(parent);
1275 p_retvm_if(NULL == layout, NULL, "elm_layout_add() return NULL");
1277 elm_layout_theme_set(layout, "layout", "nocontents", "full");
1278 elm_object_part_text_set(layout, "elm.text", label);
1283 void ctui_genlist_append_separator_20px_with_line(Evas_Object *genlist)
1285 static Elm_Genlist_Item_Class itc = { .item_style="dialogue/separator/21/with_line"};
1287 Elm_Object_Item *item;
1288 item = elm_genlist_item_append(genlist, &itc, NULL, NULL,
1289 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1290 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1293 void phone_toolbar_disabled_item_append(Evas_Object *toolbar, int cnt)
1296 Elm_Object_Item *item;
1297 for (i=0;i<cnt;i++) {
1298 item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
1299 elm_object_item_disabled_set(item, EINA_TRUE);
1303 void ctui_navi_left_btn_disabled_set(Elm_Object_Item *item, Eina_Bool disabled)
1306 btn = elm_object_item_part_content_get(item, "title_left_btn");
1307 p_retm_if(NULL == btn, "elm_object_item_part_content_get() return NULL");
1308 elm_object_focus_set(btn, EINA_FALSE);
1309 elm_object_disabled_set(btn, disabled);
1312 int ctui_get_mfc_option(void)
1316 char buf[PH_TEXT_SHORT_LEN];
1318 fd = open(SETTING_MFC_PATH, O_RDONLY);
1320 ERR("Open(%s) O_RDONLY Failed", SETTING_MFC_PATH);
1321 fd = open(SETTING_MFC_PATH, O_WRONLY|O_CREAT|O_TRUNC, 0644);
1322 p_retvm_if(fd < 0, 0, "Open(%s) Failed", SETTING_MFC_PATH);
1323 if (-1 == write(fd, "0", 1))
1324 ERR("write()... Failed(%s)", strerror(errno));
1326 size = read(fd, buf, sizeof(buf));
1334 static void genlist_selectall_mouseup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
1337 Eina_Bool is_checked;
1339 Evas_Event_Mouse_Up *ev = event_info;
1341 selectall_changed_cb changed_cb = data;
1343 if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
1346 evas_object_geometry_get(obj, &x, &y, &w, &h);
1347 if (ev->output.y < y || y + h < ev->output.y)
1350 p_retm_if(NULL == changed_cb, "changed_cb is NULL");
1352 check = elm_object_part_content_get(obj, "elm.icon");
1353 p_retm_if(NULL == check, "elm_object_part_content_get() return NULL");
1355 cb_data = evas_object_data_get(check, "cb_data");
1356 p_retm_if(NULL == cb_data, "cb_data is NULL");
1358 is_checked = !elm_check_state_get(check);
1359 elm_check_state_set(check, is_checked);
1361 changed_cb(cb_data, is_checked);
1364 static void genlist_selectall_changed_cb(void *data, Evas_Object *obj, void *event_info)
1366 Eina_Bool is_checked;
1368 selectall_changed_cb changed_cb = data;
1369 p_retm_if(NULL == changed_cb, "changed_cb is NULL");
1371 cb_data = evas_object_data_get(obj, "cb_data");
1372 p_retm_if(NULL == cb_data, "cb_data is NULL");
1374 is_checked = elm_check_state_get(obj);
1375 changed_cb(cb_data, is_checked);
1378 Evas_Object* phone_create_select_all(Evas_Object *parent, const char *selectall_text,
1379 selectall_changed_cb changed_cb, void *cb_data)
1381 Evas_Object *layout;
1384 p_retvm_if(NULL == parent, NULL, "parameter(parent) is NULL");
1386 layout = elm_layout_add(parent);
1387 p_retvm_if(NULL == layout, NULL, "elm_layout_add() return NULL");
1388 elm_layout_theme_set(layout, "genlist", "item", "select_all/default");
1389 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0);
1390 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
1391 evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, genlist_selectall_mouseup_cb, changed_cb);
1393 check = elm_check_add(layout);
1394 p_retvm_if(NULL == check, NULL, "elm_check_add() return NULL");
1395 evas_object_propagate_events_set(check, EINA_FALSE);
1396 elm_object_part_content_set(layout, "elm.icon", check);
1397 evas_object_smart_callback_add(check, "changed", genlist_selectall_changed_cb, changed_cb);
1398 evas_object_data_set(check, "cb_data", cb_data);
1400 elm_object_part_text_set(layout, "elm.text", selectall_text);
1401 evas_object_show(layout);
1406 void phone_move_ctxpopup(Evas_Object *popup, Evas_Object *item)
1411 p_retm_if(NULL == popup, "parameter(popup) is NULL");
1412 p_retm_if(NULL == item, "parameter(item) is NULL");
1414 evas_object_geometry_get(item, &x, &y, &w, &h);
1416 pos_x = x + (Evas_Coord)w/2;
1417 pos_y = y + (Evas_Coord)h/2;
1419 evas_object_move(popup, pos_x, pos_y);
1422 void ctui_get_addressbook_name(int addressbook_id, char *dest, int dest_len)
1424 char *display_name = NULL;
1425 contacts_error_e err = CONTACTS_ERROR_NONE;
1426 contacts_record_h record = NULL;
1428 p_retm_if(NULL == dest, "parameter(dest) is NULL");
1431 if (addressbook_id <= 0) {
1432 snprintf(dest, dest_len, "%s", T_(CT_GET_TEXT_BASIC, CTTEXT_PHONE));
1436 err = contacts_db_get_record(_contacts_address_book._uri, addressbook_id, &record);
1437 p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_record() Failed(%d)", err);
1439 err = contacts_record_get_str_p(record, _contacts_address_book.name, &display_name);
1440 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err);
1442 if (display_name && *display_name)
1443 snprintf(dest, dest_len, "%s", display_name);
1445 err = contacts_record_destroy(record, true);
1446 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
1449 void ctui_get_account_name_by_address_book_id(int address_book_id, char *dest, int dest_len)
1456 contacts_error_e err = CONTACTS_ERROR_NONE;
1457 contacts_record_h record = NULL;
1459 err = contacts_db_get_record(_contacts_address_book._uri, address_book_id, &record);
1460 p_retm_if(CONTACTS_ERROR_NONE != err, "phone_cts_get_list() Failed(%d)", err);
1462 err = contacts_record_get_int(record, _contacts_address_book.account_id, &account_id);
1463 if (CONTACTS_ERROR_NONE != err) {
1464 ERR("contacts_record_get_int() Failed(%d)", err);
1465 err = contacts_record_destroy(record, true);
1466 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
1470 err = contacts_record_destroy(record, true);
1471 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
1473 if (0 == account_id)
1476 ret = account_connect();
1477 p_retm_if(ACCOUNT_ERROR_NONE != ret, "account_connect() Failed(%d)", ret);
1480 ret = account_create(&account);
1481 if (ACCOUNT_ERROR_NONE != ret) {
1482 ERR("account_create() Failed(%d)", ret);
1483 account_disconnect();
1487 ret = account_query_account_by_account_id(account_id, &account);
1488 if (ACCOUNT_ERROR_NONE != ret) {
1489 ERR("account_query_account_by_account_id() Failed(%d)", ret);
1490 account_destroy(account);
1491 account_disconnect();
1495 ret = account_get_domain_name(account, &domain_name);
1496 if (ACCOUNT_ERROR_NONE != ret) {
1497 ERR("account_get_display_name() Failed(%d)", ret);
1498 account_destroy(account);
1499 account_disconnect();
1502 PH_DBG("domain_name = %s", domain_name);
1504 account_destroy(account);
1505 account_disconnect();
1507 if (domain_name && *domain_name)
1508 snprintf(dest, dest_len, "%s", domain_name);
1514 Eina_List* ctui_person_get_writable_contact_list(int person_id)
1517 int addressbook_mode;
1518 Eina_List *list_contact_record = NULL;
1520 contacts_error_e err = CONTACTS_ERROR_NONE;
1521 contacts_list_h list_contact = NULL;
1522 contacts_record_h record_addressbook = NULL;
1523 contacts_record_h record_contact = NULL;
1524 contacts_record_h record_contact_clone = NULL;
1526 p_retvm_if(person_id <= 0, NULL, "Invalid parameter(%d)", person_id);
1528 err = phone_cts_get_list(_contacts_contact._uri, _contacts_contact.person_id, person_id, &list_contact);
1529 p_retvm_if(CONTACTS_ERROR_NONE != err, NULL, "phone_cts_get_list() Failed(%d)", err);
1531 while (CONTACTS_ERROR_NONE == err) {
1532 err = phone_cts_get_int_from_list(list_contact, _contacts_contact.address_book_id, &addressbook_id);
1533 if (CONTACTS_ERROR_NONE != err) {
1534 ERR("phone_cts_get_int_from_list() Failed(%d)", err);
1538 err = contacts_db_get_record(_contacts_address_book._uri, addressbook_id, &record_addressbook);
1539 if (CONTACTS_ERROR_NONE != err) {
1540 ERR("contacts_db_get_record() Failed(%d)", err);
1544 err = contacts_record_get_int(record_addressbook, _contacts_address_book.mode, &addressbook_mode);
1545 if (CONTACTS_ERROR_NONE != err) {
1546 ERR("phone_cts_get_int_from_list() Failed(%d)", err);
1547 err = contacts_record_destroy(record_addressbook, true);
1548 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
1552 err = contacts_record_destroy(record_addressbook, true);
1553 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
1556 if (1 == addressbook_mode)
1559 err = contacts_list_get_current_record_p(list_contact, &record_contact);
1560 if (CONTACTS_ERROR_NONE != err) {
1561 ERR("contacts_list_get_current_record_p() Failed(%d)", err);
1565 err = contacts_record_clone(record_contact, &record_contact_clone);
1566 if (CONTACTS_ERROR_NONE != err) {
1567 ERR("contacts_record_clone() Failed(%d)", err);
1571 list_contact_record = eina_list_append(list_contact_record, record_contact_clone);
1573 err = contacts_list_next(list_contact);
1574 if (CONTACTS_ERROR_NONE != err) {
1575 ERR("contacts_list_next() Failed(%d)", err);
1579 phone_cts_free_list(list_contact);
1581 return list_contact_record;
1584 static bool __phone_list_is_email_exist(Eina_List *list, char *email_address)
1587 char *email_address_temp;
1588 contacts_error_e err = CONTACTS_ERROR_NONE;
1589 contacts_record_h record_temp = NULL;
1591 EINA_LIST_FOREACH(list, l, record_temp) {
1592 if (NULL == record_temp)
1595 err = contacts_record_get_str_p(record_temp, _contacts_email.email, &email_address_temp);
1596 p_retvm_if(CONTACTS_ERROR_NONE != err, false, "contacts_record_get_str_p() Failed(%d)", err);
1598 if (NULL == email_address_temp)
1601 if (0 == strcmp(email_address_temp, email_address))
1607 Eina_List* ctui_person_get_email_list(Eina_List *contact_list)
1609 Eina_Bool checkduplicate = false;
1611 char *email_address;
1613 Eina_List *list_email_record = NULL;
1614 contacts_error_e err = CONTACTS_ERROR_NONE;
1615 contacts_record_h record = NULL;
1616 contacts_record_h record_email = NULL;
1617 contacts_record_h record_clone = NULL;
1619 EINA_LIST_FOREACH(contact_list, l, record) {
1621 while (CONTACTS_ERROR_NONE == contacts_record_get_child_record_at_p(record, _contacts_contact.email, index++, &record_email)) {
1622 err = contacts_record_get_str_p(record_email, _contacts_email.email, &email_address);
1623 if (CONTACTS_ERROR_NONE != err) {
1624 ERR("phone_cts_get_str_from_list() Failed(%d)", err);
1627 if( checkduplicate ){
1628 if (__phone_list_is_email_exist(list_email_record, email_address)) {
1629 ERR("__phone_list_is_email_exist() return true (email address = %s", email_address);
1633 err = contacts_record_clone(record_email, &record_clone);
1634 if (CONTACTS_ERROR_NONE != err) {
1635 ERR("contacts_list_get_current_record_p() Failed(%d)", err);
1638 list_email_record = eina_list_append(list_email_record, record_clone);
1640 checkduplicate = true;
1642 return list_email_record;
1645 static bool __phone_list_is_number_exist(Eina_List *list, char *number_str)
1648 char *number_str_temp;
1649 contacts_error_e err = CONTACTS_ERROR_NONE;
1650 contacts_record_h record_temp = NULL;
1652 EINA_LIST_FOREACH(list, l, record_temp) {
1653 if (NULL == record_temp)
1656 err = contacts_record_get_str_p(record_temp, _contacts_number.number, &number_str_temp);
1657 p_retvm_if(CONTACTS_ERROR_NONE != err, false, "contacts_record_get_str_p() Failed(%d)", err);
1659 if (NULL == number_str_temp)
1662 if (0 == strcmp(number_str_temp, number_str))
1668 Eina_List* ctui_person_get_number_list(Eina_List *contact_list)
1670 Eina_Bool checkduplicate = false;
1674 Eina_List *list_number_record = NULL;
1675 contacts_error_e err = CONTACTS_ERROR_NONE;
1676 contacts_record_h record = NULL;
1677 contacts_record_h record_number = NULL;
1678 contacts_record_h record_clone = NULL;
1680 EINA_LIST_FOREACH(contact_list, l, record) {
1682 while (CONTACTS_ERROR_NONE == contacts_record_get_child_record_at_p(record, _contacts_contact.number, index++, &record_number)) {
1683 err = contacts_record_get_str_p(record_number, _contacts_number.number, &number_str);
1684 if (CONTACTS_ERROR_NONE != err) {
1685 ERR("phone_cts_get_str_from_list() Failed(%d)", err);
1688 if( checkduplicate ){
1689 if (__phone_list_is_number_exist(list_number_record, number_str)) {
1690 ERR("__phone_list_is_number_exist() return true (number = %s", number_str);
1694 err = contacts_record_clone(record_number, &record_clone);
1695 if (CONTACTS_ERROR_NONE != err) {
1696 ERR("contacts_list_get_current_record_p() Failed(%d)", err);
1699 list_number_record = eina_list_append(list_number_record, record_clone);
1701 checkduplicate = true;
1703 return list_number_record;
1706 Eina_List* ctui_person_get_contact_list(int person_id)
1708 contacts_error_e err = CONTACTS_ERROR_NONE;
1709 contacts_record_h record_contact = NULL;
1710 contacts_record_h record_contact_clone = NULL;
1711 contacts_list_h list_contacts = NULL;
1712 Eina_List *list_contact_records = NULL;
1714 err = phone_cts_get_list(_contacts_contact._uri, _contacts_contact.person_id, person_id, &list_contacts);
1715 p_retvm_if(CONTACTS_ERROR_NONE != err, NULL, "phone_cts_get_list() Failed(%d)", err);
1717 while (err == CONTACTS_ERROR_NONE) {
1718 err = contacts_list_get_current_record_p(list_contacts, &record_contact);
1719 if (CONTACTS_ERROR_NONE != err) {
1720 ERR("contacts_list_get_current_record_p() Failed(%d)", err);
1724 err = contacts_record_clone(record_contact, &record_contact_clone);
1725 if (CONTACTS_ERROR_NONE != err) {
1726 ERR("contacts_record_clone() Failed(%d)", err);
1730 list_contact_records = eina_list_append(list_contact_records, record_contact_clone);
1732 err = contacts_list_next(list_contacts);
1733 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_next() Failed(%d)", err);
1735 phone_cts_free_list(list_contacts);
1737 return list_contact_records;
1740 void ctui_free_record_list(Eina_List *contact_list)
1742 contacts_error_e err = CONTACTS_ERROR_NONE;
1743 contacts_record_h record = NULL;
1744 p_retm_if(NULL == contact_list, "contact_list is NULL");
1746 EINA_LIST_FREE(contact_list, record) {
1747 if (NULL == record) continue;
1748 err = contacts_record_destroy(record, true);
1749 if (CONTACTS_ERROR_NONE != err) {
1750 ERR("contacts_record_destroy() Failed(%d)", err);
1757 int ctui_get_email_type_index(int type)
1760 case CONTACTS_EMAIL_TYPE_CUSTOM:
1762 case CONTACTS_EMAIL_TYPE_HOME:
1764 case CONTACTS_EMAIL_TYPE_WORK:
1771 int ctui_get_view_mode(void)
1776 char buf[PH_TEXT_SHORT_LEN];
1778 fd = open(VIEW_MODE_PATH, O_RDONLY);
1780 ctui_set_view_mode(-1);
1781 PH_DBG("Open(%s) Failed so create new", VIEW_MODE_PATH);
1784 size = read(fd, buf, sizeof(buf));
1792 void ctui_set_view_mode(int addressbook_id)
1796 char buf[PH_TEXT_SHORT_LEN] = {0};
1798 fd = open(VIEW_MODE_PATH, O_WRONLY|O_CREAT|O_TRUNC, 0644);
1799 p_retm_if(fd < 0, "Open(%s) Failed", VIEW_MODE_PATH);
1800 snprintf(buf, sizeof(buf), "%d",addressbook_id);
1801 if (-1 == write(fd, buf, strlen(buf)))
1802 ERR("write()... Failed(%s)", strerror(errno));
1806 contacts_error_e phone_cts_get_default_number(int person_id, contacts_record_h *record_clone)
1808 contacts_error_e err = CONTACTS_ERROR_NONE;
1809 contacts_record_h record = NULL;
1810 contacts_list_h list = NULL;
1811 contacts_filter_h filter = NULL;
1812 contacts_query_h query = NULL;
1814 p_retvm_if(NULL == record_clone, CONTACTS_ERROR_INVALID_PARAMETER, "parameter(record_clone) is NULL");
1816 err = contacts_query_create(_contacts_person_number._uri, &query);
1817 p_retvm_if(CONTACTS_ERROR_NONE != err, err, "contacts_query_create() Failed(%d)", err);
1819 err = contacts_filter_create(_contacts_person_number._uri, &filter);
1820 if (CONTACTS_ERROR_NONE != err) {
1821 ERR("contacts_filter_create() Failed(%d)", err);
1822 contacts_query_destroy(query);
1827 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_number.person_id, CONTACTS_MATCH_EQUAL, person_id))) break;
1828 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND))) break;
1829 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_bool(filter, _contacts_person_number.is_primary_default, true))) break;
1830 if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter))) break;
1831 if (CONTACTS_ERROR_NONE != (err = contacts_db_get_records_with_query(query, 0, 0, &list))) break;
1832 if (CONTACTS_ERROR_NONE != (err = contacts_list_get_current_record_p(list, &record))) break;
1833 if (CONTACTS_ERROR_NONE != (err = contacts_record_clone(record, record_clone))) break;
1835 contacts_query_destroy(query);
1836 contacts_filter_destroy(filter);
1837 contacts_list_destroy(list, true);
1839 return CONTACTS_ERROR_NONE;
1842 contacts_query_destroy(query);
1843 contacts_filter_destroy(filter);
1845 contacts_list_destroy(list, true);
1850 contacts_error_e phone_cts_get_default_email(int person_id, contacts_record_h *record_clone)
1852 contacts_error_e err = CONTACTS_ERROR_NONE;
1853 contacts_record_h record = NULL;
1854 contacts_list_h list = NULL;
1855 contacts_filter_h filter = NULL;
1856 contacts_query_h query = NULL;
1858 p_retvm_if(NULL == record_clone, CONTACTS_ERROR_INVALID_PARAMETER, "parameter(record_clone) is NULL");
1860 err = contacts_query_create(_contacts_person_email._uri, &query);
1861 p_retvm_if(CONTACTS_ERROR_NONE != err, err, "contacts_query_create() Failed(%d)", err);
1863 err = contacts_filter_create(_contacts_person_email._uri, &filter);
1864 if (CONTACTS_ERROR_NONE != err) {
1865 ERR("contacts_filter_create() Failed(%d)", err);
1866 contacts_query_destroy(query);
1871 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_int(filter, _contacts_person_email.person_id, CONTACTS_MATCH_EQUAL, person_id))) break;
1872 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_operator(filter, CONTACTS_FILTER_OPERATOR_AND))) break;
1873 if (CONTACTS_ERROR_NONE != (err = contacts_filter_add_bool(filter, _contacts_person_email.is_primary_default, true))) break;
1874 if (CONTACTS_ERROR_NONE != (err = contacts_query_set_filter(query, filter))) break;
1875 if (CONTACTS_ERROR_NONE != (err = contacts_db_get_records_with_query(query, 0, 0, &list))) break;
1876 if (CONTACTS_ERROR_NONE != (err = contacts_list_get_current_record_p(list, &record))) break;
1877 if (CONTACTS_ERROR_NONE != (err = contacts_record_clone(record, record_clone))) break;
1879 contacts_query_destroy(query);
1880 contacts_filter_destroy(filter);
1881 contacts_list_destroy(list, true);
1883 return CONTACTS_ERROR_NONE;
1886 contacts_query_destroy(query);
1887 contacts_filter_destroy(filter);
1890 contacts_list_destroy(list, true);
1894 bool ctui_list_make_vcard(int person_id, char *path, int path_length)
1897 char *display = NULL;
1899 contacts_record_h record = NULL;
1900 contacts_error_e err = CONTACTS_ERROR_NONE;
1902 err = contacts_db_get_record(_contacts_person._uri, person_id, &record);
1903 if (CONTACTS_ERROR_NONE != err) {
1904 ERR("contacts_db_get_record() Failed(%d)", err);
1908 err = contacts_record_get_str_p(record, _contacts_person.display_name, &display);
1909 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_get_str_p() Failed(%d)", err);
1911 if (display && *display)
1912 snprintf(path, path_length, "%s/%s.vcf", UGDATAIDR, display);
1914 snprintf(path, path_length, "%s/%s.vcf", UGDATAIDR, T_(CT_GET_TEXT_ERR, CTTEXT_NONAME));
1916 err = contacts_vcard_make_from_person(record, &vcard);
1917 if (CONTACTS_ERROR_NONE != err) {
1918 ERR("contacts_vcard_make_from_person() Failed(%d)", err);
1919 err = contacts_record_destroy(record, true);
1920 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_destroy() Failed(%d)", err);
1924 fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0644);
1926 if (-1 == write(fd, vcard, strlen(vcard))) {
1927 ERR("write()... Failed(%s)", strerror(errno));
1936 int ctui_get_addressbook_id_by_index(Eina_List *list, int index)
1938 p_retvm_if(NULL == list, -1, "list is NULL");
1939 void *addressbook_id;
1941 if(eina_list_count(list) <= index)
1943 ERR("index is bigger than count");
1947 addressbook_id = eina_list_nth(list, index);
1949 return (int)addressbook_id;
1952 Eina_List* ctui_get_addressbook_id_list(const char *ori_string, const char *sep)
1954 Eina_List *e_list = NULL;
1960 PH_DBG("Input string is NULL");
1964 copy_string = SAFE_STRDUP(ori_string);
1967 p = strtok_r(copy_string, sep, &save_p);
1971 if(eina_list_data_find(e_list, (void*)id) == NULL)
1972 e_list = eina_list_append(e_list, (void*)id);
1974 p = strtok_r(NULL, sep, &save_p);
1984 Eina_List* __make_tokenize_list(const char *ori_string, const char *sep)
1986 Eina_List *e_list = NULL;
1992 PH_DBG("Input string is NULL");
1996 copy_string = SAFE_STRDUP(ori_string);
1999 p = strtok_r(copy_string, sep, &save_p);
2002 PH_DBG("list item = %s", p);
2005 char *c = SAFE_STRDUP(p);
2007 e_list = eina_list_append(e_list, c);
2009 p = strtok_r(NULL, sep, &save_p);
2012 PH_DBG("list item = %s", p);
2023 contacts_record_h ctui_get_record_image(contacts_record_h record_contact)
2026 contacts_error_e err = CONTACTS_ERROR_NONE;
2027 contacts_record_h record = NULL;
2028 p_retvm_if(NULL == record_contact, NULL, "parameter(record_contact) is NULL");
2030 err = contacts_record_get_child_record_at_p(record_contact, _contacts_contact.image, 0, &record);
2031 if (NULL != record) return record;
2033 err = contacts_record_create(_contacts_image._uri, &record);
2034 p_retvm_if(CONTACTS_ERROR_NONE != err, NULL, "contacts_record_create() Failed(%d)", err);
2036 err = contacts_record_add_child_record(record_contact, _contacts_contact.image, record);
2037 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_record_add_child_record() Failed(%d)", err);
2043 Evas_Object *phone_create_toolbar_btn(Evas_Object *parent, const char *text, Evas_Smart_Cb func, void *data)
2045 Evas_Object *btn = elm_button_add(parent);
2046 if (!btn) return NULL;
2047 elm_object_style_set(btn, "naviframe/toolbar/default");
2048 elm_object_text_set(btn, text);
2049 evas_object_smart_callback_add(btn, "clicked", func, data);
2053 Evas_Object* ctui_create_more_btn(Evas_Object *parent, Evas_Smart_Cb func, void *data)
2055 Evas_Object *btn = elm_button_add(parent);
2056 if (!btn) return NULL;
2057 elm_object_style_set(btn, "naviframe/more/default");
2058 evas_object_smart_callback_add(btn, "clicked", func, data);
2062 int ctui_get_addressbook_id(char* addressbook_name)
2065 PH_DBG("addressbook_name = %s", addressbook_name);
2066 contacts_error_e err = CONTACTS_ERROR_NONE;
2067 contacts_filter_h filter = NULL;
2068 contacts_query_h query = NULL;
2069 contacts_list_h list = NULL;
2070 contacts_record_h record = NULL;
2071 unsigned int count =0;
2072 int addressbook_id =-1;//0 is phone addressbook id
2074 err = contacts_filter_create(_contacts_address_book._uri, &filter);
2075 p_warn_if(CONTACTS_ERROR_NONE != err, "contactcs_filter_create() Failed(%d)", err);
2078 err = contacts_filter_add_str(filter,_contacts_address_book.name , CONTACTS_MATCH_FULLSTRING, addressbook_name);
2079 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_filter_add_str() Failed(%d)", err);
2080 err = contacts_query_create(_contacts_address_book._uri, &query);
2081 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_query_create() Failed(%d)", err);
2082 err = contacts_query_set_filter(query, filter);
2083 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_query_set_filter() Failed(%d)", err);
2084 err = contacts_db_get_records_with_query(query, 0, 0, &list);
2085 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_records_with_query() Failed(%d)", err);
2089 err = contacts_list_get_count(list,&count );
2090 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_get_count() Failed(%d)", err);
2091 PH_DBG("count = %d",count);
2093 err = contacts_list_get_current_record_p(list, &record);
2094 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_get_current_record_p() Failed(%d)", err);
2095 contacts_record_get_int(record,_contacts_address_book.id,&addressbook_id);
2096 err = contacts_list_destroy(list,true);
2097 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_destroy() Failed(%d)", err);
2100 err = contacts_filter_destroy(filter);
2101 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_filter_destroy() Failed(%d)", err);
2102 err = contacts_query_destroy(query);
2103 p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_query_destroy() Failed(%d)", err);
2105 PH_DBG("addressbook id = %d",addressbook_id);
2106 return addressbook_id;
2110 void ctui_create_contacts_error_popup(Evas_Object *parent, int err)
2112 p_retm_if(CONTACTS_ERROR_NONE == err, "ctui_create_contacts_error_popup no errer");
2113 p_retm_if(NULL == parent, "ctui_create_contacts_error_popup parent is null");
2115 ERR("ctui_create_contacts_error_popup() err(%d)", err);
2117 case CONTACTS_ERROR_DB:
2118 phone_show_popup(parent, T_(CT_GET_TEXT_ERR, CTTEXT_ERR_DB_LOCKED), 1.5);
2120 case CONTACTS_ERROR_FILE_NO_SPACE:
2121 phone_show_popup(parent, S_(CT_SYS_POP_NOT_ENOUGH_MEMORY), 1.5);
2124 phone_show_popup(parent, S_(PH_SYS_POP_FAILED), 1.5);