summaryrefslogtreecommitdiff
path: root/lib/log/ph-log-detail-view.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/log/ph-log-detail-view.cpp')
-rwxr-xr-xlib/log/ph-log-detail-view.cpp1441
1 files changed, 1441 insertions, 0 deletions
diff --git a/lib/log/ph-log-detail-view.cpp b/lib/log/ph-log-detail-view.cpp
new file mode 100755
index 0000000..34d611b
--- /dev/null
+++ b/lib/log/ph-log-detail-view.cpp
@@ -0,0 +1,1441 @@
+/*
+ * 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 <vconf.h>
+#include <vconf-keys.h>
+#include <ui-gadget-module.h>
+#include <aul.h>
+
+#include "phone.h"
+#include "phone-log.h"
+#include "ph-log-utils.h"
+#include "ph-log-detail-view.h"
+#include "phone-common.h"
+
+#include <feedback.h>
+#include <msg.h>
+
+#define KEY_LOG_DETAIL_DATA "logdetail_d"
+
+enum LOG_DETAIL_ITC_TYPE
+{
+ LOG_DETAIL_ITC_TOP_INFO_NAMED = 0,
+ LOG_DETAIL_ITC_TOP_INFO_NONAMED,
+
+ LOG_DETAIL_ITC_TOP_BTNS,
+ LOG_DETAIL_ITC_DETAIL,
+ LOG_DETAIL_ITC_TITLE,
+ LOG_DETAIL_ITC_MAX,
+};
+
+static Elm_Genlist_Item_Class log_detail_itcs[LOG_DETAIL_ITC_MAX] = { { 0, 0, 1,
+ "2text.2icon.1", NULL, NULL, { NULL, NULL, NULL, NULL }, }, { 0, 0, 1,
+ "1text.1icon.7", NULL, NULL, { NULL, NULL, NULL, NULL }, }, { 0, 0, 1,
+ "logdetail.2icon", NULL, NULL, { NULL, NULL, NULL, NULL }, }, { 0, 0,
+ 1, "dialogue/3text.2icon", NULL, NULL, { NULL, NULL, NULL, NULL }, }, {
+ 0, 0, 1, "grouptitle", NULL, NULL, { NULL, NULL, NULL, NULL }, }, };
+
+typedef struct
+{
+ int plog_id;
+ int plog_type;
+ int plog_time;
+ int plog_duration;
+ int plog_msgid;
+ char *plog_shortmsg;
+} ph_log_detail_info;
+
+static void log_detail_destroy_child_ug(void *data)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ logdetail_d->child_ug = NULL;
+}
+
+static void log_detail_msg_btn_pressed_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is NULL");
+ elm_image_file_set((Evas_Object *) data, PH_IMG_ICON_SMS_PRESSED, NULL);
+}
+
+static void log_detail_msg_btn_unpressed_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is NULL");
+ elm_image_file_set((Evas_Object *) data, PH_IMG_ICON_SMS, NULL);
+}
+
+static void log_detail_msg_btn_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ p_retm_if(NULL == logdetail_d, "log_info is NULL");
+ ph_log_util_svi_play(FEEDBACK_PATTERN_TOUCH_TAP,
+ FEEDBACK_PATTERN_TOUCH_TAP);
+
+ p_retm_if(1 == aul_app_is_running(VIDEOCALL_PKG), "vtcall is running");
+ p_retm_if(1 == aul_app_is_running(VOICECALL_PKG), "voice call is running");
+
+ logdetail_d->child_ug = phone_launch_msg_composer_ug(logdetail_d->ug,
+ logdetail_d->log_number, 0, log_detail_destroy_child_ug,
+ logdetail_d);
+}
+
+static void log_detail_call_btn_pressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is NULL");
+ elm_image_file_set((Evas_Object *) data, PH_IMG_ICON_CALL_PRESSED, NULL);
+}
+
+static void log_detail_call_btn_unpressed_cb(void *data, Evas *e,
+ Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(NULL == data, "data is NULL");
+ elm_image_file_set((Evas_Object *) data, PH_IMG_CIRCLE_ICON_CALL, NULL);
+}
+
+static void log_detail_call_btn_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ p_retm_if(NULL == logdetail_d, "log_info is NULL");
+ ph_log_util_svi_play(FEEDBACK_PATTERN_TOUCH_TAP,
+ FEEDBACK_PATTERN_TOUCH_TAP);
+ phone_launch_voice_call(logdetail_d->contact_id, logdetail_d->log_number);
+}
+
+static void log_detail_gl_realized(void *data, Evas_Object *obj, void *ei)
+{
+ PH_TRACE;
+ p_retm_if(obj == NULL, "obj is null");
+ p_retm_if(ei == NULL, "ei is null");
+
+ ph_log_detail_data *logdetail_d;
+ logdetail_d = (ph_log_detail_data *) evas_object_data_get(obj,
+ KEY_LOG_DETAIL_DATA);
+
+ int first = 0;
+
+ if (logdetail_d->log_number && *logdetail_d->log_number)
+ first = 5;
+ else
+ first = 3;
+ int last = (int) elm_genlist_items_count(obj) - 1;
+ int index = elm_genlist_item_index_get((Elm_Object_Item *) ei);
+
+ if (last == first)
+ return;
+
+ if (index == first)
+ elm_object_item_signal_emit((Elm_Object_Item *) ei, "elm,state,top",
+ "");
+ else if (index == last)
+ elm_object_item_signal_emit((Elm_Object_Item *) ei, "elm,state,bottom",
+ "");
+ else if (index > first && index < last)
+ elm_object_item_signal_emit((Elm_Object_Item *) ei, "elm,state,center",
+ "");
+
+ return;
+}
+
+static void log_detail_append_separator(Evas_Object *genlist, bool isEnd)
+{
+ PH_TRACE;
+ static Elm_Genlist_Item_Class itc[2] = { { 0, 0, 1,
+ "dialogue/separator/end", NULL, NULL, { NULL, NULL, NULL, NULL }, },
+ { 0, 0, 1, "dialogue/separator/10", NULL, NULL, { NULL, NULL, NULL,
+ NULL }, }, };
+
+ Elm_Object_Item *item;
+ if (isEnd)
+ item = elm_genlist_item_append(genlist, &itc[0], NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ else
+ item = elm_genlist_item_append(genlist, &itc[1], NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+}
+
+static void log_detail_gl_selected_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ Elm_Object_Item *it = (Elm_Object_Item *) event_info;
+ if (it)
+ {
+ elm_genlist_item_selected_set(it, EINA_FALSE);
+ }
+}
+
+static void log_detail_fill_genlist(ph_log_detail_data *logdetail_d)
+{
+ PH_TRACE;
+ Eina_List *l;
+ ph_log_detail_info * l_detail_info;
+ void *v_l_detail_info;
+ Elm_Object_Item *git;
+
+ p_retm_if(NULL == logdetail_d->genlist, "Genlist is null");
+ if (logdetail_d->log_display)
+ logdetail_d->top_item = elm_genlist_item_append(logdetail_d->genlist,
+ &log_detail_itcs[LOG_DETAIL_ITC_TOP_INFO_NAMED], logdetail_d,
+ NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ else
+ logdetail_d->top_item = elm_genlist_item_append(logdetail_d->genlist,
+ &log_detail_itcs[LOG_DETAIL_ITC_TOP_INFO_NONAMED], logdetail_d,
+ NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ if (logdetail_d->log_number)
+ {
+ elm_genlist_item_append(logdetail_d->genlist,
+ &log_detail_itcs[LOG_DETAIL_ITC_TOP_BTNS], logdetail_d, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ log_detail_append_separator(logdetail_d->genlist, false);
+ }
+ l_detail_info = (ph_log_detail_info*) eina_list_data_get(
+ eina_list_last(logdetail_d->log_list));
+ git = elm_genlist_item_append(logdetail_d->genlist,
+ &log_detail_itcs[LOG_DETAIL_ITC_TITLE], l_detail_info, NULL,
+ ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_NONE);
+ v_l_detail_info = (void *) l_detail_info;
+ EINA_LIST_FOREACH(logdetail_d->log_list, l, v_l_detail_info)
+ {
+ l_detail_info = (ph_log_detail_info *) v_l_detail_info;
+ Elm_Object_Item * it;
+ if (!l_detail_info)
+ continue;
+ it = elm_genlist_item_append(logdetail_d->genlist,
+ &log_detail_itcs[LOG_DETAIL_ITC_DETAIL], l_detail_info, git,
+ ELM_GENLIST_ITEM_NONE, log_detail_gl_selected_cb, NULL);
+ elm_genlist_item_select_mode_set(it,
+ ELM_OBJECT_SELECT_MODE_ALWAYS);
+ }
+ log_detail_append_separator(logdetail_d->genlist, true);
+}
+
+static void log_detail_free_log_data(Eina_List *list)
+{
+ PH_TRACE;
+ Eina_List *l;
+ void *v_l_detail_info;
+ p_retm_if(NULL == list, "data is null");
+
+ EINA_LIST_FOREACH(list, l, v_l_detail_info)
+ {
+ ph_log_detail_info *l_detail_info =
+ (ph_log_detail_info *) v_l_detail_info;
+ if (!l_detail_info)
+ continue;
+ free(l_detail_info->plog_shortmsg);
+ free(l_detail_info);
+ }
+ eina_list_free(list);
+}
+
+contacts_error_e log_detail_get_list(const char *view_uri, int property_id,
+ const char* 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");
+
+ 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_str(filter,
+ property_id, CONTACTS_MATCH_FULLSTRING, 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 (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);
+
+ contacts_filter_destroy(filter);
+ contacts_query_destroy(query);
+
+ return err;
+}
+
+static char* log_detail_get_custom_number_type(int contact_id,
+ const char* req_number)
+{
+ PH_TRACE;
+ int err = CONTACTS_ERROR_NONE;
+ contacts_list_h num_list = NULL;
+ char *out_num = NULL;
+ char *out_label = NULL;
+
+ if (contact_id > 0)
+ {
+ err = phone_cts_get_list(_contacts_person_number._uri,
+ _contacts_person_number.person_id, contact_id, &num_list);
+ if (CONTACTS_ERROR_NONE == err)
+ {
+ while (CONTACTS_ERROR_NONE == err)
+ {
+ err = phone_cts_get_str_from_list(num_list,
+ _contacts_person_number.number, &out_num);
+ if (err == CONTACTS_ERROR_NONE
+ && strcmp(req_number, out_num) == 0)
+ {
+ err = phone_cts_get_str_from_list(num_list,
+ _contacts_person_number.label, &out_label);
+ break;
+ }
+ err = contacts_list_next(num_list);
+ }
+ }
+ contacts_list_destroy(num_list, true);
+ }
+
+ if (err == CONTACTS_ERROR_NONE && out_label && *out_label)
+ return strdup(out_label);
+ else
+ return (char *) T_(CT_GET_TEXT_NUM_TYPE, CTTEXT_TYPE_OTHER);
+
+}
+
+static void log_detail_get_contact_info(char *req_number,
+ ph_log_detail_data *logdetail_d)
+{
+ PH_TRACE;
+ int index;
+ int err = CONTACTS_ERROR_NONE;
+ contacts_record_h out_contact = NULL;
+ contacts_list_h num_list = NULL;
+ char *out_num;
+
+ p_retm_if(NULL == req_number, "Parameter is null");
+ free(logdetail_d->log_display);
+ logdetail_d->log_display = NULL;
+ free(logdetail_d->log_img_path);
+ logdetail_d->log_img_path = NULL;
+
+ index = 0;
+ if (logdetail_d->contact_id > 0)
+ {
+ err = phone_cts_get_list(_contacts_person_number._uri,
+ _contacts_person_number.person_id, logdetail_d->contact_id,
+ &num_list);
+ if (CONTACTS_ERROR_NONE == err)
+ {
+ while (CONTACTS_ERROR_NONE == err)
+ {
+ err = phone_cts_get_str_from_list(num_list,
+ _contacts_person_number.number, &out_num);
+ if (err == CONTACTS_ERROR_NONE
+ && strcmp(req_number, out_num) == 0)
+ {
+ index = logdetail_d->contact_id;
+ break;
+ }
+ err = contacts_list_next(num_list);
+ }
+ }
+ contacts_list_destroy(num_list, true);
+ }
+
+ if (index <= 0)
+ {
+ err = log_detail_get_list(_contacts_person_number._uri,
+ _contacts_person_number.number, req_number, &num_list);
+ if (CONTACTS_ERROR_NONE == err)
+ {
+ unsigned int count = 0;
+ contacts_list_get_count(num_list, &count);
+ if (count > 0)
+ {
+ phone_cts_get_int_from_list(num_list,
+ _contacts_person_number.person_id, &index);
+ PH_DBG("FOUND ONE: %d", index);
+ }
+
+ }
+ contacts_list_destroy(num_list, true);
+ }
+
+ if (index > 0)
+ {
+ err = contacts_db_get_record(_contacts_person._uri, index,
+ &out_contact);
+ if (err < CONTACTS_ERROR_NONE)
+ ERR("contacts_db_get_record is failed");
+ else
+ {
+ contacts_record_get_str(out_contact, _contacts_person.display_name,
+ &logdetail_d->log_display);
+ logdetail_d->contact_id = index;
+ contacts_record_get_str(out_contact,
+ _contacts_person.image_thumbnail_path,
+ &logdetail_d->log_img_path);
+ contacts_record_destroy(out_contact, true);
+ PH_DBG("updated) name: %s, id: %d, imgpath: %s",
+ logdetail_d->log_display, logdetail_d->contact_id, logdetail_d->log_img_path);
+ return;
+ }
+ }
+ logdetail_d->contact_id = 0;
+}
+
+static void log_detail_view_clicked_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ p_retm_if(NULL == logdetail_d, "detail data is null");
+
+ if (0 < logdetail_d->contact_id)
+ {
+ PH_DBG("requested ID: %d", logdetail_d->contact_id);
+ logdetail_d->child_ug = phone_launch_contact_detail_ug(logdetail_d->ug,
+ logdetail_d->contact_id, log_detail_destroy_child_ug,
+ logdetail_d);
+ }
+}
+
+static void log_detail_add_contact_btn_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ logdetail_d->child_ug = phone_launch_contact_add_list_edit_ug(
+ logdetail_d->ug, logdetail_d->log_number,
+ log_detail_destroy_child_ug, logdetail_d);
+}
+
+static void log_detail_update_view_with_contact_cb(const char* view_uri,
+ void* data)
+{
+ PH_TRACE;
+
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ log_detail_get_contact_info(logdetail_d->log_number, logdetail_d);
+
+ if (logdetail_d->top_item)
+ elm_object_item_del(logdetail_d->top_item);
+ if (logdetail_d->log_display)
+ logdetail_d->top_item = elm_genlist_item_prepend(logdetail_d->genlist,
+ &log_detail_itcs[LOG_DETAIL_ITC_TOP_INFO_NAMED], logdetail_d,
+ NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ else
+ logdetail_d->top_item = elm_genlist_item_prepend(logdetail_d->genlist,
+ &log_detail_itcs[LOG_DETAIL_ITC_TOP_INFO_NONAMED], logdetail_d,
+ NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ ph_log_detail_set_toolbar(logdetail_d);
+
+ return;
+
+}
+
+static void log_detail_delete_confirm_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ int ret = CONTACTS_ERROR_NONE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ Eina_List *l;
+ void *v_l_info;
+
+ evas_object_del(logdetail_d->popup);
+ logdetail_d->popup = NULL;
+
+ l = logdetail_d->log_list;
+ EINA_LIST_FOREACH(l, l, v_l_info)
+ {
+ ph_log_detail_info *l_info = (ph_log_detail_info *) v_l_info;
+ ret = contacts_db_delete_record(_contacts_phone_log._uri,
+ l_info->plog_id);
+ if (CONTACTS_ERROR_NONE != ret)
+ break;
+ }
+
+ if (CONTACTS_ERROR_NONE != ret)
+ {
+ phone_show_tickernoti(S_(PH_SYS_POP_FAILED));
+ }
+ else
+ {
+ evas_object_data_del(logdetail_d->navi, KEY_LOG_DETAIL_DATA);
+ elm_naviframe_item_pop(logdetail_d->navi);
+ phone_show_tickernoti(S_(PH_SYS_POP_DELETED));
+ }
+}
+
+static void log_detail_del_btn_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ char buf[PH_TEXT_MAX_LEN] = { 0 };
+ snprintf(buf, sizeof(buf), "%s?", S_(PH_SYS_SK_DELETE));
+ phone_create_confirm_popup(&logdetail_d->popup, logdetail_d->win, buf,
+ log_detail_delete_confirm_cb, logdetail_d);
+}
+
+static Evas_Object *log_detail_gl_top_info_icon_get(void *data,
+ Evas_Object *obj, const char *part)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ if (0 == strcmp(part, "elm.icon"))
+ {
+ }
+ else if (0 == strcmp(part, "elm.icon.2"))
+ {
+ Evas_Object *detail_img = NULL;
+ if (logdetail_d->log_img_path)
+ detail_img = phone_create_icon_with_img(obj,
+ logdetail_d->log_img_path);
+ else
+ detail_img = phone_create_icon_with_img(obj, IMG_DEFAULT);
+ if (detail_img)
+ evas_object_size_hint_aspect_set(detail_img,
+ EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1);
+ return detail_img;
+ }
+ return NULL;
+}
+
+void log_detail_destroy_list_child_ug(void *data)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ logdetail_d->child_ug = NULL;
+
+}
+
+static Evas_Object *log_detail_gl_top_btns_icon_get(void *data,
+ Evas_Object *obj, const char *part)
+{
+ PH_TRACE;
+ const char *fullpath;
+ Evas_Object *btn;
+ Evas_Object *icon;
+ Evas_Smart_Cb clicked_fn;
+ Evas_Smart_Cb pressed_fn;
+ Evas_Smart_Cb unpressed_fn;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+
+ p_retv_if(NULL == data, NULL);
+
+ if (0 == strcmp(part, "elm.icon.1"))
+ {
+ fullpath = PH_IMG_CIRCLE_ICON_CALL;
+ clicked_fn = log_detail_call_btn_cb;
+ pressed_fn = (Evas_Smart_Cb) log_detail_call_btn_pressed_cb;
+ unpressed_fn = (Evas_Smart_Cb) log_detail_call_btn_unpressed_cb;
+ }
+ else if (0 == strcmp(part, "elm.icon.2"))
+ {
+ fullpath = PH_IMG_ICON_SMS;
+ clicked_fn = log_detail_msg_btn_cb;
+ pressed_fn = log_detail_msg_btn_pressed_cb;
+ unpressed_fn = log_detail_msg_btn_unpressed_cb;
+ }
+ else
+ {
+ return NULL;
+ }
+
+ btn = elm_button_add(obj);
+ p_retvm_if(NULL == btn, NULL, "elm_button_add() return NULL");
+ evas_object_propagate_events_set(btn, false);
+
+ 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_TRUE, EINA_TRUE);
+ elm_object_part_content_set(btn, "elm.swallow.content", icon);
+ evas_object_smart_callback_add(btn, "clicked", clicked_fn, logdetail_d);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_DOWN,
+ (Evas_Object_Event_Cb) pressed_fn, icon);
+ evas_object_event_callback_add(btn, EVAS_CALLBACK_MOUSE_UP,
+ (Evas_Object_Event_Cb) unpressed_fn, icon);
+
+ if (!logdetail_d->log_number || !*logdetail_d->log_number)
+ elm_object_disabled_set(btn, EINA_TRUE);
+
+ return btn;
+}
+
+static char *log_detail_gl_top_info_label_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ char buf[PATH_MAX] = { 0 };
+
+ if (0 == strcmp(part, "elm.text"))
+ {
+ if (logdetail_d->log_number && *logdetail_d->log_number)
+ if (logdetail_d->log_list_count > 1)
+ snprintf(buf, sizeof(buf), "%s (%d)", logdetail_d->log_number,
+ logdetail_d->log_list_count);
+ else
+ snprintf(buf, sizeof(buf), "%s", logdetail_d->log_number);
+ else
+ snprintf(buf, sizeof(buf), "%s (%d)", S_(PH_SYS_BODY_UNKNOWN),
+ logdetail_d->log_list_count);
+ return strdup(buf);
+ }
+ else if (0 == strcmp(part, "elm.text.1"))
+ {
+ if (logdetail_d->log_display && *logdetail_d->log_display)
+ if (logdetail_d->log_list_count > 1)
+ snprintf(buf, sizeof(buf), "%s (%d)", logdetail_d->log_display,
+ logdetail_d->log_list_count);
+ else
+ snprintf(buf, sizeof(buf), "%s", logdetail_d->log_display);
+ else if (logdetail_d->log_number && *logdetail_d->log_number)
+ if (logdetail_d->log_list_count > 1)
+ snprintf(buf, sizeof(buf), "%s (%d)", logdetail_d->log_number,
+ logdetail_d->log_list_count);
+ else
+ snprintf(buf, sizeof(buf), "%s", logdetail_d->log_number);
+ else
+ snprintf(buf, sizeof(buf), "%s (%d)", S_(PH_SYS_BODY_UNKNOWN),
+ logdetail_d->log_list_count);
+ return strdup(buf);
+ }
+ else if (0 == strcmp(part, "elm.text.2"))
+ {
+ if ((logdetail_d->log_display && *logdetail_d->log_display)
+ && (logdetail_d->log_number && *logdetail_d->log_number))
+ {
+ if (logdetail_d->log_num_type & CONTACTS_NUMBER_TYPE_CUSTOM)
+ snprintf(buf, sizeof(buf), "%s %s",
+ log_detail_get_custom_number_type(
+ logdetail_d->contact_id,
+ logdetail_d->log_number),
+ logdetail_d->log_number);
+ else
+ snprintf(buf, sizeof(buf), "%s %s",
+ T_(CT_GET_TEXT_NUM_TYPE, phone_detail_log_get_phonenumber_type(logdetail_d->log_num_type)),
+ logdetail_d->log_number);
+ return strdup(buf);
+ }
+ else
+ return NULL;
+ }
+ return NULL;
+}
+
+static Evas_Object *log_detail_gl_icon_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ PH_TRACE;
+ ph_log_detail_info *l_detail_info = (ph_log_detail_info *) data;
+ char buf[PATH_MAX] = { 0 };
+ Evas_Object *ic;
+
+ if (0 == strcmp(part, "elm.icon.1"))
+ {
+ char *made_data = phone_detail_log_get_icon_type(
+ l_detail_info->plog_type);
+ snprintf(buf, sizeof(buf), "%s", made_data);
+ free(made_data);
+ }
+ else if (0 == strcmp(part, "elm.icon.2"))
+ {
+ char *made_data = phone_detail_log_get_icon_path_with_action(
+ l_detail_info->plog_type);
+ snprintf(buf, sizeof(buf), "%s", made_data);
+ free(made_data);
+ }
+ else
+ return NULL;
+ ic = elm_icon_add(obj);
+ p_retvm_if(NULL == ic, NULL, "elm_icon_add() return NULL");
+ elm_image_file_set(ic, buf, NULL);
+ evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+ return ic;
+}
+
+static const char* log_detail_get_type_name(int type)
+{
+ PH_TRACE;
+ switch (type)
+ {
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING:
+ return T_(PH_GET_TEXT_BASIC, PHTEXT_INCOMMING_CALL);
+ break;
+ case CONTACTS_PLOG_TYPE_VOICE_OUTGOING:
+ case CONTACTS_PLOG_TYPE_VIDEO_OUTGOING:
+ return T_(PH_GET_TEXT_BASIC, PHTEXT_OUTGOING_CALL);
+ break;
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VOICE_INCOMMING_SEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN:
+ case CONTACTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN:
+ return T_(PH_GET_TEXT_BASIC, PHTEXT_MISSED_CALL);
+ break;
+ case CONTACTS_PLOG_TYPE_MMS_OUTGOING:
+ case CONTACTS_PLOG_TYPE_SMS_OUTGOING:
+ case CONTACTS_PLOG_TYPE_EMAIL_SENT:
+ return T_(PH_GET_TEXT_BASIC, PHTEXT_SENT_MESSAGE);
+ break;
+ case CONTACTS_PLOG_TYPE_MMS_INCOMMING:
+ case CONTACTS_PLOG_TYPE_SMS_INCOMMING:
+ case CONTACTS_PLOG_TYPE_EMAIL_RECEIVED:
+ return T_(PH_GET_TEXT_BASIC, PHTEXT_RECEIVED_MESSAGE);
+ break;
+ case CONTACTS_PLOG_TYPE_VOICE_REJECT:
+ case CONTACTS_PLOG_TYPE_VIDEO_REJECT:
+ return T_(PH_GET_TEXT_BASIC, PHTEXT_REJECTED_CALL_ABB);
+ break;
+ case CONTACTS_PLOG_TYPE_VOICE_BLOCKED:
+ case CONTACTS_PLOG_TYPE_VIDEO_BLOCKED:
+ return T_(PH_GET_TEXT_BASIC, PHTEXT_BLOCKED_CALL_ABB);
+ break;
+ case CONTACTS_PLOG_TYPE_SMS_BLOCKED:
+ case CONTACTS_PLOG_TYPE_MMS_BLOCKED:
+ default:
+ break;
+ }
+ return NULL;
+}
+
+static char* log_detail_gl_label_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ PH_TRACE;
+ ph_log_detail_info * l_detail_info = (ph_log_detail_info *) data;
+ char buf[PATH_MAX] = { 0 };
+ const char* type_name = NULL;
+
+ if (0 == strcmp(part, "elm.text.1"))
+ {
+ ph_log_detail_data *logdetail_d;
+ logdetail_d = (ph_log_detail_data *) evas_object_data_get(obj,
+ KEY_LOG_DETAIL_DATA);
+ return phone_detail_log_get_time(logdetail_d->log_d->formatter,
+ l_detail_info->plog_time);
+ }
+ else if (0 == strcmp(part, "elm.text.2"))
+ {
+ type_name = log_detail_get_type_name(l_detail_info->plog_type);
+ if (type_name)
+ {
+ if (TRUE
+ == phone_detail_log_is_call_ing_type(
+ l_detail_info->plog_type))
+ {
+ sprintf(buf, "%s %s", type_name,
+ phone_detail_log_get_duration_from_number(
+ l_detail_info->plog_duration));
+ return strdup(buf);
+ }
+ else
+ return strdup(type_name);
+ }
+ else
+ {
+ if (TRUE
+ == phone_detail_log_is_call_ing_type(
+ l_detail_info->plog_type))
+ return phone_detail_log_get_duration_from_number(
+ l_detail_info->plog_duration);
+ }
+ }
+ else if (0 == strcmp(part, "elm.text.3"))
+ {
+ if (TRUE == phone_detail_log_is_call_ing_type(l_detail_info->plog_type))
+ return phone_detail_log_get_duration_from_number(
+ l_detail_info->plog_duration);
+ }
+
+ return NULL;
+}
+
+static const char *log_detail_get_day_in_week(
+ ph_log_detail_info * l_detail_info)
+{
+ PH_TRACE;
+ time_t stime;
+ struct tm *tmp;
+
+ stime = l_detail_info->plog_time - l_detail_info->plog_duration;
+ tmp = localtime(&stime);
+
+ switch (tmp->tm_wday)
+ {
+ case 0:
+ return T_(PH_GET_TEXT_DAY, PHTEXT_BODY_SUNDAY);
+ case 1:
+ return T_(PH_GET_TEXT_DAY, PHTEXT_BODY_MONDAY);
+ case 2:
+ return T_(PH_GET_TEXT_DAY, PHTEXT_BODY_TUESDAY);
+ case 3:
+ return T_(PH_GET_TEXT_DAY, PHTEXT_BODY_WEDNESDAY);
+ case 4:
+ return T_(PH_GET_TEXT_DAY, PHTEXT_BODY_THURSDAY);
+ case 5:
+ return T_(PH_GET_TEXT_DAY, PHTEXT_BODY_FRIDAY);
+ case 6:
+ return T_(PH_GET_TEXT_DAY, PHTEXT_BODY_SATURDAY);
+ }
+ return NULL;
+}
+static int log_detail_get_group_index(ph_log_detail_info* l_detail_info)
+{
+ PH_TRACE;
+ time_t stime;
+ struct timeval timeval;
+ struct tm *tmp;
+ int yday, cur_yday;
+
+ gettimeofday(&timeval, 0);
+ tmp = localtime(&timeval.tv_sec);
+ cur_yday = tmp->tm_yday;
+
+ stime = l_detail_info->plog_time - l_detail_info->plog_duration;
+ tmp = localtime(&stime);
+
+ yday = tmp->tm_yday;
+
+ if (yday == cur_yday)
+ return -1;
+ else if (yday == (cur_yday - 1))
+ return -2;
+ else
+ return 0;
+}
+
+static char* log_detail_gl_sep_date_label_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ PH_TRACE;
+ ph_log_detail_info * l_detail_info = (ph_log_detail_info*) data;
+ const char *when;
+
+ if (data == NULL)
+ {
+ PH_DBG("WARNING: data is NULL");
+ return NULL;
+ }
+
+ int index = log_detail_get_group_index(l_detail_info);
+
+ if (0 == strcmp(part, "elm.text"))
+ {
+ char *date_temp;
+ ph_log_detail_data *logdetail_d;
+
+ if (-1 == index)
+ when = S_(PH_SYS_BODY_TODAY);
+ else if (-2 == index)
+ when = S_(PH_SYS_BODY_YESTERDAY);
+ else
+ when = log_detail_get_day_in_week(l_detail_info);
+
+ logdetail_d = (ph_log_detail_data *) evas_object_data_get(obj,
+ KEY_LOG_DETAIL_DATA);
+ date_temp = phone_detail_log_get_date(logdetail_d->log_d->formatter,
+ l_detail_info->plog_time - l_detail_info->plog_duration);
+ if (date_temp)
+ {
+ char buf[PATH_MAX] = { 0 };
+ snprintf(buf, sizeof(buf), " %s (%s)", when, date_temp);
+ free(date_temp);
+ return strdup(buf);
+ }
+ else
+ return strdup(when);
+ }
+ else
+ return NULL;
+
+}
+static inline void log_detail_create_itcs()
+{
+ PH_TRACE;
+ log_detail_itcs[LOG_DETAIL_ITC_DETAIL].func.text_get =
+ log_detail_gl_label_get;
+ log_detail_itcs[LOG_DETAIL_ITC_DETAIL].func.content_get =
+ log_detail_gl_icon_get;
+
+ log_detail_itcs[LOG_DETAIL_ITC_TOP_INFO_NAMED].func.text_get =
+ log_detail_gl_top_info_label_get;
+ log_detail_itcs[LOG_DETAIL_ITC_TOP_INFO_NAMED].func.content_get =
+ log_detail_gl_top_info_icon_get;
+
+ log_detail_itcs[LOG_DETAIL_ITC_TOP_INFO_NONAMED].func.text_get =
+ log_detail_gl_top_info_label_get;
+ log_detail_itcs[LOG_DETAIL_ITC_TOP_INFO_NONAMED].func.content_get =
+ log_detail_gl_top_info_icon_get;
+
+ log_detail_itcs[LOG_DETAIL_ITC_TOP_BTNS].func.content_get =
+ log_detail_gl_top_btns_icon_get;
+ log_detail_itcs[LOG_DETAIL_ITC_TITLE].func.text_get =
+ log_detail_gl_sep_date_label_get;
+}
+
+static Evas_Object* log_detail_create_genlist(ph_log_detail_data *logdetail_d,
+ Evas_Object *parent)
+{
+ PH_TRACE;
+ Evas_Object *genlist;
+
+ genlist = elm_genlist_add(parent);
+ p_retvm_if(NULL == genlist, NULL, "elm_genlist_add() return NULL");
+ evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_data_set(genlist, KEY_LOG_DETAIL_DATA, logdetail_d);
+ elm_object_theme_set(genlist, logdetail_d->th);
+ evas_object_smart_callback_add(genlist, "realized", log_detail_gl_realized,
+ NULL);
+
+ log_detail_create_itcs();
+ return genlist;
+}
+
+static void log_detail_view_delete_cb(void *data, Evas *e, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ int err = CONTACTS_ERROR_NONE;
+
+ p_retm_if(NULL == logdetail_d, "log detail data is null");
+
+ err = contacts_db_remove_changed_cb(_contacts_person._uri,
+ log_detail_update_view_with_contact_cb, logdetail_d);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_db_add_changed_cb() Failed(%d)", err);
+
+ evas_object_data_del(logdetail_d->navi, KEY_LOG_DETAIL_DATA);
+
+ elm_object_part_content_set(logdetail_d->layout, "elm.swallow.bg", NULL);
+
+ if (logdetail_d->th)
+ {
+ elm_theme_extension_del(logdetail_d->th, DIALER_THEME_EDJ);
+ elm_theme_free(logdetail_d->th);
+ }
+
+ if (logdetail_d->log_list)
+ log_detail_free_log_data(logdetail_d->log_list);
+
+ if (logdetail_d->idler)
+ ecore_idler_del(logdetail_d->idler);
+
+ if (logdetail_d->popup)
+ evas_object_del(logdetail_d->popup);
+
+ if (logdetail_d->m_Menu)
+ evas_object_del(logdetail_d->m_Menu);
+
+ if (logdetail_d->child_ug)
+ ug_destroy(logdetail_d->child_ug);
+
+ if (logdetail_d->log_display)
+ free(logdetail_d->log_display);
+
+ if (logdetail_d->log_number)
+ free(logdetail_d->log_number);
+
+ if (logdetail_d->log_img_path)
+ free(logdetail_d->log_img_path);
+
+ free(logdetail_d);
+}
+
+static void log_detail_back_btn_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+
+ /* TODO : remove evas_object_smart_callback_del, it will be controlled by WINSET */
+ evas_object_smart_callback_del(obj, "clicked", log_detail_back_btn_cb);
+
+ elm_naviframe_item_pop(logdetail_d->navi);
+ phone_log_missed_info_update(logdetail_d->navi);
+}
+
+static void log_detail_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ assert(data);
+ if (NULL != data)
+ {
+ ph_log_detail_data* logdetail_d = static_cast<ph_log_detail_data*>(data);
+ if (NULL != logdetail_d->popup)
+ {
+ evas_object_del(logdetail_d->popup);
+ logdetail_d->popup = NULL;
+ }
+ }
+}
+
+static void log_detail_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ assert(data);
+ if (NULL != data)
+ {
+ ph_log_detail_data* logdetail_d = static_cast<ph_log_detail_data*>(data);
+ if (NULL != logdetail_d->m_Menu)
+ {
+ evas_object_del(logdetail_d->m_Menu);
+ logdetail_d->m_Menu = NULL;
+ }
+ }
+}
+
+static void log_detail_context_menu_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ assert(data);
+ if (NULL != data)
+ {
+ ph_log_detail_data* logdetail_d = static_cast<ph_log_detail_data*>(data);
+ if (NULL != logdetail_d->m_ContextMenu)
+ {
+ evas_object_del(logdetail_d->m_ContextMenu);
+ logdetail_d->m_ContextMenu = NULL;
+ }
+ }
+}
+
+static void log_detail_ctxpopup_copy_cb(void *data, Evas_Object *obj,
+ void *event_info)
+{
+ PH_TRACE;
+ char buf[PH_TEXT_MAX_LEN];
+
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data *) data;
+ evas_object_del(obj);
+ logdetail_d->m_ContextMenu = NULL;
+
+ if (logdetail_d->log_display && *logdetail_d->log_display)
+ if (logdetail_d->log_number && *logdetail_d->log_number)
+ snprintf(buf, sizeof(buf), "%s\n%s", logdetail_d->log_display,
+ logdetail_d->log_number);
+ else
+ snprintf(buf, sizeof(buf), "%s", logdetail_d->log_display);
+ else if (logdetail_d->log_number && *logdetail_d->log_number)
+ snprintf(buf, sizeof(buf), "%s", logdetail_d->log_number);
+ else
+ snprintf(buf, sizeof(buf), "%s", S_(PH_SYS_BODY_UNKNOWN));
+ elm_cnp_selection_set(logdetail_d->layout, ELM_SEL_TYPE_CLIPBOARD,
+ ELM_SEL_FORMAT_TEXT, buf, strlen(buf));
+}
+
+static void log_detail_ctxpopup_block_contact_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ p_retm_if(data == NULL, "data is NULL");
+ ph_log_detail_data *logdetail_d = static_cast<ph_log_detail_data*>(data);
+
+ log_detail_menu_dismissed_cb(data, NULL, NULL);
+
+ logdetail_d->popup = phone_create_block_contact_popup(logdetail_d->navi, logdetail_d->contact_id);
+}
+
+static void log_detail_ctxpopup_send_number_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ assert(data);
+ assert(obj);
+ if (NULL != data && NULL != obj)
+ {
+ ph_log_detail_data *logdetail_d = static_cast<ph_log_detail_data*>(data);
+ log_detail_context_menu_dismissed_cb(logdetail_d, NULL, NULL);
+ log_detail_menu_dismissed_cb(logdetail_d, NULL, NULL);
+
+ evas_object_del(obj);
+ logdetail_d->popup = NULL;
+
+ logdetail_d->child_ug = ctui_predefined_body_msg_ug(logdetail_d->ug, NULL, 0, logdetail_d->log_number, log_detail_destroy_child_ug, logdetail_d);
+ }
+}
+
+static void log_detail_ctxpopup_copy_to_dialing_screen_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ assert(data);
+ assert(obj);
+ if (NULL != data && NULL != obj)
+ {
+ ph_log_detail_data *logdetail_d = static_cast<ph_log_detail_data*>(data);
+ log_detail_context_menu_dismissed_cb(logdetail_d, NULL, NULL);
+ log_detail_menu_dismissed_cb(logdetail_d, NULL, NULL);
+
+ evas_object_del(obj);
+ logdetail_d->popup = NULL;
+ phone_copy_to_dialing_screen(logdetail_d->log_number);
+ }
+}
+
+static void log_detail_gl_longpressed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_TRACE;
+ assert(data);
+ assert(event_info);
+ if (NULL != data && NULL != event_info)
+ {
+ ph_log_detail_data *logdetail_d = (ph_log_detail_data*) data;
+ if(logdetail_d->log_number)
+ {
+ Elm_Object_Item *it = (Elm_Object_Item *) event_info;
+
+ if (elm_genlist_item_index_get(it) <= 1)
+ {
+ logdetail_d->m_ContextMenu = elm_ctxpopup_add(logdetail_d->navi);
+ if (NULL != logdetail_d->m_ContextMenu)
+ {
+ elm_ctxpopup_direction_priority_set(logdetail_d->m_ContextMenu, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+
+ evas_object_smart_callback_add(logdetail_d->m_ContextMenu, "dismissed", log_detail_context_menu_dismissed_cb, logdetail_d);
+ elm_ctxpopup_item_append(logdetail_d->m_ContextMenu, S_(CT_SYS_BODY_COPY), NULL, log_detail_ctxpopup_copy_cb, logdetail_d);
+
+ elm_ctxpopup_item_append(logdetail_d->m_ContextMenu, T_(PH_GET_TEXT_BASIC, PHTEXT_EDIT_NUMBER_BEFORE_CALL), NULL, log_detail_ctxpopup_copy_to_dialing_screen_cb, logdetail_d);
+
+ evas_object_move(logdetail_d->m_ContextMenu, 720 / 2, 50 + 142 / 2);
+ evas_object_show(logdetail_d->m_ContextMenu);
+ }
+ else
+ {
+ ERR("log_detail_gl_longpressed_cb() Failed: %s", "elm_ctxpopup_add() return NULL");
+ }
+ }
+ }
+ }
+}
+
+static void more_btn_clicked_cb(void *data)
+{
+ PH_TRACE;
+ assert(data);
+ if (NULL != data)
+ {
+ ph_log_detail_data *logdetail_d = static_cast<ph_log_detail_data*>(data);
+
+ log_detail_ctxpopup_dismissed_cb(logdetail_d, NULL, NULL);
+ log_detail_context_menu_dismissed_cb(logdetail_d, NULL, NULL);
+ log_detail_menu_dismissed_cb(logdetail_d, NULL, NULL);
+
+ Evas_Object *menu = elm_ctxpopup_add(logdetail_d->navi);
+ if (NULL != menu)
+ {
+ elm_ctxpopup_direction_priority_set(menu, ELM_CTXPOPUP_DIRECTION_DOWN, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+ evas_object_smart_callback_add(menu, "dismissed", log_detail_menu_dismissed_cb, logdetail_d);
+
+ Elm_Object_Item* menu_item = NULL;
+ if(logdetail_d->contact_id > notRelatedToContactId)
+ {
+ menu_item = elm_ctxpopup_item_append(menu,
+ T_(PH_GET_TEXT_BASIC, PHTEXT_EDIT_BLOCK_CONTACT), NULL, log_detail_ctxpopup_block_contact_cb, logdetail_d);
+ }
+ if( (NULL == menu_item) || (notRelatedToContactId == logdetail_d->contact_id))
+ elm_object_item_disabled_set(menu_item, EINA_TRUE);
+ elm_ctxpopup_item_append(menu, T_(PH_GET_TEXT_BASIC, PHTEXT_EDIT_SEND_NUMBER), NULL, log_detail_ctxpopup_send_number_cb, logdetail_d);
+ menu_item = elm_ctxpopup_item_append(menu, T_(PH_GET_TEXT_BASIC, PHTEXT_EDIT_COPY_TO_DIALING_SCREEN), NULL, log_detail_ctxpopup_copy_to_dialing_screen_cb, logdetail_d);
+ if (menu_item && is_unknown_contact(logdetail_d->log_number))
+ {
+ elm_object_item_disabled_set(menu_item, EINA_TRUE);
+ }
+
+ int x, y, w, h;
+ evas_object_geometry_get(logdetail_d->navi, &x, &y, &w, &h);
+ evas_object_move(menu, 0, y + h);
+ evas_object_show(menu);
+
+ logdetail_d->m_Menu = menu;
+ }
+ else
+ {
+ ERR("%s", "elm_ctxpopup_add() return NULL");
+ }
+ }
+ else
+ {
+ ERR("%s", "logdetail_d is NULL");
+ }
+}
+
+void ph_log_detail_set_toolbar(ph_log_detail_data *logdetail_d)
+{
+ PH_TRACE;
+ Elm_Object_Item *navi_it;
+ Evas_Object * delete_button = NULL;
+ Evas_Object * contact_btn = NULL;
+
+ navi_it = elm_naviframe_top_item_get(logdetail_d->navi);
+ p_retm_if(NULL == navi_it, "navi item is NULL");
+
+ phone_navi_item_reset(navi_it, logdetail_d);
+ logdetail_d->menu_cb = more_btn_clicked_cb;
+
+ Evas_Object *toolbar_box = elm_box_add(logdetail_d->navi);
+ if (!toolbar_box)
+ {
+ return;
+ }
+ elm_box_horizontal_set(toolbar_box, true);
+ evas_object_size_hint_weight_set(toolbar_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(toolbar_box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_item_part_content_set(navi_it, "toolbar", toolbar_box);
+
+//delete button
+ delete_button = phone_create_toolbar_btn(toolbar_box,
+ S_(PH_SYS_SK_DELETE), log_detail_del_btn_cb, logdetail_d);
+ elm_object_style_set(delete_button, "naviframe/toolbar/right");
+
+//contact button
+ if (logdetail_d->contact_id) // view button
+ contact_btn = phone_create_toolbar_btn(toolbar_box,
+ T_(CT_GET_TEXT_BASIC, CTTEXT_VIEW),
+ log_detail_view_clicked_cb, logdetail_d);
+ else if (logdetail_d->log_number) // save button
+ contact_btn = phone_create_toolbar_btn(toolbar_box,
+ S_(PH_SYS_OPT_ADD_TO_CONTACTS),
+ log_detail_add_contact_btn_cb, logdetail_d);
+ elm_object_style_set(contact_btn, "naviframe/toolbar/left");
+
+ elm_box_pack_end(toolbar_box, contact_btn);
+ elm_box_pack_end(toolbar_box, delete_button);
+}
+
+void ph_log_detail_update(ph_log_data *log_d)
+{
+ PH_TRACE;
+ ph_log_detail_data *logdetail_d;
+ logdetail_d = (ph_log_detail_data *) evas_object_data_get(log_d->navi,
+ KEY_LOG_DETAIL_DATA);
+
+ if (logdetail_d)
+ {
+ ph_log_info *l_info = NULL;
+ void *v_l_info = NULL;
+ ph_log_info *find_info = NULL;
+ void *v_l_detail_info = NULL;
+ Eina_List *l_detail = logdetail_d->log_list;
+ Eina_List *l;
+ Elm_Object_Item *pre_item = NULL;
+
+ EINA_LIST_FOREACH(l_detail, l_detail, v_l_detail_info)
+ {
+ ph_log_detail_info *l_detail_info =
+ (ph_log_detail_info *) v_l_detail_info;
+ l = log_d->log_list;
+ EINA_LIST_FOREACH(l, l, v_l_info)
+ {
+ l_info = (ph_log_info *) v_l_info;
+ if (l_detail_info->plog_id == l_info->id)
+ {
+ find_info = (ph_log_info *) elm_object_item_data_get(
+ l_info->item);
+ break;
+ }
+ }
+ }
+
+ if (find_info)
+ {
+ log_detail_free_log_data(logdetail_d->log_list);
+ logdetail_d->log_list = NULL;
+ if (logdetail_d->genlist)
+ elm_genlist_clear(logdetail_d->genlist);
+
+ l = eina_list_data_find_list(log_d->log_list, find_info);
+ v_l_info = (void *) l_info;
+ EINA_LIST_FOREACH(l, l, v_l_info)
+ {
+ l_info = (ph_log_info *) v_l_info;
+ ph_log_detail_info *l_detail_info =
+ (ph_log_detail_info *) calloc(1,
+ sizeof(ph_log_detail_info));
+ l_detail_info->plog_id = l_info->id;
+ l_detail_info->plog_type = l_info->plog_log_type;
+ l_detail_info->plog_time = l_info->plog_log_time;
+ l_detail_info->plog_duration = l_info->plog_duration;
+
+ if (NULL == pre_item)
+ {
+ logdetail_d->log_list = eina_list_append(
+ logdetail_d->log_list, (void*) l_detail_info);
+ pre_item = l_info->item;
+ }
+ else if (l_info->item == pre_item)
+ logdetail_d->log_list = eina_list_append(
+ logdetail_d->log_list, (void*) l_detail_info);
+ else
+ {
+ free(l_detail_info);
+ break;
+ }
+ }
+ logdetail_d->log_list_count = eina_list_count(
+ logdetail_d->log_list);
+ log_detail_fill_genlist(logdetail_d);
+ }
+ else
+ {
+ elm_naviframe_item_pop(logdetail_d->navi);
+ phone_log_missed_info_update(logdetail_d->navi);
+ }
+ }
+}
+
+Evas_Object *ph_create_log_detail_view(ph_log_data *log_d, ph_log_info *l_info)
+{
+ PH_TRACE;
+ Evas_Object *layout;
+ Evas_Object *bg;
+ Evas_Object *genlist;
+ Elm_Object_Item *navi_it;
+ ph_log_detail_data *logdetail_d;
+ Eina_List *l;
+ Elm_Object_Item *pre_item = NULL;
+ int err = CONTACTS_ERROR_NONE;
+ ph_log_info *log_info;
+ void *v_log_info;
+ Elm_Theme *th;
+ p_retvm_if(NULL == l_info, NULL, "Log information is null");
+
+ logdetail_d = (ph_log_detail_data *) calloc(1, sizeof(ph_log_detail_data));
+ p_retvm_if(NULL == logdetail_d, NULL, "Fail to calloc ph_log_detail_data");
+ logdetail_d->ug = log_d->ug;
+ logdetail_d->win = log_d->win;
+ logdetail_d->navi = log_d->navi;
+ logdetail_d->log_d = log_d;
+ logdetail_d->start_plog_id = l_info->id;
+
+ layout = elm_layout_add(logdetail_d->navi);
+ if (NULL == layout)
+ {
+ ERR("elm_layout_add() return NULL");
+ free(logdetail_d);
+ return NULL;
+ }
+ elm_layout_theme_set(layout, "layout", "application", "noindicator");
+ logdetail_d->layout = layout;
+ elm_naviframe_prev_btn_auto_pushed_set(logdetail_d->navi, EINA_FALSE);
+
+ th = elm_theme_new();
+ elm_theme_ref_set(th, NULL);
+ elm_theme_extension_add(th, LOGDETAIL_THEME_EDJ);
+ logdetail_d->th = th;
+
+ genlist = log_detail_create_genlist(logdetail_d, layout);
+ if (NULL == genlist)
+ {
+ ERR("log_detail_create_genlist() return NULL");
+ free(logdetail_d);
+ return NULL;
+ }
+ logdetail_d->genlist = genlist;
+ elm_object_part_content_set(logdetail_d->layout, "elm.swallow.content",
+ genlist);
+
+ evas_object_smart_callback_add(genlist, "selected",
+ log_detail_gl_selected_cb, logdetail_d);
+ evas_object_smart_callback_add(genlist, "longpressed",
+ log_detail_gl_longpressed_cb, logdetail_d);
+
+ logdetail_d->contact_id = l_info->plog_ct_id;
+ logdetail_d->log_number = SAFE_STRDUP(l_info->plog_number);
+ if (l_info->plog_img_path)
+ logdetail_d->log_img_path = strdup(l_info->plog_img_path);
+ if (l_info->plog_display && *l_info->plog_display)
+ logdetail_d->log_display = strdup(l_info->plog_display);
+ logdetail_d->log_num_type = l_info->plog_num_type;
+
+ l = eina_list_data_find_list(log_d->log_list, l_info);
+ EINA_LIST_FOREACH(l, l, v_log_info)
+ {
+ log_info = (ph_log_info *) v_log_info;
+ ph_log_detail_info *l_detail_info = (ph_log_detail_info *) calloc(1,
+ sizeof(ph_log_detail_info));
+ l_detail_info->plog_id = log_info->id;
+ l_detail_info->plog_type = log_info->plog_log_type;
+ l_detail_info->plog_time = log_info->plog_log_time;
+ l_detail_info->plog_duration = log_info->plog_duration;
+
+ if (NULL == pre_item)
+ {
+ logdetail_d->log_list = eina_list_append(logdetail_d->log_list,
+ (void*) l_detail_info);
+ pre_item = log_info->item;
+ }
+ else if (log_info->item == pre_item)
+ logdetail_d->log_list = eina_list_append(logdetail_d->log_list,
+ (void*) l_detail_info);
+ else
+ {
+ free(l_detail_info);
+ break;
+ }
+ }
+ logdetail_d->log_list_count = eina_list_count(logdetail_d->log_list);
+ log_detail_fill_genlist(logdetail_d);
+
+ evas_object_event_callback_add(logdetail_d->layout, EVAS_CALLBACK_DEL,
+ log_detail_view_delete_cb, logdetail_d);
+
+ err = contacts_db_add_changed_cb(_contacts_person._uri,
+ log_detail_update_view_with_contact_cb, logdetail_d);
+ p_warn_if(CONTACTS_ERROR_NONE != err,
+ "contacts_db_add_changed_cb() Failed(%d)", err);
+
+ navi_it = elm_naviframe_item_push(logdetail_d->navi,
+ S_(PH_SYS_BODY_DETAILS), NULL, NULL, layout, NULL);
+ elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
+ ph_log_detail_set_toolbar(logdetail_d);
+ evas_object_data_set(logdetail_d->navi, KEY_LOG_DETAIL_DATA, logdetail_d);
+
+ bg = phone_create_bg(logdetail_d->layout);
+ elm_object_style_set(bg, "group_list");
+
+ return layout;
+}
+