2.0 alpha
[apps/core/preloaded/calendar.git] / ug / list / ug-list.c
index 4098463..c8cee89 100755 (executable)
   */
 
 
-
-
-
-
+#include <fcntl.h>
+#include <vconf.h>
 #include "cld.h"
 #include "ug.h"
 #include <glib.h>
@@ -51,22 +49,21 @@ typedef struct {
        Evas_Object *genlist;
 
        Eina_List *event_list;
+       Eina_List *search_list;
 
-       Evas_Object *select_all_layout;
-       Evas_Object *select_all_check;
+       Evas_Object *select_all;
+       Evas_Object *select_all_checkbox;
        Evas_Object *box;
 
-       int totalcnt;
-       int offset;
        Ecore_Idler* idler;
 
-       int num_check;
-       int genlist_count;
+       int checked_event_count;
+       int added_event_count;
        Evas_Object* searchbar;
        const char * searchtext;
        Elm_Object_Item *navi_item;
-       Evas_Object * notify;
-       Evas_Object * notify_layout;
+       Evas_Object * selection_info;
+       Evas_Object * selection_info_layout;
 }cal_list_ug_data;
 
 typedef struct {
@@ -78,8 +75,6 @@ typedef struct {
        Elm_Genlist_Item_Type it_flag;
 }cal_list_ug_item_data;
 
-static Eina_Bool is_ug_list_view_destory;
-
 static int is_hour24;
 
 static void __cal_list_ug_genlist_item_select_callback(void *data, Evas_Object *obj, void *event_info);
@@ -91,9 +86,7 @@ static void __cal_list_ug_searchbar_clicked_callback(void *data, Evas_Object *ob
 static void __cal_list_ug_create_searchbar(cal_list_ug_data *p);
 static char* __cal_list_ug_get_genlist_item_label(void *data, Evas_Object *obj, const char *part);
 static Evas_Object *__cal_list_ug_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part);
-static void __cal_list_ug_update_all_check(cal_list_ug_data* p);
-static void __cal_list_ug_create_searchbar(cal_list_ug_data *p);
-static void __cal_list_ug_append_with_idler(void* data);
+static void __cal_list_ug_update_all_checkbox(cal_list_ug_data* p);
 
 static Elm_Genlist_Item_Class itc = {
        .item_style = "3text.5icon",
@@ -107,163 +100,224 @@ static Calendar_color calendar_color;
 //TODO
 #define ELM_GENLIST_ITEM_GROUP (1<<1)
 
-static void __cal_list_ug_add_small_info(cal_list_ug_data *p, int count)
+static void __cal_list_ug_create_selection_info(cal_list_ug_data *p)
 {
-       c_retm_if(!p, "p is null");
-       struct ug_data *ad = p->ugd;
-       c_retm_if(!ad, "ug data is null");
+       c_ret_if(!p);
 
-       Evas_Object *nv = ad->nv;
-       c_retm_if(!nv, "nv is null");
+       if (p->selection_info)
+               return;
 
-       Evas_Object *notify = NULL;
-       Evas_Object *notify_layout = NULL;
-       char lable_str[ACCOUNT_LABLE_STRING_LENGTH] = { '\0'};
+       struct ug_data *ad = p->ugd;
+       c_ret_if(!ad);
 
-       c_ret_if(count < 0);
+       Evas_Object *nv = ad->nv;
+       c_ret_if(!nv);
 
-       if (!p->notify) {
-               notify = elm_notify_add(nv);
+       if (!p->selection_info) {
 
-               c_retm_if(!notify, "notify is null");
+               Evas_Object *notify = elm_notify_add(nv);
+               c_ret_if(!notify);
 
                elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM);
 
-               p->notify = notify;
-
-               notify_layout = elm_layout_add(notify);
-               if (!notify_layout) {
-                       evas_object_del(p->notify);
-                       p->notify = NULL;
-                       return;
-               }
+               Evas_Object *notify_layout = elm_layout_add(notify);
+               c_ret_if(!notify_layout);
 
-               p->notify_layout = notify_layout;
                elm_layout_theme_set(notify_layout, "standard", "selectioninfo", "vertical/bottom_64");
                elm_object_content_set(notify, notify_layout);
+
+               p->selection_info = notify;
+               p->selection_info_layout = notify_layout;
        }
+}
 
-       snprintf(lable_str, sizeof(lable_str), "%s (%d)", S_("IDS_COM_POP_SELECTED"), count);
-       edje_object_part_text_set(CAL_UTIL_GET_EDJ_DATA(p->notify_layout), "elm.text", lable_str);
+static void __cal_list_ug_delete_selection_info(cal_list_ug_data *p)
+{
+       c_ret_if(!p);
 
-       if (0 < count) {
-               evas_object_show(p->notify);
-       } else {
-               evas_object_hide(p->notify);
-       }
+       if (p->selection_info)
+               evas_object_del(p->selection_info);
+
+       p->selection_info = NULL;
+       p->selection_info_layout = NULL;
 }
 
-static void __cal_list_ug_genlist_item_check_changed_callback(void *data, Evas_Object *obj, void *event_info)
+static void __cal_list_ug_update_selection_info(cal_list_ug_data *p, int count)
 {
-       c_retm_if(!data, "data is null");
+       c_ret_if(!p);
 
-       cal_list_ug_item_data *item_data = data;
-       Elm_Object_Item *it;
-       Eina_List* realized_list, *l;
+       if (!p->selection_info)
+               __cal_list_ug_create_selection_info(p);
 
-       cal_list_ug_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
-       c_retm_if(!p, "p is null");
+       char lable_str[ACCOUNT_LABLE_STRING_LENGTH] = {0};
 
-       if (p->genlist_count <= 0) {
-               return;
-       }
+       snprintf(lable_str, sizeof(lable_str), "%s (%d)", S_("IDS_COM_POP_SELECTED"), count);
+       edje_object_part_text_set(CAL_UTIL_GET_EDJ_DATA(p->selection_info_layout), "elm.text", lable_str);
 
-       item_data->checked = elm_check_state_get(obj);
-       if (item_data->checked)
-               p->num_check++;
+       if (0 < count)
+               evas_object_show(p->selection_info);
        else
-               p->num_check--;
+               evas_object_hide(p->selection_info);
+}
 
-       if (item_data->checked || 0 < p->num_check)
+static inline void __cal_list_ug_update_button_state(cal_list_ug_data *p)
+{
+       if (0 < p->checked_event_count)
                elm_object_item_disabled_set(p->bt, EINA_FALSE);
        else
                elm_object_item_disabled_set(p->bt, EINA_TRUE);
+}
+
+static inline void __cal_list_ug_update_realized_genlist_item(cal_list_ug_data *p)
+{
+       Eina_List *realized_list = elm_genlist_realized_items_get(p->genlist);
+       c_ret_if(!realized_list);
+
+       Eina_List *l = NULL;
+       Elm_Object_Item *it = NULL;
 
-       realized_list = elm_genlist_realized_items_get(p->genlist);
        EINA_LIST_FOREACH(realized_list, l, it) {
                if (it)
                        elm_genlist_item_update(it);
        }
+}
+
+static inline void __cal_list_ug_update_select_all(cal_list_ug_data *p)
+{
+       if (p->checked_event_count == p->added_event_count) {
+
+               elm_check_state_set(p->select_all_checkbox, EINA_TRUE);
+
+               __cal_list_ug_update_all_checkbox(p);
 
-       if (p->num_check == p->genlist_count) {
-               elm_check_state_set(p->select_all_check,EINA_TRUE);
-               __cal_list_ug_update_all_check(p);
        } else {
-               elm_check_state_set(p->select_all_check,EINA_FALSE);
-               __cal_list_ug_add_small_info(p, p->num_check);
+
+               elm_check_state_set(p->select_all_checkbox, EINA_FALSE);
+
+               __cal_list_ug_update_selection_info(p, p->checked_event_count);
        }
 }
 
-static Evas_Object *__cal_list_ug_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)
+static void __cal_list_ug_genlist_item_check_changed_callback(void *data, Evas_Object *obj, void *event_info)
 {
-       c_retvm_if(!part, NULL, "part is null");
-       c_retvm_if(!obj, NULL, "obj is null");
-       c_retvm_if(!data, NULL, "data is null");
+       c_ret_if(!data);
+       c_ret_if(!obj);
+
+       cal_list_ug_item_data *item_data = data;
 
-       Evas_Object *icon = NULL;
-       cal_struct *calendar = NULL;
        cal_list_ug_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
-       c_retvm_if(!p, NULL, "p is null");
+       c_ret_if(!p);
+
+       item_data->checked = elm_check_state_get(obj);
+
+       if (item_data->checked)
+               p->checked_event_count++;
+       else
+               p->checked_event_count--;
+
+       __cal_list_ug_update_button_state(p);
+
+       __cal_list_ug_update_realized_genlist_item(p);
+
+       __cal_list_ug_update_select_all(p);
+}
+
+static Evas_Object *__cal_list_ug_get_genlist_item_icon(void *data, Evas_Object *obj, const char *part)
+{
+       c_retv_if(!part, NULL);
+       c_retv_if(!obj, NULL);
+       c_retv_if(!data, NULL);
 
        cal_list_ug_item_data *item_data = data;
-       int r;
-       cal_struct *cs = item_data->cs;
-       c_retvm_if(!cs, NULL, "cs is null");
 
-       if (!CAL_STRCMP(part, "elm.edit.icon.1") )      {
-               icon = elm_check_add(obj);
-               c_retvm_if(!icon, NULL, "elm_check_add returned null");
+       if (!CAL_STRCMP(part, "elm.edit.icon.1")) {
 
-               elm_check_state_pointer_set(icon, &item_data->checked);
-               evas_object_smart_callback_add(icon, "changed", __cal_list_ug_genlist_item_check_changed_callback, item_data);
-               evas_object_propagate_events_set(icon, EINA_FALSE);
-               evas_object_data_set(icon, "priv", p);
+               cal_list_ug_data* p = CAL_UTIL_GET_PRIV_DATA(obj);
+               c_retv_if(!p, NULL);
 
-               return icon;
-       }
-       else if (!CAL_STRCMP(part, "elm.swallow.colorbar"))
-       {
-               r = CALENDAR_SVC_GET(CAL_STRUCT_CALENDAR, CALENDAR_SVC_STRUCT_GET_INT(cs,CAL_VALUE_INT_CALENDAR_ID), NULL, &calendar);
-               c_retvm_if(r != CAL_SUCCESS, NULL, "calendar_svc_get is failed(%d)", r);
+               Evas_Object *checkbox = elm_check_add(obj);
+               c_retv_if(!checkbox, NULL);
+
+               elm_check_state_pointer_set(checkbox, &item_data->checked);
+               evas_object_smart_callback_add(checkbox, "changed", __cal_list_ug_genlist_item_check_changed_callback, item_data);
+               evas_object_propagate_events_set(checkbox, EINA_FALSE);
+               evas_object_data_set(checkbox, "priv", p);
+
+               return checkbox;
+
+       } else if (!CAL_STRCMP(part, "elm.swallow.colorbar")) {
+
+               cal_struct *cs = item_data->cs;
+               c_retv_if(!cs, NULL);
+
+               cal_struct *calendar = NULL;
+
+               int r = CALENDAR_SVC_GET(CAL_STRUCT_CALENDAR, CALENDAR_SVC_STRUCT_GET_INT(cs,CAL_VALUE_INT_CALENDAR_ID), NULL, &calendar);
+               c_retvm_if(r != CAL_SUCCESS, NULL, "CALENDAR_SVC_GET is failed(%d)", r);
 
-               icon = evas_object_rectangle_add(evas_object_evas_get(obj));
-               c_retvm_if(!icon, NULL, "evas_object_rectangle_add returned null");
-               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               c_retv_if(!rect, NULL);
+
+               evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
                CALENDAR_SVC_GET_CALENDAR_COLOR(calendar, &calendar_color);
 
-               evas_object_color_set(icon, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
+               evas_object_color_set(rect, calendar_color.red, calendar_color.green, calendar_color.blue, calendar_color.alpha);
 
                CALENDAR_SVC_STRUCT_FREE(&calendar);
 
-               return icon;
+               return rect;
        }
 
        return NULL;
 }
 
-static void __cal_list_ug_clear_event_list(cal_list_ug_data *p)
+static void __cal_list_ug_delete_idler(cal_list_ug_data *p)
 {
        CAL_FN_START;
 
-       c_retm_if(!p, "p is null");
+       c_ret_if(!p);
 
-       cal_list_ug_item_data *item;
-       Eina_List *l = NULL;
+       if (!p->idler)
+               return;
 
-       EINA_LIST_FOREACH(p->event_list, l, item) {
-               if (item) {
-                       calendar_svc_struct_free(&item->cs);
-                       item->cs = NULL;
-                       free(item);
-                       item=NULL;
-               }
-       }
+       ecore_idler_del(p->idler);
+       p->idler = NULL;
+}
 
-       if (p->event_list) {
-               eina_list_free(p->event_list);
-               p->event_list = NULL;
-       }
+static void __cal_list_ug_delete_no_contents(cal_list_ug_data *p)
+{
+       CAL_FN_START;
+
+       c_ret_if(!p);
+       c_ret_if(!p->ly);
+
+       if (!p->no_contents)
+               return;
+
+       elm_object_part_content_unset(p->ly, "sw");
+
+       evas_object_del(p->no_contents);
+
+       p->no_contents = NULL;
+}
+
+static void __cal_list_ug_delete_conformant(cal_list_ug_data *p)
+{
+       CAL_FN_START;
+
+       c_ret_if(!p);
+
+       if(!p->conformant)
+               return;
+
+       c_ret_if(!p->ly);
+
+       elm_object_part_content_unset(p->ly, "sw");
+
+       evas_object_del(p->conformant);
+
+       p->conformant = NULL;
 }
 
 static void __cal_list_ug_delete_layout(void *data, Evas *e, Evas_Object *obj, void *ei)
@@ -274,34 +328,27 @@ static void __cal_list_ug_delete_layout(void *data, Evas *e, Evas_Object *obj, v
 
        cal_list_ug_data *p = data;
 
-       is_ug_list_view_destory = TRUE;
-       if (p->idler) {
-               ecore_idler_del(p->idler);
-               p->idler = NULL;
-       }
+       __cal_list_ug_delete_idler(p);
 
-       __cal_list_ug_clear_event_list(p);
+       CALENDAR_SVC_FREE_CS_LIST(&p->event_list);
 
-       if (p->no_contents) {
-               evas_object_del(p->no_contents);
-       }
+       __cal_list_ug_delete_no_contents(p);
 
-       if (p->searchbar) {
-               evas_object_smart_callback_del(elm_object_part_content_get(p->searchbar, "elm.swallow.content"), "changed", __cal_list_ug_searchbar_entry_changed_callback);
-               evas_object_smart_callback_del(p->searchbar, "cancel,clicked", __cal_list_ug_cancel_button_callback);
-               evas_object_del(p->searchbar);
-               p->searchbar = NULL;
-       }
+       __cal_list_ug_delete_conformant(p);
 
-       CALENDAR_SVC_DEL_EVENT_CHANGED_CALLBACK((void(*)(void*))__cal_list_ug_update);
+       p->searchbar = NULL;
 
-       if (p->notify) {
-               evas_object_del(p->notify);
-       }
+       p->box = NULL;
 
-       if (p->box) {
-               elm_box_clear(p->box);
-       }
+       p->select_all = NULL;
+
+       p->select_all_checkbox = NULL;
+
+       p->genlist = NULL;
+
+       CALENDAR_SVC_DEL_EVENT_CHANGED_CALLBACK((void(*)(void*))__cal_list_ug_update);
+
+       __cal_list_ug_delete_selection_info(p);
 
        free(p);
 }
@@ -310,9 +357,7 @@ static char* __cal_list_ug_get_cs(cal_struct *cs)
 {
        char buf[512];
        char stime[512];
-       time_t st;
        struct tm tm;
-       int repeat;
        const char* time;
 
        if (is_hour24)
@@ -320,12 +365,10 @@ static char* __cal_list_ug_get_cs(cal_struct *cs)
        else
                time = CAL_UTIL_TIME_FORMAT_1;
 
-       st = CALENDAR_SVC_STRUCT_GET_TIME(cs, CAL_VALUE_GMT_START_DATE_TIME, CAL_TZ_FLAG_GMT);
-       localtime_r(&st, &tm);
+       cal_util_convert_lli_to_tm(NULL, CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTSTART_UTIME), &tm);
 
-       repeat = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_REPEAT_TERM);
-       if (repeat == CAL_REPEAT_NONE)
-       {
+       int repeat = CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_RRULE_ID);
+       if (repeat == CALS_FREQ_ONCE) {
                cal_util_get_time_text(stime, sizeof(stime), NULL, time, &tm);
                snprintf(buf, sizeof(buf), "%s", stime);
        } else {
@@ -338,27 +381,27 @@ static char* __cal_list_ug_get_cs(cal_struct *cs)
 
 static char* __cal_list_ug_get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
 {
-       c_retvm_if(!part, NULL, "part is null");
-       c_retvm_if(!data, NULL, "data is null");
+       c_retv_if(!part, NULL);
+       c_retv_if(!data, NULL);
 
        const char *str = NULL;
        cal_list_ug_item_data *item = data;
        cal_struct *cs = item->cs;
-       c_retvm_if(!cs, NULL, "cs is null");
+       c_retv_if(!cs, NULL);
+
+       if (!CAL_STRCMP(part, "elm.text.1")) {
 
-       if (!CAL_STRCMP(part, "elm.text.1"))
-       {
                str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_SUMMARY);
-               if (str)
+               if (CAL_STRLEN(str))
                        return strdup(str);
 
                return strdup(C_("IDS_CLD_BODY_NO_TITLE"));
        }
 
-       if (!CAL_STRCMP(part, "elm.text.2"))
-       {
+       if (!CAL_STRCMP(part, "elm.text.2")) {
+
                str = CALENDAR_SVC_STRUCT_GET_STR(cs, CAL_VALUE_TXT_LOCATION);
-               if (str)
+               if (CAL_STRLEN(str))
                        return strdup(str);
 
                return strdup(C_("IDS_CLD_BODY_NO_LOCATION_SELECTED"));
@@ -375,26 +418,25 @@ static void __cal_list_ug_genlist_item_select_callback(void *data, Evas_Object *
        c_retm_if(!data, "data is null");
        c_retm_if(!obj, "obj is null");
 
-       Eina_List* realized_list, *l;
        Elm_Object_Item* it;
        cal_list_ug_item_data* item = data;
        cal_list_ug_data *p = CAL_UTIL_GET_PRIV_DATA(obj);
        c_retm_if(!p, "p is null");
 
-       if (p->genlist_count <= 0) {
+       if (p->added_event_count <= 0) {
                return;
        }
 
        item->checked = !(item->checked);
        if (item->checked) {
-               p->num_check++;
+               p->checked_event_count++;
        } else {
-               p->num_check--;
+               p->checked_event_count--;
        }
 
-       if (item->checked || 0 < p->num_check) {
+       if (item->checked || 0 < p->checked_event_count) {
                elm_object_item_disabled_set(p->bt, EINA_FALSE);
-       } else if (p->num_check <= 0) {
+       } else if (p->checked_event_count <= 0) {
                elm_object_item_disabled_set(p->bt, EINA_TRUE);
        }
 
@@ -403,496 +445,418 @@ static void __cal_list_ug_genlist_item_select_callback(void *data, Evas_Object *
                elm_genlist_item_selected_set(it, EINA_FALSE);
        }
 
-       realized_list = elm_genlist_realized_items_get(obj);
-       EINA_LIST_FOREACH(realized_list, l, it) {
-               if (it) {
-                       elm_genlist_item_update(it);
-               }
-       }
+       __cal_list_ug_update_realized_genlist_item(p);
 
-       if (p->num_check == p->genlist_count) {
-               elm_check_state_set(p->select_all_check,EINA_TRUE);
-               __cal_list_ug_update_all_check(p);
+       if (p->checked_event_count == p->added_event_count) {
+               elm_check_state_set(p->select_all_checkbox,EINA_TRUE);
+               __cal_list_ug_update_all_checkbox(p);
        } else {
-               elm_check_state_set(p->select_all_check,EINA_FALSE);
-               __cal_list_ug_add_small_info(p, p->num_check);
+               elm_check_state_set(p->select_all_checkbox,EINA_FALSE);
+               __cal_list_ug_update_selection_info(p, p->checked_event_count);
        }
 
 }
 
-Eina_Bool __cal_list_ug_update_fetch_list_idler(void* data)
+static void __cal_list_ug_get_event_list(cal_list_ug_data *p)
 {
        CAL_FN_START;
 
-       cal_list_ug_data *p = data;
+       c_ret_if(!p);
 
-       c_retvm_if(!p, ECORE_CALLBACK_CANCEL, "priv is null.");
+       if (p->ugd->is_event)
+               p->event_list = CALENDAR_SVC_GET_ALL(ALL_ACCOUNT_ID, ALL_CALENDAR_ID, CAL_STRUCT_SCHEDULE);
+       else
+               p->event_list = CALENDAR_SVC_GET_ALL(ALL_ACCOUNT_ID, ALL_CALENDAR_ID, CAL_STRUCT_TODO);
+}
 
-       int r;
-       cal_iter *it=NULL;
-       int cal_id;
-       cal_id = 0;
-       it = NULL;
-       cal_list_ug_item_data *item;
-       Eina_Bool is_finished = EINA_FALSE;
+static void __cal_list_ug_add_event_to_genlist(cal_list_ug_data *p)
+{
+       CAL_FN_START;
 
-       if(is_ug_list_view_destory == EINA_TRUE)
-               return ECORE_CALLBACK_CANCEL;
+       c_ret_if(!p);
+       c_ret_if(!p->event_list);
 
-       if(p->idler == NULL)
-               return ECORE_CALLBACK_CANCEL;
+       Eina_List *l = NULL;
+       cal_struct *cs = NULL;
 
-       r = CALENDAR_SVC_GET_LIST(ALL_VISIBILITY_ACCOUNT, ALL_CALENDAR_ID, CAL_STRUCT_SCHEDULE, CAL_VALUE_LIST_FILED, p->offset, MAX_FETCH_COUNT, &it);
-       if (r != CAL_SUCCESS)
-               return ECORE_CALLBACK_CANCEL;
+       int added_event_count = 0;
 
-       while (CALENDAR_SVC_ITER_NEXT(it) == CAL_SUCCESS) {
+       Eina_List *event_list = eina_list_nth_list(p->event_list, p->added_event_count);
+       c_ret_if(!event_list);
 
-               item = calloc(1, sizeof(cal_list_ug_item_data));
-               c_retvm_if(!item, ECORE_CALLBACK_CANCEL, "item is null");
+       EINA_LIST_FOREACH(event_list, l, cs) {
+               if (cs) {
+                       cal_list_ug_item_data *item_data = calloc(1, sizeof(cal_list_ug_item_data));
+                       c_ret_if(!item_data);
 
-               r = CALENDAR_SVC_ITER_GET_INFO(it, &item->cs);
-               if (r != CAL_SUCCESS)
-                       break;
+                       item_data->cs = cs;
 
-               p->event_list = eina_list_append(p->event_list, item);
-       }
+                       item_data->it = elm_genlist_item_append(p->genlist, &itc, item_data, NULL, ELM_GENLIST_ITEM_NONE, __cal_list_ug_genlist_item_select_callback, item_data);
 
-       CALENDAR_SVC_ITER_REMOVE(&it);
+                       added_event_count++;
 
-       if(eina_list_count(p->event_list) < MAX_FETCH_COUNT)
-               is_finished = EINA_TRUE;
+                       if (10 < added_event_count)
+                               break;
+               }
+       }
 
-       __cal_list_ug_append_with_idler(p);
+       p->added_event_count += added_event_count;
+}
 
-       if(is_finished || (p->offset == p->totalcnt))
-       {
-               if (p->idler)
-               {
-                       ecore_idler_del(p->idler);
-                       p->idler = NULL;
-               }
+static Eina_Bool __cal_list_ug_check_idler_condition(cal_list_ug_data *p)
+{
+       c_retv_if(!p, ECORE_CALLBACK_CANCEL);
 
-               p->offset= 0;
+       if (p->added_event_count < eina_list_count(p->event_list)) {
 
-               return ECORE_CALLBACK_CANCEL;
-       }
-       else
-       {
                return ECORE_CALLBACK_RENEW;
        }
 
+       if (p->idler) {
+               ecore_idler_del(p->idler);
+               p->idler = NULL;
+       }
+
        return ECORE_CALLBACK_CANCEL;
 }
 
-static void __cal_list_ug_get_event_list(cal_list_ug_data *p)
+Eina_Bool __cal_list_ug_idler_callback(void* data)
 {
        CAL_FN_START;
 
-       c_retm_if(!p, "p is null");
+       c_retvm_if(!data, ECORE_CALLBACK_CANCEL, "data is null.");
 
-       int r;
-       cal_iter *it = NULL;
-       cal_list_ug_item_data *item;
-
-       p->totalcnt = CALENDAR_SVC_GET_COUNT(ALL_ACCOUNT_ID,ALL_CALENDAR_ID,CAL_STRUCT_SCHEDULE);
+       cal_list_ug_data *p = data;
 
-       p->offset = 0;
+       c_retv_if(!p->idler, ECORE_CALLBACK_CANCEL);
 
-       r = CALENDAR_SVC_GET_LIST(ALL_ACCOUNT_ID, ALL_CALENDAR_ID, CAL_STRUCT_SCHEDULE, CAL_VALUE_LIST_FILED, 0, MAX_FETCH_COUNT, &it);
+       __cal_list_ug_add_event_to_genlist(p);
 
-       if (r != CAL_SUCCESS)
-               return;
+       CAL_FN_END;
 
-       while (CALENDAR_SVC_ITER_NEXT(it) == CAL_SUCCESS)       {
+       return __cal_list_ug_check_idler_condition(p);
+}
 
-               item = calloc(1, sizeof(cal_list_ug_item_data));
-               c_retm_if(!item, "item is null");
+static void __cal_list_ug_add_idler(cal_list_ug_data *p)
+{
+       c_ret_if(!p);
 
-               r = CALENDAR_SVC_ITER_GET_INFO(it, &item->cs);
-               if (r != CAL_SUCCESS)
-                       break;
+       if (p->added_event_count < eina_list_count(p->event_list)) {
 
-               p->event_list = eina_list_append(p->event_list, item);
-       }
+               if (p->idler)
+                       ecore_idler_del(p->idler);
 
-       CALENDAR_SVC_ITER_REMOVE(&it);
-       if (eina_list_count(p->event_list) < p->totalcnt) {
-               if (!p->idler) {
-                       p->idler = ecore_idler_add(__cal_list_ug_update_fetch_list_idler,p);
-               }
+               p->idler = ecore_idler_add(__cal_list_ug_idler_callback, p);
+               c_ret_if(!p->idler);
        }
 }
-static bool __cal_list_ug_strstr(const char *pszParent, const char * pszChild)
-{
-       bool bRst = false;
-       if (!pszParent || !pszChild) {
-               return false;
-       }
 
-       GString * gSrc = g_string_new(pszParent);
-       if (!gSrc) {
-               return false;
-       }
+static void __cal_list_ug_create_searchbar(cal_list_ug_data *p)
+{
+       c_ret_if(!p);
+       c_ret_if(!p->ly);
 
-       GString * gDes = g_string_new(pszChild);
-       if (!gDes) {
-               g_string_free(gSrc,true);
-               return false;
-       }
+       if (p->searchbar)
+               return;
 
-       gSrc = g_string_ascii_up(gSrc);
-       if (!gSrc) {
-               g_string_free(gDes,true);
-               return false;
-       }
+       Evas_Object *searchbar = cal_util_add_searchbar(p->ly, NULL, NULL, EINA_TRUE);
+       c_ret_if(!searchbar);
 
-       gDes = g_string_ascii_up(gDes);
-       if (!gDes) {
-               g_string_free(gSrc,true);
-               return false;
-       }
+       Evas_Object *entry = elm_object_part_content_get(searchbar, "elm.swallow.content");
+       c_ret_if(!entry);
 
-       if (g_strrstr(gSrc->str,gDes->str)) {
-               bRst = true;
-       } else {
-               bRst = false;
-       }
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+       elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &_limit_20char);
 
-       g_string_free(gSrc,true);
-       g_string_free(gDes,true);
-       return bRst;
-}
-static void __cal_list_ug_append_with_idler(void* data)
-{
-       c_retm_if(!data, "data is null");
+       evas_object_size_hint_weight_set(searchbar, EVAS_HINT_EXPAND, 0.1);
+       evas_object_size_hint_align_set(searchbar, EVAS_HINT_FILL, 0.6);
 
-       cal_list_ug_data* p = data;
-       Eina_List *event_list, *l = NULL;
-       cal_list_ug_item_data *item = NULL;
-       Elm_Object_Item *it = NULL;
-       const char* summary = NULL;
+       evas_object_smart_callback_add(entry, "changed", __cal_list_ug_searchbar_entry_changed_callback, p);
+       evas_object_smart_callback_add(entry, "unfocused", __cal_list_ug_searchbar_entry_unfocused_callback, p);
+       evas_object_smart_callback_add(searchbar, "clicked", __cal_list_ug_searchbar_clicked_callback, p);
+       evas_object_smart_callback_add(searchbar, "cancel,clicked", __cal_list_ug_cancel_button_callback, p);
 
-       event_list = eina_list_nth_list(p->event_list, p->offset-1);
-       if (event_list) {
-               event_list = eina_list_next(event_list);
-               c_retm_if(NULL == event_list, "eina_list_nth_list(append_list, 1) is null");
-       }
-       c_retm_if(!event_list, "eina_list_nth(list, %d) returned null", p->offset);
+       evas_object_show(searchbar);
 
-       EINA_LIST_FOREACH(event_list, l, item) {
-               if (item && item->cs) {
-                       if (p->searchtext && 0 < strlen(p->searchtext)) {
-                               summary = CALENDAR_SVC_STRUCT_GET_STR(item->cs, CAL_VALUE_TXT_SUMMARY);
+       edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->ly), "searchbar,show", "prog");
 
-                               if (summary && __cal_list_ug_strstr(summary, p->searchtext)) {
-                                       it = elm_genlist_item_append(p->genlist, &itc, item, NULL, ELM_GENLIST_ITEM_NONE, __cal_list_ug_genlist_item_select_callback, item);
-                                       c_retm_if(!it, "elm_genlist_item_append is failed");
+       elm_object_part_content_set(p->ly, "searchbar", searchbar);
 
-                                       if (item && item->checked)
-                                               p->num_check++;
+       p->searchbar = searchbar;
+}
 
-                                       p->genlist_count++;
-                               }
+static void __cal_list_ug_select_all_mouse_up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       c_retm_if(!data, "data is null");
+       cal_list_ug_data *p = data;
 
-                       } else {
+       Evas_Event_Mouse_Up *ev = event_info;
+       if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+               return;
 
-                               if (item && item->checked)
-                                       p->num_check++;
+       if (p->added_event_count <= 0) {
+               return;
+       }
+       elm_check_state_set(p->select_all_checkbox, !elm_check_state_get(p->select_all_checkbox));
 
-                               it = elm_genlist_item_append(p->genlist, &itc, item, NULL, ELM_GENLIST_ITEM_NONE, __cal_list_ug_genlist_item_select_callback, item);
-                               c_retm_if(!it, "elm_genlist_item_append is failed");
+       __cal_list_ug_update_all_checkbox(p);
+}
 
-                               p->genlist_count++;
-                       }
-               }
+static void __cal_list_ug_select_all_changed_callback(void *data, Evas_Object *obj, void *event_info)
+{
+       c_retm_if(!obj, "obj is null");
 
-               p->offset++;
+       cal_list_ug_data* p = data;
+       c_retm_if(!p, "p is null");
+       if (p->added_event_count <= 0) {
+               return;
        }
+
+       __cal_list_ug_update_all_checkbox(p);
 }
 
-static void __cal_list_ug_append_genlist(cal_list_ug_data *p)
+static void __cal_list_ug_create_box(cal_list_ug_data *p)
 {
        CAL_FN_START;
 
-       c_retm_if(!p, "p is null");
-       c_ret_if(p->event_list <= 0);
-
-       Eina_List *l = NULL;
-       cal_list_ug_item_data *item = NULL;
-       Elm_Object_Item *it = NULL;
-       const char* summary = NULL;
-       p->genlist_count = 0;
+       c_ret_if(!p);
+       c_ret_if(!p->conformant);
 
-       EINA_LIST_FOREACH(p->event_list, l, item) {
-               if (item && item->cs) {
-                       if (p->searchtext && 0 < strlen(p->searchtext)) {
-                               summary = CALENDAR_SVC_STRUCT_GET_STR(item->cs, CAL_VALUE_TXT_SUMMARY);
+       if (p->box)
+               return;
 
-                               if (summary && __cal_list_ug_strstr(summary, p->searchtext)) {
-                                       it = elm_genlist_item_append(p->genlist, &itc, item, NULL, ELM_GENLIST_ITEM_NONE, __cal_list_ug_genlist_item_select_callback, item);
-                                       c_retm_if(!it, "elm_genlist_item_append is failed");
-                                       if (item && item->checked)
-                                               p->num_check++;
+       Evas_Object *box = elm_box_add(p->conformant);
+       c_ret_if(!box);
 
-                                       p->genlist_count++;
-                               }
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_content_set(p->conformant, box);
+       p->box = box;
+}
 
-                       } else {
+static void __cal_list_ug_create_select_all(cal_list_ug_data* p)
+{
+       CAL_FN_START;
 
-                               if (item && item->checked)
-                                       p->num_check++;
+       c_ret_if(!p);
+       c_ret_if(!p->box);
 
-                               it = elm_genlist_item_append(p->genlist, &itc, item, NULL, ELM_GENLIST_ITEM_NONE, __cal_list_ug_genlist_item_select_callback, item);
-                               c_retm_if(!it, "elm_genlist_item_append is failed");
+       if (p->select_all)
+               return;
 
-                               p->genlist_count++;
-                       }
+       Evas_Object *select_all = elm_layout_add(p->box);
+       c_ret_if(!select_all);
 
-               }
+       elm_layout_theme_set(select_all, "genlist", "item", "select_all/default");
+       evas_object_size_hint_weight_set(select_all, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+       evas_object_size_hint_align_set(select_all, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_event_callback_add(select_all, EVAS_CALLBACK_MOUSE_UP, __cal_list_ug_select_all_mouse_up_callback, p);
 
-               p->offset++;
+       Evas_Object* checkbox = elm_check_add(select_all);
+       c_ret_if(!checkbox);
 
-       }
+       evas_object_smart_callback_add(checkbox, "changed", __cal_list_ug_select_all_changed_callback, p);
+       evas_object_propagate_events_set(checkbox, EINA_FALSE);
 
-       if (p->genlist_count == p->num_check)
-               elm_check_state_set(p->select_all_check, EINA_TRUE);
-       else
-               elm_check_state_set(p->select_all_check, EINA_FALSE);
+       elm_object_part_content_set(select_all, "elm.icon", checkbox);
+       evas_object_data_set(checkbox, "layout", p->select_all);
+       elm_object_part_text_set(select_all, "elm.text", S_("IDS_COM_BODY_SELECT_ALL"));
+       elm_box_pack_start(p->box, select_all);
+       evas_object_show(select_all);
 
-       if (p->num_check <= 0) {
-               evas_object_hide(p->notify);
-               elm_object_item_disabled_set(p->bt, EINA_TRUE);
-       } else
-               elm_object_item_disabled_set(p->bt, EINA_FALSE);
+       p->select_all = select_all;
+       p->select_all_checkbox = checkbox;
 }
 
-static void __cal_list_ug_create_searchbar(cal_list_ug_data *p)
+static void __cal_list_ug_update_event_list_with_keyword(cal_list_ug_data *p)
 {
-       c_retm_if(!p, "priv is null.");
-       c_retm_if(!p->ly, "p->ly is null.");
+       c_ret_if(!p);
 
-       Evas_Object *searchbar = cal_util_add_searchbar(p->ly, NULL, NULL, EINA_TRUE);
-       c_retm_if(!searchbar, "cal_util_add_searchbar() returned null.");
+       int search_field = CALS_SEARCH_FIELD_NONE;
+               search_field |= CALS_SEARCH_FIELD_SUMMARY;
+               search_field |= CALS_SEARCH_FIELD_LOCATION;
+               search_field |= CALS_SEARCH_FIELD_ATTENDEE;
+               search_field |= CALS_SEARCH_FIELD_DESCRIPTION;
 
-       Evas_Object *en = elm_object_part_content_get(searchbar, "elm.swallow.content");
-       c_retm_if(!en, "elm_object_part_content_get returned null.");
+       if (p->ugd->is_event)
+               p->search_list = CALENDAR_SVC_EVENT_SEARCH(search_field, p->searchtext);
+       else
+               p->search_list = CALENDAR_SVC_TODO_SEARCH(search_field, p->searchtext);
+}
 
-       elm_entry_input_panel_layout_set(en, ELM_INPUT_PANEL_LAYOUT_NORMAL);
-       elm_entry_markup_filter_append(en, elm_entry_filter_limit_size, &_limit_20char);
+static void __cal_list_ug_update_event_list(cal_list_ug_data *p)
+{
+       c_ret_if(!p);
 
-       evas_object_size_hint_weight_set(searchbar, EVAS_HINT_EXPAND, 0.1);
-       evas_object_size_hint_align_set(searchbar, EVAS_HINT_FILL, 0.6);
+       p->checked_event_count = 0;
 
-       evas_object_smart_callback_add(en, "changed", __cal_list_ug_searchbar_entry_changed_callback, p);
-       evas_object_smart_callback_add(en, "unfocused", __cal_list_ug_searchbar_entry_unfocused_callback, p);
-       evas_object_smart_callback_add(searchbar, "clicked", __cal_list_ug_searchbar_clicked_callback, p);
-       evas_object_smart_callback_add(searchbar, "cancel,clicked", __cal_list_ug_cancel_button_callback, p);
+       p->added_event_count = 0;
 
-       evas_object_show(searchbar);
+       CALENDAR_SVC_FREE_CS_LIST(&p->event_list);
 
-       elm_object_part_content_set(p->ly, "searchbar", searchbar);
-       p->searchbar = searchbar;
+       if (CAL_STRLEN(p->searchtext))
+               __cal_list_ug_update_event_list_with_keyword(p);
+       else
+               __cal_list_ug_get_event_list(p);
 }
 
-static void __cal_list_ug_select_all_mouse_up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info)
+static void __cal_list_ug_create_conformant(cal_list_ug_data *p)
 {
-       c_retm_if(!data, "data is null");
-       cal_list_ug_data *p = data;
+       CAL_FN_START;
 
-       Evas_Event_Mouse_Up *ev = event_info;
-       if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
-               return;
+       c_ret_if(!p);
+       c_ret_if(!p->ly);
 
-       if (p->genlist_count <= 0) {
+       if (p->conformant)
                return;
-       }
-       elm_check_state_set(p->select_all_check, !elm_check_state_get(p->select_all_check));
 
-       __cal_list_ug_update_all_check(p);
-}
+       Evas_Object *conformant = elm_conformant_add(p->ly);
+       c_ret_if(!conformant);
 
-static void __cal_list_ug_select_all_changed_callback(void *data, Evas_Object *obj, void *event_info)
-{
-       c_retm_if(!obj, "obj is null");
+       elm_object_style_set(conformant, "internal_layout");
+       evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 
-       cal_list_ug_data* p = data;
-       c_retm_if(!p, "p is null");
-       if (p->genlist_count <= 0) {
-               return;
-       }
+       elm_object_part_content_set(p->ly, "sw", conformant);
 
-       __cal_list_ug_update_all_check(p);
+       p->conformant = conformant;
 }
 
-static void __cal_list_ug_create_select_all(cal_list_ug_data* p)
+static void __cal_list_ug_create_genlist(cal_list_ug_data *p)
 {
        CAL_FN_START;
 
-       c_retm_if(!p, "p is null");
-       c_retm_if(!p->ly, "p->lu is null");
-       c_retm_if(!p->box, "p->box is null");
+       c_ret_if(!p);
+       c_ret_if(!p->conformant);
+
+       if (p->genlist) {
 
-       Evas_Object* layout = p->select_all_layout = elm_layout_add(p->box);
-       c_retm_if(!layout, "elm_layout_add returned null");
+               elm_genlist_clear(p->genlist);
 
-       elm_layout_theme_set(layout, "genlist", "item", "select_all/default");
-       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
-       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, __cal_list_ug_select_all_mouse_up_callback, p);
+               return;
+       }
 
-       Evas_Object* check = p->select_all_check = elm_check_add(p->select_all_layout);
+       Evas_Object *genlist = elm_genlist_add(p->box);
+       c_ret_if(!genlist);
 
-       c_retm_if(!check, "elm_check_add returned null");
-       evas_object_smart_callback_add(check, "changed", __cal_list_ug_select_all_changed_callback, p);
-       evas_object_propagate_events_set(check, EINA_FALSE);
+       if (p->ugd->is_multiple)
+               elm_genlist_decorate_mode_set(genlist, EINA_TRUE);
 
-       elm_object_part_content_set(layout, "elm.icon", check);
-       evas_object_data_set(p->select_all_check, "layout", p->select_all_layout);
-       elm_object_part_text_set(p->select_all_layout, "elm.text", S_("IDS_COM_BODY_SELECT_ALL"));
-       elm_box_pack_start(p->box, p->select_all_layout);
-       evas_object_show(p->select_all_layout);
+       evas_object_data_set(genlist, "priv", p);
+       elm_genlist_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_OFF);
+       elm_genlist_block_count_set(genlist, 20);
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       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_show(genlist);
+       elm_box_pack_end(p->box, genlist);
+
+       p->genlist = genlist;
 }
 
-static void __cal_list_ug_update_event_list(cal_list_ug_data *p)
+static void __cal_list_ug_create_no_contents(cal_list_ug_data *p)
 {
-       __cal_list_ug_clear_event_list(p);
+       CAL_FN_START;
+
+       c_ret_if(!p);
+       c_ret_if(!p->ly);
+
+       p->no_contents = cal_util_add_nocontents(p->ly, C_("IDS_CLD_BODY_NO_EVENTS"));
+       c_ret_if(!p->no_contents);
 
-       p->num_check = 0;
-       p->offset = 0;
+       elm_object_part_content_set(p->ly, "sw", p->no_contents);
 
-       __cal_list_ug_get_event_list(p);
+       evas_object_show(p->no_contents);
 }
 
 static void __cal_list_ug_update(cal_list_ug_data *p)
 {
        CAL_FN_START;
 
-       c_retm_if(!p, "p is null");
+       c_ret_if(!p);
 
-       if (p->idler) {
-               ecore_idler_del(p->idler);
-               p->idler = NULL;
-       }
+       __cal_list_ug_delete_idler(p);
 
        __cal_list_ug_update_event_list(p);
 
-       if (p->event_list && 0 < eina_list_count(p->event_list)) {
-               p->no_contents = NULL;
+       if (p->event_list && eina_list_count(p->event_list)) {
 
-               edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->ly), "searchbar,show", "prog");
+               __cal_list_ug_delete_no_contents(p);
 
-               if (!p->conformant) {
-                       Evas_Object *conformant = elm_conformant_add(p->ly);
-                       c_retm_if(!conformant, "conformant is null");
+               __cal_list_ug_create_conformant(p);
 
-                       elm_object_style_set(conformant, "internal_layout");
-                       evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-                       elm_object_part_content_set(p->ly, "sw", conformant);
+               __cal_list_ug_create_searchbar(p);
 
-                       p->conformant = conformant;
-               }
+               __cal_list_ug_create_box(p);
 
-               __cal_list_ug_create_searchbar(p);
+               __cal_list_ug_create_select_all(p);
 
-               if (!p->box) {
-                       Evas_Object *box = elm_box_add(p->conformant);
-                       c_retm_if(!box, "box is null");
+               __cal_list_ug_create_genlist(p);
 
-                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               __cal_list_ug_add_event_to_genlist(p);
 
-                       elm_object_content_set(p->conformant, box);
+               __cal_list_ug_add_idler(p);
 
-                       p->box = box;
-               }
+       } else {
 
-               __cal_list_ug_create_select_all(p);
+               __cal_list_ug_delete_conformant(p);
 
-               if (!p->genlist)
-               {
-                       Evas_Object *genlist = elm_genlist_add(p->ly);
-                       c_retm_if(!genlist, "genlist is null");
-
-                       elm_genlist_decorate_mode_set(genlist, EINA_TRUE);
-                       evas_object_data_set(genlist, "priv", p);
-                       elm_genlist_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_OFF);
-                       elm_genlist_block_count_set(genlist, 20);
-                       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
-                       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_show(genlist);
-                       elm_box_pack_end(p->box, genlist);
-
-                       p->genlist = genlist;
-               }
-               else
-                       elm_genlist_clear(p->genlist);
+               p->searchbar = NULL;
 
-               __cal_list_ug_append_genlist(p);
-       }
-       else {
-               p->conformant = NULL;
                p->box = NULL;
-               p->select_all_layout = NULL;
-               p->genlist = NULL;
 
-               if (p->notify)
-                       evas_object_hide(p->notify);
+               p->select_all = NULL;
 
-               edje_object_signal_emit(CAL_UTIL_GET_EDJ_DATA(p->ly), "searchbar,hide", "prog");
+               p->select_all_checkbox = NULL;
 
-               if (!p->no_contents) {
-                       Evas_Object *no_contents = cal_util_add_nocontents(p->ly, C_("IDS_CLD_BODY_NO_EVENTS"));
-                       c_retm_if(!no_contents, "no_contents is null.");
+               p->genlist = NULL;
 
-                       elm_object_part_content_set(p->ly, "sw", no_contents);
+               __cal_list_ug_create_no_contents(p);
 
-                       p->no_contents = no_contents;
-               }
+               if (p->selection_info)
+                       evas_object_hide(p->selection_info);
 
                elm_object_item_disabled_set(p->bt, EINA_TRUE);
 
        }
-
-       CAL_FN_END;
 }
 
-static void __cal_list_ug_update_all_check(cal_list_ug_data* p)
+static void __cal_list_ug_update_all_checkbox(cal_list_ug_data* p)
 {
-       c_retm_if(!p, "p is null");
-       c_retm_if(!p->genlist, "p is null");
+       c_ret_if(!p);
+       c_ret_if(!p->select_all_checkbox);
+       c_ret_if(!p->genlist);
+
+       if (elm_check_state_get(p->select_all_checkbox)) {
 
-       Elm_Object_Item *it;
-       Eina_List *realized_list, *l;
-       cal_list_ug_item_data* item_data;
+               p->checked_event_count = p->added_event_count;
 
-       if (elm_check_state_get(p->select_all_check)) {
-               p->num_check = p->genlist_count;
                elm_object_item_disabled_set(p->bt, EINA_FALSE);
-               __cal_list_ug_add_small_info(p, p->genlist_count);
+
+               __cal_list_ug_update_selection_info(p, p->added_event_count);
+
        } else {
-               p->num_check = 0;
+
+               p->checked_event_count = 0;
+
                elm_object_item_disabled_set(p->bt, EINA_TRUE);
-               evas_object_hide(p->notify);
+
+               evas_object_hide(p->selection_info);
        }
 
-       it = elm_genlist_first_item_get(p->genlist);
+       Elm_Object_Item *it = elm_genlist_first_item_get(p->genlist);
+       c_ret_if(!it);
+
        while (it) {
-               item_data = elm_object_item_data_get(it);
-               if (item_data) {
-                       item_data->checked = elm_check_state_get(p->select_all_check);
-               }
+
+               cal_list_ug_item_data* item_data = elm_object_item_data_get(it);
+               c_ret_if(!item_data);
+
+               item_data->checked = elm_check_state_get(p->select_all_checkbox);
+
                it = elm_genlist_item_next_get(it);
        }
 
-       realized_list = elm_genlist_realized_items_get(p->genlist);
-       EINA_LIST_FOREACH(realized_list, l, it)
-       {
-               if (it) {
-                       elm_genlist_item_update(it);
-               }
-       }
+       __cal_list_ug_update_realized_genlist_item(p);
+
 }
 
 static Evas_Object* __cal_list_ug_create_layout(Evas_Object *parent, struct ug_data *ugd)
@@ -909,14 +873,12 @@ static Evas_Object* __cal_list_ug_create_layout(Evas_Object *parent, struct ug_d
        p->ugd = ugd;
        p->parent = parent;
        p->searchtext = NULL;
-       p->notify_layout = NULL;
-       p->notify = NULL;
+       p->selection_info_layout = NULL;
+       p->selection_info = NULL;
        p->navi_item = NULL;
-       p->genlist_count = 0;
+       p->added_event_count = 0;
        p->bg = NULL;
 
-       is_ug_list_view_destory = EINA_FALSE;
-
        Evas_Object *ly = cal_util_add_layout(parent, p->name);
        if (!ly)
        {
@@ -970,9 +932,10 @@ static void __cal_list_ug_get_start_time_text(cal_struct *cs, char *buf, int sz)
        int allday;
        time_t t;
 
-       allday = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_ALL_DAY_EVENT);
+       if (CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_TYPE) == CALS_TIME_LOCALTIME)
+               allday = 1;
 
-       t = mktime(CALENDAR_SVC_STRUCT_GET_TM(cs, CAL_VALUE_GMT_START_DATE_TIME, CAL_TZ_FLAG_LOCAL));
+       cal_util_convert_lli_to_time_t(NULL, CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTSTART_UTIME), &t);
 
        __cal_list_ug_get_time_text(t, allday, buf, sz);
 }
@@ -982,9 +945,10 @@ static void __cal_list_ug_get_end_time_text(cal_struct *cs, char *buf, int sz)
        int allday;
        time_t t;
 
-       allday = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_ALL_DAY_EVENT);
+       if (CALENDAR_SVC_STRUCT_GET_INT(cs, CALS_VALUE_INT_DTSTART_TYPE) == CALS_TIME_LOCALTIME)
+               allday = 1;
 
-       t = mktime(CALENDAR_SVC_STRUCT_GET_TM(cs, CAL_VALUE_GMT_END_DATE_TIME, CAL_TZ_FLAG_LOCAL));
+       cal_util_convert_lli_to_time_t(NULL, CALENDAR_SVC_STRUCT_GET_LLI(cs, CALS_VALUE_LLI_DTSTART_UTIME), &t);
 
        __cal_list_ug_get_time_text(t, allday, buf, sz);
 }
@@ -999,7 +963,8 @@ static void __cal_list_ug_get_message_content(cal_struct *cs, char *body , int n
        char *location = NULL;
        char start[1024] = "Start\n";
        char end[1024] = "End\n";
-       char buf[1024] = {0};
+       char buf_start[1024] = {0};
+       char buf_end[1024] = {0};
 
        content = _("Check this schedule,please");
 
@@ -1011,50 +976,76 @@ static void __cal_list_ug_get_message_content(cal_struct *cs, char *body , int n
        if (!location)
                location = _("No location");
 
-       __cal_list_ug_get_start_time_text(cs, buf, sizeof(buf));
-       CAL_STRNCAT(start,buf,sizeof start)
+       __cal_list_ug_get_start_time_text(cs, buf_start, sizeof(buf_start));
 
-               __cal_list_ug_get_end_time_text(cs, buf, sizeof(buf));
-       CAL_STRNCAT(end,buf,sizeof end)
+       __cal_list_ug_get_end_time_text(cs, buf_end, sizeof(buf_end));
 
-       snprintf(body, nsize, "%s\n%s\n%s\n%s\n%s",content, title, location, start, end);
+       snprintf(body, nsize, "%s\n%s\n%s\n%s%s\n%s%s",content, title, location, start, buf_start, end, buf_end);
 }
 
 
-static void __cal_list_ug_add_bundle_event(bundle *b, cal_struct *cs, int idx)
+static void __cal_list_ug_add_bundle_event(service_h b, cal_struct *cs, int idx)
 {
        char txt_content[1024*5] = {0};
 
        __cal_list_ug_get_message_content(cs, txt_content,sizeof txt_content);
 
-       bundle_add(b, "BODY", txt_content);
+       int r = service_add_extra_data(b, "BODY", txt_content);
+       c_ret_if(r != SERVICE_ERROR_NONE);
 }
 
-static void __cal_list_ug_add_bundle_vcs(bundle *b, cal_struct *cs, int idx, const char *caller)
+static void __cal_list_ug_add_bundle_vcs(service_h b, cal_struct *cs, int idx)
 {
+       c_retm_if(!b, "b is null");
+       c_retm_if(!cs, "cs is null");
+
        int cid;
        int r;
-       char buf[FILENAME_MAX];
-       char path[FILENAME_MAX];
+       char buf[FILENAME_MAX] = {0};
+       char path[FILENAME_MAX] = {0};
+       char *vcs_data = NULL;
+       int fd;
+       GList *schedules = NULL;
 
        cid = CALENDAR_SVC_STRUCT_GET_INT(cs, CAL_VALUE_INT_INDEX);
+       c_retm_if(cid < 0, "CALENDAR_SVC_STRUCT_GET_INT return error!");
+
+       schedules = g_list_append(schedules, cs);
 
        snprintf(buf, sizeof(buf), "vfile%d", idx);
        snprintf(path, sizeof(path), "%s/Calendar_%d.vcs", VFILE_PATH, cid);
 
-       r = CALENDAR_SVC_UTIL_SAVE_VCS_BY_INDEX(cid, path);
-       if (r == CAL_SUCCESS)
-               bundle_add(b, buf, path);
+       r = CALENDAR_SVC_WRITE_SCHEDULES(schedules, &vcs_data);
+       c_retm_if(r != CAL_SUCCESS, "CALENDAR_SVC_WRITE_SCHEDULES return error(%d)", r);
+
+       fd = open(path, O_WRONLY|O_CREAT|O_TRUNC, 0644);
+       c_retm_if(fd < 0, "Failed to open file %s.", path);
+
+       if (vcs_data) {
+               r = write(fd, vcs_data, strlen(vcs_data));
+               c_warn_if(r == -1, "Fail to write data to file");
+       }
+
+       if (vcs_data) {
+               free(vcs_data);
+               vcs_data = NULL;
+       }
+
+       fsync(fd);
+       close(fd);
+
+       r = service_add_extra_data(b, buf, path);
+       c_ret_if(r != SERVICE_ERROR_NONE);
 }
 
-static void __cal_list_ug_add_bundle(bundle *b, cal_struct *cs, int idx, struct ug_data *ugd)
+static void __cal_list_ug_add_bundle(service_h b, cal_struct *cs, int idx, struct ug_data *ugd)
 {
        switch (ugd->mode) {
        case _MODE_GET_EVT:
                __cal_list_ug_add_bundle_event(b, cs, idx);
                break;
        case _MODE_GET_VCS:
-               __cal_list_ug_add_bundle_vcs(b, cs, idx, ugd->caller);
+               __cal_list_ug_add_bundle_vcs(b, cs, idx);
                break;
        default:
                // do nothing
@@ -1062,31 +1053,43 @@ static void __cal_list_ug_add_bundle(bundle *b, cal_struct *cs, int idx, struct
        }
 }
 
-static bundle* __cal_list_ug_make_bundle(cal_list_ug_data *p, struct ug_data *ugd)
+static service_h __cal_list_ug_make_bundle(cal_list_ug_data *p, struct ug_data *ugd)
 {
-       c_retvm_if(!p, NULL, "p is null");
-       c_retvm_if(!ugd, NULL, "ugd is null");
+       c_retv_if(!p, NULL);
+       c_retv_if(!ugd, NULL);
 
-       bundle *b = NULL;
-       Eina_List *l;
-       cal_list_ug_item_data* item_data;
        int count = 0;
        char buf[32] = {'\0'};
 
-       b = bundle_create();
-       c_retvm_if(!b, NULL, "bundle_create returned null");
+       service_h b;
+       int r = service_create(&b);
+       c_retv_if(r != SERVICE_ERROR_NONE, NULL);
 
-       EINA_LIST_FOREACH(p->event_list, l, item_data)
-       {
-               if (item_data && item_data->checked)
-               {
-                       count++;
-                       __cal_list_ug_add_bundle(b, item_data->cs, count, ugd);
-               }
+       Elm_Object_Item* item = elm_genlist_first_item_get(p->genlist);
+       c_retv_if(!item, NULL);
+
+       while (item) {
+
+               cal_list_ug_item_data* item_data = elm_object_item_data_get(item);
+               c_retv_if(!item_data, NULL);
+
+               if (item_data->checked)
+                       __cal_list_ug_add_bundle(b, item_data->cs, ++count, ugd);
+
+               item = elm_genlist_item_next_get(item);
        }
 
        snprintf(buf, sizeof(buf), "%d", count);
-       bundle_add(b, "count", buf);
+
+       r = service_add_extra_data(b, "count", buf);
+       c_retv_if(r != SERVICE_ERROR_NONE, b);
+
+       if (ugd->is_event)
+               r = service_add_extra_data(b, "itemType", "event");
+       else
+               r = service_add_extra_data(b, "itemType", "todo");
+
+       c_retv_if(r != SERVICE_ERROR_NONE, b);
 
        return b;
 }
@@ -1098,7 +1101,7 @@ static void __cal_list_ug_attach(void *data, Evas_Object *obj, void *ei)
        Evas_Object *ly = data;
        cal_list_ug_data *p;
        struct ug_data *ugd;
-       bundle *b;
+       service_h b;
 
        p = CAL_UTIL_GET_PRIV_DATA(ly);
        c_retm_if(!p, "p is null");
@@ -1121,7 +1124,7 @@ static void __cal_list_ug_attach(void *data, Evas_Object *obj, void *ei)
        if (b)
        {
                ug_send_result(ugd->ug, b);
-               bundle_free(b);
+               service_destroy(b);
        }
 
        ug_destroy_me(ugd->ug);
@@ -1138,14 +1141,15 @@ static void __cal_list_ug_add_controlbar( struct ug_data *ugd, Evas_Object *ly,
        cbar = cal_util_add_controlbar(ugd->nv);
        c_retm_if(!cbar, "cal_util_add_controlbar returned null");
 
-       elm_toolbar_item_append(cbar, NULL, NULL, NULL, NULL);
-
        attach_button = elm_toolbar_item_append(cbar, NULL, S_("IDS_COM_POP_ATTACH"), __cal_list_ug_attach, ly);
        c_retm_if(!attach_button, "elm_toolbar_item_append returned null");
        p->bt = attach_button;
 
        elm_object_item_disabled_set(p->bt, EINA_TRUE);
 
+       Elm_Object_Item *item = elm_toolbar_item_append(cbar, NULL, NULL, NULL, NULL);
+       elm_object_item_disabled_set(item, EINA_TRUE);
+
        is_hour24 = ugd->is_hour24;
 
        navi_item = elm_naviframe_item_push(ugd->nv, title, NULL, NULL, ly, NULL);
@@ -1175,43 +1179,34 @@ static void __cal_list_ug_searchbar_entry_changed_callback(void *data, Evas_Obje
        CAL_FN_START;
 
        cal_list_ug_data *p = data;
-       c_retm_if(!p, "priv is null.");
+       c_ret_if(!p);
 
        p->searchtext = elm_object_text_get(elm_object_part_content_get(p->searchbar, "elm.swallow.content"));
 
-       elm_genlist_clear(p->genlist);
-
-       if (!p->genlist) {
-               p->genlist = elm_genlist_add(p->parent);
-               c_retm_if(!p->genlist, "p->genlist is null");
-               elm_genlist_decorate_mode_set(p->genlist, EINA_TRUE);
-               evas_object_data_set(p->genlist, "priv", p);
-       }
+// TODO: Show search result
+       __cal_list_ug_update(p);
 
-       p->num_check = 0;
-       p->offset = 0;
-       __cal_list_ug_append_genlist(p);
-       if (p->genlist_count == p->num_check) {
-               if (p->num_check == 0) {
-                       elm_check_state_set(p->select_all_check,EINA_FALSE);
-                       elm_object_disabled_set(p->select_all_check,EINA_TRUE);
+       if (p->added_event_count == p->checked_event_count) {
+               if (p->checked_event_count == 0) {
+                       elm_check_state_set(p->select_all_checkbox,EINA_FALSE);
+                       elm_object_disabled_set(p->select_all_checkbox,EINA_TRUE);
                } else {
-                       elm_check_state_set(p->select_all_check,EINA_TRUE);
+                       elm_check_state_set(p->select_all_checkbox,EINA_TRUE);
                }
        } else {
-               elm_check_state_set(p->select_all_check,EINA_FALSE);
+               elm_check_state_set(p->select_all_checkbox,EINA_FALSE);
        }
 
-       if (p->genlist_count > 0) {
-               elm_object_disabled_set(p->select_all_check,EINA_FALSE);
+       if (p->added_event_count > 0) {
+               elm_object_disabled_set(p->select_all_checkbox,EINA_FALSE);
        }
 
-       if (0 < p->num_check)
+       if (0 < p->checked_event_count)
                elm_object_item_disabled_set(p->bt, EINA_FALSE);
        else
                elm_object_item_disabled_set(p->bt, EINA_TRUE);
 
-       __cal_list_ug_add_small_info(p,p->num_check);
+       __cal_list_ug_update_selection_info(p,p->checked_event_count);
 }
 
 static void __cal_list_ug_cancel_button_callback(void *data, Evas_Object *obj, void *event_info)
@@ -1232,27 +1227,27 @@ static void __cal_list_ug_cancel_button_callback(void *data, Evas_Object *obj, v
        if (imf_context)
                ecore_imf_context_input_panel_hide(imf_context);
 
-       if (0 < p->num_check)
+       if (0 < p->checked_event_count)
                elm_object_item_disabled_set(p->bt, EINA_FALSE);
        else
                elm_object_item_disabled_set(p->bt, EINA_TRUE);
 
-       p->num_check = 0;
+       p->checked_event_count = 0;
 
        EINA_LIST_FOREACH(p->event_list, l, item) {
                if (item != NULL && item->checked) {
-                       p->num_check++;
+                       p->checked_event_count++;
                }
        }
 
-       if (p->genlist_count == p->num_check && p->num_check != 0) {
-               elm_check_state_set(p->select_all_check, EINA_TRUE);
+       if (p->added_event_count == p->checked_event_count && p->checked_event_count != 0) {
+               elm_check_state_set(p->select_all_checkbox, EINA_TRUE);
        } else {
-               elm_check_state_set(p->select_all_check, EINA_FALSE);
+               elm_check_state_set(p->select_all_checkbox, EINA_FALSE);
        }
-       elm_object_disabled_set(p->select_all_check,EINA_FALSE);
+       elm_object_disabled_set(p->select_all_checkbox,EINA_FALSE);
 
-       __cal_list_ug_add_small_info(p,p->num_check);
+       __cal_list_ug_update_selection_info(p,p->checked_event_count);
 }
 
 static void __cal_list_ug_searchbar_entry_unfocused_callback(void *data, Evas_Object *obj, void *event_info)
@@ -1260,13 +1255,13 @@ static void __cal_list_ug_searchbar_entry_unfocused_callback(void *data, Evas_Ob
        c_retm_if(!data, "data is null.");
        cal_list_ug_data *p = data;
 
-       if (p->num_check <= 0) {
+       if (p->checked_event_count <= 0) {
                elm_object_item_disabled_set(p->bt, EINA_TRUE);
        } else {
                elm_object_item_disabled_set(p->bt, EINA_FALSE);
        }
 
-       __cal_list_ug_add_small_info(p,p->num_check);
+       __cal_list_ug_update_selection_info(p,p->checked_event_count);
 }
 
 static void __cal_list_ug_searchbar_clicked_callback(void *data, Evas_Object *obj, void *event_info)