diff options
Diffstat (limited to 'lib/log/ph-log-main-view.c')
-rwxr-xr-x | lib/log/ph-log-main-view.c | 640 |
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); |