summaryrefslogtreecommitdiff
path: root/lib/settings
diff options
context:
space:
mode:
Diffstat (limited to 'lib/settings')
-rwxr-xr-xlib/settings/CMakeLists.txt13
-rw-r--r--lib/settings/contacts-settings-efl.xml29
-rwxr-xr-xlib/settings/ct-setting-main.c156
-rwxr-xr-xlib/settings/ct-setting-view.c1140
-rwxr-xr-xlib/settings/ct-setting-view.h55
5 files changed, 1393 insertions, 0 deletions
diff --git a/lib/settings/CMakeLists.txt b/lib/settings/CMakeLists.txt
new file mode 100755
index 0000000..dc4ff9d
--- /dev/null
+++ b/lib/settings/CMakeLists.txt
@@ -0,0 +1,13 @@
+LINK_DIRECTORIES(${CMAKE_BINARY_DIR})
+
+SET(TARGET ${CT_SETTING})
+
+FILE(GLOB SRCS *.c)
+
+ADD_LIBRARY(${TARGET} SHARED ${SRCS})
+SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_FLAGS ${EXTRA_CFLAGS})
+TARGET_LINK_LIBRARIES(${TARGET} ${COMMON_LIB} ${ug_pkgs_LDFLAGS} ${CT_LIST})
+ADD_DEPENDENCIES(${TARGET} contacts_edj_build)
+INSTALL(TARGETS ${TARGET} DESTINATION ${UGLIBDIR})
+
+INSTALL(FILES ${CMAKE_BINARY_DIR}/lib/settings/contacts-settings-efl.xml DESTINATION "/usr/share/packages")
diff --git a/lib/settings/contacts-settings-efl.xml b/lib/settings/contacts-settings-efl.xml
new file mode 100644
index 0000000..49772e6
--- /dev/null
+++ b/lib/settings/contacts-settings-efl.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="contacts-settings-efl" version="0.1.0-0" install-location="internal-only">
+ <label>contacts-settings-efl</label>
+ <author email="ensung.park@samsung.com" href="www.samsung.com">ensung park</author>
+ <description>contacts-settings-efl Application</description>
+ <ui-application appid="contacts-settings-efl" exec="/opt/ug/bin/contacts-settings-efl" nodisplay="true" multiple="true" type="capp" taskmanage="false">
+ <icon>org.tizen.contacts.png</icon>
+ <label>Contacts</label>
+ <label xml:lang="en-us">Contacts</label>
+ <label xml:lang="nl-nl">Contacten</label>
+ <label xml:lang="de-de">Kontakte</label>
+ <label xml:lang="en-gb">Contacts</label>
+ <label xml:lang="zh-hk">聯絡人</label>
+ <label xml:lang="zh-cn">联系人</label>
+ <label xml:lang="ru-ru">Контакты</label>
+ <label xml:lang="zh-tw">聯絡人</label>
+ <label xml:lang="ja-jp">電話帳</label>
+ <label xml:lang="es-es">Contacts</label>
+ <label xml:lang="el-gr">Επαφές</label>
+ <label xml:lang="it-it">Rubrica</label>
+ <label xml:lang="tr-tr">Rehber</label>
+ <label xml:lang="pt-pt">Contactos</label>
+ <label xml:lang="fr-fr">Contacts</label>
+ <label xml:lang="ko-kr">전화번호부</label>
+ <application-service>
+ <operation name="http://tizen.org/ns/packages"/>
+ </application-service>
+ </ui-application>
+</manifest>
diff --git a/lib/settings/ct-setting-main.c b/lib/settings/ct-setting-main.c
new file mode 100755
index 0000000..dc35cb4
--- /dev/null
+++ b/lib/settings/ct-setting-main.c
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.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 <ui-gadget-module.h>
+#include "phone.h"
+#include "phone-common.h"
+#include "ct-setting-view.h"
+
+static int create_setting_view(Evas_Object *parent, ct_setting_data *csetting_d)
+{
+ Evas_Object *l_btn;
+ Evas_Object *content;
+ Elm_Object_Item *navi_item;
+
+ p_retvm_if(NULL == parent, FALSE, "parameter(parent) is NULL");
+
+ csetting_d->navi = elm_naviframe_add(parent);
+ evas_object_show(csetting_d->navi);
+ p_retvm_if(NULL == csetting_d->navi, FALSE, "navi is NULL");
+
+ content = ct_setting_create_layout(csetting_d);
+ navi_item = elm_naviframe_item_push(csetting_d->navi, S_(PH_SYS_BODY_CONTACTS), NULL, NULL, content, NULL);
+ csetting_d->navi_item_main = navi_item;
+
+ l_btn = elm_button_add(csetting_d->navi);
+ p_retvm_if(NULL == l_btn, -1, "elm_button_add() return NULL");
+
+ elm_object_item_part_content_set(navi_item, "prev_btn", l_btn);
+ elm_object_style_set(l_btn, "naviframe/back_btn/default");
+ evas_object_smart_callback_add(l_btn, "clicked", phone_ug_destroy_me_cb, csetting_d->ug);
+
+ return TRUE;
+}
+
+static void* settings_on_create(ui_gadget_h ug, enum ug_mode mode,
+ service_h service, void *priv)
+{
+ int ret;
+ Evas_Object *bg;
+ Evas_Object *parent;
+ Evas_Object *base;
+ ct_setting_data *csetting_d = priv;
+
+ p_retvm_if(NULL == ug || NULL == priv, NULL,
+ "The parameter is invalid(ug=%p, priv=%p)", ug, priv);
+
+ parent = ug_get_parent_layout(ug);
+ p_retvm_if(NULL == parent, NULL, "ug_get_parent_layout() return NULL");
+ csetting_d->ug = ug;
+
+ bindtextdomain(PACKAGE, "/usr/ug/res/locale");
+
+ ret = contacts_svc_connect();
+ p_retvm_if(CTS_SUCCESS != ret, NULL, "contacts_svc_connect() Failed(%d)", ret);
+
+ if (UG_MODE_FULLVIEW == mode)
+ base = phone_create_base_layout(parent, true);
+ else {
+ ret = contacts_svc_disconnect();
+ p_warn_if(CTS_SUCCESS != ret, "contacts_svc_disconnect() Failed(%d)", ret);
+ return NULL;
+ }
+
+ bg = phone_create_bg(base);
+ if (NULL == bg) {
+ ERR("phone_create_bg() return NULL");
+ evas_object_del(base);
+ ret = contacts_svc_disconnect();
+ p_warn_if(CTS_SUCCESS != ret, "contacts_svc_disconnect() Failed(%d)", ret);
+ return NULL;
+ }
+
+ if (create_setting_view(base, csetting_d ))
+ elm_object_part_content_set(base, "elm.swallow.content", csetting_d->navi);
+ else {
+ evas_object_del(base);
+ base = NULL;
+ ret = contacts_svc_disconnect();
+ p_warn_if(CTS_SUCCESS != ret, "contacts_svc_disconnect() Failed(%d)", ret);
+ }
+
+ return base;
+}
+
+static void settings_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h service, void *priv)
+{
+ if (!ug)
+ return;
+
+ switch (event) {
+ case UG_KEY_EVENT_END:
+ ug_destroy_me(ug);
+ break;
+ default:
+ break;
+ }
+}
+
+static void settings_on_destroy(ui_gadget_h ug, service_h service, void *priv)
+{
+ int ret;
+ p_retm_if(NULL == ug, "The ug is NULL(ug = %p)", ug);
+ evas_object_del(ug_get_layout(ug));
+
+ ret = contacts_svc_disconnect();
+ p_warn_if(CTS_SUCCESS != ret, "contacts_svc_disconnect() Failed(%d)", ret);
+}
+
+API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+ ct_setting_data *csetting_d;
+
+ p_retvm_if(!ops, -1, "ops is NULL");
+
+ csetting_d = calloc(1, sizeof(ct_setting_data));
+ p_retvm_if(NULL == csetting_d , -1, "calloc() return NULL");
+
+ ops->create = settings_on_create;
+ ops->start = NULL;
+ ops->pause = NULL;
+ ops->resume = NULL;
+ ops->destroy = settings_on_destroy;
+ ops->message = NULL;
+ ops->event = NULL;
+ ops->key_event = settings_on_key_event;
+ ops->priv = csetting_d ;
+ ops->opt = UG_OPT_INDICATOR_PORTRAIT_ONLY;
+
+ return 0;
+}
+
+API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+ if (!ops)
+ return;
+
+ ops->priv = NULL;
+}
+
+API int setting_plugin_reset(service_h service, void *priv)
+{
+ return 0;
+}
diff --git a/lib/settings/ct-setting-view.c b/lib/settings/ct-setting-view.c
new file mode 100755
index 0000000..e90a737
--- /dev/null
+++ b/lib/settings/ct-setting-view.c
@@ -0,0 +1,1140 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.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 <errno.h>
+#include <fcntl.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <unistd.h>
+#include <pthread.h>
+#include "phone.h"
+#include "phone-common.h"
+#include "ct-list.h"
+#include "ct-setting-view.h"
+
+#define SETTING_VCARD_PATH "/opt/media/Backup/Contacts"
+#define SETTING_TIMER_DURATION 0.2
+
+enum SETTING_ITC_TYPE{
+ SETTING_ITC_MY_NUM = 0,
+ SETTING_ITC_TEXT = 1,
+ SETTING_ITC_IMPORT = SETTING_ITC_TEXT,
+ SETTING_ITC_EXPORT = SETTING_ITC_TEXT,
+ SETTING_ITC_IMPORT_EXPORT = SETTING_ITC_TEXT,
+ SETTING_ITC_ORDER = 2,
+ SETTING_ITC_RADIO = 3,
+ SETTING_ITC_FIRSTLAST = SETTING_ITC_RADIO,
+ SETTING_ITC_LASTFIRST = SETTING_ITC_RADIO,
+ SETTING_ITC_SDN,
+ SETTING_ITC_MAX,
+};
+
+static Elm_Genlist_Item_Class setting_itcs[] = {
+ {.item_style="dialogue/2text.2"},
+ {.item_style="dialogue.1text"},
+ {.item_style="dialogue/2text.3/expandable"},
+ {.item_style="dialogue/1text.1icon/expandable2"},
+ {.item_style="dialogue/2text.2"},
+};
+
+typedef enum {
+ CT_SETTING_IMPORT,
+ CT_SETTING_EXPORT,
+} ct_setting_op;
+
+static void setting_order(int order_type)
+{
+ int ret;
+
+ /* set ORDER_OF_DISPLAY */
+ ret = contacts_svc_set_order(CTS_ORDER_OF_DISPLAY, order_type);
+ p_warn_if(CTS_SUCCESS != ret, "contacts_svc_set_order() Failed(%d)", ret);
+
+ ret = contacts_svc_set_order(CTS_ORDER_OF_SORTING, order_type);
+ p_warn_if(CTS_SUCCESS != ret, "contacts_svc_set_order() Failed(%d)", ret);
+}
+
+static void setting_order_ui(Evas_Object *genlist)
+{
+ int order;
+ ct_setting_data *csetting_d;
+ Elm_Object_Item *item_order;
+
+ p_retm_if(NULL == genlist, "parameter(genlist) is NULL");
+
+ csetting_d = evas_object_data_get(genlist, "csetting_d");
+ p_retm_if(NULL == csetting_d, "evas_object_data_get() return NULL");
+
+ order = contacts_svc_get_order(CTS_ORDER_OF_DISPLAY);
+ elm_radio_value_set(csetting_d->radio_grp, order);
+
+ item_order = evas_object_data_get(genlist, "order");
+ p_retm_if(NULL == item_order, "evas_object_data_get() return NULL");
+
+ elm_genlist_item_update(item_order);
+}
+
+static void setting_handle_order(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *it = event_info;
+ elm_genlist_item_selected_set(it, EINA_FALSE);
+
+ setting_order((int)data);
+ setting_order_ui(obj);
+}
+
+static PTHREAD_FN setting_import_sim_contacts(void *data)
+{
+ ct_setting_data *csetting_d = data;
+ ph_progress_info *p_info = csetting_d->p_info;
+ p_info->result = contacts_svc_import_sim();
+ p_info->completed = true;
+ pthread_exit(NULL);
+}
+
+static Eina_Bool setting_import_sim_timer_cb(void *data)
+{
+ const char *message;
+ ct_setting_data *csetting_d = data;
+ ph_progress_info *p_info;
+
+ p_retvm_if(NULL == csetting_d , ECORE_CALLBACK_CANCEL, "parameter(ct_setting_data) is NULL");
+ p_info = csetting_d->p_info;
+
+ if (!p_info->completed)
+ return ECORE_CALLBACK_RENEW;
+
+ pthread_join(p_info->thread, NULL);
+
+ if (CTS_SUCCESS == p_info->result)
+ message = T_(CT_GET_TEXT_BASIC, CTTEXT_IMPORTED);
+ else if (CTS_ERR_NO_DATA == p_info->result)
+ message = T_(CT_GET_TEXT_ERR, CTTEXT_IMPORT_SIM_NO_DATA);
+ else
+ message = S_(PH_SYS_POP_FAILED);
+
+ evas_object_del(csetting_d->popup);
+ csetting_d->popup = NULL;
+
+ free(p_info);
+ csetting_d->p_info = NULL;
+
+ phone_show_tickernoti(message);
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void setting_import_sim(ct_setting_data *csetting_d)
+{
+ int ret;
+ ph_progress_info *p_info;
+
+ p_retm_if(csetting_d->p_info, "thread is running");
+
+ p_info = calloc(1, sizeof(ph_progress_info));
+ p_retm_if(NULL == p_info, "calloc() return NULL");
+ csetting_d->p_info = p_info;
+ p_info->alive = true;
+ p_info->result = TRUE;
+ p_info->without_cancel_btn = true;
+ ret = pthread_create(&p_info->thread, NULL, setting_import_sim_contacts, csetting_d );
+ if (0 != ret) {
+ ERR("Thread creation failed(%d)", ret);
+ free(p_info);
+ csetting_d->p_info = NULL;
+ return;
+ }
+
+ p_info->timer = ecore_timer_add(SETTING_TIMER_DURATION, setting_import_sim_timer_cb, csetting_d );
+ if (NULL == p_info->timer) {
+ ERR("ecore_timer_add() return NULL");
+ p_info->alive = false;
+ pthread_join(p_info->thread, NULL);
+ free(p_info);
+ csetting_d->p_info = NULL;
+ return;
+ }
+ csetting_d->popup = phone_progressbar_popup(csetting_d->navi, p_info, T_(CT_GET_TEXT_BASIC, CTTEXT_IMPORTING_SIM_CONTACTS));
+}
+
+static inline Eina_List* setting_get_contact_list(Eina_List *list_ab)
+{
+ int ret;
+ CTSiter *iter;
+ Eina_List *result;
+ Eina_List *l;
+ int id_ab;
+ void *data;
+
+ result = NULL;
+ EINA_LIST_FOREACH(list_ab, l, data) {
+ id_ab = (int)data;
+ ret = contacts_svc_get_list_with_int(CTS_LIST_MEMBERS_OF_ADDRESSBOOK_ID, id_ab, &iter);
+ p_retvm_if(CTS_SUCCESS != ret, NULL, "contacts_svc_get_list...() Failed(%d)", ret);
+
+ while (CTS_SUCCESS == contacts_svc_iter_next(iter)) {
+ CTSvalue *info = contacts_svc_iter_get_info(iter);
+ int id = contacts_svc_value_get_int(info, CTS_LIST_CONTACT_ID_INT);
+ result = eina_list_append(result, (void *)id);
+ contacts_svc_value_free(info);
+ }
+ contacts_svc_iter_remove(iter);
+ }
+ return result;
+}
+
+static inline void setting_progress_fail(ph_progress_info *p_info)
+{
+ p_info->completed = true;
+ p_info->result = FALSE;
+ pthread_exit(NULL);
+}
+
+static Eina_Bool setting_export_timer_cb(void *data)
+{
+ ct_setting_data *csetting_d = data;
+ ph_progress_info *p_info;
+
+ p_retvm_if(NULL == csetting_d, ECORE_CALLBACK_CANCEL, "parameter(ct_setting_data) is NULL");
+ p_info = csetting_d->p_info;
+
+ if (!p_info->completed) {
+ char count[PH_TEXT_SHORT_LEN];
+ char percent[PH_TEXT_SHORT_LEN];
+ double value = (double)p_info->cnt/(double)p_info->cnt_checked_total;
+
+ if (!p_info->alive) {
+ p_info->result = FALSE;
+ p_info->completed = true;
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ elm_progressbar_value_set(p_info->progressbar, value);
+ snprintf(percent, sizeof(percent), "%d%%", (int)(100.0*value));
+ snprintf(count, sizeof(count), "%d/%d", p_info->cnt, p_info->cnt_checked_total);
+ edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext1", percent);
+ edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext2", count);
+
+ if (p_info->cnt == p_info->cnt_checked_total)
+ p_info->completed = true;
+
+ return ECORE_CALLBACK_RENEW;
+ }
+ else {
+ int ret;
+ const char *message;
+
+ pthread_join(p_info->thread, NULL);
+
+ if (p_info->result) {
+ message = T_(CT_GET_TEXT_BASIC, CTTEXT_EXPORTED);
+ ret = contacts_svc_end_trans(true);
+ }
+ else {
+ message = S_(PH_SYS_POP_FAILED);
+ ret = contacts_svc_end_trans(false);
+ }
+ p_warn_if(ret < CTS_SUCCESS, "contacts_svc_end_trans() Failed(%d)", ret);
+
+ free(p_info);
+ csetting_d->p_info = NULL;
+
+ if (csetting_d->list_export_ct) {
+ free(csetting_d->list_export_ct);
+ csetting_d->list_export_ct = NULL;
+ }
+
+ evas_object_del(csetting_d->popup);
+ csetting_d->popup = NULL;
+ phone_show_tickernoti(message);
+ elm_naviframe_item_pop_to(csetting_d->navi_item_main);
+ return ECORE_CALLBACK_CANCEL;
+ }
+}
+
+static Eina_Bool setting_import_timer_cb(void *data)
+{
+ ct_setting_data *csetting_d = data;
+ ph_progress_info *p_info;
+
+ p_retvm_if(NULL == csetting_d, ECORE_CALLBACK_CANCEL, "parameter(ct_setting_data) is NULL");
+ p_info = csetting_d->p_info;
+
+ if (!p_info->completed) {
+ return ECORE_CALLBACK_RENEW;
+ }
+ else {
+ int ret;
+ const char *message;
+
+ pthread_join(p_info->thread, NULL);
+
+ if (p_info->result) {
+ message = T_(CT_GET_TEXT_BASIC, CTTEXT_IMPORTED);
+ ret = contacts_svc_end_trans(true);
+ }
+ else {
+ message = S_(PH_SYS_POP_FAILED);
+ ret = contacts_svc_end_trans(false);
+ }
+ p_warn_if(ret < CTS_SUCCESS, "contacts_svc_end_trans() Failed(%d)", ret);
+
+ evas_object_del(csetting_d->popup);
+ csetting_d->popup = NULL;
+ phone_show_tickernoti(message);
+
+ free(p_info);
+ csetting_d->p_info = NULL;
+
+ elm_naviframe_item_pop_to(csetting_d->navi_item_main);
+ return ECORE_CALLBACK_CANCEL;
+ }
+}
+
+
+static PTHREAD_FN setting_export_contacts(void *data)
+{
+ int i;
+ int ret;
+ int fd;
+ ct_setting_data *csetting_d = data;
+ ph_progress_info *p_info = csetting_d->p_info;
+
+ fd = open(csetting_d->path, O_WRONLY|O_CREAT|O_TRUNC, 0644);
+ if (fd < 0) {
+ ERR("open(%s) Failed", csetting_d->path);
+ setting_progress_fail(p_info);
+ }
+
+ for (i=0;i<csetting_d->list_export_ct_cnt;i++) {
+ char* vcard;
+ CTSstruct *contact;
+
+ if (!p_info->alive) {
+ p_info->result = FALSE;
+ p_info->completed = true;
+ break;
+ }
+
+ ret = contacts_svc_get_contact(csetting_d->list_export_ct[i], &contact);
+ if (ret < CTS_SUCCESS) {
+ ERR("contacts_svc_get_contact() Failed(%d)", ret);
+ p_info->result = FALSE;
+ continue;
+ }
+
+ ret = contacts_svc_get_vcard_from_contact(contact, &vcard);
+ contacts_svc_struct_free(contact);
+ if (ret < CTS_SUCCESS) {
+ ERR("contacts_svc_struct_free() Failed(%d)", ret);
+ p_info->result = FALSE;
+ continue;
+ }
+
+ if (-1 == write(fd, vcard, strlen(vcard)))
+ ERR("write()... Failed(%s)", strerror(errno));
+ p_info->cnt++;
+ free(vcard);
+ }
+
+ ret = fsync(fd);
+ if (0 != ret)
+ ERR("fsync() failed(%d)", ret);
+
+ close(fd);
+ if (!p_info->result) {
+ ret = unlink(csetting_d->path);
+ if (0 != ret)
+ ERR("unlink(%s) failed(%d)", csetting_d->path, ret);
+ }
+
+ pthread_exit(NULL);
+}
+
+static void setting_get_filename(char *fullpath, char *dest, int size_dest)
+{
+ char* index;
+ index = strrchr(fullpath, '/');
+ snprintf(dest, size_dest, "%s", index + 1);
+}
+
+static inline char* setting_export_get_filename(char *path)
+{
+ time_t timer;
+ struct tm *stime;
+ char buf[PH_TEXT_SHORT_LEN];
+
+ timer = time(NULL);
+ stime = localtime(&timer);
+ p_retvm_if(NULL == stime, NULL, "localtime() Failed(%d)", errno);
+
+ snprintf(buf, sizeof(buf), "%s/contacts_%02d%02d%02d%02d%02d%02d.vcf", path,
+ stime->tm_year-100, stime->tm_mon+1, stime->tm_mday,
+ stime->tm_hour, stime->tm_min, stime->tm_sec);
+
+ return strdup(buf);
+}
+
+static void setting_export_myfile_ug_result(ui_gadget_h ug, service_h service, void *data)
+{
+ int ret;
+ char *val = NULL;
+ char title[PH_TEXT_MAX_LEN];
+ char filepath[PH_TEXT_SHORT_LEN];
+ ph_progress_info *p_info;
+ ct_setting_data *csetting_d = data;
+
+ p_retm_if(csetting_d->p_info, "thread is running");
+ p_retm_if(NULL == ug, "parameter(ug) is NULL");
+ ug_destroy(ug);
+
+ p_retm_if(NULL == data, "parameter(ct_setting_data) is NULL");
+ csetting_d->child_ug = NULL;
+
+ p_retm_if(NULL == service, "parameter(service) is NULL");
+
+ service_get_extra_data(service, "result", &val);
+ p_retm_if(NULL == val, "service_get_extra_data() return NULL");
+
+ p_info = calloc(1, sizeof(ph_progress_info));
+ p_retm_if(NULL == p_info, "calloc() return NULL");
+ csetting_d->p_info = p_info;
+
+ p_info->cnt_checked_total = csetting_d->list_export_ct_cnt;
+ if (p_info->cnt_checked_total <= 0) {
+ char err[PH_TEXT_SHORT_LEN];
+ ERR("cnt_checked_total is %d", p_info->cnt_checked_total);
+ free(p_info);
+ free(csetting_d->list_export_ct);
+ csetting_d->p_info = NULL;
+ csetting_d->list_export_ct = NULL;
+ snprintf(err, sizeof(err), "Fail (%s)", T_(CT_GET_TEXT_ERR, CTTEXT_NO_CONTACTS));
+ phone_show_tickernoti(err);
+ return;
+ }
+ free(csetting_d->path);
+ csetting_d->path = setting_export_get_filename((char *)val);
+ free(val);
+
+ p_info->alive = true;
+ p_info->result = TRUE;
+ setting_get_filename(csetting_d->path, filepath, sizeof(filepath));
+ snprintf(title, sizeof(title), T_(CT_GET_TEXT_BASIC, CTTEXT_EXPORTING_CONTACTS_TO), filepath);
+
+ ret = pthread_create(&p_info->thread, NULL, setting_export_contacts, csetting_d );
+ if (0 != ret) {
+ ERR("Thread creation failed(%d)", ret);
+ free(p_info);
+ free(csetting_d->list_export_ct);
+ csetting_d->p_info = NULL;
+ csetting_d->list_export_ct = NULL;
+ return;
+ }
+
+ p_info->timer = ecore_timer_add(SETTING_TIMER_DURATION, setting_export_timer_cb, csetting_d );
+ if (NULL == p_info->timer) {
+ ERR("ecore_timer_add() return NULL");
+ p_info->alive = false;
+ pthread_join(p_info->thread, NULL);
+ free(p_info);
+ free(csetting_d->list_export_ct);
+ csetting_d->p_info = NULL;
+ csetting_d->list_export_ct = NULL;
+ return;
+ }
+
+ csetting_d->popup = phone_progressbar_popup(csetting_d->navi, p_info, title);
+}
+
+static void setting_ug_destroy_cb(ui_gadget_h ug, void *priv)
+{
+ ct_setting_data *csetting_d = priv;
+ p_retm_if(NULL == ug, "parameter(ug) is NULL");
+ ug_destroy(ug);
+
+ p_retm_if(NULL == priv, "parameter(ct_setting_data) is NULL");
+ csetting_d->child_ug = NULL;
+}
+
+static void setting_export_contacts_myfile_ug(void *data)
+{
+ service_h service;
+ ui_gadget_h ug;
+ struct ug_cbs cbs = {0};
+ ct_setting_data *csetting_d = data;
+ p_retm_if(NULL == csetting_d, "parameter(csetting_d) is NULL");
+
+ service_create(&service);
+ service_add_extra_data(service, "path", SETTING_VCARD_PATH);
+ service_add_extra_data(service, "select_type", "EXPORT");
+
+ cbs.result_cb = setting_export_myfile_ug_result;
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.destroy_cb = setting_ug_destroy_cb;
+ cbs.priv = csetting_d;
+
+ ug = ug_create(csetting_d->ug, MYFILES_UG, UG_MODE_FULLVIEW, service, &cbs);
+ p_warn_if(NULL == ug, "ug_create() Failed");
+ csetting_d->child_ug = ug;
+
+ service_destroy(service);
+}
+
+static int setting_import_vcard_foreach_cb(const char *a_vcard_stream, void *data)
+{
+ int ret;
+ ph_progress_info *p_info;
+ ct_setting_data *csetting_d = data;
+
+ p_retvm_if(NULL == csetting_d, -1, "parameter(csetting_d) is NULL");
+
+ p_info = csetting_d->p_info;
+ p_retvm_if(NULL == p_info, -1, "csetting_d->p_info is NULL");
+
+ if (!p_info->alive) {
+ p_info->result = FALSE;
+ p_info->completed = true;
+ return -1;
+ }
+
+ ret = contacts_svc_insert_vcard(0, a_vcard_stream);
+ if (ret <= 0) {
+ ERR("contacts_svc_insert_contact() Failed(%d)", ret);
+ return ret;
+ }
+ return CTS_SUCCESS;
+}
+
+static PTHREAD_FN setting_import_vcard_contacts(void *data)
+{
+ int ret;
+ const char *path = NULL;
+ char *last = NULL;
+ ct_setting_data *csetting_d = data;
+ ph_progress_info *p_info = csetting_d->p_info;
+
+ path = strtok_r(csetting_d->path, "?", &last);
+ while (path) {
+ PH_DBG("import vcard path = %s", path);
+ ret = contacts_svc_vcard_foreach(path, setting_import_vcard_foreach_cb, csetting_d);
+ if (CTS_SUCCESS != ret) {
+ p_info->result = FALSE;
+ ERR("contacts_svc_vcard_foreach() Failed(%d)", p_info->result);
+ break;
+ }
+ path = strtok_r(NULL, "?", &last);
+ }
+ p_info->completed = true;
+ pthread_exit(NULL);
+}
+
+
+static void setting_import_vcard_myfile_ug_result(ui_gadget_h ug, service_h service, void *data)
+{
+ int ret;
+ char *val = NULL;
+ ct_setting_data *csetting_d = data;
+ ph_progress_info *p_info;
+
+ p_retm_if(NULL == ug, "parameter(ug) is NULL");
+ ug_destroy(ug);
+
+ p_retm_if(NULL == data, "parameter(ct_setting_data) is NULL");
+ csetting_d->child_ug = NULL;
+
+ p_retm_if(NULL == service, "parameter(result) is NULL");
+
+ service_get_extra_data(service, "result", &val);
+ p_retm_if(NULL == val, "service_get_extra_data() return NULL");
+
+ FREEandSTRDUP(csetting_d->path, val);
+ p_retm_if(NULL == csetting_d->path, "strdup() return NULL");
+
+ free(val);
+
+ p_retm_if(csetting_d->p_info, "thread is running");
+
+ p_info = calloc(1, sizeof(ph_progress_info));
+ p_retm_if(NULL == p_info, "calloc() return NULL");
+ csetting_d->p_info = p_info;
+ p_info->alive = true;
+ p_info->result = TRUE;
+
+ ret = contacts_svc_begin_trans();
+ if (CTS_SUCCESS != ret) {
+ ERR("contacts_svc_begin_trans() Failed(%d)", ret);
+ free(p_info);
+ phone_show_tickernoti(S_(PH_SYS_POP_FAILED));
+ elm_naviframe_item_pop(csetting_d->navi);
+ return;
+ }
+
+ ret = pthread_create(&p_info->thread, NULL, setting_import_vcard_contacts, csetting_d);
+ if (0 != ret) {
+ ERR("Thread creation failed(%d)", ret);
+ contacts_svc_end_trans(false);
+ free(p_info);
+ csetting_d->p_info = NULL;
+ return;
+ }
+
+ p_info->timer = ecore_timer_add(SETTING_TIMER_DURATION, setting_import_timer_cb, csetting_d );
+ if (NULL == p_info->timer) {
+ ERR("ecore_timer_add() return NULL");
+ contacts_svc_end_trans(false);
+ p_info->alive = false;
+ pthread_join(p_info->thread, NULL);
+ free(p_info);
+ csetting_d->p_info = NULL;
+ return;
+ }
+ csetting_d->popup = phone_progressbar_popup(csetting_d->navi, p_info, T_(CT_GET_TEXT_BASIC, CTTEXT_IMPORTING_SD_CONTACTS));
+}
+
+static void setting_import_vcard_myfile_ug(ct_setting_data *csetting_d)
+{
+ ui_gadget_h ug;
+ struct ug_cbs cbs = {0};
+ service_h service;
+
+ service_create(&service);
+
+ service_add_extra_data(service, "path", SETTING_VCARD_PATH);
+ service_add_extra_data(service, "select_type", "IMPORT");
+ service_add_extra_data(service, "file_type", "vcf");
+
+ cbs.result_cb = setting_import_vcard_myfile_ug_result;
+ cbs.destroy_cb = setting_ug_destroy_cb;
+ cbs.layout_cb = ug_common_layout_cb;
+ cbs.priv = csetting_d;
+
+ ug = ug_create(csetting_d->ug, MYFILES_UG, UG_MODE_FULLVIEW, service, &cbs);
+ p_warn_if(NULL == ug, "ug_create() Failed");
+ csetting_d->child_ug = ug;
+
+ service_destroy(service);
+}
+
+static PTHREAD_FN setting_export_sim_contacts(void *data)
+{
+ PH_FN_CALL;
+ int i;
+ ct_setting_data *csetting_d = data;
+
+ csetting_d->p_info->result = CTS_SUCCESS;
+ for(i =0; i < csetting_d->list_export_ct_cnt ; i++)
+ {
+ if(1)//contacts_svc_export_sim(csetting_d->list_export_ct[i]) == CTS_SUCCESS)
+ {
+ sleep(1);//have to remove
+ csetting_d->p_info->cnt++;
+ }
+ else
+ {
+ csetting_d->p_info->result = CTS_ERR_FAIL;
+ ERR("contacts_svc_export_sim is Fail");
+ }
+ }
+ pthread_exit(NULL);
+}
+static Eina_Bool setting_export_sim_timer_cb(void *data)
+{
+ PH_FN_CALL;
+ const char *message;
+ ct_setting_data *csetting_d = data;
+ ph_progress_info *p_info;
+ p_info = csetting_d->p_info;
+
+ double value = (double)p_info->cnt/(double)p_info->cnt_checked_total;
+ p_retvm_if(NULL == csetting_d , ECORE_CALLBACK_CANCEL, "parameter(ct_setting_data) is NULL");
+ p_info = csetting_d->p_info;
+
+ if (!p_info->completed)
+ {
+ char count[PH_TEXT_SHORT_LEN];
+ char percent[PH_TEXT_SHORT_LEN];
+ if (!p_info->alive)
+ {
+ p_info->result = FALSE;
+ p_info->completed = true;
+ return ECORE_CALLBACK_RENEW;
+ }
+ elm_progressbar_value_set(p_info->progressbar, value);
+ snprintf(percent, sizeof(percent), "%d%%", (int)(100.0*value));
+ snprintf(count, sizeof(count), "%d/%d", p_info->cnt, p_info->cnt_checked_total);
+ edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext1", percent);
+ edje_object_part_text_set(elm_layout_edje_get(p_info->layout), "elm.text.subtext2", count);
+
+ if (p_info->cnt == p_info->cnt_checked_total)
+ p_info->completed = true;
+ return ECORE_CALLBACK_RENEW;
+ }
+ pthread_join(p_info->thread, NULL);
+
+ if (CTS_SUCCESS == p_info->result)
+ message = T_(CT_GET_TEXT_BASIC, CTTEXT_EXPORTED);
+ else
+ message = S_(PH_SYS_POP_FAILED);
+
+
+ evas_object_del(csetting_d->popup);
+ csetting_d->popup = NULL;
+
+ free(p_info);
+ csetting_d->p_info = NULL;
+
+ phone_show_tickernoti(message);
+ return ECORE_CALLBACK_CANCEL;
+}
+static void setting_export_sim(void *data, int *list, int cnt)
+{
+ PH_FN_CALL;
+ int ret;
+ ct_setting_data *csetting_d = data;
+ ph_progress_info *p_info;
+ char title[PH_TEXT_MAX_LEN];
+
+ if (NULL == csetting_d) {
+ ERR("parameter(csetting_d) is NULL");
+ free(list);
+ return;
+ }
+
+ if (cnt <= 0) {
+ ERR("evas_object_data_get() return NULL");
+ free(list);
+ return;
+ }
+
+ p_retm_if(csetting_d->p_info, "thread is running");
+ p_info = calloc(1, sizeof(ph_progress_info));
+ p_retm_if(NULL == p_info, "calloc() return NULL");
+
+ csetting_d->p_info = p_info;
+ p_info->cnt_checked_total = csetting_d->list_export_ct_cnt = cnt;
+ csetting_d->list_export_ct = list;
+ p_info->alive = true;
+ p_info->result = TRUE;
+ p_info->without_cancel_btn = true;
+
+ ret = pthread_create(&p_info->thread, NULL, setting_export_sim_contacts, csetting_d );
+ if (0 != ret) {
+ ERR("Thread creation failed(%d)", ret);
+ free(p_info);
+ csetting_d->p_info = NULL;
+ return;
+ }
+
+ p_info->timer = ecore_timer_add(SETTING_TIMER_DURATION, setting_export_sim_timer_cb, csetting_d );
+ if (NULL == p_info->timer) {
+ ERR("ecore_timer_add() return NULL");
+ p_info->alive = false;
+ free(p_info);
+ csetting_d->p_info = NULL;
+ return;
+ }
+ snprintf(title, sizeof(title), T_(CT_GET_TEXT_BASIC, CTTEXT_EXPORTING_CONTACTS_TO), "SIM");
+ csetting_d->popup = phone_progressbar_popup(csetting_d->navi, p_info, title);
+
+ return;
+
+}
+static void setting_import_export_sim_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ ct_setting_data *csetting_d = data;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (CT_SETTING_IMPORT == csetting_d->mode)
+ setting_import_sim(csetting_d);
+ else {// CT_SETTING_EXPORT
+ ctui_create_list_select_view(csetting_d->navi, setting_export_sim, csetting_d,CT_GET_LIST_ALL_CONTACTS, 0, 0);
+ }
+}
+
+static void setting_export_vcard_contacts(void *data, int *list, int cnt)
+{
+ ct_setting_data *csetting_d = data;
+
+ if (NULL == csetting_d) {
+ ERR("parameter(csetting_d) is NULL");
+ free(list);
+ return;
+ }
+
+ if (cnt <= 0) {
+ ERR("evas_object_data_get() return NULL");
+ free(list);
+ return;
+ }
+
+ csetting_d->list_export_ct = list;
+ csetting_d->list_export_ct_cnt = cnt;
+
+ setting_export_contacts_myfile_ug(data);
+}
+
+static void setting_import_export_vcard_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ ct_setting_data *csetting_d = data;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ if (CT_SETTING_IMPORT == csetting_d->mode)
+ setting_import_vcard_myfile_ug(csetting_d);
+ else {// CT_SETTING_EXPORT
+ ctui_create_list_select_view(csetting_d->navi, setting_export_vcard_contacts, csetting_d,
+ CT_GET_LIST_ALL_CONTACTS, 0, 0);
+ }
+}
+
+static void setting_import_export(ct_setting_data *csetting_d)
+{
+ int sim_state;
+ char buf[PH_TEXT_SHORT_LEN];
+ Evas_Object *genlist;
+ Evas_Object *l_btn;
+ Elm_Object_Item *item;
+
+ genlist = elm_genlist_add(csetting_d->navi);
+ elm_object_style_set(genlist,"dialogue");
+ vconf_get_int(VCONFKEY_TELEPHONY_SIM_PB_INIT, &sim_state);
+
+ ctui_genlist_append_separator_20px_with_line(genlist);
+
+ item = elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_IMPORT_EXPORT],
+ S_(CT_SYS_BODY_SIM), NULL, ELM_GENLIST_ITEM_NONE, setting_import_export_sim_sel, csetting_d);
+
+ item = elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_IMPORT_EXPORT],
+ S_(CT_SYS_BODY_MEMORYCARD), NULL, ELM_GENLIST_ITEM_NONE, setting_import_export_vcard_sel, csetting_d);
+
+ if (CT_SETTING_IMPORT == csetting_d->mode)
+ snprintf(buf, sizeof(buf), "%s", T_(CT_GET_TEXT_BASE_OP, CTTEXT_IMPORT_CONTACTS));
+ else
+ snprintf(buf, sizeof(buf), "%s", T_(CT_GET_TEXT_BASE_OP, CTTEXT_EXPORT_CONTACTS));
+
+ l_btn = elm_button_add(csetting_d->navi);
+ evas_object_smart_callback_add(l_btn, "clicked", phone_view_back_btn_cb, csetting_d->navi);
+ elm_object_style_set(l_btn, "naviframe/back_btn/default");
+
+ elm_naviframe_item_push(csetting_d->navi, buf, l_btn, NULL, genlist, NULL);
+}
+
+static void setting_export_contacts_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ct_setting_data *csetting_d = data;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ csetting_d->mode = CT_SETTING_EXPORT;
+ setting_import_export(csetting_d);
+}
+
+static void setting_import_contacts_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ct_setting_data *csetting_d = data;
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ csetting_d->mode = CT_SETTING_IMPORT;
+ setting_import_export(csetting_d);
+}
+
+static void setting_order_item_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *item = event_info;
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ if (EINA_TRUE == elm_genlist_item_expanded_get(item))
+ elm_genlist_item_expanded_set(item, EINA_FALSE);
+ else
+ elm_genlist_item_expanded_set(item, EINA_TRUE);
+}
+
+static void setting_mynum_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *it = event_info;
+ elm_genlist_item_selected_set(it, EINA_FALSE);
+}
+
+static void setting_gl_exp(void *data, Evas_Object *obj, void *event_info)
+{
+ int order;
+ Evas_Object *genlist = obj;
+ Elm_Object_Item *it = event_info;
+ ct_setting_data *csetting_d = data;
+
+ csetting_d->radio_grp = elm_radio_add(genlist);
+
+ elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_FIRSTLAST],
+ (void *)CTS_ORDER_NAME_FIRSTLAST, it, ELM_GENLIST_ITEM_NONE,
+ setting_handle_order, (void *)CTS_ORDER_NAME_FIRSTLAST);
+ elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_LASTFIRST],
+ (void *)CTS_ORDER_NAME_LASTFIRST, it, ELM_GENLIST_ITEM_NONE,
+ setting_handle_order, (void *)CTS_ORDER_NAME_LASTFIRST);
+
+ order = contacts_svc_get_order(CTS_ORDER_OF_DISPLAY);
+ elm_radio_value_set(csetting_d->radio_grp, order);
+}
+
+static void setting_gl_con(void *data, Evas_Object *obj, void *event_info)
+{
+ ct_setting_data *csetting_d = data;
+ Elm_Object_Item *item = event_info;
+ elm_genlist_item_subitems_clear(item);
+
+ p_retm_if(NULL == csetting_d, "parameter(csetting_d) is NUL");
+ if(csetting_d->radio_grp) {
+ evas_object_del(csetting_d->radio_grp);
+ csetting_d->radio_grp = NULL;
+ }
+}
+
+static char *setting_gl_text_label_get(void *data, Evas_Object *obj, const char *part)
+{
+ if (0 == strcmp(part, "elm.text"))
+ return strdup(data);
+ return NULL;
+}
+
+static char *setting_gl_order_label_get(void *data, Evas_Object *obj, const char *part)
+{
+ if (0 == strcmp(part, "elm.text.1"))
+ return strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_ORDER_DISPLAY_NAME));
+ else if (0 == strcmp(part, "elm.text.2")) {
+ if (CTS_ORDER_NAME_FIRSTLAST == contacts_svc_get_order(CTS_ORDER_OF_DISPLAY))
+ return strdup(T_(CT_GET_TEXT_BASE_OP, CTTEXT_FIRSTLAST));
+ else
+ return strdup(T_(CT_GET_TEXT_BASE_OP, CTTEXT_LASTFIRST));
+ }
+ return NULL;
+}
+
+static char *setting_gl_radio_label_get(void *data, Evas_Object *obj, const char *part)
+{
+ int type = (int)data;
+ if (0 == strcmp(part, "elm.text")) {
+ if (CTS_ORDER_NAME_FIRSTLAST == type)
+ return strdup(T_(CT_GET_TEXT_BASE_OP, CTTEXT_FIRSTLAST));
+ else if (CTS_ORDER_NAME_LASTFIRST == type)
+ return strdup(T_(CT_GET_TEXT_BASE_OP, CTTEXT_LASTFIRST));
+ }
+ return NULL;
+}
+
+static char *setting_gl_my_num_label_get(void *data, Evas_Object *obj, const char *part)
+{
+ if (0 == strcmp(part, "elm.text.2"))
+ return strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_OWN_NUMBER));
+ else if (0 == strcmp(part, "elm.text.1")) {
+ char *number = vconf_get_str(VCONFKEY_TELEPHONY_SUBSCRIBER_NUMBER);
+ if (number && *number)
+ return strdup(number);
+ else
+ return strdup(T_(CT_GET_TEXT_BASIC, CTTEXT_NA));
+ }
+ return NULL;
+}
+
+static Evas_Object *setting_gl_radio_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+ int type = (int)data;
+ ct_setting_data *csetting_d;
+
+ if (0 == strcmp(part, "elm.icon")) {
+ Evas_Object *radio;
+
+ csetting_d = evas_object_data_get(obj, "csetting_d");
+ p_retvm_if(NULL == csetting_d, NULL, "evas_object_data_get() return NULL");
+
+ radio = elm_radio_add(obj);
+ p_retvm_if(NULL == radio, NULL, "elm_radio_add() return NULL");
+
+ elm_radio_group_add(radio, csetting_d->radio_grp);
+ elm_radio_state_value_set(radio, type);
+
+ return radio;
+ }
+ return NULL;
+}
+
+static char* setting_gl_sdn_label_get(void *data, Evas_Object *obj, const char *part)
+{
+ ct_sdn_list *info = data;
+ p_retvm_if(NULL == data, NULL, "The parameter(data) is NULL");
+
+ if (0 == strcmp(part, "elm.text.2"))
+ return SAFE_STRDUP(info->name);
+ else if (0 == strcmp(part, "elm.text.1"))
+ return SAFE_STRDUP(info->number);
+ return NULL;
+}
+
+static void setting_gl_sdn_del(void *data, Evas_Object *obj)
+{
+ ct_sdn_list *info = data;
+ p_retm_if(NULL == info, "parameter(info) is NULL");
+
+ free(info->name);
+ free(info->number);
+ free(info);
+}
+
+
+static inline void setting_create_itcs()
+{
+ setting_itcs[SETTING_ITC_TEXT].func.text_get = setting_gl_text_label_get;
+
+ setting_itcs[SETTING_ITC_ORDER].func.text_get = setting_gl_order_label_get;
+
+ setting_itcs[SETTING_ITC_RADIO].func.text_get = setting_gl_radio_label_get;
+ setting_itcs[SETTING_ITC_RADIO].func.content_get = setting_gl_radio_icon_get;
+
+ setting_itcs[SETTING_ITC_MY_NUM].func.text_get = setting_gl_my_num_label_get;
+
+ setting_itcs[SETTING_ITC_SDN].func.text_get = setting_gl_sdn_label_get;
+ setting_itcs[SETTING_ITC_SDN].func.del = setting_gl_sdn_del;
+}
+
+static void setting_view_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ int ret;
+ ct_setting_data *csetting_d = data;
+ p_retm_if(NULL == csetting_d, "parameter(csetting_d) is NULL");
+
+ if (csetting_d->popup)
+ evas_object_del(csetting_d->popup);
+
+ if (csetting_d->p_info) {
+ csetting_d->p_info->alive = false;
+ pthread_join(csetting_d->p_info->thread, NULL);
+
+ ret = contacts_svc_end_trans(false);
+ p_warn_if(ret < CTS_SUCCESS, "contacts_svc_end_trans() Failed(%d)", ret);
+
+ ecore_timer_del(csetting_d->p_info->timer);
+ free(csetting_d->p_info);
+ csetting_d->p_info = NULL;
+ }
+
+ if (csetting_d->child_ug);
+ ug_destroy(csetting_d->child_ug);
+
+ free(csetting_d->path);
+ free(csetting_d);
+}
+
+static void setting_gl_sdn_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *item = event_info;
+ ct_sdn_list *info = elm_object_item_data_get(item);
+
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+ phone_launch_voice_call(0, info->number);
+}
+
+
+static Evas_Object* setting_fill_sdn_view(Evas_Object *parent, ct_setting_data *csetting_d)
+{
+ int ret;
+ CTSiter *iter;
+ CTSvalue *info;
+ Evas_Object *genlist;
+
+ genlist = elm_genlist_add(parent);
+ elm_object_style_set(genlist,"dialogue");
+ p_retvm_if(NULL == genlist, NULL, "elm_genlist_add() return NULL");
+
+ ctui_genlist_append_separator_20px_with_line(genlist);
+
+ ret = contacts_svc_get_list(CTS_LIST_ALL_SDN, &iter);
+ p_retvm_if(CTS_SUCCESS != ret, NULL, "contacts_svc_get_list...() Failed(%d)", ret);
+
+ csetting_d->cnt_sdn_list = 0;
+ while (CTS_SUCCESS == contacts_svc_iter_next(iter)) {
+ ct_sdn_list *data;
+ info = contacts_svc_iter_get_info(iter);
+ data = calloc(1, sizeof(ct_sdn_list));
+ if (NULL == data) {
+ ERR("calloc() return NULL");
+ break;
+ }
+ data->name = contacts_svc_value_steal_str(info, CTS_LIST_SDN_NAME_STR);
+ data->number = contacts_svc_value_steal_str(info, CTS_LIST_SDN_NUMBER_STR);
+ csetting_d->cnt_sdn_list++;
+ contacts_svc_value_free(info);
+ elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_SDN], data, NULL, ELM_GENLIST_ITEM_NONE, setting_gl_sdn_sel, NULL);
+ }
+ contacts_svc_iter_remove(iter);
+ return genlist;
+}
+
+static void setting_create_genlist_sdn(void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *back_btn;
+ Evas_Object *genlist;
+ ct_setting_data *csetting_d = data;
+ char buf[PH_TEXT_SHORT_LEN];
+
+ elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+ genlist = setting_fill_sdn_view(csetting_d->navi, csetting_d);
+
+ back_btn = elm_button_add(csetting_d->navi);
+ evas_object_smart_callback_add(back_btn, "clicked", phone_view_back_btn_cb, csetting_d->navi);
+ elm_object_style_set(back_btn, "naviframe/back_btn/default");
+
+ snprintf(buf, sizeof(buf), "%s (%d)", T_(CT_GET_TEXT_BASIC, CTTEXT_SDN), csetting_d->cnt_sdn_list);
+
+ elm_naviframe_item_push(csetting_d->navi, buf, back_btn, NULL, genlist, NULL);
+}
+
+Evas_Object* ct_setting_create_layout(ct_setting_data *csetting_d)
+{
+ Evas_Object *genlist;
+ Elm_Object_Item *item;
+
+ setting_create_itcs();
+
+ genlist = elm_genlist_add(csetting_d->navi);
+ elm_object_style_set(genlist,"dialogue");
+ evas_object_data_set(genlist, "csetting_d", csetting_d);
+ evas_object_event_callback_add(genlist, EVAS_CALLBACK_DEL, setting_view_delete_cb, csetting_d);
+
+ ctui_genlist_append_separator_20px_with_line(genlist);
+
+ elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_IMPORT],
+ T_(CT_GET_TEXT_BASE_OP, CTTEXT_IMPORT_CONTACTS), NULL, ELM_GENLIST_ITEM_NONE,
+ setting_import_contacts_cb, csetting_d);
+
+ elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_EXPORT],
+ T_(CT_GET_TEXT_BASE_OP, CTTEXT_EXPORT_CONTACTS), NULL, ELM_GENLIST_ITEM_NONE,
+ setting_export_contacts_cb, csetting_d );
+
+ item = elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_ORDER],
+ NULL, NULL, ELM_GENLIST_ITEM_TREE, setting_order_item_sel, NULL);
+ evas_object_data_set(genlist, "order", item);
+
+ item = elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_MY_NUM],
+ NULL, NULL, ELM_GENLIST_ITEM_NONE, setting_mynum_cb, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ if (0 < contacts_svc_count(CTS_GET_COUNT_SDN))
+ item = elm_genlist_item_append(genlist, &setting_itcs[SETTING_ITC_TEXT],
+ T_(CT_GET_TEXT_BASIC, CTTEXT_SDN), NULL, ELM_GENLIST_ITEM_NONE, setting_create_genlist_sdn, csetting_d);
+
+ evas_object_smart_callback_add(genlist, "expanded", setting_gl_exp, csetting_d);
+ evas_object_smart_callback_add(genlist, "contracted", setting_gl_con, csetting_d);
+
+ return genlist;
+}
+
+
diff --git a/lib/settings/ct-setting-view.h b/lib/settings/ct-setting-view.h
new file mode 100755
index 0000000..b52c672
--- /dev/null
+++ b/lib/settings/ct-setting-view.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.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.
+ */
+
+#ifndef __CONTACTS_SETTING_VIEW_H__
+#define __CONTACTS_SETTING_VIEW_H__
+
+typedef struct {
+ Eina_Bool checked;
+ void *data;
+} ct_setting_gl_data;
+
+typedef struct {
+ Evas_Object *navi;
+ Evas_Object *popup;
+ Evas_Object *notify;
+ Evas_Object *radio_grp;
+ Elm_Object_Item *navi_item_main;
+
+ Evas_Object *genlist;
+
+ int cnt_sdn_list;
+ int id_ab;
+ int mode;
+ char *path;
+ ui_gadget_h ug;
+ void *child_ug;
+
+ int *list_export_ct;
+ int list_export_ct_cnt;
+
+ ph_progress_info *p_info;
+}ct_setting_data;
+
+typedef struct {
+ char *name;
+ char *number;
+}ct_sdn_list;
+
+
+Evas_Object* ct_setting_create_layout(ct_setting_data *csetting_d );
+
+#endif //__CONTACTS_DETAIL_VIEW_H__