summaryrefslogtreecommitdiff
path: root/lib/log/ph-log-main-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/log/ph-log-main-view.c')
-rwxr-xr-xlib/log/ph-log-main-view.c640
1 files changed, 516 insertions, 124 deletions
diff --git a/lib/log/ph-log-main-view.c b/lib/log/ph-log-main-view.c
index c94d4c7..28cb754 100755
--- a/lib/log/ph-log-main-view.c
+++ b/lib/log/ph-log-main-view.c
@@ -24,14 +24,30 @@
#include "ph-log-main-view.h"
#include "ph-log-detail-view.h"
#include "ph-log-check-view.h"
+#include "ct-detail.h"
#define KEY_LOG_DATA "log_data"
static Elm_Genlist_Item_Class itc, itc_one, itc_date;
-// 0: today, 1: yesterday, 2: previous
-static int log_get_date_type(int log_time, int log_duration)
+static void log_destroy_child_ug(void *data)
{
+ ph_log_data *log_d = data;
+ log_d->child_ug = NULL;
+}
+
+static void log_gl_msg_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ph_log_data *log_d = evas_object_data_get(obj, KEY_LOG_DATA);
+ log_d->child_ug = phone_launch_msg_composer_ug(log_d->ug, data, 0,
+ log_destroy_child_ug, log_d);
+}
+
+
+// today: -1, yesterday : -2, previous : positive value
+static void log_append_separate_all_date_index(ph_log_data *log_d, void *data, int index)
+{
+ ph_log_info *l_info = data;
time_t stime;
struct timeval timeval;
struct tm *tmp;
@@ -39,31 +55,21 @@ static int log_get_date_type(int log_time, int log_duration)
gettimeofday(&timeval, 0);
tmp = localtime(&timeval.tv_sec);
- p_retvm_if(NULL == tmp, 2, "localtime is null");
cur_yday = tmp->tm_yday;
- stime = log_time - log_duration;
+ stime = l_info->plog_log_time - l_info->plog_duration;
tmp = localtime(&stime);
- p_retvm_if(NULL == tmp, 2, "localtime is null");
yday = tmp->tm_yday;
if (yday == cur_yday)
- return 0;
- else if (yday == cur_yday-1)
- return 1;
+ l_info->group_index = -1;
+ else if (yday == (cur_yday-1))
+ l_info->group_index = -2;
else
- return 2;
-}
-
-static void log_append_separate_date_index(ph_log_data *log_d, void *data, int index)
-{
- ph_log_info *l_info = data;
- int type = log_get_date_type(l_info->plog_log_time, l_info->plog_duration);
-
- if (0 == index || log_d->pre_date_type != type) {
- log_d->pre_date_type = type;
- l_info->group_index = type;
+ l_info->group_index = yday;
+ if (yday != log_d->pre_date_type) {
+ log_d->pre_date_type = yday;
log_d->git = elm_genlist_item_append(log_d->genlist, &itc_date,
data, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
}
@@ -71,7 +77,8 @@ static void log_append_separate_date_index(ph_log_data *log_d, void *data, int i
static void log_gl_item_sel(void *data, Evas_Object *obj, void *event_info)
{
- bundle *bd;
+ PH_FN_CALL;
+ service_h service;
char buf[16];
Elm_Object_Item *item = event_info;
ph_log_info *l_info = data;
@@ -92,19 +99,20 @@ static void log_gl_item_sel(void *data, Evas_Object *obj, void *event_info)
return;
}
+ PH_DBG("view_type : %d", log_d->view_type);
switch (log_d->view_type) {
- case LOG_VIEW_TYPE_VOICE_CALL:
+ case LOG_VIEW_TYPE_UG_LAUNCH_CALL:
if (l_info->plog_number && *l_info->plog_number)
- phone_launch_voice_call(l_info->plog_number, l_info->plog_ct_id);
+ phone_launch_voice_call(l_info->plog_ct_id, l_info->plog_number);
break;
- case LOG_VIEW_TYPE_SELECT:
- bd = bundle_create();
- p_retm_if(NULL == bd, "bundle_create() Failed");
+ case LOG_VIEW_TYPE_UG_NUMBER_SELECT:
+ case LOG_VIEW_TYPE_UG_EMAIL_SELECT:
+ service_create(&service);
snprintf(buf, sizeof(buf), "%d", l_info->id);
- bundle_add(bd, PH_UG_BUNDLE_RESULT_PLOG_ID, buf);
+ service_add_extra_data(service, PH_UG_BUNDLE_RESULT_PLOG_ID, buf);
PH_DBG("plog_id : %d %s", l_info->id, buf);
- ug_send_result(log_d->ug, bd);
- bundle_free(bd);
+ ug_send_result(log_d->ug, service);
+ service_destroy(service);
ug_destroy_me(log_d->ug);
break;
case LOG_VIEW_TYPE_NORMAL:
@@ -117,25 +125,157 @@ static void log_gl_item_sel(void *data, Evas_Object *obj, void *event_info)
}
#define N 20
-static Eina_Bool log_append_item_part(void *data)
+static bool log_compare_type(int type, int pre_type)
+{
+ switch (pre_type) {
+ case CTS_PLOG_TYPE_VOICE_INCOMMING:
+ case CTS_PLOG_TYPE_VIDEO_INCOMMING:
+ case CTS_PLOG_TYPE_MMS_INCOMMING:
+ case CTS_PLOG_TYPE_SMS_INCOMMING:
+ case CTS_PLOG_TYPE_VOICE_OUTGOING:
+ case CTS_PLOG_TYPE_VIDEO_OUTGOING:
+ case CTS_PLOG_TYPE_MMS_OUTGOING:
+ case CTS_PLOG_TYPE_SMS_OUTGOING:
+ switch (type) {
+ case CTS_PLOG_TYPE_VOICE_INCOMMING:
+ case CTS_PLOG_TYPE_VIDEO_INCOMMING:
+ case CTS_PLOG_TYPE_MMS_INCOMMING:
+ case CTS_PLOG_TYPE_SMS_INCOMMING:
+ case CTS_PLOG_TYPE_VOICE_OUTGOING:
+ case CTS_PLOG_TYPE_VIDEO_OUTGOING:
+ case CTS_PLOG_TYPE_MMS_OUTGOING:
+ case CTS_PLOG_TYPE_SMS_OUTGOING:
+ return true;
+ default :
+ return false;
+ }
+ case CTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN:
+ case CTS_PLOG_TYPE_VOICE_INCOMMING_SEEN:
+ case CTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN:
+ case CTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN:
+ switch (type) {
+ case CTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN:
+ case CTS_PLOG_TYPE_VOICE_INCOMMING_SEEN:
+ case CTS_PLOG_TYPE_VIDEO_INCOMMING_UNSEEN:
+ case CTS_PLOG_TYPE_VIDEO_INCOMMING_SEEN:
+ return true;
+ default :
+ return false;
+ }
+ case CTS_PLOG_TYPE_VOICE_REJECT:
+ case CTS_PLOG_TYPE_VIDEO_REJECT:
+ switch (type) {
+ case CTS_PLOG_TYPE_VOICE_REJECT:
+ case CTS_PLOG_TYPE_VIDEO_REJECT:
+ return true;
+ default :
+ return false;
+ }
+ case CTS_PLOG_TYPE_VOICE_BLOCKED:
+ case CTS_PLOG_TYPE_VIDEO_BLOCKED:
+ case CTS_PLOG_TYPE_SMS_BLOCKED:
+ switch (type) {
+ case CTS_PLOG_TYPE_VOICE_BLOCKED:
+ case CTS_PLOG_TYPE_VIDEO_BLOCKED:
+ case CTS_PLOG_TYPE_SMS_BLOCKED:
+ return true;
+ default :
+ return false;
+ }
+ default:
+ return false;
+ }
+}
+
+static int log_fill_genlist_sub(ph_log_data * log_d, Eina_List *l, ph_log_info *pre_info)
{
- int count;
- Eina_List *l;
ph_log_info *l_info;
- ph_log_data * log_d = data;
+ int count;
+ int cnt_append;
+ int pre_type;
+ int pre_date;
+ int pre_ct_id;
+ bool diff;
+ char *pre_num;
+ Elm_Object_Item *item;
+ Elm_Object_Item *pre_item;
+
+ if (pre_info) {
+ pre_date = pre_info->group_index;
+ pre_ct_id = pre_info->plog_ct_id;
+ pre_type = pre_info->plog_log_type;
+ pre_item = pre_info->item;
+ pre_num = SAFE_STRDUP(pre_info->plog_number);
+ }
+ else {
+ pre_date = -3;
+ pre_ct_id = -1;
+ pre_type = CTS_PLOG_TYPE_NONE;
+ pre_item = NULL;
+ pre_num = NULL;
+ }
+ cnt_append = 0;
count = 0;
- l = eina_list_nth_list(log_d->log_list, log_d->readed_n);
EINA_LIST_FOREACH(l, l, l_info) {
- if (N == count) break;
- log_append_separate_date_index(log_d, l_info, count + log_d->readed_n);
+ if (N == cnt_append) break;
+ diff = false;
+ log_append_separate_all_date_index(log_d, l_info, cnt_append + log_d->readed_n);
+
+ if (l_info->group_index != pre_date)
+ diff = true;
+ else if (!log_compare_type(l_info->plog_log_type, pre_type))
+ diff = true;
+ else if (0 < l_info->plog_ct_id && 0 < pre_ct_id && l_info->plog_ct_id != pre_ct_id)
+ diff = true;
+ else if (l_info->plog_number && *l_info->plog_number) {
+ if (!pre_num)
+ diff = true;
+ else if (strcmp(l_info->plog_number, pre_num))
+ diff = true;
+ }
- elm_genlist_item_append(log_d->genlist, &itc, l_info,
- log_d->git, ELM_GENLIST_ITEM_NONE, log_gl_item_sel, l_info);
+ if (diff) {
+ if (pre_num)
+ free(pre_num);
+ if (l_info->plog_number && *l_info->plog_number) {
+ item = elm_genlist_item_append(log_d->genlist, &itc, l_info,
+ log_d->git, ELM_GENLIST_ITEM_NONE, log_gl_item_sel, l_info);
+ pre_num = strdup(l_info->plog_number);
+ }
+ else {
+ item = elm_genlist_item_append(log_d->genlist, &itc, l_info,
+ log_d->git, ELM_GENLIST_ITEM_NONE, log_gl_item_sel, l_info);
+ pre_num = NULL;
+ }
+ pre_date = l_info->group_index;
+ pre_type = l_info->plog_log_type;
+ pre_ct_id = l_info->plog_ct_id;
+ pre_item = item;
+ l_info->grouped_count = 1;
+ pre_info = l_info;
+ cnt_append++;
+ }
+ else
+ pre_info->grouped_count++;
+ l_info->item = pre_item;
count++;
}
+ return count;
+}
+
+static Eina_Bool log_append_item_part(void *data)
+{
+ int count;
+ Eina_List *l;
+ ph_log_info *l_info;
+ ph_log_data * log_d = data;
+
+ l = eina_list_nth_list(log_d->log_list, log_d->readed_n-1);
+ l_info = l->data;
+ count = log_fill_genlist_sub(log_d, l->next, l_info);
if (N <= count) {
- log_d->readed_n += N;
+ log_d->readed_n += count;
return ECORE_CALLBACK_RENEW;
}
else {
@@ -147,8 +287,6 @@ static Eina_Bool log_append_item_part(void *data)
static void log_fill_genlist(ph_log_data * log_d)
{
int count;
- Eina_List *l;
- ph_log_info *l_info;
p_retm_if(NULL == log_d || NULL == log_d->genlist, "Genlist is null");
@@ -158,21 +296,10 @@ static void log_fill_genlist(ph_log_data * log_d)
}
log_d->readed_n = 0;
- count = 0;
- EINA_LIST_FOREACH(log_d->log_list, l, l_info) {
- if (N == count) break;
- log_append_separate_date_index(log_d, l_info, count);
+ count = log_fill_genlist_sub(log_d, log_d->log_list, NULL);
- if (l_info->plog_number && *l_info->plog_number)
- elm_genlist_item_append(log_d->genlist, &itc, l_info,
- log_d->git, ELM_GENLIST_ITEM_NONE, log_gl_item_sel, l_info);
- else
- elm_genlist_item_append(log_d->genlist, &itc_one, l_info,
- log_d->git, ELM_GENLIST_ITEM_NONE, log_gl_item_sel, l_info);
- count++;
- }
if (N <= count) {
- log_d->readed_n += N;
+ log_d->readed_n += count;
log_d->list_idler = ecore_idler_add(log_append_item_part, log_d);
}
}
@@ -181,19 +308,26 @@ static void log_free_log_list(ph_log_data *log_d)
{
ph_log_info *l_info;
- p_ret_if(NULL == log_d->log_list);
+ EINA_LIST_FREE(log_d->log_all_list, l_info) {
+ if (NULL == l_info) continue;
+ free(l_info->plog_display);
+ free(l_info->plog_img_path);
+ free(l_info->plog_number);
+ free(l_info);
+ }
+ log_d->log_all_list = NULL;
- EINA_LIST_FREE(log_d->log_list, l_info) {
+ EINA_LIST_FREE(log_d->log_missed_list, l_info) {
if (NULL == l_info) continue;
free(l_info->plog_display);
free(l_info->plog_img_path);
free(l_info->plog_number);
free(l_info);
}
- log_d->log_list = NULL;
+ log_d->log_missed_list = NULL;
}
-static Eina_List *log_load_data(int *ref_count, bool include_unknown)
+static Eina_List *log_load_data(int type, int *ref_count, bool include_unknown)
{
PH_FN_CALL;
int ret = CTS_SUCCESS;
@@ -201,7 +335,7 @@ static Eina_List *log_load_data(int *ref_count, bool include_unknown)
Eina_List *list = NULL;
CTSiter *iter;
- ret = contacts_svc_get_list(CTS_LIST_GROUPING_CALL_PLOG, &iter);
+ ret = contacts_svc_get_list(type, &iter);
p_retvm_if(CTS_SUCCESS != ret, NULL, "contacts_svc_get_list is failed");
while (CTS_SUCCESS == contacts_svc_iter_next(iter)) {
@@ -243,11 +377,40 @@ static Eina_List *log_load_data(int *ref_count, bool include_unknown)
static void log_load_list(ph_log_data * log_d)
{
+ int count, all_count, missed_count;
p_retm_if(NULL == log_d, "Parameter is null");
log_free_log_list(log_d);
- log_d->log_list_count = 0;
- log_d->log_list = log_load_data(&(log_d->log_list_count), true);
-}
+
+ switch(log_d->view_type)
+ {
+ case LOG_VIEW_TYPE_UG_EMAIL_SELECT:
+ case LOG_VIEW_TYPE_UG_EMAIL_CHECK:
+ log_d->log_all_list = log_load_data(CTS_LIST_ALL_EMAIL_PLOG, &count, true);
+ log_d->log_list = log_d->log_all_list;
+ log_d->log_list_count = count;
+ break;
+
+ case LOG_VIEW_TYPE_NORMAL:
+ log_d->log_all_list = log_load_data(CTS_LIST_ALL_PLOG, &all_count, true);
+ log_d->log_missed_list = log_load_data(CTS_LIST_ALL_MISSED_CALL, &missed_count, true);
+ if (LOG_SEGMENT_MISSED_VIEW == log_d->log_type) {
+ log_d->log_list = log_d->log_missed_list;
+ log_d->log_list_count = missed_count;
+ } else if (LOG_SEGMENT_ALL_VIEW == log_d->log_type) {
+ log_d->log_list = log_d->log_all_list;
+ log_d->log_list_count = all_count;
+ }
+ break;
+
+ default:
+ log_d->log_all_list = log_load_data(CTS_LIST_ALL_PLOG, &count, true);
+ if(LOG_SEGMENT_ALL_VIEW == log_d->log_type) {
+ log_d->log_list_count = count;
+ log_d->log_list = log_d->log_all_list;
+ }
+ break;
+ }
+ }
Eina_Bool ph_log_missed_call_count_reset(void *data)
{
@@ -294,44 +457,135 @@ API void phone_log_missed_info_update(void *layout)
static void log_delete_btn_cb(void *data, Evas_Object *obj, void *event_info)
{
ph_log_data * log_d = data;
- ph_log_check_mode_start(log_d);
+ phone_log_check_mode_start(log_d);
+}
+
+static void log_sweep_delete_reponse_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_FN_CALL;
+ int ret;
+ ph_log_info *l_info = data;
+ ph_log_data *log_d = evas_object_data_get(obj, KEY_LOG_DATA);
+ p_retm_if(NULL == log_d, "log data is NULL");
+ evas_object_del(log_d->popup);
+ log_d->popup = NULL;
+
+ contacts_svc_begin_trans();
+ ret = ph_log_util_del_log_by_id(log_d->log_list, l_info);
+ if (CTS_SUCCESS != ret) {
+ contacts_svc_end_trans(false);
+ phone_show_tickernoti(S_(PH_SYS_POP_FAILED));
+ }
+ else {
+ contacts_svc_end_trans(true);
+ phone_show_tickernoti(S_(PH_SYS_POP_DELETED));
+ }
+}
+
+static void log_gl_sweep_del_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ ph_log_info *l_info = data;
+ ph_log_data *log_d = evas_object_data_get(obj, KEY_LOG_DATA);
+ char buf[PH_TEXT_MAX_LEN] = {0};
+ Evas_Object *btn;
+ snprintf(buf, sizeof(buf), "%s?", S_(PH_SYS_SK_DELETE));
+ btn = phone_create_confirm_popup(&log_d->popup, log_d->win, buf, log_sweep_delete_reponse_cb, (void *)l_info);
+ evas_object_data_set(btn, KEY_LOG_DATA, log_d);
+}
+
+static void log_gl_sweep_right(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_FN_CALL;
+ ph_log_data *log_d = data;
+ if (!event_info) return;
+ elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_TRUE);
+ elm_genlist_item_select_mode_set(log_d->item_last_sweep, ELM_OBJECT_SELECT_MODE_NONE);
+ log_d->item_last_sweep = event_info;
+}
+
+static void log_gl_sweep_left(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_FN_CALL;
+ ph_log_data *log_d = data;
+ if (!event_info) return;
+ elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ log_d->item_last_sweep = NULL;
+}
+
+static void log_gl_sweep_up_down(void *data, Evas_Object *obj, void *event_info)
+{
+ ph_log_data *log_d = data;
+ Elm_Object_Item *item;
+ if (!obj) return;
+ item = (Elm_Object_Item *)elm_genlist_decorated_item_get(obj);
+ if (item) {
+ elm_genlist_item_decorate_mode_set(item, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ log_d->item_last_sweep = NULL;
+ }
}
static char* log_gl_label_get(void *data, Evas_Object *obj, const char *part)
{
char buf[PH_TEXT_MAX_LEN]={0};
ph_log_info *l_info = data;
- if (0 == strcmp(part, "elm.text.1")) {
+ if (0 == strcmp(part, "elm.text.1") || 0 == strcmp(part, "elm.slide.text.1")) {
if (NULL == l_info->plog_number || '\0' == l_info->plog_number[0]) {
- snprintf(buf, sizeof(buf), S_(PH_SYS_BODY_UNKNOWN));
+ snprintf(buf, sizeof(buf), "%s", S_(PH_SYS_BODY_UNKNOWN));
return strdup(buf);
}
- else if (l_info->plog_display && *l_info->plog_display)
- snprintf(buf, sizeof(buf), "%s", l_info->plog_display);
- else
- snprintf(buf, sizeof(buf), "%s", l_info->plog_number);
+ else if (l_info->plog_display && *l_info->plog_display) {
+ if (1 < l_info->grouped_count)
+ snprintf(buf, sizeof(buf), "%s (%d)", l_info->plog_display, l_info->grouped_count);
+ else
+ snprintf(buf, sizeof(buf), "%s", l_info->plog_display);
+ }
+ else {
+ if (1 < l_info->grouped_count)
+ snprintf(buf, sizeof(buf), "%s (%d)", l_info->plog_number, l_info->grouped_count);
+ else
+ snprintf(buf, sizeof(buf), "%s", l_info->plog_number);
+ }
return strdup(buf);
}
else if ((strcmp(part, "elm.text.2") == 0)) {
ph_log_data * log_d;
+ char *time;
log_d = evas_object_data_get(obj, KEY_LOG_DATA);
- return ph_log_util_get_time_date(log_d->formatter, l_info->plog_log_time, l_info->plog_duration, FALSE);
+ time = ph_log_util_get_formatted_date(log_d->formatter, l_info->plog_log_time-l_info->plog_duration, PH_LOG_TIME_ONLY);
+ if (l_info->plog_display && *l_info->plog_display)
+ snprintf(buf, sizeof(buf), "%s\t\t\t%s", l_info->plog_number, time);
+ else
+ snprintf(buf, sizeof(buf), "%s", time);
+ free(time);
+ return strdup(buf);
}
else
return NULL;
}
+static void log_gl_call_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ PH_FN_CALL;
+ ph_log_info * l_info = data;
+ p_retm_if(NULL == l_info, "parameter(l_info) is NULL");
+ p_retm_if(NULL == l_info->plog_number|| '\0' == *l_info->plog_number, "number is NULL");
+ phone_launch_voice_call(l_info->plog_ct_id, l_info->plog_number);
+}
+
static Evas_Object *log_gl_icon_get(void *data, Evas_Object *obj, const char *part)
{
char buf[PATH_MAX];
ph_log_info * l_info = data;
ph_log_data * log_d;
+ Evas_Object *btn;
buf[0] = '\0';
log_d = evas_object_data_get(obj, KEY_LOG_DATA);
- if (0 == strcmp(part, "elm.icon.1")) {
- char *icon_type = ph_log_util_get_icon_type(l_info->plog_log_type);
+ if (0 == strcmp(part, "elm.icon.2")) {
+ char *icon_type = phone_detail_log_get_icon_type(l_info->plog_log_type);
Evas_Object *ic;
if (icon_type) {
snprintf(buf, sizeof(buf), "%s", icon_type);
@@ -344,8 +598,8 @@ static Evas_Object *log_gl_icon_get(void *data, Evas_Object *obj, const char *pa
return ic;
}
}
- else if (0 == strcmp(part, "elm.icon.2")) {
- char *icon_path = ph_log_util_get_icon_path_with_action(l_info->plog_log_type);
+ else if (0 == strcmp(part, "elm.icon.1")) {
+ char *icon_path = phone_detail_log_get_icon_path_with_action(l_info->plog_log_type);
if (icon_path) {
Evas_Object *ic;
snprintf(buf, sizeof(buf), "%s", icon_path);
@@ -359,17 +613,66 @@ static Evas_Object *log_gl_icon_get(void *data, Evas_Object *obj, const char *pa
}
}
else if (0 == strcmp(part, "elm.icon.3")) {
- if (l_info->plog_img_path) {
- Evas_Object *ic = elm_icon_add(obj);
- p_retvm_if(NULL == ic, NULL, "elm_icon_add is failed");
-
- snprintf(buf, sizeof(buf), "%s", l_info->plog_img_path);
-
- elm_icon_file_set(ic, buf, NULL);
- evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
- return ic;
+ Evas_Object *ic;
+ if (LOG_VIEW_TYPE_NORMAL != log_d->view_type && LOG_VIEW_TYPE_UG_LAUNCH_CALL != log_d->view_type)
+ return NULL;
+
+ if (NULL == l_info->plog_number || '\0' == l_info->plog_number[0])
+ return NULL;
+
+ btn = elm_button_add(obj);
+ ic = elm_icon_add(btn);
+ p_retvm_if(NULL == ic, NULL, "elm_icon_add is failed");
+ elm_icon_file_set(ic, PH_IMG_ICON_PHONE, NULL);
+ evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+ elm_object_part_content_set(btn, "icon", ic);
+ evas_object_propagate_events_set(btn, EINA_FALSE);
+ evas_object_smart_callback_add(btn, "clicked", log_gl_call_btn_cb, l_info);
+ return btn;
+ }
+ else if (0 == strcmp(part, "elm.slide.swallow.1")) {
+ if (l_info->plog_number && *l_info->plog_number) {
+ btn = phone_create_list_sweep_btn(obj, PH_IMG_ICON_CALL);
+ p_retvm_if(NULL == btn, NULL, "phone_create_list_sweep_btn() return NULL");
+
+ evas_object_data_set(btn, KEY_LOG_DATA, log_d);
+ evas_object_smart_callback_add(btn, "clicked", log_gl_call_btn_cb, l_info);
+ return btn;
+ }
+ else {
+ btn = phone_create_list_sweep_btn(obj, PH_IMG_ICON_CALL_DIM);
+ p_retvm_if(NULL == btn, NULL, "phone_create_list_sweep_btn is failed");
+ evas_object_data_set(btn, KEY_LOG_DATA, log_d);
+ elm_object_disabled_set(btn, true);
+ return btn;
+
+ }
+ }
+ else if (0 == strcmp(part, "elm.slide.swallow.2")) {
+ if (l_info->plog_number && *l_info->plog_number) {
+ btn = phone_create_list_sweep_btn(obj, PH_IMG_ICON_MESSAGE);
+ p_retvm_if(NULL == btn, NULL, "phone_create_list_sweep_btn is failed");
+ evas_object_data_set(btn, KEY_LOG_DATA, log_d);
+ evas_object_smart_callback_add(btn, "clicked", log_gl_msg_btn_cb, l_info->plog_number);
+ return btn;
+ }
+ else {
+ btn = phone_create_list_sweep_btn(obj, PH_IMG_ICON_MESSAGE_DIM);
+ p_retvm_if(NULL == btn, NULL, "phone_create_list_sweep_btn is failed");
+ evas_object_data_set(btn, KEY_LOG_DATA, log_d);
+ elm_object_disabled_set(btn, true);
+ return btn;
}
+
}
+ else if (0 == strcmp(part, "elm.slide.swallow.3")) {
+ btn = phone_create_list_sweep_btn(obj, PH_IMG_ICON_DELETE);
+ p_retvm_if(NULL == btn, NULL, "phone_create_list_sweep_btn() return NULL");
+
+ evas_object_data_set(btn, KEY_LOG_DATA, log_d);
+ evas_object_smart_callback_add(btn, "clicked", log_gl_sweep_del_btn_cb, l_info);
+ return btn;
+ }
else if (0 == strcmp(part, "elm.edit.icon.1")) {
Evas_Object *check;
check = elm_check_add(obj);
@@ -381,25 +684,52 @@ static Evas_Object *log_gl_icon_get(void *data, Evas_Object *obj, const char *pa
return NULL;
}
+static const char *log_get_day_in_week(ph_log_info *l_info)
+{
+ time_t stime;
+ struct tm *tmp;
+
+ stime = l_info->plog_log_time - l_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 char* log_gl_sep_date_label_get(void *data, Evas_Object *obj, const char *part)
{
- ph_log_info *cd = data;
+ ph_log_info *l_info = data;
const char *when;
- int index = cd->group_index;
+ int index = l_info->group_index;
if (0 == strcmp(part, "elm.text")) {
char *date_temp;
ph_log_data *log_d;
- if (0 == index)
+ if (-1 == index)
when = S_(PH_SYS_BODY_TODAY);
- else if (1 == index)
+ else if (-2 == index)
when = S_(PH_SYS_BODY_YESTERDAY);
else
- when = S_(PH_SYS_BODY_PREVIOUS);
+ when = log_get_day_in_week(l_info);
log_d = evas_object_data_get(obj, KEY_LOG_DATA);
- date_temp = ph_log_util_get_time_date(log_d->formatter, cd->plog_log_time, -1, FALSE);
+ date_temp = phone_detail_log_get_date(log_d->formatter, l_info->plog_log_time-l_info->plog_duration);
if (date_temp) {
char buf[PATH_MAX]={0};
snprintf(buf, sizeof(buf), " %s (%s)", when, date_temp);
@@ -416,7 +746,6 @@ static char* log_gl_sep_date_label_get(void *data, Evas_Object *obj, const char
static void log_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
ph_log_data *log_d = data;
- phone_hide_notify(log_d->navi);
ph_log_check_mode_end(log_d, true);
}
@@ -431,6 +760,13 @@ static Evas_Object* log_create_genlist(ph_log_data * log_d)
elm_genlist_homogeneous_set(genlist, EINA_TRUE);
evas_object_show(genlist);
evas_object_data_set(genlist, KEY_LOG_DATA, log_d);
+
+ if (!log_d->ug) {
+ evas_object_smart_callback_add(genlist, "drag,start,right", log_gl_sweep_right, log_d);
+ evas_object_smart_callback_add(genlist, "drag,start,left", log_gl_sweep_left, log_d);
+ evas_object_smart_callback_add(genlist, "drag,start,up", log_gl_sweep_up_down, log_d);
+ evas_object_smart_callback_add(genlist, "drag,start,down", log_gl_sweep_up_down, log_d);
+ }
elm_genlist_block_count_set(genlist, 10);
return genlist;
}
@@ -438,22 +774,24 @@ static Evas_Object* log_create_genlist(ph_log_data * log_d)
static Evas_Object* log_fill_layout(void *data)
{
ph_log_data *log_d = data;
- log_load_list(log_d);
if (0 < log_d->log_list_count) {
if (NULL == log_d->genlist)
log_d->genlist = log_create_genlist(log_d);
- else
+ else {
elm_genlist_clear(log_d->genlist);
+ log_d->pre_date_type = 0;
+ }
log_fill_genlist(log_d);
return log_d->genlist;
}
else {
Evas_Object *noc;
noc = phone_create_nocontents(log_d->box, T_(PH_GET_TEXT_BASIC, PHTEXT_NO_LOGS));
+ p_retvm_if(NULL == noc, NULL, "phone_create_nocontents() return NULL");
+
evas_object_size_hint_weight_set(noc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(noc, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(noc);
- log_d->genlist = NULL;
return noc;
}
}
@@ -468,21 +806,35 @@ Eina_Bool ph_log_data_changed_cb(void *data)
ecore_timer_del(log_d->update_timer);
log_d->update_timer = NULL;
}
- elm_box_clear(log_d->box);
+ if (log_d->list_idler) {
+ ecore_idler_del(log_d->list_idler);
+ log_d->list_idler = NULL;
+ }
+ log_load_list(log_d);
+
+ elm_box_unpack(log_d->box, log_d->content);
+ evas_object_del(log_d->content);
+ log_d->content = NULL;
if (log_d->genlist) {
- evas_object_del(log_d->genlist);
log_d->genlist = NULL;
+ log_d->pre_date_type = 0;
}
content = log_fill_layout(log_d);
p_retvm_if(NULL == content, ECORE_CALLBACK_CANCEL, "log_fill_layout() return NULL");
+ log_d->content = content;
elm_box_pack_end(log_d->box, content);
- if (LOG_VIEW_TYPE_CHECK == log_d->view_type
- || LOG_VIEW_TYPE_NORMAL_CHECK == log_d->view_type)
- ph_log_check_mode_start(log_d);
+ if (LOG_VIEW_TYPE_UG_NUMBER_CHECK == log_d->view_type
+ || LOG_VIEW_TYPE_NORMAL_CHECK == log_d->view_type
+ || LOG_VIEW_TYPE_UG_EMAIL_CHECK == log_d->view_type)
+ phone_log_check_mode_start(log_d);
ph_log_check_update_button_status(log_d);
+ if (log_d->logdetail_update) {
+ ph_log_detail_update(log_d);
+ log_d->logdetail_update = false;
+ }
return ECORE_CALLBACK_CANCEL;
}
@@ -500,6 +852,15 @@ static void log_data_lazy_update(void *data)
log_d->update_timer = ecore_timer_add(3.0, ph_log_data_changed_cb, log_d);
else
ph_log_data_changed_cb(log_d);
+ PH_FN_END;
+}
+
+static void log_data_updated(void *data)
+{
+ PH_FN_CALL;
+ ph_log_data *log_d = data;
+ log_d->logdetail_update = true;
+ log_data_lazy_update(log_d);
}
static void log_view_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
@@ -513,7 +874,7 @@ static void log_view_delete_cb(void *data, Evas *e, Evas_Object *obj, void *even
contacts_svc_unsubscribe_change_with_data(CTS_SUBSCRIBE_CONTACT_CHANGE,
log_data_lazy_update, log_d);
contacts_svc_unsubscribe_change_with_data(CTS_SUBSCRIBE_PLOG_CHANGE,
- log_data_lazy_update, log_d);
+ log_data_updated, log_d);
if (0 < log_d->heynoti_fd) {
heynoti_unsubscribe(log_d->heynoti_fd, "setting_time_changed", ph_log_timezone_changed);
@@ -545,7 +906,7 @@ static void log_view_delete_cb(void *data, Evas *e, Evas_Object *obj, void *even
if (log_d->update_timer)
ecore_timer_del(log_d->update_timer);
- ph_log_util_delete_date_format(log_d->formatter);
+ phone_detail_log_delete_date_format(log_d->formatter);
free(log_d);
PH_FN_END;
@@ -553,13 +914,15 @@ static void log_view_delete_cb(void *data, Evas *e, Evas_Object *obj, void *even
static void log_set_genlist_item_style()
{
- itc.item_style = "2text.3icon";
+ itc.item_style = "2text.2icon";
+ itc.decorate_item_style= "mode/slide3";
itc.decorate_all_item_style = "edit_default";
itc.func.text_get = log_gl_label_get;
itc.func.content_get = log_gl_icon_get;
itc.func.state_get = NULL;
- itc_one.item_style = "2text.3icon";
+ itc_one.item_style = "2text.2icon";
+ itc_one.decorate_item_style = "mode/slide";
itc_one.decorate_all_item_style = "edit_default";
itc_one.func.text_get = log_gl_label_get;
itc_one.func.content_get = log_gl_icon_get;
@@ -589,7 +952,7 @@ API void phone_log_views_update(Evas_Object *navi)
log_d = evas_object_data_get(navi, KEY_LOG_DATA);
if (log_d) {
- ph_log_util_generate_date_format(log_d->formatter);
+ phone_detail_log_generate_date_format(log_d->formatter);
log_genlist_update(log_d->genlist);
}
@@ -604,6 +967,13 @@ void ph_log_timezone_changed(void *data)
phone_log_views_update(data);
}
+API void phone_log_view_resume(Evas_Object *navi)
+{
+ ph_log_detail_data *logdetail_d;
+
+ phone_log_missed_info_update(navi);
+}
+
API void phone_log_view_reset(Evas_Object *layout)
{
PH_FN_CALL;
@@ -623,68 +993,88 @@ API void phone_log_view_reset(Evas_Object *layout)
elm_naviframe_item_pop_to(item);
else if (LOG_VIEW_TYPE_NORMAL_CHECK == log_d->view_type)
ph_log_check_mode_end(log_d, false);
+ else if (log_d->item_last_sweep) {
+ elm_genlist_item_decorate_mode_set(log_d->item_last_sweep, "slide", EINA_FALSE);
+ elm_genlist_item_select_mode_set(log_d->item_last_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ log_d->item_last_sweep = NULL;
+ }
log_d->ctrl_item = NULL;
}
+API void phone_log_seg_set(Evas_Object *layout, int log_seg_type)
+{
+ ph_log_data *log_d;
+ log_d = evas_object_data_get(layout, KEY_LOG_DATA);
+ p_retm_if(NULL == log_d, "log data is NULL");
+ log_d->log_type = log_seg_type;
+}
+
API void phone_log_set_navi(Evas_Object *layout)
{
PH_FN_CALL;
ph_log_data *log_d;
- Evas_Object *cbar;
+ Evas_Object *toolbar;
+ Evas_Object *box;
Evas_Object *l_btn;
+ Evas_Object *segment;
Elm_Object_Item *navi_it;
+ Elm_Object_Item *titem;
+ Elm_Object_Item *sitem1, *sitem2;
+
+ double scale = elm_scale_get();
log_d = evas_object_data_get(layout, KEY_LOG_DATA);
p_retm_if(NULL == log_d, "log data is NULL");
navi_it = elm_naviframe_bottom_item_get(log_d->navi);
p_retm_if(NULL == navi_it, "navi item is NULL");
- cbar = elm_object_item_part_content_get(navi_it, "controlbar");
- if(cbar)
- phone_cbar_item_clear(cbar);
+ toolbar = elm_object_item_part_content_get(navi_it, "controlbar");
+ if(toolbar)
+ phone_cbar_item_clear(toolbar);
else {
- cbar = elm_toolbar_add(log_d->navi);
- elm_toolbar_shrink_mode_set(cbar, ELM_TOOLBAR_SHRINK_EXPAND);
- elm_object_item_part_content_set(navi_it, "controlbar", cbar);
+ toolbar = elm_toolbar_add(log_d->navi);
+ elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+ elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
}
+ elm_toolbar_homogeneous_set(toolbar, EINA_FALSE);
/* back button */
switch (log_d->view_type) {
case LOG_VIEW_TYPE_NORMAL:
- log_d->ctrl_item = elm_toolbar_item_append(cbar, IMG_DELETE_ICON, NULL, log_delete_btn_cb, log_d);
- phone_toolbar_disalbed_item_append(cbar, 3);
+ log_d->ctrl_item = elm_toolbar_item_append(toolbar, PH_IMG_ICON_DELETE, NULL, log_delete_btn_cb, log_d);
+ elm_toolbar_homogeneous_set(toolbar, EINA_TRUE);
l_btn = elm_button_add(log_d->navi);
evas_object_smart_callback_add(l_btn, "clicked", phone_back_btn_clicked_cb, log_d->win);
elm_object_style_set(l_btn, "naviframe/back_btn/default");
elm_object_item_part_content_set(log_d->navi_item, "prev_btn", l_btn);
break;
case LOG_VIEW_TYPE_NORMAL_CHECK:
- log_d->ctrl_item = elm_toolbar_item_append(cbar, IMG_DELETE_ICON, NULL, ph_log_check_del_btn_cb, log_d);
- phone_toolbar_disalbed_item_append(cbar, 3);
- l_btn = phone_naviframe_btn(log_d->navi, S_(PH_SYS_SK_CANCEL));
+ log_d->ctrl_item = elm_toolbar_item_append(toolbar, PH_IMG_ICON_DELETE, NULL, ph_log_check_del_btn_cb, log_d);
+ phone_toolbar_disabled_item_append(toolbar, 3);
+ l_btn = phone_create_navi_btn(log_d->navi, S_(PH_SYS_SK_CANCEL));
evas_object_smart_callback_add(l_btn, "clicked", log_cancel_clicked_cb, log_d);
elm_object_item_part_content_set(log_d->navi_item, "prev_btn", l_btn);
break;
- case LOG_VIEW_TYPE_CHECK:
- log_d->ctrl_item = elm_toolbar_item_append(cbar, IMG_DONE_ICON, NULL, ph_log_check_done_btn_cb, log_d);
- phone_toolbar_disalbed_item_append(cbar, 3);
- break;
- case LOG_VIEW_TYPE_SELECT:
- case LOG_VIEW_TYPE_VOICE_CALL:
+ case LOG_VIEW_TYPE_UG_NUMBER_CHECK:
+ case LOG_VIEW_TYPE_UG_EMAIL_CHECK:
+ log_d->ctrl_item = elm_toolbar_item_append(toolbar, PH_IMG_ICON_DONE, NULL, ph_log_check_done_btn_cb, log_d);
+ phone_toolbar_disabled_item_append(toolbar, 3);
break;
+ case LOG_VIEW_TYPE_UG_NUMBER_SELECT:
+ case LOG_VIEW_TYPE_UG_EMAIL_SELECT:
+ case LOG_VIEW_TYPE_UG_LAUNCH_CALL:
default:
break;
}
if (log_d->ug) {
- l_btn = phone_naviframe_btn(log_d->navi, S_(PH_SYS_SK_CANCEL));
+ l_btn = phone_create_navi_btn(log_d->navi, S_(PH_SYS_SK_CANCEL));
evas_object_smart_callback_add(l_btn, "clicked", phone_ug_destroy_me_cb, log_d->ug);
elm_object_item_part_content_set(log_d->navi_item, "prev_btn", l_btn);
}
- if(log_d->ctrl_item) {
+ if(log_d->ctrl_item)
ph_log_check_update_button_status(log_d);
- }
}
int ph_log_create_content(ph_log_data *log_d)
@@ -698,15 +1088,17 @@ int ph_log_create_content(ph_log_data *log_d)
log_d->box = box;
log_set_genlist_item_style();
+ log_load_list(log_d);
content = log_fill_layout(log_d);
p_retvm_if(NULL == content, -1, "log_fill_layout() return NULL");
elm_box_pack_end(box, content);
+ log_d->content = content;
evas_object_event_callback_add(box, EVAS_CALLBACK_DEL,
log_view_delete_cb, log_d);
contacts_svc_subscribe_change(CTS_SUBSCRIBE_PLOG_CHANGE,
- log_data_lazy_update, log_d);
+ log_data_updated, log_d);
contacts_svc_subscribe_change(CTS_SUBSCRIBE_CONTACT_CHANGE,
log_data_lazy_update, log_d);