summaryrefslogtreecommitdiff
path: root/lib/common/ph-common.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/common/ph-common.cpp')
-rwxr-xr-xlib/common/ph-common.cpp3667
1 files changed, 3667 insertions, 0 deletions
diff --git a/lib/common/ph-common.cpp b/lib/common/ph-common.cpp
new file mode 100755
index 0000000..23951dc
--- /dev/null
+++ b/lib/common/ph-common.cpp
@@ -0,0 +1,3667 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <app.h>
+#include <fcntl.h>
+#include <ui-gadget-module.h>
+#include <account-types.h>
+#include <syspopup_caller.h>
+#include <account.h>
+#include <notification.h>
+#include <cctype>
+#include <algorithm>
+#include <unicode/ustring.h>
+#include <unicode/udatpg.h>
+#include <msg.h>
+#include <msg_types.h>
+
+#include "phone.h"
+#include "phone-common.h"
+
+#include <badge.h>
+
+#define CT_CBAR_ITEM_MAX 4
+#define LAUNCH_TYPE "launch-type"
+#define SEND "send"
+#define EMERGENCY "emergency"
+#define FILES "files"
+#define FILECOUNT 1
+#define DEF_MAX_FILTER_LEN (40)
+#define DEF_BUF_LEN (512)
+#define CALL_APP "org.tizen.call"
+
+std::string ct_make_uppercase_string(const std::string& inputStr)
+{
+ std::string retStr;
+ retStr.reserve(inputStr.size());
+ std::transform(inputStr.begin(), inputStr.end(), std::back_inserter(retStr), toupper);
+ return retStr;
+}
+
+/**
+ * @brief Overloaded function for adding string filter
+ * @param filter DB filter handle
+ * @param filterField Link to field
+ * @param strVal The string value to which filtering is performed
+ * @return Returns true if filter was added, otherwise false
+ */
+bool add_filter_field(contacts_filter_h filter, unsigned int filterField, const std::string& strVal)
+{
+ PH_TRACE;
+ return (contacts_filter_add_str(filter, filterField, CONTACTS_MATCH_ENDSWITH, strVal.c_str()) == CONTACTS_ERROR_NONE);
+}
+
+/**
+ * @brief Overloaded function for adding integer filter
+ * @param filter DB filter handle
+ * @param filterField Link to field
+ * @param intVal The integer value to which filtering is performed
+ * @return Returns true if filter was added, otherwise false
+ */
+bool add_filter_field(contacts_filter_h filter, unsigned int filterField, int intVal)
+{
+ PH_TRACE;
+ return (contacts_filter_add_int(filter, filterField, CONTACTS_MATCH_EQUAL, intVal) == CONTACTS_ERROR_NONE);
+}
+
+template < typename FilterFieldType>
+bool get_records_list(const std::string& tableUri, unsigned int filterField,
+ FilterFieldType filterVal, contacts_list_h* list)
+{
+ PH_TRACE;
+ contacts_query_h query = NULL;
+ contacts_filter_h filter = NULL;
+ contacts_list_h innerList = NULL;
+ bool result(false);
+
+ if(contacts_query_create(tableUri.c_str(), &query) == CONTACTS_ERROR_NONE)
+ {
+ if(contacts_filter_create(tableUri.c_str(), &filter) == CONTACTS_ERROR_NONE)
+ {
+ if(add_filter_field(filter, filterField, filterVal))
+ {
+ if(contacts_query_set_filter(query, filter) == CONTACTS_ERROR_NONE)
+ {
+ if(contacts_db_get_records_with_query(query, 0, 0, &innerList) == CONTACTS_ERROR_NONE)
+ {
+ unsigned int count(0);
+ contacts_list_get_count(innerList, &count);
+ if(count > 0)
+ {
+ result = true;
+ }
+ }
+ }
+ }
+ }
+ }
+ result &= contacts_query_destroy(query) == CONTACTS_ERROR_NONE;
+ result &= contacts_filter_destroy(filter) == CONTACTS_ERROR_NONE;
+ if(result)
+ {
+ if(*list)
+ {
+ contacts_list_destroy(*list, true);
+ }
+ *list = innerList;
+ }
+ else
+ {
+ contacts_list_destroy(innerList, true);
+ ERR("List of records is not obtained");
+ }
+
+ return result;
+}
+
+bool phone_toggle_blocked_contact_for_calls(int contactId)
+{
+ PH_TRACE;
+ bool result(false);
+ if (contactId > notRelatedToContactId)
+ {
+ contacts_list_h recList = NULL;
+ if (get_records_list(_contacts_contact._uri, _contacts_contact.id, contactId, &recList))
+ {
+ contacts_record_h contactRec = NULL;
+ contacts_record_h extensionRec = NULL;
+ if (contacts_list_get_current_record_p(recList, &contactRec) == CONTACTS_ERROR_NONE)
+ {
+ if (contacts_record_create(_contacts_extension._uri, &extensionRec) == CONTACTS_ERROR_NONE)
+ {
+ unsigned int extensionsCount(0);
+ if (contacts_record_get_child_record_count(contactRec, _contacts_contact.extension, &extensionsCount)
+ == CONTACTS_ERROR_NONE)
+ {
+ DBG("Extensions count: %u", extensionsCount);
+ if (0 == extensionsCount)
+ {
+ result = ct_list_insert_extension(extensionRec, _contacts_extension.data2, contactId, ct_list_bool_to_str(true));
+ if (!result)
+ {
+ ERR("Extension is not inserted");
+ }
+ }
+ else
+ {
+ result = ct_list_toggle_blocked(contactRec, extensionRec);
+ if (!result)
+ {
+ ERR("Extension is not updated");
+ }
+ }
+ }
+ if (contacts_record_destroy(extensionRec, true)
+ != CONTACTS_ERROR_NONE)
+ {
+ ERR("Record is not destroyed");
+ }
+ }
+ }
+ if (contacts_list_destroy(recList, true) != CONTACTS_ERROR_NONE)
+ {
+ ERR("List is not destroyed");
+ }
+ }
+ }
+ return result;
+}
+
+int phone_get_extension_id(int contactId)
+{
+ PH_TRACE;
+ int result(incorrectId);
+ contacts_list_h recList = NULL;
+ if(get_records_list(_contacts_contact._uri, _contacts_contact.id, contactId, &recList))
+ {
+ contacts_record_h contactRec = NULL;
+ if(contacts_list_get_current_record_p(recList, &contactRec) == CONTACTS_ERROR_NONE)
+ {
+ unsigned int extensionsCount(0);
+ if(contacts_record_get_child_record_count(contactRec, _contacts_contact.extension, &extensionsCount)
+ == CONTACTS_ERROR_NONE)
+ {
+ if(extensionsCount > 0)
+ {
+ contacts_record_h extensionRec = NULL;
+ if(contacts_record_get_child_record_at_p(contactRec, _contacts_contact.extension,
+ 0, &extensionRec) == CONTACTS_ERROR_NONE)
+ {
+ int extensionId(incorrectId);
+ if(contacts_record_get_int(extensionRec, _contacts_extension.id,
+ &extensionId) == CONTACTS_ERROR_NONE)
+ {
+ result = extensionId;
+ }
+ }
+ }
+ }
+ }
+ if(contacts_list_destroy(recList, true)
+ != CONTACTS_ERROR_NONE)
+ {
+ ERR("List is not destroyed");
+ }
+ }
+ return result;
+}
+
+bool phone_is_blocked_contact_for_calls(int contactId)
+{
+ PH_TRACE;
+ bool result(false);
+ int extensionId = phone_get_extension_id(contactId);
+ if(extensionId > -1)
+ {
+ contacts_list_h extensionList = NULL;
+ if(get_records_list(_contacts_extension._uri, _contacts_extension.id, extensionId, &extensionList))
+ {
+ contacts_record_h extensionRecord = NULL;
+ if(contacts_list_get_current_record_p(extensionList, &extensionRecord)
+ == CONTACTS_ERROR_NONE)
+ {
+ char* isBlocked = NULL;
+ if(contacts_record_get_str(extensionRecord, _contacts_extension.data2, &isBlocked)
+ == CONTACTS_ERROR_NONE)
+ {
+ result = ct_list_str_to_bool(isBlocked);
+ }
+ free(isBlocked);
+ }
+ contacts_list_destroy(extensionList, true);
+ }
+ }
+ return result;
+}
+
+static void progress_popup_cancel_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ bool *is_alive = (bool *) data;
+ *is_alive = false;
+}
+
+void phone_free_contacts(Eina_List *list)
+{
+ PH_TRACE;
+ Eina_List *l;
+ void *v_cd;
+
+ p_retm_if(NULL == list, "list is NULL");
+
+ EINA_LIST_FOREACH(list, l, v_cd)
+ {
+ ph_contact_d *cd = (ph_contact_d *) v_cd;
+ if (NULL == cd)
+ continue;
+
+ free(cd->display);
+ free(cd->img_path);
+ free(cd->number);
+ free(cd);
+ }
+ eina_list_free(list);
+}
+
+void ctui_list_edit_navi_pop(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ int cnt_checked;
+ int person_count = 0;
+ int number_count = 0;
+ int email_count = 0;
+ int *result_list_number = NULL;
+ int *result_list_email = NULL;
+ int *result_list_person = NULL;
+ Eina_List *l;
+ ct_list_data *clist_d = (ct_list_data *) data;
+ void *info;
+
+ cnt_checked = ctui_list_checked_cnt_get(clist_d->list);
+
+ PH_DBG("clist_d->ug_request %d count %d", clist_d->ug_request, cnt_checked);
+ if (CT_UG_REQUEST_CHECK_FOR_NUMBER == clist_d->ug_request)
+ result_list_number = (int *) calloc(cnt_checked, sizeof(int));
+ else if (CT_UG_REQUEST_CHECK_FOR_EMAIL == clist_d->ug_request)
+ result_list_email = (int *) calloc(cnt_checked, sizeof(int));
+ else if (CT_UG_REQUEST_CHECK_FOR_NUMBER_OR_EMAIL == clist_d->ug_request)
+ {
+ result_list_number = (int *) calloc(cnt_checked, sizeof(int));
+ result_list_email = (int *) calloc(cnt_checked, sizeof(int));
+ }
+ else
+ result_list_person = (int *) calloc(cnt_checked, sizeof(int));
+
+ EINA_LIST_FOREACH(clist_d->list, l, info)
+ {
+ ct_person_list *person_info = (ct_person_list *) info;
+ if (NULL == person_info || !person_info->checked)
+ continue;
+ if (1 == person_info->id_ret_type)
+ result_list_number[number_count++] = person_info->id_ret;
+ else if (2 == person_info->id_ret_type)
+ result_list_email[email_count++] = person_info->id_ret;
+ else
+ result_list_person[person_count++] = person_info->id;
+ }
+
+ // setting - import,export / group-view - message,email,chaton,calendar
+ if (clist_d->select_result_cb)
+ { // called by setting view - check person_info
+ if (0 < cnt_checked)
+ {
+ if (result_list_number)
+ clist_d->select_result_cb(clist_d->select_result_cb_data,
+ result_list_number, number_count);
+ else if (result_list_email)
+ clist_d->select_result_cb(clist_d->select_result_cb_data,
+ result_list_email, email_count);
+ else
+ clist_d->select_result_cb(clist_d->select_result_cb_data,
+ result_list_person, person_count);
+ }
+ }
+ if (result_list_person)
+ free(result_list_person);
+ if (result_list_number)
+ free(result_list_number);
+ if (result_list_email)
+ free(result_list_email);
+}
+
+void ug_common_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+ PH_TRACE;
+ Evas_Object *base;
+
+ if (!ug)
+ return;
+
+ base = (Evas_Object *) ug_get_layout(ug);
+ if (!base)
+ {
+ ERR("ug_get_layout() return NULL");
+ ug_destroy(ug);
+ return;
+ }
+ evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(base);
+}
+
+void ug_common_destroy_cb(ui_gadget_h ug, void *priv)
+{
+ PH_TRACE;
+ struct ug_priv_data *priv_data;
+
+ p_retm_if(NULL == ug, "ug is NULL");
+ ug_destroy(ug);
+
+ p_retm_if(NULL == priv, "priv is NULL");
+
+ priv_data = (struct ug_priv_data *) priv;
+
+ if (priv_data->destroy_cb)
+ priv_data->destroy_cb(priv_data->cb_param);
+
+ free(priv);
+
+}
+
+ui_gadget_h phone_image_crop_ug(ui_gadget_h parent, const char *photo,
+ struct ug_cbs *cbs)
+{
+ PH_TRACE;
+ ui_gadget_h ug;
+
+ service_h service;
+
+ service_create(&service);
+ service_add_extra_data(service, "Path", photo);
+ service_add_extra_data(service, "View Mode", "SETAS");
+ service_add_extra_data(service, "Setas type", "CallerID");
+ service_add_extra_data(service, "Area Size", "100");
+
+ cbs->layout_cb = ug_common_layout_cb;
+
+ ug = ug_create(parent, IMG_VIEWER_UG, UG_MODE_FULLVIEW, service, cbs);
+ p_warn_if(NULL == ug, "ug_create() Failed");
+
+ service_destroy(service);
+
+ return ug;
+}
+
+ui_gadget_h phone_launch_msg_composer_ug(ui_gadget_h parent_ug, char *number, int msg_id,
+ void (*destroy_cb)(void*), void *cb_param)
+{
+ PH_TRACE;
+ ui_gadget_h ug;
+ struct ug_cbs cbs = { 0 };
+ struct ug_priv_data *priv_data;
+ service_h service;
+ char ret[PH_TEXT_MAX_LEN] = { 0 };
+
+ priv_data = (ug_priv_data *) calloc(1, sizeof(struct ug_priv_data));
+ p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
+ priv_data->destroy_cb = destroy_cb;
+ priv_data->cb_param = cb_param;
+
+ service_create(&service);
+ if (number && *number)
+ service_add_extra_data(service, "TO", (char*) number);
+ else if (msg_id)
+ {
+ service_add_extra_data(service, "type", "msg_id");
+ snprintf(ret, sizeof(ret), "%d", msg_id);
+ service_add_extra_data(service, "msgId", ret);
+ }
+
+ cbs.priv = priv_data;
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.result_cb = NULL;
+ cbs.destroy_cb = ug_common_destroy_cb;
+
+ ug = ug_create((ui_gadget_h) parent_ug, MSG_COMPOSER_UG, UG_MODE_FULLVIEW, service, &cbs);
+ service_destroy(service);
+
+ if (ug == NULL)
+ {
+ free(priv_data);
+ ERR("%s ug_create is failed", MSG_COMPOSER_UG);
+ }
+ return ug;
+}
+
+ui_gadget_h phone_launch_contact_detail_ug(ui_gadget_h parent_ug, int contact_index,
+ void (*destroy_cb)(void*), void *cb_param)
+{
+ PH_TRACE;
+ char buf[PH_TEXT_MAX_LEN] = { 0 };
+ struct ug_cbs cbs = { 0 };
+ service_h service;
+ ui_gadget_h ug;
+ struct ug_priv_data *priv_data;
+
+ priv_data = (ug_priv_data *) calloc(1, sizeof(struct ug_priv_data));
+ p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
+ priv_data->destroy_cb = destroy_cb;
+ priv_data->cb_param = cb_param;
+
+ service_create(&service);
+
+ snprintf(buf, sizeof(buf), "%d", contact_index);
+ service_add_extra_data(service, CT_UG_BUNDLE_ID, buf);
+ snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_DETAIL);
+ service_add_extra_data(service, CT_UG_BUNDLE_TYPE, buf);
+
+ cbs.priv = priv_data;
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.result_cb = NULL;
+ cbs.destroy_cb = ug_common_destroy_cb;
+
+ ug = ug_create((ui_gadget_h) parent_ug, UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, service,
+ &cbs);
+ service_destroy(service);
+
+ if (NULL == ug)
+ {
+ free(priv_data);
+ ERR("%s ug_create fail", UG_CONTACTS_DETAILS);
+ }
+ return ug;
+}
+
+ui_gadget_h phone_launch_contact_add_list_edit_ug(ui_gadget_h parent_ug, char *data,
+ void (*destroy_cb)(void *), void *cb_param)
+{
+ PH_TRACE;
+ char buf[PH_TEXT_MAX_LEN] = { 0 };
+ struct ug_cbs cbs = { 0 };
+ struct ug_priv_data *priv_data;
+ ui_gadget_h ug;
+ service_h service;
+
+ priv_data = (ug_priv_data *) calloc(1, sizeof(struct ug_priv_data));
+ p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
+ priv_data->destroy_cb = destroy_cb;
+ priv_data->cb_param = cb_param;
+
+ service_create(&service);
+
+ snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_NUM);
+ service_add_extra_data(service, CT_UG_BUNDLE_TYPE, buf);
+ snprintf(buf, sizeof(buf), "%s", data);
+ service_add_extra_data(service, CT_UG_BUNDLE_NUM, buf);
+ PH_DBG("number %s", buf);
+
+ cbs.priv = priv_data;
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.result_cb = NULL;
+ cbs.destroy_cb = ug_common_destroy_cb;
+
+ ug = ug_create((ui_gadget_h) parent_ug, UG_CONTACTS_LIST, UG_MODE_FULLVIEW, service,
+ &cbs);
+ service_destroy(service);
+ if (NULL == ug)
+ {
+ free(priv_data);
+ ERR("%s ug_create fail", UG_CONTACTS_LIST);
+ }
+ return ug;
+}
+
+ui_gadget_h phone_launch_contact_edit_ug(ui_gadget_h parent_ug, int data,
+ void (*destroy_cb)(void *), void *cb_param)
+{
+ PH_TRACE;
+ char buf[PH_TEXT_MAX_LEN] = { 0 };
+ struct ug_cbs cbs = { 0 };
+ service_h service;
+
+ struct ug_priv_data *priv_data = (ug_priv_data *) calloc(1, sizeof(struct ug_priv_data));
+ p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
+ priv_data->destroy_cb = destroy_cb;
+ priv_data->cb_param = cb_param;
+
+ service_create(&service);
+
+ snprintf(buf, PH_TEXT_MAX_LEN, "%d", CT_UG_REQUEST_EDIT);
+ service_add_extra_data(service, CT_UG_BUNDLE_TYPE, buf);
+ snprintf(buf, PH_TEXT_MAX_LEN, "%d", data);
+ service_add_extra_data(service, CT_UG_BUNDLE_ID, buf);
+
+ cbs.priv = priv_data;
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.result_cb = NULL;
+ cbs.destroy_cb = ug_common_destroy_cb;
+
+ ui_gadget_h ug = ug_create((ui_gadget_h) parent_ug, UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, service,
+ &cbs);
+ service_destroy(service);
+ if (NULL == ug)
+ {
+ free(priv_data);
+ ERR("%s ug_create fail", UG_CONTACTS_DETAILS);
+ }
+ return ug;
+}
+
+ui_gadget_h phone_launch_bluetooth_ug(ui_gadget_h parent_ug, const char *attach,
+ void (*destroy_cb)(void *), void *cb_param)
+{
+ PH_TRACE;
+ service_h service;
+ struct ug_cbs cbs = { 0 };
+
+ struct ug_priv_data *priv_data = (ug_priv_data *) calloc(1, sizeof(struct ug_priv_data));
+ p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
+ priv_data->destroy_cb = destroy_cb;
+ priv_data->cb_param = cb_param;
+
+ service_create(&service);
+ service_add_extra_data(service, LAUNCH_TYPE, SEND);
+ service_add_extra_data_array(service, FILES, &attach, FILECOUNT);
+
+ cbs.priv = priv_data;
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.result_cb = NULL;
+ cbs.destroy_cb = ug_common_destroy_cb;
+
+ ui_gadget_h ug = ug_create((ui_gadget_h) parent_ug, BLUETOOTH_UG,
+ UG_MODE_FULLVIEW, service, &cbs);
+
+ service_destroy(service);
+ if (NULL == ug)
+ {
+ free(priv_data);
+ ERR("%s ug_create fail", UG_CONTACTS_DETAILS);
+ }
+ return ug;
+}
+
+static void ug_contact_list_result_cb(ui_gadget_h ug, service_h service,
+ void *priv)
+{
+ PH_TRACE;
+ char *temp_p = NULL;
+ struct ug_priv_data *priv_data = (ug_priv_data *) priv;
+ int id;
+ p_retm_if(NULL == priv, "private data is NULL");
+
+ service_get_extra_data(service, "id", &temp_p);
+ id = atoi(temp_p);
+ free(temp_p);
+ if (priv_data->result_cb)
+ priv_data->result_cb(priv_data->cb_param, (void*) &id);
+}
+
+ui_gadget_h phone_launch_contact_list_ug(ui_gadget_h parent_ug, int request,
+ void (*result_cb)(void*, void*), void (*destroy_cb)(void*),
+ void*cb_param)
+{
+ PH_TRACE;
+ char ug_request[PH_TEXT_MAX_LEN] = { 0 };
+ struct ug_priv_data *priv_data;
+ ui_gadget_h ug;
+ struct ug_cbs cbs = { 0 };
+ service_h service;
+
+ priv_data = (ug_priv_data *) calloc(1, sizeof(struct ug_priv_data));
+ p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
+ priv_data->destroy_cb = destroy_cb;
+ priv_data->result_cb = result_cb;
+ priv_data->cb_param = cb_param;
+
+ service_create(&service);
+
+ snprintf(ug_request, sizeof(ug_request), "%d", request);
+ service_add_extra_data(service, CT_UG_BUNDLE_TYPE, ug_request);
+
+ cbs.priv = priv_data;
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.destroy_cb = ug_common_destroy_cb;
+ cbs.result_cb = ug_contact_list_result_cb;
+
+ ug = ug_create((ui_gadget_h) parent_ug, UG_CONTACTS_LIST, UG_MODE_FULLVIEW, service,
+ &cbs);
+ service_destroy(service);
+ if (NULL == ug)
+ {
+ free(priv_data);
+ ERR("%s ug_create fail", UG_CONTACTS_LIST);
+ }
+ return ug;
+}
+
+Evas_Object* phone_create_list_sweep_btn(Evas_Object *parent, const char *fullpath)
+{
+ PH_TRACE;
+ Evas_Object *btn;
+ Evas_Object *icon;
+
+ btn = elm_button_add(parent);
+ p_retvm_if(NULL == btn, NULL, "elm_button_add() return NULL");
+
+ icon = elm_icon_add(btn);
+ p_retvm_if(NULL == icon, NULL, "phone_create_icon_with_img() return NULL");
+
+ elm_image_file_set(icon, fullpath, NULL);
+ elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
+ elm_object_part_content_set(btn, "icon", icon);
+
+ return btn;
+}
+
+void phone_resize_notify(Evas_Object *parent, int rotate)
+{
+ PH_TRACE;
+ Evas_Object *notify;
+ Evas_Object *layout;
+ const char *msg;
+ p_retm_if(NULL == parent, "parent is NULL");
+ notify = phone_get_notify(parent);
+ layout = elm_object_content_get(notify);
+ msg = edje_object_part_text_get(_EDJ(layout), "elm.text");
+
+ elm_layout_theme_set(layout, "standard", "selectioninfo", "center_text");
+
+ if (msg && *msg)
+ edje_object_part_text_set(_EDJ(layout), "elm.text", msg);
+}
+
+Evas_Object * phone_get_notify(Evas_Object *parent)
+{
+ PH_TRACE;
+ Evas_Object *notify;
+
+ notify = (Evas_Object *) evas_object_data_get(parent, "notify");
+ if (NULL == notify)
+ {
+ Evas_Object *info_layout;
+ notify = phone_create_base_layout(parent, false);
+ elm_object_part_content_set(parent, "selectioninfo", notify);
+ info_layout = elm_layout_add(parent);
+ elm_object_part_content_set(notify, "elm.swallow.content", info_layout);
+ elm_layout_theme_set(info_layout, "standard", "selectioninfo",
+ "center_text");
+ evas_object_data_set(parent, "notify", notify);
+ }
+ evas_object_show(notify);
+ return notify;
+}
+
+void phone_show_tickernoti(const char *msg)
+{
+ PH_TRACE;
+ int err = notification_status_message_post(msg);
+ p_retm_if(NOTIFICATION_ERROR_NONE != err,
+ "notification_status_message_post is failed");
+}
+
+void phone_show_notify(Evas_Object *parent, const char *msg)
+{
+ PH_TRACE;
+ Evas_Object *selectioninfo;
+ Evas_Object *notify;
+
+ notify = phone_get_notify(parent);
+ selectioninfo = elm_object_part_content_get(notify, "elm.swallow.content");
+ elm_object_part_text_set(selectioninfo, "elm.text", msg);
+ elm_object_signal_emit(parent, "show,selection,info", "elm");
+ evas_object_show(selectioninfo);
+}
+
+void phone_hide_notify(Evas_Object *parent)
+{
+ PH_TRACE;
+ Evas_Object *selectioninfo;
+ Evas_Object *notify;
+
+ notify = (Evas_Object *) evas_object_data_get(parent, "notify");
+ selectioninfo = elm_object_part_content_get(notify, "elm.swallow.content");
+ elm_object_signal_emit(parent, "hide,selection,info", "elm");
+ evas_object_hide(notify);
+ evas_object_hide(selectioninfo);
+}
+
+static void popup_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ Evas_Object **popup = (Evas_Object **) data;
+ evas_object_del(*popup);
+ *popup = NULL;
+}
+void ctui_detail_data_popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ ct_detail_data *cdetail_d = (ct_detail_data *) data;
+ if(cdetail_d && cdetail_d->popup)
+ {
+ evas_object_del(cdetail_d->popup);
+ cdetail_d->popup = NULL;
+ }
+}
+
+void ctui_input_data_popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ ct_input_data *cinput_d = (ct_input_data *) data;
+ if(cinput_d && cinput_d->popup)
+ {
+ evas_object_del(cinput_d->popup);
+ cinput_d->popup = NULL;
+ }
+}
+
+Evas_Object *phone_show_popup(Evas_Object *parent, const char *desc,
+ double timeout)
+{
+ PH_TRACE;
+ Evas_Object *popup;
+
+ popup = (Evas_Object *) evas_object_data_get(parent, "popup");
+ if (NULL == popup)
+ {
+ popup = elm_popup_add(parent);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_smart_callback_add(popup, "block,clicked",
+ ctui_input_data_popup_hide_cb, NULL);
+ evas_object_show(popup);
+ }
+ elm_object_text_set(popup, desc);
+ elm_popup_timeout_set(popup, timeout);
+ return popup;
+}
+
+Evas_Object* phone_create_confirm_popup(Evas_Object **popup, Evas_Object *win,
+ const char* description,
+ void (*btn_clicked_cb)(void *, Evas_Object *, void *), void *cb_data)
+{
+ PH_TRACE;
+ Evas_Object *btn1, *btn2;
+ *popup = elm_popup_add(win);
+ evas_object_size_hint_weight_set(*popup, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ elm_object_text_set(*popup, description);
+
+ btn1 = elm_button_add(*popup);
+ elm_object_text_set(btn1, S_(PH_SYS_SK_YES));
+ elm_object_part_content_set(*popup, "button1", btn1);
+ elm_object_style_set(btn1, "popup_button/default");
+ evas_object_smart_callback_add(btn1, "clicked", btn_clicked_cb, cb_data);
+
+ btn2 = elm_button_add(*popup);
+ elm_object_text_set(btn2, S_(PH_SYS_SK_NO));
+ elm_object_part_content_set(*popup, "button2", btn2);
+ elm_object_style_set(btn2, "popup_button/default");
+ evas_object_smart_callback_add(btn2, "clicked", popup_cancel_btn_cb,
+ &(*popup));
+
+ evas_object_show(*popup);
+
+ return btn1;
+}
+
+void phone_launch_voice_call(const int person_id, const char* number)
+{
+ PH_TRACE;
+ char buf[PH_TEXT_MAX_LEN] = { 0 };
+ service_h service;
+ int ret;
+
+ ret = service_create(&service);
+ p_retm_if(SERVICE_ERROR_NONE != ret, "service_create() Failed(%d)", ret);
+
+ service_set_operation(service, SERVICE_OPERATION_CALL);
+ snprintf(buf, sizeof(buf), "tel:%s", number);
+ service_set_uri(service, buf);
+ service_set_app_id(service, CALL_APP);
+
+ if (0 < person_id)
+ {
+ char buf[PH_TEXT_MAX_LEN] = { 0 };
+ snprintf(buf, sizeof(buf), "%d", person_id);
+ service_add_extra_data(service, "ctindex", buf);
+
+ }
+ ret = service_send_launch_request(service, NULL, NULL);
+ if(ret != SERVICE_ERROR_NONE)
+ {
+ ERR("service_send_launch_request failed: %x", ret);
+ }
+ service_destroy(service);
+}
+
+ui_gadget_h phone_launch_settings_ug(ui_gadget_h parent_ug, const char* ug_name,
+ void (*destroy_cb)(void*), void *cb_param)
+{
+ PH_TRACE;
+ ug_priv_data *priv_data = static_cast<ug_priv_data *>(calloc(1, sizeof(struct ug_priv_data)));
+ check_if(!priv_data, return NULL);
+
+ priv_data->destroy_cb = destroy_cb;
+ priv_data->cb_param = cb_param;
+
+ service_h service;
+ int result = service_create(&service);
+
+ if(SERVICE_ERROR_NONE != result)
+ {
+ free(priv_data);
+ ERR("service_create failed");
+ return NULL;
+ }
+
+ ug_cbs cbs = { 0 };
+ cbs.priv = priv_data;
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.result_cb = NULL;
+ cbs.destroy_cb = ug_common_destroy_cb;
+
+ ui_gadget_h ug = ug_create(parent_ug, ug_name, UG_MODE_FULLVIEW, service, &cbs);
+
+ service_destroy(service);
+
+ if (NULL == ug)
+ {
+ free(priv_data);
+ ERR("%s ug_create fail", CALL_SETTINGS_UG);
+ }
+
+ return ug;
+}
+
+Evas_Object* phone_create_base_layout(Evas_Object *parent, bool is_fullview)
+{
+ PH_TRACE;
+ Evas_Object *base;
+
+ base = elm_layout_add(parent);
+ p_retvm_if(NULL == base, NULL, "elm_layout_add() Failed");
+ if (is_fullview)
+ elm_layout_theme_set(base, "layout", "application", "default");
+ else
+ elm_layout_theme_set(base, "layout", "application", "noindicator");
+ evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ return base;
+}
+
+Evas_Object* phone_create_bg(Evas_Object *parent)
+{
+ PH_TRACE;
+ Evas_Object *bg;
+
+ bg = elm_bg_add(parent);
+ p_retvm_if(NULL == bg, NULL, "elm_bg_add() return NULL");
+
+ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_part_content_set(parent, "elm.swallow.bg", bg);
+
+ return bg;
+}
+
+Evas_Object* phone_progressbar_popup(Evas_Object *parent,
+ ph_progress_info *p_info, const char *title)
+{
+ PH_TRACE;
+ Evas_Object *popup;
+ Evas_Object *layout;
+ Evas_Object *label;
+ Evas_Object *progressbar;
+ Evas_Object *btn;
+
+ popup = elm_popup_add(parent);
+ p_retvm_if(NULL == popup, NULL, "elm_popup_add() return NULL");
+
+ layout = elm_layout_add(popup);
+ p_retvm_if(NULL == layout, NULL, "elm_layout_add() return NULL");
+ elm_layout_file_set(layout, PROGRESS_EDJ, "popup_center_text_progressview");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ p_info->layout = layout;
+
+ label = elm_label_add(popup);
+ p_retvm_if(NULL == label, NULL, "elm_label_add() return NULL");
+ elm_object_style_set(label, "popup/progressview");
+ elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+ elm_object_text_set(label, title);
+ evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(label);
+
+ progressbar = elm_progressbar_add(popup);
+ p_retvm_if(NULL == progressbar, NULL, "elm_progressbar_add() return NULL");
+ p_info->progressbar = progressbar;
+
+ if (0 < p_info->cnt_checked_total)
+ {
+ elm_object_style_set(progressbar, "list_progress");
+ elm_progressbar_value_set(progressbar, 0.0);
+ }
+ else
+ {
+ elm_object_style_set(progressbar, "pending_list");
+ elm_progressbar_pulse(progressbar, EINA_TRUE);
+ }
+
+ evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_show(progressbar);
+
+ elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+ elm_object_part_content_set(layout, "elm.swallow.content", label);
+ elm_object_part_content_set(layout, "elm.swallow.end", progressbar);
+ evas_object_show(layout);
+ elm_object_content_set(popup, layout);
+
+ if (false == p_info->without_cancel_btn)
+ {
+ btn = elm_button_add(popup);
+ elm_object_text_set(btn, S_(PH_SYS_SK_CANCEL));
+ elm_object_part_content_set(popup, "button1", btn);
+ elm_object_style_set(btn, "popup_button/default");
+ evas_object_smart_callback_add(btn, "clicked", progress_popup_cancel_cb,
+ &p_info->alive);
+ }
+ evas_object_show(popup);
+ return popup;
+}
+
+void phone_navi_item_reset(Elm_Object_Item *item, void *data)
+{
+ PH_TRACE;
+ assert(item);
+ Common::View *view = static_cast<Common::View *>(data);
+
+ if (item && view)
+ {
+ elm_object_item_data_set(item, view);
+ view->back_cb = NULL;
+ view->menu_cb = NULL;
+ }
+}
+
+Evas_Object *phone_create_icon_with_img(Evas_Object *parent, const char *full_path)
+{
+ PH_TRACE;
+ Evas_Object *ic = elm_icon_add(parent);
+ p_retvm_if(NULL == ic, NULL, "elm_icon_add() return NULL");
+ elm_image_file_set(ic, full_path, NULL);
+ elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+ evas_object_image_smooth_scale_set(ic, EINA_FALSE);
+ return ic;
+}
+
+contacts_error_e phone_cts_get_list(const char *view_uri, int property_id,
+ int match_value, contacts_list_h *out_list)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_filter_h filter = NULL;
+ contacts_query_h query = NULL;
+
+ p_retvm_if(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER,
+ "parameter(out_list) is NULL");
+
+ unsigned int person_grouprel_projection[] = {
+ _contacts_person_grouprel.person_id,
+ _contacts_person_grouprel.status,
+ _contacts_person_grouprel.display_name,
+ _contacts_person_grouprel.display_name_index,
+ _contacts_person_grouprel.addressbook_ids,
+ _contacts_person_grouprel.image_thumbnail_path,
+ _contacts_person_grouprel.link_count, };
+
+ err = (contacts_error_e) contacts_filter_create(view_uri, &filter);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, err,
+ "contactcs_filter_create() Failed(%d)", err);
+
+ do
+ {
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_filter_add_int(filter, property_id,
+ CONTACTS_MATCH_EQUAL, match_value)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_query_create(view_uri, &query)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_query_set_filter(query, filter)))
+ break;
+
+ if (0 == strcmp(view_uri, _contacts_person_grouprel._uri))
+ {
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_query_set_distinct(query, true)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_query_set_projection(query,
+ person_grouprel_projection,
+ sizeof(person_grouprel_projection) / sizeof(int))))
+ break;
+ }
+
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_db_get_records_with_query(query, 0, 0,
+ out_list)))
+ break;
+
+ contacts_filter_destroy(filter);
+ contacts_query_destroy(query);
+
+ return CONTACTS_ERROR_NONE;
+ }
+ while (0);
+ p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_query_create() Failed(%d)",
+ err);
+
+ contacts_filter_destroy(filter);
+ contacts_query_destroy(query);
+
+ return err;
+}
+
+void phone_cts_free_list(contacts_list_h list)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ err = (contacts_error_e) contacts_list_destroy(list, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_destroy() Failed(%d)",
+ err);
+}
+
+contacts_error_e phone_cts_get_int_from_list(contacts_list_h list,
+ int property_id, int *out_int)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+
+ p_retvm_if(NULL == out_int, CONTACTS_ERROR_INVALID_PARAMETER,
+ "parameter(out_int) is NULL");
+ p_retvm_if(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER,
+ "parameter(list) is NULL");
+
+ err = (contacts_error_e) contacts_list_get_current_record_p(list, &record);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_list_get_current_record_p() Failed(%d)", err);
+ return err;
+ }
+
+ err = (contacts_error_e) contacts_record_get_int(record, property_id, out_int);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_record_get_int() Failed(%d)", err);
+ return err;
+ }
+
+ return CONTACTS_ERROR_NONE;
+}
+
+contacts_error_e phone_cts_get_str_from_list(contacts_list_h list,
+ int property_id, char **out_str)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+
+ p_retvm_if(NULL == out_str, CONTACTS_ERROR_INVALID_PARAMETER,
+ "parameter(out_int) is NULL");
+ p_retvm_if(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER,
+ "parameter(list) is NULL");
+
+ err = (contacts_error_e) contacts_list_get_current_record_p(list, &record);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_list_get_current_record_p() Failed(%d)", err);
+ return err;
+ }
+
+ err = (contacts_error_e) contacts_record_get_str(record, property_id, out_str);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_record_get_str() Failed(%d)", err);
+ return err;
+ }
+
+ return CONTACTS_ERROR_NONE;
+}
+
+contacts_error_e phone_cts_get_bool_from_list(contacts_list_h list,
+ int property_id, bool *out_bool)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+
+ p_retvm_if(NULL == out_bool, CONTACTS_ERROR_INVALID_PARAMETER,
+ "parameter(out_bool) is NULL");
+ p_retvm_if(NULL == list, CONTACTS_ERROR_INVALID_PARAMETER,
+ "parameter(list) is NULL");
+
+ err = (contacts_error_e) contacts_list_get_current_record_p(list, &record);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_list_get_current_record_p() Failed(%d)", err);
+ return err;
+ }
+
+ err = (contacts_error_e) contacts_record_get_bool(record, property_id, out_bool);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_record_get_bool() Failed(%d)", err);
+ return err;
+ }
+
+ return CONTACTS_ERROR_NONE;
+}
+
+char* ctui_get_addressbook_icon_path(int addressbook_id)
+{
+ PH_TRACE;
+ int ret;
+ int account_id;
+ char *icon_path;
+ char *addressbook_name = NULL;
+ account_h account;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+
+ err = (contacts_error_e) contacts_db_get_record(_contacts_address_book._uri, addressbook_id,
+ &record);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, NULL,
+ "phone_cts_get_list() Failed(%d)", err);
+
+ err = (contacts_error_e) contacts_record_get_int(record, _contacts_address_book.account_id,
+ &account_id);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_record_get_int() Failed(%d)", err);
+ err = (contacts_error_e) contacts_record_destroy(record, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+ return NULL;
+ }
+ err = (contacts_error_e) contacts_record_get_str_p(record, _contacts_address_book.name,
+ &addressbook_name);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_record_get_int() Failed(%d)", err);
+ err = (contacts_error_e) contacts_record_destroy(record, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+ return NULL;
+ }
+
+ if (0 == account_id)
+ {
+ return SAFE_STRDUP(CTUI_IMG_ACC_PHONE);
+ }
+
+ ret = account_connect();
+ p_retvm_if(ACCOUNT_ERROR_NONE != ret, NULL, "account_connect() Failed(%d)",
+ ret);
+
+ account = NULL;
+ ret = account_create(&account);
+ p_retvm_if(ACCOUNT_ERROR_NONE != ret, false, "account_create() Failed(%d)",
+ ret);
+
+ ret = account_query_account_by_account_id(account_id, &account);
+ if (ACCOUNT_ERROR_NONE != ret)
+ {
+ ERR("account_query_account_by_account_id() Failed(%d)", ret);
+ account_destroy(account);
+ account_disconnect();
+ return NULL;
+ }
+ p_retvm_if(ACCOUNT_ERROR_NONE != ret, NULL,
+ "account_query_account_by_account_id() Failed(%d)", ret);
+
+ ret = account_get_icon_path(account, &icon_path);
+ if (ACCOUNT_ERROR_NONE != ret)
+ {
+ ERR("account_get_icon_path() Failed(%d)", ret);
+ account_destroy(account);
+ account_disconnect();
+ return NULL;
+ }
+ account_destroy(account);
+ account_disconnect();
+
+ return icon_path;
+}
+
+Evas_Object* phone_create_navi_btn(Evas_Object *parent, const char *style)
+{
+ PH_TRACE;
+ Evas_Object *btn;
+
+ btn = elm_button_add(parent);
+ elm_object_style_set(btn, style);
+ evas_object_show(btn);
+
+ return btn;
+}
+
+void phone_set_view_info(ph_view_info *view_info, Evas_Object *win,
+ Evas_Object *navi, void *ug, int ug_request, int cnt_max, char *ug_data)
+{
+ PH_TRACE;
+ view_info->win = win;
+ view_info->navi = navi;
+ view_info->ug = (ui_gadget_h) ug;
+ view_info->ug_request = ug_request;
+ view_info->ug_cnt_max = cnt_max;
+ view_info->ug_data = ug_data;
+}
+
+void phone_list_ug_return_ids(ui_gadget_h ug, int *result_list, int cnt,
+ const char *bd_key)
+{
+ PH_TRACE;
+ gchar *encoded_str;
+ service_h service;
+
+ service_create(&service);
+
+ if (result_list)
+ {
+ encoded_str = g_base64_encode((guchar *) result_list,
+ cnt * sizeof(int));
+ service_add_extra_data(service, bd_key, encoded_str);
+ g_free(encoded_str);
+ }
+
+ ug_send_result(ug, service);
+
+ service_destroy(service);
+}
+
+void phone_list_ug_return_values(service_h service, int *result_list, int cnt,
+ const char *result_type)
+{
+ PH_TRACE;
+ service_h reply;
+ int ct_ret;
+ int i = 0, j = 0;
+ char **result_array = NULL;
+ service_result_e result = SERVICE_RESULT_SUCCEEDED;
+
+ p_retm_if(result_list == NULL || cnt < 1 || result_type == NULL,
+ "invalid input param");
+
+ service_create(&reply);
+ result_array = (char **) calloc(cnt, sizeof(char *));
+
+ if (strcmp(CT_OPERATION_RESULT_TYPE_PHONE, result_type) == 0)
+ {
+ for (i = 0; i < cnt; i++)
+ {
+ contacts_record_h number_record = NULL;
+ char *number = NULL;
+ ct_ret = contacts_db_get_record(_contacts_number._uri,
+ result_list[i], &number_record);
+ if (ct_ret != CONTACTS_ERROR_NONE)
+ {
+ ERR("contacts_db_get_record number failed id %d",
+ result_list[i]);
+ continue;
+ }
+
+ contacts_record_get_str_p(number_record, _contacts_number.number,
+ &number);
+ result_array[i] = strdup(number);
+ PH_DBG("number %s", result_array[i]);
+ contacts_record_destroy(number_record, TRUE);
+ }
+
+ service_add_extra_data_array(reply, CT_OPERATION_PHONE,
+ (const char **) result_array, cnt);
+ }
+ else if (strcmp(CT_OPERATION_RESULT_TYPE_EMAIL, result_type) == 0)
+ {
+ for (i = 0; i < cnt; i++)
+ {
+ contacts_record_h email_record = NULL;
+ char *email = NULL;
+ ct_ret = contacts_db_get_record(_contacts_email._uri,
+ result_list[i], &email_record);
+ if (ct_ret != CONTACTS_ERROR_NONE)
+ {
+ ERR("contacts_db_get_record email faile id %d", result_list[i]);
+ continue;
+ }
+
+ contacts_record_get_str_p(email_record, _contacts_email.email,
+ &email);
+ result_array[i] = strdup(email);
+ PH_DBG("email %s", result_array[i]);
+ contacts_record_destroy(email_record, TRUE);
+ }
+
+ service_add_extra_data_array(reply, CT_OPERATION_EMAIL,
+ (const char **) result_array, cnt);
+
+ }
+ else if (strcmp(CT_OPERATION_RESULT_TYPE_ITEM_ID, result_type) == 0)
+ {
+ for (i = 0; i < cnt; i++)
+ {
+ char buf[4];
+ snprintf(buf, sizeof(buf), "%d", result_list[i]);
+ result_array[i] = strdup(buf);
+ PH_DBG("person id %s", result_array[i]);
+ }
+
+ service_add_extra_data_array(reply, CT_OPERATION_ITEM_ID,
+ (const char **) result_array, cnt);
+
+ }
+ else
+ {
+ ERR("wrong result type %s", result_type);
+ result = SERVICE_RESULT_FAILED;
+ }
+
+ service_reply_to_launch_request(reply, service, result);
+ service_destroy(reply);
+
+ for (j = 0; j < i; j++)
+ {
+ free(result_array[j]);
+ }
+ free(result_array);
+}
+
+void phone_service_reply_simple(service_h service, service_result_e result)
+{
+ PH_TRACE;
+ service_h reply;
+ service_create(&reply);
+ service_reply_to_launch_request(reply, service, result);
+ service_destroy(reply);
+}
+
+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)
+{
+ PH_TRACE;
+ gchar *encoded_str;
+ service_h service;
+ service_create(&service);
+
+ if (result_number_list && number_list_count)
+ {
+ encoded_str = g_base64_encode((guchar *) result_number_list,
+ number_list_count * sizeof(int));
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_NUMBER_ID_LIST,
+ encoded_str);
+ g_free(encoded_str);
+ }
+
+ if (result_email_list && email_list_count)
+ {
+ encoded_str = g_base64_encode((guchar *) result_email_list,
+ email_list_count * sizeof(int));
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_EMAIL_ID_LIST,
+ encoded_str);
+ g_free(encoded_str);
+ }
+
+ ug_send_result(ug, service);
+ service_destroy(service);
+}
+
+#define CT_UG_BUNDLE_RESULT_ID "id"
+#define CT_UG_BUNDLE_RESULT_VCARD "vcard"
+
+void phone_ug_return_id(ui_gadget_h ug, int ct_id, int num_id, int email_id)
+{
+ PH_TRACE;
+ service_h service;
+ char buf[16];
+
+ service_create(&service);
+
+ if (ct_id)
+ {
+ snprintf(buf, sizeof(buf), "%d", ct_id);
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_ID, buf);
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_PERSON_ID, buf);
+ }
+
+ if (num_id)
+ {
+ snprintf(buf, sizeof(buf), "%d", num_id);
+ service_remove_extra_data(service, CT_UG_BUNDLE_RESULT_ID);
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_ID, buf);
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_NUMBER_ID, buf);
+ }
+
+ if (email_id)
+ {
+ snprintf(buf, sizeof(buf), "%d", email_id);
+ service_remove_extra_data(service, CT_UG_BUNDLE_RESULT_ID);
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_ID, buf);
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_EMAIL_ID, buf);
+ }
+
+ PH_DBG("ct_id =%d, num_id=%d,email_id=%d", ct_id, num_id, email_id);
+ ug_send_result(ug, service);
+
+ service_destroy(service);
+}
+
+void phone_ug_return_value(service_h service, int person_id, int num_id,
+ int email_id, int result_id)
+{
+ PH_TRACE;
+ service_h reply;
+ char buf[16];
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h number_record = NULL;
+ contacts_record_h email_record = NULL;
+
+ service_create(&reply);
+
+ if (person_id)
+ {
+ char **result_array = NULL;
+ result_array = (char **) calloc(1, sizeof(char *));
+
+ snprintf(buf, sizeof(buf), "%d", person_id);
+ PH_DBG("person id %s", buf);
+
+ result_array[0] = strdup(buf);
+ service_add_extra_data_array(reply, CT_OPERATION_ITEM_ID,
+ (const char **) result_array, 1);
+
+ service_reply_to_launch_request(reply, service,
+ SERVICE_RESULT_SUCCEEDED);
+
+ service_destroy(reply);
+
+ free(result_array[0]);
+ free(result_array);
+
+ return;
+ }
+
+ if (num_id)
+ {
+ const char *number = NULL;
+ char **result_array = NULL;
+ result_array = (char **) calloc(1, sizeof(char *));
+
+ err = (contacts_error_e) contacts_db_get_record(_contacts_number._uri, num_id,
+ &number_record);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_db_get_record() Failed(%d)", err);
+
+ err = (contacts_error_e) contacts_record_get_str_p(number_record, _contacts_number.number,
+ (char**) &number);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_get_str_p() Failed(%d)", err);
+
+ PH_DBG("number=%d", number);
+
+ result_array[0] = strdup(number);
+ service_add_extra_data_array(reply, CT_OPERATION_RESULT_TYPE_PHONE,
+ (const char **) result_array, 1);
+
+ service_reply_to_launch_request(reply, service,
+ SERVICE_RESULT_SUCCEEDED);
+
+ err = (contacts_error_e) contacts_record_destroy(number_record, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+
+ service_destroy(reply);
+
+ free(result_array[0]);
+ free(result_array);
+
+ return;
+ }
+
+ if (email_id)
+ {
+ const char *email = NULL;
+ char **result_array = NULL;
+ result_array = (char **) calloc(1, sizeof(char *));
+
+ err = (contacts_error_e) contacts_db_get_record(_contacts_email._uri, email_id,
+ &email_record);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_db_get_record() Failed(%d)", err);
+
+ err = (contacts_error_e) contacts_record_get_str_p(email_record, _contacts_email.email,
+ (char**) &email);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_get_str_p() Failed(%d)", err);
+
+ PH_DBG("email=%d", email);
+
+ result_array[0] = strdup(email);
+ service_add_extra_data_array(reply, CT_OPERATION_RESULT_TYPE_EMAIL,
+ (const char **) result_array, 1);
+
+ service_reply_to_launch_request(reply, service,
+ SERVICE_RESULT_SUCCEEDED);
+
+ err = (contacts_error_e) contacts_record_destroy(email_record, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+
+ service_destroy(reply);
+
+ free(result_array[0]);
+ free(result_array);
+
+ return;
+ }
+
+ if (result_id)
+ {
+ snprintf(buf, sizeof(buf), "%d", person_id);
+ PH_DBG("person id %s", buf);
+
+ service_add_extra_data(reply, CT_OPERATION_ITEM_ID, buf);
+
+ service_reply_to_launch_request(reply, service,
+ SERVICE_RESULT_SUCCEEDED);
+
+ service_destroy(reply);
+
+ return;
+ }
+
+}
+
+void phone_ug_operation_return_vcard(service_h service, int ct_id, char *vcard)
+{
+ PH_TRACE;
+ service_h reply;
+
+ service_create(&reply);
+
+ if (vcard)
+ {
+ service_add_extra_data(reply, CT_OPERATION_PATH, vcard);
+ }
+
+ service_reply_to_launch_request(reply, service, SERVICE_RESULT_SUCCEEDED);
+
+ service_destroy(reply);
+}
+
+void phone_ug_return_vcard(ui_gadget_h ug, int ct_id, char *vcard)
+{
+ PH_TRACE;
+ service_h service;
+ char buf[16];
+
+ service_create(&service);
+
+ if (ct_id)
+ {
+ snprintf(buf, sizeof(buf), "%d", ct_id);
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_ID, buf);
+ }
+
+ if (vcard)
+ {
+ service_add_extra_data(service, CT_UG_BUNDLE_RESULT_VCARD, vcard);
+ }
+
+ ug_send_result(ug, service);
+
+ service_destroy(service);
+}
+
+static void editfield_exceed_string_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ phone_show_tickernoti(T_(CT_GET_TEXT_ERR, CTTEXT_EXCEED_LIMIT));
+}
+
+static void editfield_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ if (!elm_entry_is_empty(obj))
+ elm_object_signal_emit((Evas_Object *) data, "elm,state,guidetext,hide", "elm");
+
+ if (elm_object_focus_get((Evas_Object *) data))
+ {
+ if (elm_entry_is_empty(obj))
+ elm_object_signal_emit((Evas_Object *) data, "elm,state,eraser,hide", "elm");
+ else
+ elm_object_signal_emit((Evas_Object *) data, "elm,state,eraser,show", "elm");
+ }
+}
+static void editfield_focused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ if (!elm_entry_is_empty(obj))
+ elm_object_signal_emit((Evas_Object *) data, "elm,state,eraser,show", "elm");
+ elm_object_signal_emit((Evas_Object *) data, "elm,state,guidetext,hide", "elm");
+}
+
+static void editfield_unfocused_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ if (elm_entry_is_empty(obj))
+ elm_object_signal_emit((Evas_Object *) data, "elm,state,guidetext,show", "elm");
+ elm_object_signal_emit((Evas_Object *) data, "elm,state,eraser,hide", "elm");
+}
+
+static void editfield_eraser_clicked_cb(void *data, Evas_Object *obj,
+ const char *emission, const char *source)
+{
+ PH_TRACE;
+ elm_entry_entry_set((Evas_Object *) data, "");
+}
+
+Evas_Object* ctui_create_editfield(Evas_Object *parent, const char *title,
+ const char *guide, bool multiline)
+{
+ PH_TRACE;
+ Evas_Object *layout, *entry;
+
+ layout = elm_layout_add(parent);
+ if (title && *title)
+ {
+ elm_layout_theme_set(layout, "layout", "editfield", "title");
+ elm_object_part_text_set(layout, "elm.text", title);
+ }
+ else
+ elm_layout_theme_set(layout, "layout", "editfield", "default");
+
+ if (guide && *guide)
+ elm_object_part_text_set(layout, "elm.guidetext", guide);
+
+ entry = elm_entry_add(parent);
+ if (!multiline)
+ {
+ elm_entry_scrollable_set(entry, EINA_TRUE);
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ }
+ ctui_entry_limit_size_set(entry);
+ elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+ elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+ evas_object_smart_callback_add(entry, "changed", editfield_changed_cb,
+ layout);
+ evas_object_smart_callback_add(entry, "preedit,changed",
+ editfield_changed_cb, layout);
+ evas_object_smart_callback_add(entry, "focused", editfield_focused_cb,
+ layout);
+ evas_object_smart_callback_add(entry, "unfocused", editfield_unfocused_cb,
+ layout);
+ evas_object_smart_callback_add(entry, "maxlength,reached",
+ editfield_exceed_string_cb, layout);
+ elm_object_part_content_set(layout, "elm.swallow.content", entry);
+ elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm",
+ editfield_eraser_clicked_cb, entry);
+ return layout;
+}
+
+// This function is used in Contact view, Group view
+ui_gadget_h ctui_account_ug(void *data, Evas_Object *obj, void *event_info,
+ void (*destroy_cb)(void*), void *cb_param)
+{
+ PH_TRACE;
+ struct ug_cbs cbs = { 0 };
+ ui_gadget_h ug;
+ service_h service;
+ struct ug_priv_data *priv_data;
+
+ priv_data = (ug_priv_data *) calloc(1, sizeof(struct ug_priv_data));
+ p_retvm_if(NULL == priv_data, NULL, "calloc is failed");
+ priv_data->destroy_cb = destroy_cb;
+ priv_data->cb_param = cb_param;
+
+ service_create(&service);
+ service_add_extra_data(service, "mode", "account_list");
+ service_add_extra_data(service, "capability_filter",
+ ACCOUNT_SUPPORTS_CAPABILITY_CONTACT);
+
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.result_cb = NULL;
+ cbs.destroy_cb = ug_common_destroy_cb;
+ cbs.priv = priv_data;
+
+ ug = ug_create((ui_gadget_h) data, ACCOUNT_UG, UG_MODE_FULLVIEW, service, &cbs);
+ p_warn_if(NULL == ug, "ug_create() Failed");
+
+ service_destroy(service);
+ return ug;
+}
+
+Evas_Object* phone_create_nocontents(Evas_Object *parent, const char* label)
+{
+ PH_TRACE;
+ Evas_Object *layout;
+
+ layout = elm_layout_add(parent);
+ p_retvm_if(NULL == layout, NULL, "elm_layout_add() return NULL");
+
+ elm_layout_theme_set(layout, "layout", "nocontents", "full");
+ elm_object_part_text_set(layout, "elm.text", label);
+
+ return layout;
+}
+
+void ctui_genlist_append_separator_20px_with_line(Evas_Object *genlist)
+{
+ PH_TRACE;
+ static Elm_Genlist_Item_Class itc;
+ itc.item_style = "dialogue/separator/21/with_line";
+
+ Elm_Object_Item *item;
+ item = elm_genlist_item_append(genlist, &itc, NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+}
+
+void ctui_genlist_append_separator_8px_with_line(Evas_Object *genlist)
+{
+ static Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+ itc->item_style = "dialogue/separator/2";
+ elm_genlist_item_append(genlist, itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+}
+
+void phone_toolbar_disabled_item_append(Evas_Object *toolbar, int cnt)
+{
+ PH_TRACE;
+ int i;
+ Elm_Object_Item * item;
+ for (i = 0; i < cnt; i++)
+ {
+ item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(item, EINA_TRUE);
+ }
+}
+
+int ctui_get_mfc_option(void)
+{
+ PH_TRACE;
+ int fd;
+ int size;
+ char buf[PH_TEXT_SHORT_LEN];
+
+ fd = open(SETTING_MFC_PATH, O_RDONLY);
+ if (fd < 0)
+ {
+ ERR("Open(%s) O_RDONLY Failed", SETTING_MFC_PATH);
+ fd = open(SETTING_MFC_PATH, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ p_retvm_if(fd < 0, 0, "Open(%s) Failed", SETTING_MFC_PATH);
+ if (-1 == write(fd, "0", 1))
+ ERR("write()... Failed(%s)", strerror(errno));
+ }
+ size = read(fd, buf, sizeof(buf));
+ close(fd);
+ if (0 < size)
+ return atoi(buf);
+ else
+ return 0;
+}
+
+static void genlist_selectall_mouseup_cb(void *data, Evas *e, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ int x, y, w, h;
+ Eina_Bool is_checked;
+ Evas_Object *check;
+ Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *) event_info;
+ void *cb_data;
+ selectall_changed_cb changed_cb = (selectall_changed_cb) data;
+
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+ return;
+
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ if (ev->output.y < y || y + h < ev->output.y)
+ return;
+
+ p_retm_if(NULL == changed_cb, "changed_cb is NULL");
+
+ check = elm_object_part_content_get(obj, "elm.icon");
+ p_retm_if(NULL == check, "elm_object_part_content_get() return NULL");
+
+ cb_data = evas_object_data_get(check, "cb_data");
+ p_retm_if(NULL == cb_data, "cb_data is NULL");
+
+ is_checked = !elm_check_state_get(check);
+ elm_check_state_set(check, is_checked);
+
+ changed_cb(cb_data, is_checked);
+}
+
+static void genlist_selectall_changed_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ Eina_Bool is_checked;
+ void *cb_data;
+ selectall_changed_cb changed_cb = (selectall_changed_cb) data;
+ p_retm_if(NULL == changed_cb, "changed_cb is NULL");
+
+ cb_data = evas_object_data_get(obj, "cb_data");
+ p_retm_if(NULL == cb_data, "cb_data is NULL");
+
+ is_checked = elm_check_state_get(obj);
+ changed_cb(cb_data, is_checked);
+}
+
+Evas_Object* phone_create_select_all(Evas_Object *parent,
+ const char *selectall_text, selectall_changed_cb changed_cb,
+ void *cb_data)
+{
+ PH_TRACE;
+ Evas_Object *layout;
+ Evas_Object *check;
+
+ p_retvm_if(NULL == parent, NULL, "parameter(parent) is NULL");
+
+ layout = elm_layout_add(parent);
+ p_retvm_if(NULL == layout, NULL, "elm_layout_add() return NULL");
+ elm_layout_theme_set(layout, "genlist", "item", "select_all/default");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0);
+ evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP,
+ genlist_selectall_mouseup_cb, (const void *) changed_cb);
+
+ check = elm_check_add(layout);
+ p_retvm_if(NULL == check, NULL, "elm_check_add() return NULL");
+ evas_object_propagate_events_set(check, EINA_FALSE);
+ elm_object_part_content_set(layout, "elm.icon", check);
+ evas_object_smart_callback_add(check, "changed",
+ genlist_selectall_changed_cb, (const void *) changed_cb);
+ evas_object_data_set(check, "cb_data", cb_data);
+
+ elm_object_part_text_set(layout, "elm.text", selectall_text);
+ evas_object_show(layout);
+
+ return layout;
+}
+
+void phone_move_ctxpopup(Evas_Object *popup, Evas_Object *item)
+{
+ PH_TRACE;
+ int x, y, w, h;
+ int pos_x;
+ int pos_y;
+ p_retm_if(NULL == popup, "parameter(popup) is NULL");
+ p_retm_if(NULL == item, "parameter(item) is NULL");
+
+ evas_object_geometry_get(item, &x, &y, &w, &h);
+
+ pos_x = x + (Evas_Coord) w / 2;
+ pos_y = y + (Evas_Coord) h / 2;
+
+ evas_object_move(popup, pos_x, pos_y);
+}
+
+void ctui_get_addressbook_name(int addressbook_id, char *dest, int dest_len)
+{
+ PH_TRACE;
+ char *display_name = NULL;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+
+ p_retm_if(NULL == dest, "parameter(dest) is NULL");
+ dest[0] = '\0';
+
+ if (addressbook_id <= 0)
+ {
+ snprintf(dest, dest_len, "%s", T_(CT_GET_TEXT_BASIC, CTTEXT_PHONE));
+ return;
+ }
+
+ err = (contacts_error_e) contacts_db_get_record(_contacts_address_book._uri,
+ addressbook_id, &record);
+ p_retm_if(CONTACTS_ERROR_NONE != err, "contacts_db_get_record() Failed(%d)",
+ err);
+
+ err = (contacts_error_e) contacts_record_get_str_p(record,
+ _contacts_address_book.name, &display_name);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_get_str_p() Failed(%d)", err);
+
+ if (display_name && *display_name)
+ snprintf(dest, dest_len, "%s", display_name);
+
+ err = (contacts_error_e) contacts_record_destroy(record, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+}
+
+void ctui_get_account_name_by_address_book_id(int address_book_id, char *dest,
+ int dest_len)
+{
+ PH_TRACE;
+ int ret;
+ int account_id;
+ char *domain_name;
+ account_h account;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+
+ err = (contacts_error_e) contacts_db_get_record(_contacts_address_book._uri,
+ address_book_id, &record);
+ p_retm_if(CONTACTS_ERROR_NONE != err, "phone_cts_get_list() Failed(%d)",
+ err);
+
+ err = (contacts_error_e) contacts_record_get_int(record,
+ _contacts_address_book.account_id, &account_id);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_record_get_int() Failed(%d)", err);
+ err = (contacts_error_e) contacts_record_destroy(record, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+ return;
+ }
+
+ err = (contacts_error_e) contacts_record_destroy(record, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+
+ if (0 == account_id)
+ return;
+
+ ret = account_connect();
+ p_retm_if(ACCOUNT_ERROR_NONE != ret, "account_connect() Failed(%d)", ret);
+
+ account = NULL;
+ ret = account_create(&account);
+ if (ACCOUNT_ERROR_NONE != ret)
+ {
+ ERR("account_create() Failed(%d)", ret);
+ account_disconnect();
+ return;
+ }
+
+ ret = account_query_account_by_account_id(account_id, &account);
+ if (ACCOUNT_ERROR_NONE != ret)
+ {
+ ERR("account_query_account_by_account_id() Failed(%d)", ret);
+ account_destroy(account);
+ account_disconnect();
+ return;
+ }
+
+ ret = account_get_domain_name(account, &domain_name);
+ if (ACCOUNT_ERROR_NONE != ret)
+ {
+ ERR("account_get_display_name() Failed(%d)", ret);
+ account_destroy(account);
+ account_disconnect();
+ return;
+ }
+ PH_DBG("domain_name = %s", domain_name);
+
+ account_destroy(account);
+ account_disconnect();
+
+ if (domain_name && *domain_name)
+ snprintf(dest, dest_len, "%s", domain_name);
+
+ free(domain_name);
+}
+
+// TODO: Fixme
+Eina_List* ctui_person_get_writable_contact_list(int person_id)
+{
+ PH_TRACE;
+ int addressbook_id;
+ int addressbook_mode;
+ Eina_List *list_contact_record = NULL;
+
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_list_h list_contact = NULL;
+ contacts_record_h record_addressbook = NULL;
+ contacts_record_h record_contact = NULL;
+ contacts_record_h record_contact_clone = NULL;
+
+ p_retvm_if(person_id <= 0, NULL, "Invalid parameter(%d)", person_id);
+
+ err = phone_cts_get_list(_contacts_contact._uri,
+ _contacts_contact.person_id, person_id, &list_contact);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, NULL,
+ "phone_cts_get_list() Failed(%d)", err);
+
+ while (CONTACTS_ERROR_NONE == err)
+ {
+ err = phone_cts_get_int_from_list(list_contact,
+ _contacts_contact.address_book_id, &addressbook_id);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("phone_cts_get_int_from_list() Failed(%d)", err);
+ break;
+ }
+
+ err = (contacts_error_e) contacts_db_get_record(
+ _contacts_address_book._uri, addressbook_id,
+ &record_addressbook);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_db_get_record() Failed(%d)", err);
+ break;
+ }
+
+ err = (contacts_error_e) contacts_record_get_int(record_addressbook,
+ _contacts_address_book.mode, &addressbook_mode);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("phone_cts_get_int_from_list() Failed(%d)", err);
+ err = (contacts_error_e) contacts_record_destroy(record_addressbook,
+ true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+ break;
+ }
+
+ err = (contacts_error_e) contacts_record_destroy(record_addressbook,
+ true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+
+ if (CONTACTS_ADDRESS_BOOK_MODE_READONLY == addressbook_mode)
+ {
+ err = (contacts_error_e) contacts_list_next(list_contact);
+ continue;
+ }
+
+ err = (contacts_error_e) contacts_list_get_current_record_p(
+ list_contact, &record_contact);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_list_get_current_record_p() Failed(%d)", err);
+ break;
+ }
+
+ err = (contacts_error_e) contacts_record_clone(record_contact,
+ &record_contact_clone);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_record_clone() Failed(%d)", err);
+ break;
+ }
+
+ list_contact_record = eina_list_append(list_contact_record,
+ record_contact_clone);
+
+ err = (contacts_error_e) contacts_list_next(list_contact);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_list_next() Failed(%d)", err);
+ break;
+ }
+ }
+ phone_cts_free_list(list_contact);
+
+ return list_contact_record;
+}
+
+static bool __phone_list_is_email_exist(Eina_List *list, char *email_address)
+{
+ PH_TRACE;
+ Eina_List *l;
+ char *email_address_temp;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ void *v_record_temp = NULL;
+
+ EINA_LIST_FOREACH(list, l, v_record_temp)
+ {
+ contacts_record_h record_temp = (contacts_record_h) v_record_temp;
+ if (NULL == record_temp)
+ continue;
+
+ err = (contacts_error_e) contacts_record_get_str_p(record_temp,
+ _contacts_email.email, &email_address_temp);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, false,
+ "contacts_record_get_str_p() Failed(%d)", err);
+
+ if (NULL == email_address_temp)
+ continue;
+
+ if (0 == strcmp(email_address_temp, email_address))
+ return true;
+ }
+ return false;
+}
+
+Eina_List* ctui_person_get_email_list(Eina_List *contact_list)
+{
+ PH_TRACE;
+ Eina_Bool checkduplicate = false;
+ int index = 0;
+ char *email_address;
+ Eina_List *l;
+ Eina_List *list_email_record = NULL;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record_email = NULL;
+ contacts_record_h record_clone = NULL;
+ void *v_record = NULL;
+
+ EINA_LIST_FOREACH(contact_list, l, v_record)
+ {
+ contacts_record_h record = (contacts_record_h) v_record;
+ index = 0;
+ while (CONTACTS_ERROR_NONE
+ == contacts_record_get_child_record_at_p(record,
+ _contacts_contact.email, index++, &record_email))
+ {
+ err = (contacts_error_e) contacts_record_get_str_p(record_email,
+ _contacts_email.email, &email_address);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("phone_cts_get_str_from_list() Failed(%d)", err);
+ break;
+ }
+ if (checkduplicate)
+ {
+ if (__phone_list_is_email_exist(list_email_record,
+ email_address))
+ {
+ ERR(
+ "__phone_list_is_email_exist() return true (email address = %s",
+ email_address);
+ continue;
+ }
+ }
+ err = (contacts_error_e) contacts_record_clone(record_email,
+ &record_clone);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_list_get_current_record_p() Failed(%d)", err);
+ break;
+ }
+ list_email_record = eina_list_append(list_email_record,
+ record_clone);
+ }
+ checkduplicate = true;
+ }
+ return list_email_record;
+}
+
+static bool __phone_list_is_number_exist(Eina_List *list, char *number_str)
+{
+ PH_TRACE;
+ Eina_List *l;
+ char *number_str_temp;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ void *v_record_temp = NULL;
+
+ EINA_LIST_FOREACH(list, l, v_record_temp)
+ {
+ contacts_record_h record_temp = (contacts_record_h) v_record_temp;
+ if (NULL == record_temp)
+ continue;
+
+ err = (contacts_error_e) contacts_record_get_str_p(record_temp,
+ _contacts_number.number, &number_str_temp);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, false,
+ "contacts_record_get_str_p() Failed(%d)", err);
+
+ if (NULL == number_str_temp)
+ continue;
+
+ if (0 == strcmp(number_str_temp, number_str))
+ return true;
+ }
+ return false;
+}
+
+Eina_List* ctui_person_get_number_list(Eina_List *contact_list)
+{
+ PH_TRACE;
+ Eina_Bool checkduplicate = false;
+ int index = 0;
+ char *number_str;
+ Eina_List *l;
+ Eina_List *list_number_record = NULL;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record_number = NULL;
+ contacts_record_h record_clone = NULL;
+ void *v_record = NULL;
+
+ EINA_LIST_FOREACH(contact_list, l, v_record)
+ {
+ contacts_record_h record = (contacts_record_h) v_record;
+ index = 0;
+ while (CONTACTS_ERROR_NONE
+ == contacts_record_get_child_record_at_p(record,
+ _contacts_contact.number, index++, &record_number))
+ {
+ err = (contacts_error_e) contacts_record_get_str_p(record_number,
+ _contacts_number.number, &number_str);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("phone_cts_get_str_from_list() Failed(%d)", err);
+ break;
+ }
+ if (checkduplicate)
+ {
+ if (__phone_list_is_number_exist(list_number_record,
+ number_str))
+ {
+ ERR(
+ "__phone_list_is_number_exist() return true (number = %s",
+ number_str);
+ continue;
+ }
+ }
+ err = (contacts_error_e) contacts_record_clone(record_number,
+ &record_clone);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_list_get_current_record_p() Failed(%d)", err);
+ break;
+ }
+ list_number_record = eina_list_append(list_number_record,
+ record_clone);
+ }
+ checkduplicate = true;
+ }
+ return list_number_record;
+}
+
+Eina_List* ctui_person_get_contact_list(int person_id)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record_contact = NULL;
+ contacts_record_h record_contact_clone = NULL;
+ contacts_list_h list_contacts = NULL;
+ Eina_List *list_contact_records = NULL;
+
+ err = phone_cts_get_list(_contacts_contact._uri,
+ _contacts_contact.person_id, person_id, &list_contacts);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, NULL,
+ "phone_cts_get_list() Failed(%d)", err);
+
+ while (err == CONTACTS_ERROR_NONE)
+ {
+ err = (contacts_error_e) contacts_list_get_current_record_p(
+ list_contacts, &record_contact);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_list_get_current_record_p() Failed(%d)", err);
+ break;
+ }
+
+ err = (contacts_error_e) contacts_record_clone(record_contact,
+ &record_contact_clone);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_record_clone() Failed(%d)", err);
+ break;
+ }
+
+ list_contact_records = eina_list_append(list_contact_records,
+ record_contact_clone);
+
+ err = (contacts_error_e) contacts_list_next(list_contacts);
+ p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_list_next() Failed(%d)",
+ err);
+ }
+ phone_cts_free_list(list_contacts);
+
+ return list_contact_records;
+}
+
+void ctui_free_record_list(Eina_List *contact_list)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ void *v_record = NULL;
+ p_retm_if(NULL == contact_list, "contact_list is NULL");
+
+ EINA_LIST_FREE(contact_list, v_record)
+ {
+ contacts_record_h record = (contacts_record_h) v_record;
+ if (NULL == record)
+ continue;
+ err = (contacts_error_e) contacts_record_destroy(record, true);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_record_destroy() Failed(%d)", err);
+ continue;
+ }
+ }
+}
+
+// TODO: Fixme
+int ctui_get_email_type_index(int type)
+{
+ PH_TRACE;
+ switch (type)
+ {
+ case CONTACTS_EMAIL_TYPE_CUSTOM:
+ return 1;
+ case CONTACTS_EMAIL_TYPE_HOME:
+ return 2;
+ case CONTACTS_EMAIL_TYPE_WORK:
+ return 3;
+ default:
+ return 0;
+ }
+}
+
+int ctui_get_view_mode(void)
+{
+ PH_TRACE;
+ int fd;
+ int size;
+ char buf[PH_TEXT_SHORT_LEN];
+
+ fd = open(VIEW_MODE_PATH, O_RDONLY);
+ if (fd < 0)
+ {
+ ctui_set_view_mode(-1);
+ PH_DBG("Open(%s) Failed so create new", VIEW_MODE_PATH);
+ return -1;
+ }
+ size = read(fd, buf, sizeof(buf));
+ close(fd);
+ if (0 < size)
+ return atoi(buf);
+ else
+ return -1;
+}
+
+void ctui_set_view_mode(int addressbook_id)
+{
+ PH_TRACE;
+ int fd;
+ char buf[PH_TEXT_SHORT_LEN] = { 0 };
+
+ fd = open(VIEW_MODE_PATH, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ p_retm_if(fd < 0, "Open(%s) Failed", VIEW_MODE_PATH);
+ snprintf(buf, sizeof(buf), "%d", addressbook_id);
+ if (-1 == write(fd, buf, strlen(buf)))
+ ERR("write()... Failed(%s)", strerror(errno));
+ close(fd);
+}
+
+contacts_error_e phone_cts_get_default_number(int person_id,
+ contacts_record_h *record_clone)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+ contacts_list_h list = NULL;
+ contacts_filter_h filter = NULL;
+ contacts_query_h query = NULL;
+
+ p_retvm_if(NULL == record_clone, CONTACTS_ERROR_INVALID_PARAMETER,
+ "parameter(record_clone) is NULL");
+
+ err = (contacts_error_e) contacts_query_create(_contacts_person_number._uri,
+ &query);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, err,
+ "contacts_query_create() Failed(%d)", err);
+
+ err = (contacts_error_e) contacts_filter_create(
+ _contacts_person_number._uri, &filter);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_filter_create() Failed(%d)", err);
+ contacts_query_destroy(query);
+ return err;
+ }
+
+ do
+ {
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_filter_add_int(filter,
+ _contacts_person_number.person_id, CONTACTS_MATCH_EQUAL,
+ person_id)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_filter_add_operator(
+ filter, CONTACTS_FILTER_OPERATOR_AND)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_filter_add_bool(filter,
+ _contacts_person_number.is_primary_default, true)))
+ break;
+ if (CONTACTS_ERROR_NONE != (err =
+ (contacts_error_e) contacts_query_set_filter(query, filter)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_db_get_records_with_query(
+ query, 0, 0, &list)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_list_get_current_record_p(
+ list, &record)))
+ break;
+ if (CONTACTS_ERROR_NONE != (err =
+ (contacts_error_e) contacts_record_clone(record, record_clone)))
+ break;
+
+ contacts_query_destroy(query);
+ contacts_filter_destroy(filter);
+ contacts_list_destroy(list, true);
+
+ return CONTACTS_ERROR_NONE;
+ }
+ while (0);
+
+ contacts_query_destroy(query);
+ contacts_filter_destroy(filter);
+ if (list)
+ contacts_list_destroy(list, true);
+
+ return err;
+}
+
+contacts_error_e phone_cts_get_default_email(int person_id,
+ contacts_record_h *record_clone)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+ contacts_list_h list = NULL;
+ contacts_filter_h filter = NULL;
+ contacts_query_h query = NULL;
+
+ p_retvm_if(NULL == record_clone, CONTACTS_ERROR_INVALID_PARAMETER,
+ "parameter(record_clone) is NULL");
+
+ err = (contacts_error_e) contacts_query_create(_contacts_person_email._uri,
+ &query);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, err,
+ "contacts_query_create() Failed(%d)", err);
+
+ err = (contacts_error_e) contacts_filter_create(_contacts_person_email._uri,
+ &filter);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_filter_create() Failed(%d)", err);
+ contacts_query_destroy(query);
+ return err;
+ }
+
+ do
+ {
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_filter_add_int(filter,
+ _contacts_person_email.person_id, CONTACTS_MATCH_EQUAL,
+ person_id)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_filter_add_operator(
+ filter, CONTACTS_FILTER_OPERATOR_AND)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_filter_add_bool(filter,
+ _contacts_person_email.is_primary_default, true)))
+ break;
+ if (CONTACTS_ERROR_NONE != (err =
+ (contacts_error_e) contacts_query_set_filter(query, filter)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_db_get_records_with_query(
+ query, 0, 0, &list)))
+ break;
+ if (CONTACTS_ERROR_NONE
+ != (err = (contacts_error_e) contacts_list_get_current_record_p(
+ list, &record)))
+ break;
+ if (CONTACTS_ERROR_NONE != (err =
+ (contacts_error_e) contacts_record_clone(record, record_clone)))
+ break;
+
+ contacts_query_destroy(query);
+ contacts_filter_destroy(filter);
+ contacts_list_destroy(list, true);
+
+ return CONTACTS_ERROR_NONE;
+ }
+ while (0);
+
+ contacts_query_destroy(query);
+ contacts_filter_destroy(filter);
+
+ if (list)
+ contacts_list_destroy(list, true);
+ return err;
+}
+
+bool ctui_list_make_vcard(int person_id, char *path, int path_length)
+{
+ PH_TRACE;
+ int fd;
+ char *display = NULL;
+ char *vcard = NULL;
+ contacts_record_h record = NULL;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+
+ err = (contacts_error_e) contacts_db_get_record(_contacts_person._uri,
+ person_id, &record);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_db_get_record() Failed(%d)", err);
+ return false;
+ }
+
+ err = (contacts_error_e) contacts_record_get_str_p(record,
+ _contacts_person.display_name, &display);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_get_str_p() Failed(%d)", err);
+
+ if (display && *display)
+ snprintf(path, path_length, "%s/%s.vcf", UGDATAIDR, display);
+ else
+ snprintf(path, path_length, "%s/%s.vcf", UGDATAIDR,
+ T_(CT_GET_TEXT_ERR, CTTEXT_NONAME));
+
+ err = (contacts_error_e) contacts_vcard_make_from_person(record, &vcard);
+ if (CONTACTS_ERROR_NONE != err)
+ {
+ ERR("contacts_vcard_make_from_person() Failed(%d)", err);
+ err = (contacts_error_e) contacts_record_destroy(record, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_destroy() Failed(%d)", err);
+ return false;
+ }
+
+ fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+
+ if (-1 == write(fd, vcard, strlen(vcard)))
+ {
+ ERR("write()... Failed(%s)", strerror(errno));
+ free(vcard);
+ return false;
+ }
+ free(vcard);
+ return true;
+}
+
+int ctui_get_addressbook_id_by_index(Eina_List *list, unsigned int index)
+{
+ PH_TRACE;
+ p_retvm_if(NULL == list, -1, "list is NULL");
+ void *addressbook_id;
+
+ if (eina_list_count(list) <= index)
+ {
+ ERR("index is bigger than count");
+ return -1;
+ }
+
+ addressbook_id = eina_list_nth(list, index);
+
+ return (int) addressbook_id;
+}
+
+Eina_List* ctui_get_addressbook_id_list(const char *ori_string, const char *sep)
+{
+ PH_TRACE;
+ Eina_List *e_list = NULL;
+ char *p = NULL;
+ char *copy_string;
+ char *save_p;
+
+ if (!ori_string)
+ {
+ PH_DBG("Input string is NULL");
+ return NULL;
+ }
+
+ copy_string = SAFE_STRDUP(ori_string);
+
+ if (copy_string)
+ {
+ p = strtok_r(copy_string, sep, &save_p);
+
+ while (p)
+ {
+ int id = atoi(p);
+ if (eina_list_data_find(e_list, (void*) id) == NULL)
+ e_list = eina_list_append(e_list, (void*) id);
+
+ p = strtok_r(NULL, sep, &save_p);
+ }
+
+ free(copy_string);
+ }
+
+ return e_list;
+}
+
+Eina_List* __make_tokenize_list(const char *ori_string, const char *sep)
+{
+ PH_TRACE;
+ Eina_List *e_list = NULL;
+ char *p = NULL;
+ char *copy_string;
+ char *save_p;
+
+ if (!ori_string)
+ {
+ PH_DBG("Input string is NULL");
+ return NULL;
+ }
+
+ copy_string = SAFE_STRDUP(ori_string);
+
+ if (copy_string)
+ {
+ p = strtok_r(copy_string, sep, &save_p);
+
+ if (p)
+ PH_DBG("list item = %s", p);
+
+ while (p)
+ {
+ char *c = SAFE_STRDUP(p);
+
+ e_list = eina_list_append(e_list, c);
+
+ p = strtok_r(NULL, sep, &save_p);
+
+ if (p)
+ PH_DBG("list item = %s", p);
+ }
+
+ free(copy_string);
+ }
+
+ return e_list;
+}
+
+contacts_record_h ctui_get_record_image(contacts_record_h record_contact)
+{
+ PH_TRACE;
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+ p_retvm_if(NULL == record_contact, NULL,
+ "parameter(record_contact) is NULL");
+
+ err = (contacts_error_e) contacts_record_get_child_record_at_p(
+ record_contact, _contacts_contact.image, 0, &record);
+ if (NULL != record)
+ return record;
+
+ err = (contacts_error_e) contacts_record_create(_contacts_image._uri,
+ &record);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, NULL,
+ "contacts_record_create() Failed(%d)", err);
+
+ err = (contacts_error_e) contacts_record_add_child_record(record_contact,
+ _contacts_contact.image, record);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_record_add_child_record() Failed(%d)", err);
+
+ return record;
+}
+
+Evas_Object *phone_create_toolbar_btn(Evas_Object *parent, const char *text,
+ Evas_Smart_Cb func, void *data)
+{
+ PH_TRACE;
+ const Evas_Coord height = 100;
+ if (!parent || !data)
+ {
+ return NULL;
+ }
+ Evas_Object *btn = elm_button_add(parent);
+ if (!btn)
+ {
+ return NULL;
+ }
+ evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_style_set(btn, "naviframe/toolbar/default");
+ elm_object_text_set(btn, text);
+ evas_object_size_hint_min_set(btn, 0, height);
+ evas_object_size_hint_max_set(btn, 999999, height);
+ evas_object_smart_callback_add(btn, "clicked", func, data);
+ evas_object_show(btn);
+ return btn;
+}
+
+int ctui_get_addressbook_id(char* addressbook_name)
+{
+ PH_TRACE;
+ PH_DBG("addressbook_name = %s", addressbook_name);
+ contacts_error_e err = CONTACTS_ERROR_NONE;
+ contacts_filter_h filter = NULL;
+ contacts_query_h query = NULL;
+ contacts_list_h list = NULL;
+ contacts_record_h record = NULL;
+ unsigned int count = 0;
+ int addressbook_id = -1; //0 is phone addressbook id
+
+ err = (contacts_error_e) contacts_filter_create(_contacts_address_book._uri,
+ &filter);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contactcs_filter_create() Failed(%d)", err);
+
+ err = (contacts_error_e) contacts_filter_add_str(filter,
+ _contacts_address_book.name, CONTACTS_MATCH_FULLSTRING,
+ addressbook_name);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_filter_add_str() Failed(%d)", err);
+ err = (contacts_error_e) contacts_query_create(_contacts_address_book._uri,
+ &query);
+ p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_query_create() Failed(%d)",
+ err);
+ err = (contacts_error_e) contacts_query_set_filter(query, filter);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_query_set_filter() Failed(%d)", err);
+ err = (contacts_error_e) contacts_db_get_records_with_query(query, 0, 0,
+ &list);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_db_get_records_with_query() Failed(%d)", err);
+
+ if (list != NULL)
+ {
+ err = (contacts_error_e) contacts_list_get_count(list, &count);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_list_get_count() Failed(%d)", err);
+ PH_DBG("count = %d", count);
+ if (count > 0)
+ {
+ err = (contacts_error_e) contacts_list_get_current_record_p(list,
+ &record);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_list_get_current_record_p() Failed(%d)", err);
+ contacts_record_get_int(record, _contacts_address_book.id,
+ &addressbook_id);
+ err = (contacts_error_e) contacts_list_destroy(list, true);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_list_destroy() Failed(%d)", err);
+ }
+ }
+ err = (contacts_error_e) contacts_filter_destroy(filter);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_filter_destroy() Failed(%d)", err);
+ err = (contacts_error_e) contacts_query_destroy(query);
+ p_warn_if(CONTACTS_ERROR_NONE != err, "contacts_query_destroy() Failed(%d)",
+ err);
+
+ PH_DBG("addressbook id = %d", addressbook_id);
+ return addressbook_id;
+
+}
+
+void ctui_create_contacts_error_popup(Evas_Object *parent, int err)
+{
+ PH_TRACE;
+ p_retm_if(CONTACTS_ERROR_NONE == err,
+ "ctui_create_contacts_error_popup no errer");
+ p_retm_if(NULL == parent,
+ "ctui_create_contacts_error_popup parent is null");
+
+ ERR("ctui_create_contacts_error_popup() err(%d)", err);
+ switch (err)
+ {
+ case CONTACTS_ERROR_DB:
+ phone_show_popup(parent, T_(CT_GET_TEXT_ERR, CTTEXT_ERR_DB_LOCKED),
+ 1.5);
+ break;
+ case CONTACTS_ERROR_FILE_NO_SPACE:
+ phone_show_popup(parent, S_(CT_SYS_POP_NOT_ENOUGH_MEMORY), 1.5);
+ break;
+ default:
+ phone_show_popup(parent, S_(PH_SYS_POP_FAILED), 1.5);
+ break;
+ }
+
+ return;
+}
+
+bool hasBadge()
+{
+ PH_TRACE;
+ bool badgeExists(false);
+ badge_error_e badgeRes = badge_is_existing(DIALER_PKG, &badgeExists);
+ p_warn_if(BADGE_ERROR_NONE != badgeRes, "badge_is_existing is failed(%d)", badgeRes);
+ if (badgeRes != BADGE_ERROR_NONE)
+ {
+ badgeExists = false;
+ }
+
+ return badgeExists;
+}
+
+bool removeBadge()
+{
+ PH_TRACE;
+ bool shouldRemove(hasBadge());
+ if (shouldRemove)
+ {
+ badge_remove(DIALER_PKG);
+ }
+
+ return shouldRemove;
+}
+
+void phone_set_searchbar_add_button_visible(ct_list_data &clist_d, bool visible)
+{
+ PH_TRACE;
+ Evas_Object * add_button = (Evas_Object *) evas_object_data_get(clist_d.searchbar, "add_button");
+ if(add_button)
+ {
+ if(visible)
+ {
+ elm_object_part_content_set(clist_d.searchbar, "add_button_show_swall_search", clist_d.search_layout);
+ elm_object_part_content_set(clist_d.searchbar,"button_add",add_button);
+ }
+ else
+ {
+ elm_object_part_content_set(clist_d.searchbar, "add_button_hide_swall_search", clist_d.search_layout);
+ elm_object_part_content_unset(clist_d.searchbar, "button_add");
+ evas_object_hide(add_button);
+ }
+ }
+}
+
+bool phone_copy_to_dialing_screen(const std::string& number)
+{
+ PH_TRACE;
+ bool result(false);
+ service_h service = NULL;
+ std::string uri = "tel:" + number;
+
+ if(service_create(&service) == SERVICE_ERROR_NONE)
+ {
+ if( service_set_package(service, DIALER_PKG) == SERVICE_ERROR_NONE
+ && service_set_operation(service,
+ "http://tizen.org/appcontrol/operation/dial") == SERVICE_ERROR_NONE
+ && service_set_uri(service, uri.c_str()) == SERVICE_ERROR_NONE)
+ {
+ if( service_send_launch_request(service, NULL, NULL) == SERVICE_ERROR_NONE)
+ {
+ result = (service_destroy(service) == SERVICE_ERROR_NONE);
+ }
+ }
+ }
+ return result;
+}
+
+char* phone_get_datetime_str(UDateFormat* formatter, int year, int month,
+ int day)
+{
+ PH_TRACE;
+ time_t timer;
+ struct tm stime;
+ char *ret_str = NULL;
+ char formatted_str[PH_TEXT_SHORT_LEN];
+ int32_t formattedCapacity;
+ UChar formatted[PH_TEXT_SHORT_LEN];
+ UErrorCode status = U_ZERO_ERROR;
+ if(formatter)
+ {
+ memset(&stime, 0, sizeof(struct tm));
+ stime.tm_year = year - 1900;
+ stime.tm_mon = month - 1;
+ stime.tm_mday = day;
+ timer = mktime(&stime);
+
+ formattedCapacity = (int32_t)(sizeof(formatted) / sizeof((formatted)[0]));
+ udat_format(formatter, (UDate) timer * 1000, formatted, formattedCapacity,
+ NULL, &status);
+ p_retvm_if(U_FAILURE(status), NULL, "udat_format() Failed()");
+
+ u_austrcpy(formatted_str, formatted);
+ ret_str = strdup(formatted_str);
+ }
+
+ return ret_str;
+}
+
+// TODO: Fixme
+int phone_get_address_type_index(int type)
+{
+ PH_TRACE;
+ switch (type)
+ {
+ case CONTACTS_ADDRESS_TYPE_CUSTOM:
+ return 1;
+ case CONTACTS_ADDRESS_TYPE_HOME:
+ return 2;
+ case CONTACTS_ADDRESS_TYPE_WORK:
+ return 3;
+ default:
+ return 0;
+ }
+}
+
+// TODO: Fixme
+int phone_get_website_type_index(int type)
+{
+ PH_TRACE;
+ switch (type)
+ {
+ case CONTACTS_URL_TYPE_CUSTOM:
+ return 1;
+ case CONTACTS_URL_TYPE_HOME:
+ return 2;
+ case CONTACTS_URL_TYPE_WORK:
+ return 3;
+ default:
+ return 0;
+ }
+}
+
+int phone_get_number_type_index(int ct_num_type)
+{
+ PH_TRACE;
+ int ret_type;
+
+ switch (ct_num_type)
+ {
+ case CTTEXT_TYPE_MOBILE:
+ ret_type = CONTACTS_NUMBER_TYPE_CELL;
+ break;
+ case CTTEXT_TYPE_HOME:
+ ret_type = CONTACTS_NUMBER_TYPE_VOICE | CONTACTS_NUMBER_TYPE_HOME;
+ break;
+ case CTTEXT_TYPE_HOME2:
+ ret_type = CONTACTS_NUMBER_TYPE_CELL | CONTACTS_NUMBER_TYPE_HOME;
+ break;
+ case CTTEXT_TYPE_WORK:
+ ret_type = CONTACTS_NUMBER_TYPE_VOICE | CONTACTS_NUMBER_TYPE_WORK;
+ break;
+ case CTTEXT_TYPE_WORK2:
+ ret_type = CONTACTS_NUMBER_TYPE_CELL | CONTACTS_NUMBER_TYPE_WORK;
+ break;
+ case CTTEXT_TYPE_FAX_HOME:
+ ret_type = CONTACTS_NUMBER_TYPE_FAX | CONTACTS_NUMBER_TYPE_HOME;
+ break;
+ case CTTEXT_TYPE_FAX_WORK:
+ ret_type = CONTACTS_NUMBER_TYPE_FAX | CONTACTS_NUMBER_TYPE_WORK;
+ break;
+ case CTTEXT_TYPE_ASSISTANT:
+ ret_type = CONTACTS_NUMBER_TYPE_ASSISTANT;
+ break;
+ case CTTEXT_TYPE_PAGER:
+ ret_type = CONTACTS_NUMBER_TYPE_PAGER;
+ break;
+ case CTTEXT_TYPE_CAR:
+ ret_type = CONTACTS_NUMBER_TYPE_CAR;
+ break;
+ case CTTEXT_TYPE_CUSTOM:
+ ret_type = CONTACTS_NUMBER_TYPE_CUSTOM;
+ break;
+ case CTTEXT_TYPE_OTHER:
+ default:
+ ret_type = CONTACTS_NUMBER_TYPE_OTHER;
+ break;
+ }
+
+ return ret_type;
+}
+
+UDateFormat* phone_init_time_formatter(void)
+{
+ PH_TRACE;
+ UChar pattern[PH_TEXT_SHORT_LEN] = {0,};
+ UChar customSkeleton[PH_TEXT_SHORT_LEN] = {0,};
+ UDateFormat *formatter = NULL;
+ UErrorCode status = U_ZERO_ERROR;
+
+ u_uastrncpy(customSkeleton, UDAT_YEAR_MONTH_DAY,
+ strlen(UDAT_YEAR_MONTH_DAY));
+
+ const char *locale = uloc_getDefault();
+ p_retvm_if(NULL == locale, NULL, "uloc_getDefault() return NULL");
+
+ UDateTimePatternGenerator *generator = udatpg_open(locale, &status);
+ p_retvm_if(U_FAILURE(status), NULL, "udatpg_open() Failed()");
+
+ int32_t pattern_capacity = (int32_t)(sizeof(pattern) / sizeof((pattern)[0]));
+ udatpg_getBestPattern(generator, customSkeleton, 6, pattern,
+ pattern_capacity, &status);
+
+ if (!U_FAILURE(status))
+ formatter = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1,
+ pattern, -1, &status);
+
+ udatpg_close(generator);
+ return formatter;
+}
+
+void phone_destroy_confirm_popup_data(ct_confirm_popup_data* p_popup_data)
+{
+ PH_TRACE;
+ p_retm_if(NULL == p_popup_data, "popup data is null");
+ p_popup_data->parent = NULL;
+ evas_object_del(p_popup_data->button1);
+ p_popup_data->button1 = NULL;
+ evas_object_del(p_popup_data->button2);
+ p_popup_data->button2 = NULL;
+ free(p_popup_data->popup_label);
+ p_popup_data->popup_label = NULL;
+ free(p_popup_data->button1_label);
+ p_popup_data->button1_label = NULL;
+ free(p_popup_data->button2_label);
+ p_popup_data->button2_label = NULL;
+ p_popup_data->button1_cb = NULL;
+ p_popup_data->button2_cb = NULL;
+ p_popup_data->button1_data = NULL;
+ p_popup_data->button2_data = NULL;
+ evas_object_del(p_popup_data->popup);
+ p_popup_data->popup = NULL;
+}
+
+bool phone_fill_confirm_popup_data(ct_confirm_popup_data* p_popup_data)
+{
+ PH_TRACE;
+ p_retvm_if(NULL == p_popup_data, false, "pointer to popup data is null");
+ p_retvm_if(NULL == p_popup_data->parent, false, "parent is null");
+
+ Evas_Object *p_popup = elm_popup_add(p_popup_data->parent);
+ p_retvm_if(NULL == p_popup, NULL, "p_popup is null");
+ elm_object_part_text_set(p_popup,TITLE_TEXT, p_popup_data->popup_label);
+ evas_object_size_hint_weight_set(p_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ Evas_Object *p_ok_button = elm_button_add(p_popup);
+ p_retvm_if(NULL == p_ok_button, NULL, "p_cancel_button is null");
+ elm_object_text_set(p_ok_button, p_popup_data->button1_label);
+ elm_object_part_content_set(p_popup, BUTTON1, p_ok_button);
+ elm_object_style_set(p_ok_button, "popup_button/default");
+ evas_object_smart_callback_add(p_ok_button, CLICKED, p_popup_data->button1_cb, p_popup_data->button1_data);
+
+ Evas_Object *p_cancel_button = elm_button_add(p_popup);
+ p_retvm_if(NULL == p_cancel_button, NULL, "p_cancel_button is null");
+ elm_object_text_set(p_cancel_button, p_popup_data->button2_label);
+ elm_object_part_content_set(p_popup, BUTTON2, p_cancel_button);
+ elm_object_style_set(p_cancel_button, "popup_button/default");
+ evas_object_smart_callback_add(p_cancel_button, CLICKED, p_popup_data->button2_cb, p_popup_data->button2_data);
+
+ bool result = (p_popup && p_ok_button && p_cancel_button);
+ if(result)
+ {
+ p_popup_data->popup = p_popup;
+ p_popup_data->button1 = p_ok_button;
+ p_popup_data->button2 = p_cancel_button;
+ }
+ return result;
+}
+
+int phone_get_contact_id_by_person_id(int personId)
+{
+ PH_TRACE;
+ int retId(0);
+ contacts_list_h tempList= NULL;
+ if(get_records_list(_contacts_contact._uri, _contacts_contact.person_id, personId, &tempList))
+ {
+ contacts_record_h tempRecord = NULL;
+ if(contacts_list_get_current_record_p(tempList, &tempRecord)
+ == CONTACTS_ERROR_NONE)
+ {
+ if(contacts_record_get_int(tempRecord, _contacts_contact.id, &retId)
+ != CONTACTS_ERROR_NONE)
+ {
+ ERR("error getting contact ID");
+ }
+ }
+ }
+ contacts_list_destroy(tempList, true);
+ return retId;
+}
+
+const char * phone_get_group_name(contacts_record_h group_record)
+{
+ char *system_id = NULL;
+ int err = contacts_record_get_str_p(group_record, _contacts_group.extra_data, &system_id);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, NULL, "contacts_record_get_str_p() is Failed(%d)");
+
+ if (system_id)
+ {
+ const char *name = NULL;
+ if (strcmp(system_id, "friends") == 0)
+ name = T_(CT_GET_TEXT_BASIC, CTTEXT_FRIENDS);
+ else if (strcmp(system_id, "family") == 0)
+ name = T_(CT_GET_TEXT_BASIC, CTTEXT_FAMILY);
+ else if (strcmp(system_id, "coworkers") == 0)
+ name = T_(CT_GET_TEXT_BASIC, CTTEXT_CO_WORKERS);
+ else if (strcmp(system_id, "emergency") == 0)
+ name = T_(CT_GET_TEXT_BASIC, CTTEXT_EMERGENCY_CONTACTS);
+ else
+ name = T_(CT_GET_TEXT_ERR, CTTEXT_NONAME);
+
+ return name;
+ }
+ else
+ {
+ char *name = NULL;
+ err = contacts_record_get_str_p(group_record, _contacts_group.name, &name);
+ p_retvm_if(CONTACTS_ERROR_NONE != err, NULL, "contacts_record_get_str_p() is Failed(%d)");
+ return name;
+ }
+}
+
+bool has_emergency_contacts()
+{
+ PH_TRACE;
+ int ret = CONTACTS_ERROR_NONE;
+ contacts_record_h record = NULL;
+ contacts_list_h group_list = NULL;
+
+ phone_cts_get_list(_contacts_group._uri, _contacts_group.address_book_id, 0, &group_list);
+ CONTACTS_LIST_FOREACH(group_list, record)
+ {
+ char* group_name = NULL;
+ ret = contacts_record_get_str_p(record, _contacts_group.extra_data, &group_name);
+ if (group_name != NULL)
+ {
+ if (CONTACTS_ERROR_NONE == ret)
+ {
+ if (strcmp(group_name, EMERGENCY) == 0)
+ {
+ phone_cts_free_list(group_list);
+ return true;
+ }
+ }
+ }
+ }
+ phone_cts_free_list(group_list);
+ return false;
+}
+
+void create_emergency_contacts_group()
+{
+ PH_TRACE;
+ contacts_record_h group_record = NULL;
+ int id_grp = 0;
+
+ int ret = contacts_record_create(_contacts_group._uri, &group_record);
+ if (CONTACTS_ERROR_NONE == ret)
+ {
+ ret = contacts_record_set_str(group_record, _contacts_group.name, EMERGENCY);
+ ret = contacts_record_set_str(group_record, _contacts_group.extra_data, EMERGENCY);
+ if (CONTACTS_ERROR_NONE == ret)
+ {
+ ret = contacts_db_insert_record(group_record, &id_grp);
+ }
+ ret = contacts_record_destroy(group_record, true);
+ p_retm_if(CONTACTS_ERROR_NONE != ret, "contacts_record_destroy() Failed(%d)");
+ }
+}
+
+static void phone_popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ if(data)
+ {
+ evas_object_hide((Evas_Object *) data);
+ }
+}
+
+Evas_Object * phone_popup_add_button(Evas_Object *popup, const char *text, Evas_Smart_Cb func, void *data)
+{
+ static const char *button_parts[] =
+ {
+ "button1",
+ "button2",
+ "button3",
+ NULL
+ };
+ const char **part = button_parts;
+ Evas_Object *button = NULL;
+
+ while(*part && elm_object_part_content_get(popup, *part))
+ {
+ ++part;
+ }
+
+ p_retvm_if(NULL == part, NULL, "No empty button parts left");
+
+ button = elm_button_add(popup);
+ p_retvm_if(NULL == button, NULL, "Failed to create button");
+ elm_object_style_set(button, "popup_button/default");
+ elm_object_text_set(button, text);
+ elm_object_part_content_set(popup, *part, button);
+ evas_object_smart_callback_add(button, "clicked", phone_popup_hide_cb, popup);
+ evas_object_smart_callback_add(button, "clicked", func, data);
+
+ return button;
+}
+
+char* phone_get_contact_name(int id)
+{
+ p_retvm_if(0 >= id, NULL, "incorrect id");
+ char* contact_name = NULL;
+ contacts_record_h contact = NULL;
+
+ if (contacts_db_get_record(_contacts_contact._uri, id, &contact) == CONTACTS_ERROR_NONE)
+ {
+ if(contacts_record_get_str(contact, _contacts_contact.display_name, &contact_name) != CONTACTS_ERROR_NONE)
+ {
+ ERR("getting contact name failed");
+ free(contact_name);
+ contact_name = NULL;
+ }
+ contacts_record_destroy(contact, true);
+ }
+ PH_DBG("contact_name: %s", contact_name);
+ return contact_name;
+}
+
+Elm_Genlist_Item_Class* phone_create_item_class(const char* style, const char* decorate_style, const char* decorate_all_style,
+ Elm_Gen_Item_Text_Get_Cb get_text, Elm_Gen_Item_Content_Get_Cb get_content,
+ Elm_Gen_Item_State_Get_Cb get_state, Elm_Gen_Item_Del_Cb del_func)
+{
+ PH_TRACE;
+ Elm_Genlist_Item_Class *item_class = elm_genlist_item_class_new();
+ p_retvm_if(NULL == item_class, NULL, "item_class is null");
+
+ item_class->item_style = style;
+ item_class->decorate_item_style = decorate_style;
+ item_class->decorate_all_item_style = decorate_all_style;
+ item_class->func.text_get = get_text;
+ item_class->func.content_get = get_content;
+ item_class->func.state_get = get_state;
+ item_class->func.del = del_func;
+ return item_class;
+}
+
+static void phone_hide_block_contact_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is null");
+ ct_contact_block_data* p_block_contact_data = (ct_contact_block_data*)data;
+ p_retm_if(NULL == p_block_contact_data->p_popup_data, "popup data is null");
+ p_retm_if(NULL == p_block_contact_data->p_popup_data->popup, "popup is null");
+ evas_object_hide(p_block_contact_data->p_popup_data->popup);
+}
+
+
+void phone_destroy_block_contact_popup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is null");
+ ct_contact_block_data* p_block_contact_data = (ct_contact_block_data*)data;
+
+ if(p_block_contact_data->p_popup_data)
+ {
+ phone_destroy_confirm_popup_data(p_block_contact_data->p_popup_data);
+ p_block_contact_data->p_popup_data = NULL;
+ }
+ if(p_block_contact_data->msg_handle)
+ {
+ msg_close_msg_handle(&p_block_contact_data->msg_handle);
+ p_block_contact_data->msg_handle = NULL;
+ }
+ p_block_contact_data->contact_id = 0;
+ free(p_block_contact_data);
+}
+
+bool phone_check_number_in_spam_for_messages(msg_handle_t msg_handle, const char *number)
+{
+ PH_TRACE;
+ p_retvm_if(NULL == msg_handle, false, "msgHandle is NULL");
+ p_retvm_if(NULL == number, false, "address is NULL");
+ bool result(false);
+ msg_struct_list_s filter_list = {0,};
+
+ if(msg_get_filter_list(msg_handle, &filter_list) == MSG_SUCCESS)
+ {
+ if (filter_list.nCount == 0)
+ {
+ result = false;
+ }
+ else
+ {
+ int i = 0;
+ int filter_type = -1;
+ char filter_address[DEF_BUF_LEN] = {0,};
+ for (i = 0; i < filter_list.nCount; ++i)
+ {
+ msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_TYPE_INT, &filter_type);
+ if (filter_type == MSG_FILTER_BY_ADDRESS_SAME)
+ {
+ msg_get_str_value(filter_list.msg_struct_info[i], MSG_FILTER_VALUE_STR, filter_address, sizeof(filter_address));
+ if (strncmp(filter_address, number, sizeof(filter_address)) == 0)
+ {
+ result = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ msg_release_list_struct(&filter_list);
+ return result;
+}
+
+bool phone_add_number_to_spam_for_messages(msg_handle_t msg_handle, const char* number)
+{
+ PH_TRACE;
+ p_retvm_if(NULL == msg_handle, false, "msgHandle is null");
+ p_retvm_if(NULL == number, false, "number is null");
+ bool result(false);
+ msg_error_t err = MSG_SUCCESS;
+ msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER);
+
+ msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_ADDRESS_SAME);
+ msg_set_str_value(filter, MSG_FILTER_VALUE_STR, (char *)number, DEF_MAX_FILTER_LEN);
+ msg_set_filter_operation(msg_handle, true);
+
+ err = msg_add_filter(msg_handle, filter);
+ if (err != MSG_SUCCESS)
+ {
+ ERR("failed to add filter");
+ msg_release_struct(&filter);
+ }
+ else
+ {
+ result = true;
+ }
+
+ if (filter)
+ {
+ msg_release_struct(&filter);
+ }
+ return result;
+}
+
+bool phone_delete_number_from_spam_for_messages(msg_handle_t msg_handle, const char* number)
+{
+ PH_TRACE;
+ bool result(false);
+ p_retvm_if(NULL == msg_handle, false, "msgHandle is NULL");
+ p_retvm_if(NULL == number, false, "number is NULL");
+
+ msg_struct_list_s filter_list = {0,};
+
+ if(msg_get_filter_list(msg_handle, &filter_list) == MSG_SUCCESS)
+ {
+
+ if (filter_list.nCount > 0)
+ {
+ int i = 0;
+ int filter_type = -1;
+ int filter_id = -1;
+ char filter_address[DEF_BUF_LEN] = {0,};
+
+ for (i = 0; i < filter_list.nCount; ++i)
+ {
+ msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_TYPE_INT, &filter_type);
+ if (filter_type == MSG_FILTER_BY_ADDRESS_SAME)
+ {
+ msg_get_str_value(filter_list.msg_struct_info[i], MSG_FILTER_VALUE_STR, filter_address, sizeof(filter_address));
+ if (strncmp(filter_address, number, sizeof(filter_address)) == 0)
+ {
+ msg_get_int_value(filter_list.msg_struct_info[i], MSG_FILTER_ID_INT, &filter_id);
+ break;
+ }
+ }
+ }
+ if (filter_id != -1)
+ {
+ msg_delete_filter(msg_handle, filter_id);
+ result = true;
+ }
+ }
+ }
+ msg_release_list_struct(&filter_list);
+ return result;
+}
+
+bool phone_handle_contact_for_spam_messages(ct_contact_block_data* p_block_contact_data, number_handler_for_spam_messages handler_function)
+{
+ PH_TRACE;
+ p_retvm_if(NULL == handler_function, false, "func handler is null");
+ bool result(false);
+ contacts_list_h number_list = NULL;
+ if(get_records_list(_contacts_number._uri, _contacts_number.contact_id,
+ p_block_contact_data->contact_id, &number_list))
+ {
+ contacts_record_h record = NULL;
+ CONTACTS_LIST_FOREACH(number_list, record)
+ {
+ char* number = NULL;
+ if(contacts_record_get_str_p(record, _contacts_number.number, &number) == CONTACTS_ERROR_NONE)
+ {
+ if(handler_function(p_block_contact_data->msg_handle, number))
+ {
+ result = true;
+ }
+ else
+ {
+ ERR("number is not blocked/unblocked");
+ break;
+ }
+ }
+ }
+ }
+ contacts_list_destroy(number_list, true);
+ return result;
+}
+
+static void phone_handle_blocking_contact_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is null");
+ ct_contact_block_data* p_block_contact_data = (ct_contact_block_data*)data;
+
+ if(p_block_contact_data->block_calls != phone_is_blocked_contact_for_calls(p_block_contact_data->contact_id))
+ {
+ if(!phone_toggle_blocked_contact_for_calls(p_block_contact_data->contact_id))
+ {
+ ERR("Contact is not blocked/unblocked");
+ }
+ }
+
+ if(p_block_contact_data->block_messages)
+ {
+ phone_handle_contact_for_spam_messages(p_block_contact_data, phone_add_number_to_spam_for_messages);
+ }
+ else
+ {
+ phone_handle_contact_for_spam_messages(p_block_contact_data, phone_delete_number_from_spam_for_messages);
+ }
+ evas_object_hide(p_block_contact_data->p_popup_data->popup);
+}
+
+static ct_confirm_popup_data* phone_create_block_confirm_popup(Evas_Object* parent, int contact_id, void* data)
+{
+ PH_TRACE;
+ ct_confirm_popup_data* inner_popup_as_data = NULL;
+ inner_popup_as_data = (ct_confirm_popup_data*)calloc(1, sizeof(ct_confirm_popup_data));
+ inner_popup_as_data->parent = parent;
+ inner_popup_as_data->popup = NULL;
+ inner_popup_as_data->button1 = NULL;
+ inner_popup_as_data->button2 = NULL;
+ inner_popup_as_data->popup_label = phone_get_contact_name(contact_id);
+ inner_popup_as_data->button1_label = strdup(S_(PH_SYS_SK_OK));
+ inner_popup_as_data->button2_label = strdup(S_(PH_SYS_SK_CANCEL));
+ inner_popup_as_data->button1_cb = phone_handle_blocking_contact_cb;
+ inner_popup_as_data->button2_cb = phone_hide_block_contact_popup_cb;
+ inner_popup_as_data->button1_data = data;
+ inner_popup_as_data->button2_data = data;
+ return inner_popup_as_data;
+}
+
+static char* phone_block_popup_genlist_item_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ PH_TRACE;
+ p_retvm_if(NULL == data, NULL, "data is null");
+ ct_contact_block_item_data* p_block_item_data = (ct_contact_block_item_data*)data;
+ return strdup(p_block_item_data->item_caption);
+}
+
+bool phone_check_contact_in_spam_for_messages(msg_handle_t msg_handle, int contact_id)
+{
+ PH_TRACE;
+ bool result(false);
+ contacts_list_h number_list = NULL;
+ if(get_records_list(_contacts_number._uri, _contacts_number.contact_id,
+ contact_id, &number_list))
+ {
+ contacts_record_h record = NULL;
+ CONTACTS_LIST_FOREACH(number_list, record)
+ {
+ char* number = NULL;
+ if(contacts_record_get_str_p(record, _contacts_number.number, &number) == CONTACTS_ERROR_NONE)
+ {
+ if(phone_check_number_in_spam_for_messages(msg_handle, number))
+ {
+ result = true;
+ break;
+ }
+ }
+ }
+ }
+ contacts_list_destroy(number_list, true);
+ return result;
+}
+
+static bool phone_contact_block_is_any_changes(ct_contact_block_data* p_block_contact_data)
+{
+ PH_TRACE;
+ p_retvm_if(NULL == p_block_contact_data, false, "data is null");
+ return (p_block_contact_data->is_blocked_calls != p_block_contact_data->block_calls)
+ || (p_block_contact_data->is_blocked_messages != p_block_contact_data->block_messages);
+}
+
+static void phone_block_popup_check(Elm_Object_Item* item, ct_contact_block_data* p_block_contact_data, bool* p_bool_value)
+{
+ PH_TRACE;
+ p_retm_if(NULL == item, "item is null");
+ *p_bool_value = !(*p_bool_value);
+ elm_object_disabled_set(p_block_contact_data->p_popup_data->button1,
+ !phone_contact_block_is_any_changes(p_block_contact_data));
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+ Evas_Object* check = elm_object_item_part_content_get(item, "elm.icon");
+ if(check)
+ {
+ elm_check_state_set(check, *p_bool_value);
+ }
+}
+
+static void phone_block_check_calls_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is null");
+ ct_contact_block_data* p_block_contact_data = (ct_contact_block_data*)data;
+ phone_block_popup_check((Elm_Object_Item*)event_info, p_block_contact_data, &p_block_contact_data->block_calls);
+}
+
+static void phone_block_check_messages_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is null");
+ ct_contact_block_data* p_block_contact_data = (ct_contact_block_data*)data;
+ phone_block_popup_check((Elm_Object_Item*)event_info, p_block_contact_data, &p_block_contact_data->block_messages);
+}
+
+static Evas_Object* phone_block_popup_genlist_item_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ PH_TRACE;
+ p_retvm_if(NULL == data, NULL, "data is null");
+ ct_contact_block_item_data* p_block_additional_data = (ct_contact_block_item_data*)data;
+ DBG("part: %s", part);
+ Evas_Object* check = elm_check_add(obj);
+ if(check)
+ {
+ evas_object_propagate_events_set(check, EINA_TRUE);
+ elm_check_state_set(check, *p_block_additional_data->is_checked);
+ }
+ return check;
+}
+
+void phone_block_popup_item_deleter(void *data, Evas_Object *obj)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is null");
+ ct_contact_block_item_data* p_block_item_data = (ct_contact_block_item_data*)data;
+ free(p_block_item_data);
+}
+
+Evas_Object* phone_create_block_contact_popup(Evas_Object* parent, int contact_id)
+{
+ PH_TRACE;
+ p_retvm_if(NULL == parent, NULL, "parent is null");
+ p_retvm_if(contact_id < 1, NULL, "bad contact id");
+ Evas_Object* result = NULL;
+ ct_contact_block_data* p_block_contact_data = (ct_contact_block_data*)calloc(1, sizeof(ct_contact_block_data));
+ p_block_contact_data->contact_id = contact_id;
+ p_block_contact_data->p_popup_data = phone_create_block_confirm_popup(parent, contact_id, p_block_contact_data);
+ if(p_block_contact_data->p_popup_data)
+ {
+ if(msg_open_msg_handle(&p_block_contact_data->msg_handle) == MSG_SUCCESS)
+ {
+ if(phone_fill_confirm_popup_data(p_block_contact_data->p_popup_data))
+ {
+ elm_object_style_set(p_block_contact_data->p_popup_data->popup, "content_no_vhpad");
+ elm_object_disabled_set(p_block_contact_data->p_popup_data->button1, EINA_TRUE);
+ Elm_Genlist_Item_Class* genlist_item_class = phone_create_item_class("1text.1icon.3/popup",
+ NULL, NULL, phone_block_popup_genlist_item_text_get, phone_block_popup_genlist_item_content_get, NULL, phone_block_popup_item_deleter);
+ p_block_contact_data->genlist = elm_genlist_add(p_block_contact_data->p_popup_data->popup);
+ if(p_block_contact_data->genlist)
+ {
+ elm_object_content_set(p_block_contact_data->p_popup_data->popup, p_block_contact_data->genlist);
+ evas_object_size_hint_weight_set(p_block_contact_data->genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(p_block_contact_data->genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ ct_contact_block_item_data* p_call_block_data =
+ (ct_contact_block_item_data*)malloc(sizeof(ct_contact_block_item_data));
+ p_call_block_data->item_caption = T_(PH_GET_TEXT_BASIC, PHTEXT_CALLS);
+ p_call_block_data->is_checked = &p_block_contact_data->block_calls;
+ elm_genlist_item_append(p_block_contact_data->genlist, genlist_item_class,
+ p_call_block_data, NULL, ELM_GENLIST_ITEM_NONE,
+ phone_block_check_calls_changed_cb, p_block_contact_data);
+
+ ct_contact_block_item_data* p_message_block_data =
+ (ct_contact_block_item_data*)malloc(sizeof(ct_contact_block_item_data));
+ p_message_block_data->item_caption = T_(PH_GET_TEXT_BASIC, PHTEXT_MESSAGES);
+ p_message_block_data->is_checked = &p_block_contact_data->block_messages;
+ elm_genlist_item_append(p_block_contact_data->genlist, genlist_item_class,
+ p_message_block_data, NULL, ELM_GENLIST_ITEM_NONE,
+ phone_block_check_messages_changed_cb, p_block_contact_data);
+
+ evas_object_show(p_block_contact_data->p_popup_data->popup);
+ evas_object_show(p_block_contact_data->genlist);
+
+ p_block_contact_data->is_blocked_calls =
+ phone_is_blocked_contact_for_calls(p_block_contact_data->contact_id);
+ p_block_contact_data->is_blocked_messages =
+ phone_check_contact_in_spam_for_messages(p_block_contact_data->msg_handle,
+ p_block_contact_data->contact_id);
+ p_block_contact_data->block_calls = p_block_contact_data->is_blocked_calls;
+ p_block_contact_data->block_messages = p_block_contact_data->is_blocked_messages;
+
+ evas_object_event_callback_add(p_block_contact_data->p_popup_data->popup, EVAS_CALLBACK_DEL,
+ phone_destroy_block_contact_popup_cb, p_block_contact_data);
+
+ result = p_block_contact_data->p_popup_data->popup;
+ }
+ elm_genlist_item_class_free(genlist_item_class);
+ }
+ }
+ }
+ return result;
+}