summaryrefslogtreecommitdiff
path: root/src/ps_makeupviews.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ps_makeupviews.cpp')
-rwxr-xr-xsrc/ps_makeupviews.cpp1085
1 files changed, 798 insertions, 287 deletions
diff --git a/src/ps_makeupviews.cpp b/src/ps_makeupviews.cpp
index a46413d..26eee50 100755
--- a/src/ps_makeupviews.cpp
+++ b/src/ps_makeupviews.cpp
@@ -1,12 +1,12 @@
/*
* Copyright 2012 Samsung Electronics Co., Ltd
- *
+ *
* Licensed under the Flora License, Version 1.0 (the License);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.tizenopensource.org/license
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -15,72 +15,155 @@
*/
-
-
-
-
#include "smartsearch.h"
#include "ps_searcher.h"
#include "ps_app_interface.h"
+#include <contacts-svc.h>
+#include <calendar-svc-provider.h>
+#include <memo-db.h>
+#include <media_content.h>
+#include <msg_types.h>
+#include <msg_storage.h>
+#include <msg.h>
+
+struct search_thread_data {
+ struct appdata *ad;
+ char *keyword;
+ int is_search_result;
+};
+
+struct search_genlist_item_info* search_add_genlist_item(int type,
+ struct search_content_object *obj, Elm_Genlist_Item_Class *itc_style, void *data,
+ Elm_Object_Item *parent)
+{
+ struct search_genlist_item_info *item = (struct search_genlist_item_info *)
+ calloc(1,
+ sizeof(struct search_genlist_item_info));
+
+ if (item) {
+ item->type = type;
+ item->obj = obj;
+ item->itc_style = itc_style;
+ item->data = data;
+ item->parent = parent;
+ }
-static char *__search_get_phone_category_name(int type)
+ return item;
+}
+
+static void
+ecore_exe_pipe_cb(void *data, void *buf, unsigned int size)
{
SEARCH_FUNC_START;
- char* name = NULL;
- switch(type) {
-
- case SEARCH_TYPE_PHONE_CONTACTS:
- {
- name = dgettext("sys_string", "IDS_COM_BODY_CONTACTS");
- }
- break;
- case SEARCH_TYPE_PHONE_MSG:
- {
- name = dgettext("sys_string", "IDS_COM_BODY_MESSAGES");
- }
+ struct appdata *ad = (struct appdata *)data;
+ struct search_pipe_data *pipe_data = *((struct search_pipe_data**)buf);
+
+ struct search_content_object *obj = NULL;
+ struct search_genlist_item_info *item = NULL;
+ struct search_genlist_info *result_info = pipe_data->result_list;
+
+ int cmd = pipe_data->cmd;
+
+ SEARCH_DEBUG_LOG("Pipe Command : %d ret : %d", cmd, pipe_data->search_ret);
+
+ switch (cmd) {
+ case SEARCH_PIPE_CMD_CLEAR_GENLIST:
+ elm_genlist_clear(ad->search_gl);
break;
- case SEARCH_TYPE_PHONE_EMAIL:
- {
- name = dgettext("sys_string", "IDS_COM_BODY_EMAIL");
- }
+ case SEARCH_PIPE_CMD_SET_LAYOUT:
+ if (pipe_data->search_ret == SEARCH_RET_SEARCH_SUCCESS)
+ search_layout_set_search_list(ad);
+ else
+ search_layout_set_search_no_result(ad);
break;
- case SEARCH_TYPE_PHONE_IMAGES:
- {
- name = dgettext("sys_string", "IDS_COM_BODY_IMAGES");
+ case SEARCH_PIPE_CMD_ADD_GENLIST_PHONE:
+ if (result_info) {
+ if (result_info->group) {
+ item = result_info->group;
+ obj = item->obj;
+
+ obj->gl_result_grp = elm_genlist_item_append(ad->search_gl,
+ item->itc_style,
+ item->data,
+ NULL,
+ ELM_GENLIST_ITEM_GROUP,
+ NULL,
+ NULL);
+ SEARCH_FREE(item);
+ }
+
+ if (result_info->itemlist) {
+ GList *node = g_list_first(result_info->itemlist);
+
+ while (node != NULL) {
+ item = (struct search_genlist_item_info *)node->data;
+ obj = item->obj;
+ if (item) {
+ elm_genlist_item_append(ad->search_gl,
+ item->itc_style,
+ item->data,
+ obj->gl_result_grp,
+ ELM_GENLIST_ITEM_NONE,
+ search_gl_phone_result_sel,
+ ad);
+ SEARCH_FREE(item);
+ }
+ node = g_list_next(node);
+ }
+ g_list_free(result_info->itemlist);
+ result_info->itemlist = NULL;
+ }
+
+ if (result_info->more) {
+ item = result_info->more;
+ obj = item->obj;
+ elm_genlist_item_append(ad->search_gl,
+ item->itc_style,
+ item->data,
+ obj->gl_result_grp,
+ ELM_GENLIST_ITEM_NONE,
+ search_gl_result_more_item_append_cb,
+ ad);
+ SEARCH_FREE(item);
+ }
+
+ SEARCH_FREE(result_info);
}
break;
- case SEARCH_TYPE_PHONE_MUSIC:
- {
- name = dgettext("sys_string", "IDS_COM_BODY_MUSIC");
}
- break;
- case SEARCH_TYPE_PHONE_VIDEO:
+
+ SEARCH_FREE(pipe_data);
+ SEARCH_FUNC_END;
+}
+
+static Evas_Object *__search_gl_content_get_search_item_type(void *data, Evas_Object *obj, const char *part)
{
- name = dgettext("sys_string", "IDS_COM_BODY_VIDEOS");
+ Evas_Object *icon = NULL;
+ int icon_size = 0;
+
+ struct search_item_sel *sel_mem_info = (struct search_item_sel *)data;
+
+ if (!SEARCH_STRCMP(part, "elm.icon") || !SEARCH_STRCMP(part, "elm.icon.1")) {
+ if (strlen(sel_mem_info->icon1_path) > 0 ) {
+ icon = elm_icon_add(obj);
+ icon_size = (int)(SEARCH_THUMBNAIL_SIZE * elm_scale_get());
+ elm_icon_prescale_set(icon, icon_size);
+ elm_icon_file_set(icon, sel_mem_info->icon1_path, NULL);
+ evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
}
- break;
- case SEARCH_TYPE_PHONE_CALENDAR:
- {
- name = dgettext("sys_string", "IDS_COM_BODY_CALENDAR");
+ } else if(!strcmp(part, "elm.icon.2")) {
+ if (strlen(sel_mem_info->icon2_path) > 0 ) {
+ icon = elm_icon_add(obj);
+ icon_size = (int)(SEARCH_ICON_SIZE * elm_scale_get());
+ elm_icon_prescale_set(icon, icon_size);
+ elm_icon_file_set(icon, sel_mem_info->icon2_path, NULL);
+ evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
}
- break;
- case SEARCH_TYPE_PHONE_MEMO:
- {
- name = dgettext("sys_string", "IDS_COM_BODY_MEMO");
}
- break;
- case SEARCH_TYPE_PHONE_MENU:
- {
- name = dgettext("sys_string", "IDS_COM_BODY_APPLICATIONS");
+ return icon;
}
- break;
- }
-
- return name;
-}
-
static Eina_Bool __search_gl_state_get(void *data, Evas_Object * obj,
const char *part)
@@ -88,7 +171,7 @@ static Eina_Bool __search_gl_state_get(void *data, Evas_Object * obj,
return EINA_FALSE;
}
-static char *__search_gl_label_get(void *data, Evas_Object * obj,
+static char *__search_gl_label_get_search_item_type(void *data, Evas_Object * obj,
const char *part)
{
if (data == NULL) {
@@ -97,7 +180,7 @@ static char *__search_gl_label_get(void *data, Evas_Object * obj,
char *buf;
struct search_item_sel *sel_mem_info = (struct search_item_sel *)data;
-
+
if (!SEARCH_STRCMP(part, "elm.text") || !SEARCH_STRCMP(part, "elm.text.1")) {
buf = g_strdup(sel_mem_info->main_buf);
} else if (!SEARCH_STRCMP(part, "elm.text.sub") || !SEARCH_STRCMP(part, "elm.text.2")) {
@@ -105,24 +188,32 @@ static char *__search_gl_label_get(void *data, Evas_Object * obj,
} else {
buf = NULL;
}
-
+
return buf;
}
-static char *__search_gl_label_get_title(void *data, Evas_Object * obj,
+static char *__search_gl_label_get_normal_type(void *data, Evas_Object * obj,
const char *part)
{
- SEARCH_FUNC_START;
-
- char* category_name = NULL;
-
- struct search_item_sel *sel_mem = (struct search_item_sel *)data;
+ char *title_string = (char*)data;
+ if(title_string)
+ return strdup(dgettext("sys_string", title_string));
+ else
+ return strdup("");
+}
- category_name = __search_get_phone_category_name(sel_mem->type);
+static char *__search_gl_label_get_group(void *data, Evas_Object * obj,
+ const char *part)
+{
+ struct search_content_object *object = (struct search_content_object*)data;
+ SEARCH_DEBUG_WARNING("%s %d", object->name, object->string_type);
+ if (object) {
+ if (object->string_type == SEARCH_STR_TYPE_APP_STRING)
+ return strdup(gettext(object->name));
+ else
+ return strdup(dgettext("sys_string", object->name));
+ }
- if(category_name)
- return strdup(category_name);
- else
return strdup("");
}
@@ -132,10 +223,16 @@ static char *__search_gl_label_get_more(void *data, Evas_Object * obj,
return strdup(gettext("IDS_SSEARCH_BODY_MORE_RESULTS"));
}
-static void __search_gl_del(void *data, Evas_Object * obj)
+static void __search_gl_del_grouptitle(void *data, Evas_Object * obj)
{
SEARCH_FUNC_START;
+ SEARCH_FUNC_END;
+ return;
+}
+
+static void __search_gl_del(void *data, Evas_Object * obj)
+{
struct search_item_sel *sel_mem_info = (struct search_item_sel *)data;
SEARCH_FREE(sel_mem_info);
@@ -143,6 +240,217 @@ static void __search_gl_del(void *data, Evas_Object * obj)
return;
}
+static void __search_gl_del_more_button(void *data, Evas_Object * obj)
+{
+ struct search_item_more_sel *sel_mem_more = (struct search_item_more_sel *)data;
+
+ SEARCH_FREE(sel_mem_more);
+
+ return;
+}
+
+int search_app_connect(void *data)
+{
+ SEARCH_FUNC_START;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ int rc = 0, conn_ret = 0;
+ int ret = SEARCH_RET_SUCCESS;
+ int i = 0;
+
+ for (i = 0; i < SEARCH_CONT_MAX ; ++i) {
+ switch (ad->result_obj[i].contents_type) {
+ case SEARCH_CONT_PHONE_CONTACTS:
+ {
+ if (ad->result_obj[i].visible == EINA_TRUE) {
+ rc = contacts_svc_connect();
+ if (rc != CTS_SUCCESS) {
+ SEARCH_DEBUG_WARNING("contacts svc connect fail : %d",rc);
+ }
+ } else {
+ rc = contacts_svc_disconnect();
+ if (rc != CTS_SUCCESS) {
+ SEARCH_DEBUG_WARNING("contacts svc disconnect fail : %d",rc);
+ }
+ }
+ }
+ break;
+
+ /* Contact-service should be conneted for display Message result.
+ Because We should display message with contact photo
+ if user have contact photo which have matched to tel-number of sender or receiver */
+ case SEARCH_CONT_PHONE_MSG:
+ {
+ msg_error_t err = MSG_SUCCESS;
+
+ if (ad->result_obj[i].visible == EINA_TRUE) {
+
+ /* Connect Contact-service if contact category status is invisible */
+ if (ad->result_obj[SEARCH_CONT_PHONE_CONTACTS].visible == EINA_FALSE) {
+ rc = contacts_svc_connect();
+ if (rc != CTS_SUCCESS) {
+ /* If we fail to connect contact-service, display message-app icon */
+ SEARCH_DEBUG_WARNING("contacts svc connect fail : %d",rc);
+ }
+ }
+
+ /* Connect Message-Service */
+ err = msg_open_msg_handle(&ad->msg_handle);
+
+ if (err != MSG_SUCCESS) {
+ SEARCH_DEBUG_WARNING("msg_open_msg_handle error : %d", err);
+ ad->msg_handle = NULL;
+ }
+ } else {
+ /* Disconnect Contact-service if contact category status is invisible */
+ if (ad->result_obj[SEARCH_CONT_PHONE_CONTACTS].visible == EINA_FALSE) {
+ rc = contacts_svc_disconnect();
+ if (rc != CTS_SUCCESS)
+ SEARCH_DEBUG_WARNING("contacts svc connect fail : %d",rc);
+ }
+
+ /* Disconnect Message-Service */
+ if (ad->msg_handle != NULL ) {
+ err = msg_close_msg_handle(&ad->msg_handle);
+
+ if (err != MSG_SUCCESS)
+ SEARCH_DEBUG_WARNING("msg_close_msg_handle error : %d", err);
+ ad->msg_handle = NULL;
+ }
+ }
+ }
+ break;
+ case SEARCH_CONT_PHONE_EMAIL:
+ break;
+ /* IMAGE, MUSIC, VIDEO use common handle */
+ case SEARCH_CONT_PHONE_IMAGES:
+ case SEARCH_CONT_PHONE_MUSIC:
+ case SEARCH_CONT_PHONE_VIDEO:
+ {
+ if (ad->result_obj[SEARCH_CONT_PHONE_IMAGES].visible == EINA_TRUE
+ || ad->result_obj[SEARCH_CONT_PHONE_MUSIC].visible == EINA_TRUE
+ || ad->result_obj[SEARCH_CONT_PHONE_VIDEO].visible == EINA_TRUE ) {
+ conn_ret = media_content_connect();
+
+ if (conn_ret != 0)
+ SEARCH_DEBUG_WARNING("media_content_connect failed : %d\n", conn_ret);
+ } else {
+ conn_ret = media_content_disconnect();
+
+ if(conn_ret < 0)
+ SEARCH_DEBUG_WARNING("media_content_disconnect failed : %d\n", conn_ret);
+ }
+ }
+ break;
+ case SEARCH_CONT_PHONE_CALENDAR:
+ {
+ if (ad->result_obj[i].visible == EINA_TRUE) {
+ rc = calendar_svc_connect();
+ if (rc != CAL_SUCCESS) {
+ SEARCH_DEBUG_WARNING
+ ("calendar svc connect fail : %d",
+ rc);
+ }
+ } else {
+ rc = calendar_svc_close();
+ if (rc != CAL_SUCCESS) {
+ SEARCH_DEBUG_WARNING
+ ("calendar svc disconnect fail : %d",
+ rc);
+ }
+ }
+ }
+ break;
+ case SEARCH_CONT_PHONE_MEMO:
+ {
+ if (ad->result_obj[i].visible == EINA_TRUE) {
+ rc = memo_init(NULL);
+ if (rc == -1) {
+ SEARCH_DEBUG_WARNING
+ ("memo svc connect fail : %d", rc);
+ }
+ } else
+ memo_fini();
+ }
+ break;
+ }
+ }
+
+ SEARCH_FUNC_END;
+
+ return ret;
+}
+
+int search_app_disconnect(void *data)
+{
+ SEARCH_FUNC_START;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ int rc = 0, conn_ret = 0;
+ int i = 0;
+
+ for (i = 0; i < SEARCH_CONT_MAX ; ++i) {
+ switch (ad->result_obj[i].contents_type) {
+ case SEARCH_CONT_PHONE_CONTACTS:
+ {
+ rc = contacts_svc_disconnect();
+ if (rc != CTS_SUCCESS) {
+ SEARCH_DEBUG_WARNING
+ ("contacts svc disconnect fail : %d",
+ rc);
+ }
+ }
+ break;
+ case SEARCH_CONT_PHONE_MSG:
+ {
+ if (ad->msg_handle != NULL ) {
+ msg_error_t err = MSG_SUCCESS;
+ err = msg_close_msg_handle(&ad->msg_handle);
+
+ if (err != MSG_SUCCESS) {
+ SEARCH_DEBUG_WARNING("msg_close_msg_handle error : %d", err);
+ }
+
+ ad->msg_handle = NULL;
+ }
+ }
+ break;
+ case SEARCH_CONT_PHONE_EMAIL:
+ break;
+ case SEARCH_CONT_PHONE_IMAGES:
+ case SEARCH_CONT_PHONE_MUSIC:
+ case SEARCH_CONT_PHONE_VIDEO:
+ {
+ conn_ret = media_content_disconnect();
+ if(conn_ret != 0)
+ SEARCH_DEBUG_WARNING("media_content_disconnect failed : %d\n", conn_ret);
+ }
+ break;
+ case SEARCH_CONT_PHONE_CALENDAR:
+ {
+ rc = calendar_svc_close();
+ if (rc != CAL_SUCCESS) {
+ SEARCH_DEBUG_WARNING
+ ("calendar svc disconnect fail : %d",
+ rc);
+ }
+ }
+ break;
+ case SEARCH_CONT_PHONE_MEMO:
+ {
+ memo_fini();
+ }
+ break;
+ }
+ }
+
+ SEARCH_FUNC_END;
+
+ return 0;
+}
+
void search_gl_phone_result_sel(void *data, Evas_Object * obj, void *event_info)
{
SEARCH_FUNC_START;
@@ -150,7 +458,6 @@ void search_gl_phone_result_sel(void *data, Evas_Object * obj, void *event_info)
struct appdata *ad = (struct appdata *)data;
struct search_item_sel *cur_category_mem;
Elm_Object_Item *it = (Elm_Object_Item *) event_info;
- int ret = 0;
cur_category_mem =
(struct search_item_sel *)elm_object_item_data_get(it);
@@ -158,44 +465,48 @@ void search_gl_phone_result_sel(void *data, Evas_Object * obj, void *event_info)
return;
}
- switch (cur_category_mem->type) {
+ SEARCH_DEBUG_LOG("cur_category_mem->type : %d", cur_category_mem->type);
- case SEARCH_TYPE_PHONE_CONTACTS:
+ switch (cur_category_mem->type) {
+ case SEARCH_CONT_PHONE_CONTACTS:
search_launch_contact_view(ad, cur_category_mem);
break;
- case SEARCH_TYPE_PHONE_MSG:
+ case SEARCH_CONT_PHONE_MSG:
search_launch_msg_view(ad, cur_category_mem);
break;
- case SEARCH_TYPE_PHONE_EMAIL:
+ case SEARCH_CONT_PHONE_EMAIL:
search_launch_email_view(ad, cur_category_mem);
break;
- case SEARCH_TYPE_PHONE_IMAGES:
+ case SEARCH_CONT_PHONE_IMAGES:
search_launch_image_view(ad, cur_category_mem);
break;
- case SEARCH_TYPE_PHONE_VIDEO:
+ case SEARCH_CONT_PHONE_VIDEO:
search_launch_video_view(ad, cur_category_mem);
break;
- case SEARCH_TYPE_PHONE_MUSIC:
+ case SEARCH_CONT_PHONE_MUSIC:
search_launch_music_view(ad, cur_category_mem);
break;
-
- case SEARCH_TYPE_PHONE_CALENDAR:
+
+ case SEARCH_CONT_PHONE_CALENDAR:
search_launch_calendar_view(ad, cur_category_mem);
break;
- case SEARCH_TYPE_PHONE_MEMO:
+ case SEARCH_CONT_PHONE_MEMO:
search_launch_memo_view(ad, cur_category_mem);
break;
- case SEARCH_TYPE_PHONE_MENU:
+ case SEARCH_CONT_PHONE_MENU:
search_launch_menu_view(ad, cur_category_mem);
break;
+ case SEARCH_CONT_PHONE_BROWSER:
+ search_launch_browser_view(ad, cur_category_mem);
+
default:
break;
}
@@ -205,326 +516,521 @@ void search_gl_phone_result_sel(void *data, Evas_Object * obj, void *event_info)
SEARCH_FUNC_END;
}
-void search_result_gl_init(void *data)
-{
- SEARCH_FUNC_START;
-
- struct appdata *ad = (struct appdata *)data;
- Evas_Object *genlist;
-
-
- if (ad->itc_pslist_1line == NULL) {
- ad->itc_pslist_1line = elm_genlist_item_class_new();
- ad->itc_pslist_1line->item_style = "1text.2";
- ad->itc_pslist_1line->func.text_get = __search_gl_label_get;
- ad->itc_pslist_1line->func.content_get = NULL;
- ad->itc_pslist_1line->func.state_get = __search_gl_state_get;
- ad->itc_pslist_1line->func.del = __search_gl_del;
- }
-
-
- if (ad->itc_pslist_2line == NULL) {
- ad->itc_pslist_2line = elm_genlist_item_class_new();
- ad->itc_pslist_2line->item_style = "2text.8";
- ad->itc_pslist_2line->func.text_get = __search_gl_label_get;
- ad->itc_pslist_2line->func.content_get = NULL;
- ad->itc_pslist_2line->func.state_get = __search_gl_state_get;
- ad->itc_pslist_2line->func.del = __search_gl_del;
- }
-
- if (ad->itc_grouptitle == NULL) {
- ad->itc_grouptitle = elm_genlist_item_class_new();
- ad->itc_grouptitle->item_style = "grouptitle";
- ad->itc_grouptitle->func.text_get = __search_gl_label_get_title;
- ad->itc_grouptitle->func.state_get = __search_gl_state_get;
- ad->itc_grouptitle->func.del = __search_gl_del;
- }
-
- if (ad->itc_listmore == NULL) {
- ad->itc_listmore = elm_genlist_item_class_new();
- ad->itc_listmore->item_style = "1text.2";
- ad->itc_listmore->func.text_get = __search_gl_label_get_more;
- ad->itc_listmore->func.state_get = __search_gl_state_get;
- ad->itc_listmore->func.del = __search_gl_del;
- }
-
- ad->search_gl = NULL;
-
- genlist = elm_genlist_add(ad->navi_bar);
-
- // To use multiline textblock/entry/editfield in genlist, set height_for_width mode
- // then the item's height is calculated while the item's width fits to genlist width.
- elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
- elm_genlist_tree_effect_enabled_set(genlist, EINA_TRUE);
-
- ad->search_gl = genlist;
-
- 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);
- SEARCH_FUNC_END;
-}
-
-void search_result_gl_deinit(void *data)
+static int __search_gl_set_phone_search_result(struct search_content_object *obj,
+ int offset,
+ char *keyword,
+ void *data,
+ struct search_genlist_info *result_info)
{
SEARCH_FUNC_START;
- struct appdata *ad = (struct appdata *)data;
-
- if (ad->itc_pslist_1line != NULL)
- elm_genlist_item_class_free(ad->itc_pslist_1line);
-
- if (ad->itc_pslist_2line != NULL)
- elm_genlist_item_class_free(ad->itc_pslist_2line);
-
- if (ad->itc_grouptitle != NULL)
- elm_genlist_item_class_free(ad->itc_grouptitle);
-
- if (ad->itc_listmore != NULL)
- elm_genlist_item_class_free(ad->itc_listmore);
-
- SEARCH_FUNC_END;
-}
-
-static int __search_gl_set_phone_search_result(int type, int offset, char *keyword,
- void *data)
-{
- SEARCH_FUNC_START;
-
- int rc = 0;
- int category = 0;
- int loop_cnt = 0;
-
- int ret = 0;
-
int sel_cnt = SEARCH_CATEGORY_LIST_MORE_CNT + 1;
int func_ret = 1;
struct appdata *ad = (struct appdata *)data;
- Evas_Object *glist;
- ad->cate_info[type].offset = offset;
+ obj->mr_info.offset = offset;
- if (offset == 0) {
- ad->cate_info[type].next_point = 0;
+ if (obj->mr_info.offset == 0) {
+ obj->mr_info.next_point = 0;
}
- switch (type) {
-
- case SEARCH_TYPE_PHONE_CONTACTS:
+ SEARCH_DEBUG_LOG("offset : %d, limit : %d keyword : %s", offset, sel_cnt, keyword);
+
+ if (obj->visible == EINA_TRUE ) {
+ switch (obj->contents_type) {
+ case SEARCH_CONT_PHONE_CONTACTS:
{
func_ret =
- search_sql_contact_search_result_by_api(type,
+ search_sql_contact_search_result_by_api(obj,
offset,
sel_cnt,
- data);
+ keyword,
+ ad,
+ result_info);
}
break;
- case SEARCH_TYPE_PHONE_MSG:
+ case SEARCH_CONT_PHONE_MSG:
{
if (ad->msg_handle != NULL) {
func_ret =
- search_sql_msg_search_result_by_api(type,
+ search_sql_msg_search_result_by_api(obj,
offset,
- sel_cnt,
- data);
+ sel_cnt,
+ keyword,
+ ad,
+ result_info);
}
}
break;
- case SEARCH_TYPE_PHONE_EMAIL:
+ case SEARCH_CONT_PHONE_EMAIL:
{
func_ret =
- search_sql_email_search_result_by_api(type,
+ search_sql_email_search_result_by_api(obj,
offset,
- sel_cnt,
- data);
+ sel_cnt,
+ keyword,
+ ad,
+ result_info);
}
- break;
- case SEARCH_TYPE_PHONE_IMAGES:
+ break;
+ case SEARCH_CONT_PHONE_IMAGES:
{
- if (ad->media_handle != NULL ) {
func_ret =
- search_sql_image_search_result_by_api(type,
+ search_sql_image_search_result_by_api(obj,
offset,
- sel_cnt,
- data);
+ sel_cnt,
+ keyword,
+ ad,
+ result_info);
}
+ break;
+ case SEARCH_CONT_PHONE_MUSIC:
+ {
+ func_ret =
+ search_sql_music_search_result_by_api(obj,
+ offset,
+ sel_cnt,
+ keyword,
+ ad,
+ result_info);
}
- break;
- case SEARCH_TYPE_PHONE_MUSIC:
+ break;
+ case SEARCH_CONT_PHONE_VIDEO:
{
- if (ad->media_handle != NULL ) {
func_ret =
- search_sql_music_search_result_by_api(type,
+ search_sql_video_search_result_by_api(obj,
offset,
- sel_cnt,
- data);
- }
+ sel_cnt,
+ keyword,
+ ad,
+ result_info);
}
break;
- case SEARCH_TYPE_PHONE_VIDEO:
+ case SEARCH_CONT_PHONE_CALENDAR:
{
- if (ad->media_handle != NULL ) {
func_ret =
- search_sql_video_search_result_by_api(type,
+ search_sql_calendar_search_result_by_api(obj,
offset,
- sel_cnt,
- data);
+ sel_cnt,
+ keyword,
+ ad,
+ result_info);
}
- }
- break;
-
- case SEARCH_TYPE_PHONE_CALENDAR:
+ break;
+ case SEARCH_CONT_PHONE_MEMO:
{
func_ret =
- search_sql_calendar_search_result_by_api(type,
+ search_sql_memo_search_result_by_api(obj,
offset,
sel_cnt,
- data);
+ keyword,
+ ad,
+ result_info);
}
break;
-
- case SEARCH_TYPE_PHONE_MEMO:
+ case SEARCH_CONT_PHONE_MENU:
{
func_ret =
- search_sql_memo_search_result_by_api(type,
+ search_sql_menu_search_result_by_api(obj,
offset,
- sel_cnt,
- data);
+ sel_cnt,
+ keyword,
+ ad,
+ result_info);
}
break;
-
- case SEARCH_TYPE_PHONE_MENU:
+ case SEARCH_CONT_PHONE_BROWSER:
{
func_ret =
- search_sql_menu_search_result_by_api(type,
+ search_sql_browser_search_result_by_api(obj,
offset,
sel_cnt,
keyword,
- data);
+ ad,
+ result_info);
}
- break;
+ }
}
SEARCH_FUNC_END;
-
return func_ret;
}
-void search_gl_result_more_item_append_cb(void *data, Evas_Object * obj,
- void *event_info)
+static void __search_thread_heavy_cb(void *data, Ecore_Thread *th)
{
SEARCH_FUNC_START;
- struct appdata *ad = (struct appdata *)data;
- Elm_Object_Item *it = (Elm_Object_Item *) event_info;
+ struct search_thread_data *thread_data = (struct search_thread_data*)data;
+ struct appdata *ad = thread_data->ad;
+ struct search_content_object *obj = NULL;
+ struct search_genlist_info *result_info = NULL;
int ret = 0;
- struct search_item_sel *sel_mem =
- (search_item_sel *) elm_object_item_data_get(it);
- struct search_item_sel *sel_mem_info = NULL;
- struct search_item_sel *sel_mem_more = NULL;
+ int i = SEARCH_CONT_PHONE_MIN;
+ int category_type = 0;
- char* escape_added_keyword = NULL;
- SEARCH_MALLOC(escape_added_keyword, strlen(ad->search_word)*2+5, char);
- memset(escape_added_keyword, 0x0, strlen(ad->search_word)*2+5);
+ SEARCH_DEBUG_LOG("Thread ID : %p Keyword : %s", th, thread_data->keyword);
- int rc = 0, i = 0;
- int type = sel_mem->type;
- int offset = ad->cate_info[type].next_point;
+ thread_data->ad = ad;
+ thread_data->is_search_result = SEARCH_RET_SEARCH_NONE;
- search_sql_make_keyword_bind_value(ad->search_word, escape_added_keyword, SEARCH_SQL_BIND_TYPE_DUPLEX);
+ while (i <= SEARCH_CONT_PHONE_MAX) {
+ int offset = 0;
+ obj = &ad->result_obj[i];
+ category_type = obj->category_type;
- elm_object_item_del(it);
+ if (category_type == SEARCH_OBJ_PHONE_CONTENTS) {
+ if (ecore_thread_check(th) != EINA_TRUE) {
+ result_info = (struct search_genlist_info *)calloc(1, sizeof(struct search_genlist_info));
+ ret = __search_gl_set_phone_search_result(obj,
+ offset,
+ thread_data->keyword,
+ ad,
+ result_info);
+
+ if (ret == SEARCH_RET_SEARCH_SUCCESS) {
+ SEARCH_DEBUG_LOG("Succes to Matched result : %s %d", obj->name, ret);
+ thread_data->is_search_result = SEARCH_RET_SEARCH_SUCCESS;
+ ecore_thread_feedback(th, result_info);
+ } else {
+ SEARCH_FREE(result_info);
+ }
+ }
+ }
+ i++;
+ }
+ SEARCH_FUNC_END;
+}
- __search_gl_set_phone_search_result(type, offset, escape_added_keyword, ad);
+
+static void __search_thread_feedback_cb(void *data, Ecore_Thread *th, void *msg_data)
+{
+ SEARCH_FUNC_START;
+
+ struct search_thread_data *thread_data = (struct search_thread_data *)data;
+ struct appdata *ad = thread_data->ad;
+ struct search_genlist_info *result_list = (struct search_genlist_info *)msg_data;
+ struct search_pipe_data *pdata = NULL;
+
+ pdata = (struct search_pipe_data *)calloc(1,sizeof(struct search_pipe_data));
+ pdata->cmd = SEARCH_PIPE_CMD_ADD_GENLIST_PHONE;
+ pdata->obj = NULL;
+ pdata->result_list = result_list;
+ pdata->search_ret = thread_data->is_search_result;
+
+ if (ecore_thread_check(th) == EINA_TRUE)
+ return;
+
+ ecore_pipe_write(ad->pipe, &pdata, sizeof(struct search_pipe_data));
SEARCH_FUNC_END;
}
-static int __search_set_phone_result_list(struct appdata *ad, bool is_input_keyword, const char* search_keyword)
+static void __search_thread_end_cb(void *data, Ecore_Thread *th)
{
SEARCH_FUNC_START;
- int i = 0, is_search_result = 0, ret = 0;
+ struct search_thread_data *thread_data = (struct search_thread_data *)data;
+ struct appdata *ad = thread_data->ad;
+ struct search_pipe_data *pdata = NULL;
- if (is_input_keyword == false) {
- return SEARCH_RET_SEARCH_NONE;
- } else {
+ pdata = (struct search_pipe_data *)calloc(1,sizeof(struct search_pipe_data));
+ pdata->cmd = SEARCH_PIPE_CMD_SET_LAYOUT;
+ pdata->search_ret = thread_data->is_search_result;
- int offset = 0;
+ if (ecore_thread_check(th) == EINA_TRUE)
+ return;
- while (i < PHONE_CATEGORY_LIST_CNT) {
- ret = __search_gl_set_phone_search_result(i,
- offset,
- (char*)search_keyword,
- ad);
- if (ret == SEARCH_RET_SEARCH_SUCCESS) {
- is_search_result = 1;
- }
+ ecore_pipe_write(ad->pipe, &pdata, sizeof(struct search_pipe_data));
- i++;
- }
+ SEARCH_FREE(thread_data->keyword);
+ SEARCH_FREE(thread_data);
- if(is_search_result == 0) {
- return SEARCH_RET_SEARCH_NONE;
- } else {
- return SEARCH_RET_SEARCH_SUCCESS;
- }
- }
+ SEARCH_FUNC_END;
}
-Eina_Bool search_set_result_list(void *data)
+static void __search_thread_cancel_cb(void *data, Ecore_Thread *th)
+{
+ SEARCH_FUNC_START;
+
+ struct search_thread_data *thread_data = (struct search_thread_data *)data;
+
+ SEARCH_FREE(thread_data->keyword);
+ SEARCH_FREE(thread_data);
+
+ SEARCH_FUNC_END;
+}
+
+void search_stop_search(void *data)
{
SEARCH_FUNC_START;
struct appdata *ad = (struct appdata *)data;
- char *text;
+
+ if (ad->search_thread) {
+ ecore_thread_cancel(ad->search_thread);
+ ad->search_thread = NULL;
+ }
+
+ if (ad->search_timer) {
+ ecore_timer_del(ad->search_timer);
+ ad->search_timer = NULL;
+ }
+
+ SEARCH_FUNC_END;
+}
+
+Ecore_Thread* search_make_result_thread(void *data)
+{
+ SEARCH_FUNC_START;
+
int ret = 0;
+ Ecore_Thread *th = NULL;
+ struct appdata *ad = (struct appdata *)data;
+ struct search_thread_data *thread_data = NULL;
+
+ /* set keyword to vconf for save last search histroy */
+ ret = vconf_set_str(SMARTSEARCH_KEY_KEYWORD, ad->not_markup_search_word);
+
+ if (ret < 0)
+ SEARCH_DEBUG_WARNING("Error : set keyword to vconf");
+
+ /* Create Thread for Phone Search */
+ thread_data = (struct search_thread_data *)calloc(1, sizeof(struct search_thread_data));
+ thread_data->ad = ad;
+ thread_data->is_search_result = SEARCH_RET_SEARCH_NONE;
+ thread_data->keyword = strdup(ad->search_word);
+
+ th = ecore_thread_feedback_run(__search_thread_heavy_cb,
+ __search_thread_feedback_cb,
+ __search_thread_end_cb,
+ __search_thread_cancel_cb,
+ thread_data,
+ EINA_TRUE);
+
+ SEARCH_FUNC_END;
+ return th;
+}
+
+
+void search_result_gl_init(void *data)
+{
+ SEARCH_FUNC_START;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ ad->pipe = ecore_pipe_add(ecore_exe_pipe_cb, ad);
+ eina_lock_new(&ad->mutex);
+ eina_condition_new(&ad->condition, &ad->mutex);
+
+ Evas_Object *genlist;
+
+ if (ad->itc_pslist_1line == NULL) {
+ ad->itc_pslist_1line = elm_genlist_item_class_new();
+ ad->itc_pslist_1line->item_style = "1text.2";
+ ad->itc_pslist_1line->func.text_get = __search_gl_label_get_search_item_type;
+ ad->itc_pslist_1line->func.content_get = __search_gl_content_get_search_item_type;
+ ad->itc_pslist_1line->func.state_get = __search_gl_state_get;
+ ad->itc_pslist_1line->func.del = __search_gl_del;
+ }
+
+ if (ad->itc_pslist_1line_1icon == NULL) {
+ ad->itc_pslist_1line_1icon = elm_genlist_item_class_new();
+ ad->itc_pslist_1line_1icon->item_style = "1text.1icon.2.tb";
+ ad->itc_pslist_1line_1icon->func.text_get = __search_gl_label_get_search_item_type;
+ ad->itc_pslist_1line_1icon->func.content_get = __search_gl_content_get_search_item_type;
+ ad->itc_pslist_1line_1icon->func.state_get = __search_gl_state_get;
+ ad->itc_pslist_1line_1icon->func.del = __search_gl_del;
+ }
+
+ if (ad->itc_pslist_1line_2icon == NULL) {
+ ad->itc_pslist_1line_2icon = elm_genlist_item_class_new();
+ ad->itc_pslist_1line_2icon->item_style = "1text.2icon.6.tb";
+ ad->itc_pslist_1line_2icon->func.text_get = __search_gl_label_get_search_item_type;
+ ad->itc_pslist_1line_2icon->func.content_get = __search_gl_content_get_search_item_type;
+ ad->itc_pslist_1line_2icon->func.state_get = __search_gl_state_get;
+ ad->itc_pslist_1line_2icon->func.del = __search_gl_del;
+ }
+
+ if (ad->itc_pslist_2line_1icon == NULL) {
+ ad->itc_pslist_2line_1icon = elm_genlist_item_class_new();
+ ad->itc_pslist_2line_1icon->item_style = "2text.1icon.4.tb";
+ ad->itc_pslist_2line_1icon->func.text_get = __search_gl_label_get_search_item_type;
+ ad->itc_pslist_2line_1icon->func.content_get = __search_gl_content_get_search_item_type;
+ ad->itc_pslist_2line_1icon->func.state_get = __search_gl_state_get;
+ ad->itc_pslist_2line_1icon->func.del = __search_gl_del;
+ }
+
+ if (ad->itc_pslist_2line_2icon == NULL) {
+ ad->itc_pslist_2line_2icon = elm_genlist_item_class_new();
+ ad->itc_pslist_2line_2icon->item_style = "2text.2icon.4.tb";
+ ad->itc_pslist_2line_2icon->func.text_get = __search_gl_label_get_search_item_type;
+ ad->itc_pslist_2line_2icon->func.content_get = __search_gl_content_get_search_item_type;
+ ad->itc_pslist_2line_2icon->func.state_get = __search_gl_state_get;
+ ad->itc_pslist_2line_2icon->func.del = __search_gl_del;
+ }
+
+ if (ad->itc_grouptitle == NULL) {
+ ad->itc_grouptitle = elm_genlist_item_class_new();
+ ad->itc_grouptitle->item_style = "grouptitle";
+ ad->itc_grouptitle->func.text_get = __search_gl_label_get_group;
+ ad->itc_grouptitle->func.state_get = __search_gl_state_get;
+ ad->itc_grouptitle->func.del = __search_gl_del_grouptitle;
+ }
+
+ if (ad->itc_label == NULL) {
+ ad->itc_label = elm_genlist_item_class_new();
+ ad->itc_label->item_style = "grouptitle";
+ ad->itc_label->func.text_get = __search_gl_label_get_normal_type;
+ ad->itc_label->func.state_get = __search_gl_state_get;
+ ad->itc_label->func.del = __search_gl_del_grouptitle;
+ }
+
+ if (ad->itc_listmore == NULL) {
+ ad->itc_listmore = elm_genlist_item_class_new();
+ ad->itc_listmore->item_style = "1text.2";
+ ad->itc_listmore->func.text_get = __search_gl_label_get_more;
+ ad->itc_listmore->func.state_get = __search_gl_state_get;
+ ad->itc_listmore->func.del = __search_gl_del_more_button;
+ }
+
+ ad->search_gl = NULL;
+
+ genlist = elm_genlist_add(ad->navi_bar);
+
+ // To use multiline textblock/entry/editfield in genlist, set height_for_width mode
+ // then the item's height is calculated while the item's width fits to genlist width.
+ elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+ elm_genlist_tree_effect_enabled_set(genlist, EINA_TRUE);
+
+ ad->search_gl = genlist;
+
+ 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);
+ SEARCH_FUNC_END;
+}
+
+void search_result_gl_deinit(void *data)
+{
+ SEARCH_FUNC_START;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ ecore_pipe_del(ad->pipe);
+ eina_condition_free(&ad->condition);
+ eina_lock_free(&ad->mutex);
+
+ if (ad->itc_pslist_1line != NULL)
+ elm_genlist_item_class_free(ad->itc_pslist_1line);
+
+ if (ad->itc_pslist_1line_1icon != NULL)
+ elm_genlist_item_class_free(ad->itc_pslist_1line_1icon);
+
+ if (ad->itc_pslist_1line_2icon != NULL)
+ elm_genlist_item_class_free(ad->itc_pslist_2line_1icon);
+
+ if (ad->itc_pslist_2line_1icon != NULL)
+ elm_genlist_item_class_free(ad->itc_pslist_2line_1icon);
+
+ if (ad->itc_pslist_2line_2icon != NULL)
+ elm_genlist_item_class_free(ad->itc_pslist_2line_2icon);
+
+ if (ad->itc_grouptitle != NULL)
+ elm_genlist_item_class_free(ad->itc_grouptitle);
+
+ if (ad->itc_label != NULL)
+ elm_genlist_item_class_free(ad->itc_label);
+
+ if (ad->itc_listmore != NULL)
+ elm_genlist_item_class_free(ad->itc_listmore);
+
+ SEARCH_FUNC_END;
+}
+
+
+void search_gl_result_more_item_append_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ SEARCH_FUNC_START;
+
+ struct appdata *ad = (struct appdata *)data;
+ Elm_Object_Item *it = (Elm_Object_Item *) event_info;
+ struct search_pipe_data *pdata = NULL;
+ struct search_genlist_info *result_info = NULL;
+ struct search_item_more_sel *sel_more =
+ (search_item_more_sel *)elm_object_item_data_get(it);
+
+ struct search_content_object *content_obj = sel_more->obj;
+ int offset = content_obj->mr_info.next_point;
+ int ret = SEARCH_RET_SEARCH_NONE;
+
+ elm_object_item_del(it);
+
+ result_info = (struct search_genlist_info *)calloc(1, sizeof(struct search_genlist_info));
+ ret = __search_gl_set_phone_search_result(content_obj,
+ offset,
+ ad->search_word,
+ ad,
+ result_info);
+
+ pdata = (struct search_pipe_data *)calloc(1,sizeof(struct search_pipe_data));
+ pdata->cmd = SEARCH_PIPE_CMD_ADD_GENLIST_PHONE;
+ pdata->obj = NULL;
+ pdata->result_list = result_info;
+ pdata->search_ret = ret;
+ ecore_pipe_write(ad->pipe, &pdata, sizeof(struct search_pipe_data));
+
+ pdata = (struct search_pipe_data *)calloc(1,sizeof(struct search_pipe_data));
+ pdata->cmd = SEARCH_PIPE_CMD_SET_LAYOUT;
+ pdata->search_ret = ret;
+ ecore_pipe_write(ad->pipe, &pdata, sizeof(struct search_pipe_data));
+
+ SEARCH_FUNC_END;
+}
+
+void search_set_result_list(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ int category = ad->search_category;
+
bool is_input_keyword = false;
- char* escape_added_keyword = NULL;
- int bind_type = 0;
- int search_ret = SEARCH_RET_SEARCH_NONE;
+ struct search_pipe_data *pipe_data = NULL;
+ char *text = NULL;
- SEARCH_ASSERT_IF(!ad);
+ search_stop_search(ad);
text = elm_entry_markup_to_utf8(elm_object_text_get(ad->search_entry));
-
SEARCH_FREE(ad->not_markup_search_word);
SEARCH_FREE(ad->search_word);
if((text) && (strlen(text) > 0)) {
ad->not_markup_search_word = strdup(elm_object_text_get(ad->search_entry));
ad->search_word = text;
-
- SEARCH_MALLOC(escape_added_keyword, strlen(ad->search_word)*2+5, char);
- memset(escape_added_keyword, 0x0, strlen(ad->search_word)*2+5);
-
- bind_type = SEARCH_SQL_BIND_TYPE_DUPLEX;
-
- search_sql_make_keyword_bind_value(ad->search_word, escape_added_keyword, bind_type);
is_input_keyword = true;
-
- elm_genlist_clear(ad->search_gl);
-
- search_ret = __search_set_phone_result_list(ad, is_input_keyword, ad->search_word);
+ } else if ( category == SEARCH_CATE_PHONE) {
+ pipe_data = (struct search_pipe_data *)calloc(1, sizeof(struct search_pipe_data));
+ pipe_data->cmd = SEARCH_PIPE_CMD_SET_LAYOUT;
+ pipe_data->search_ret = SEARCH_RET_SEARCH_NONE;
+ ecore_pipe_write(ad->pipe, &pipe_data, sizeof(struct search_pipe_data));
+ return;
}
- if(search_ret == SEARCH_RET_SEARCH_SUCCESS) {
- search_layout_set_search_list(ad);
- } else {
- search_layout_set_search_no_result(ad);
- }
-
- SEARCH_FREE(escape_added_keyword);
-
- SEARCH_FUNC_END;
+ /* If category is Phone, make a thread for search */
+ pipe_data = (struct search_pipe_data *)calloc(1, sizeof(struct search_pipe_data));
+ pipe_data->cmd = SEARCH_PIPE_CMD_CLEAR_GENLIST;
+ ecore_pipe_write(ad->pipe, &pipe_data, sizeof(struct search_pipe_data));
- return EINA_FALSE;
+ switch(category) {
+ case SEARCH_CATE_PHONE:
+ ad->search_thread = search_make_result_thread(ad);
+ break;
+ }
}
void search_layout_set_search_list(void* data)
@@ -537,10 +1043,13 @@ void search_layout_set_search_list(void* data)
elm_object_part_content_unset(ad->sb_layout,"list_noresult");
evas_object_hide(ad->noresult_view);
+ if (ad->search_gl) {
elm_object_part_content_set(ad->sb_layout, "list", ad->search_gl);
evas_object_show(ad->search_gl);
}
+ }
+ if (ad->search_gl)
elm_genlist_item_show(elm_genlist_first_item_get(ad->search_gl), ELM_GENLIST_ITEM_SCROLLTO_TOP);
SEARCH_FUNC_END;
@@ -555,6 +1064,8 @@ void search_layout_set_search_no_result(void* data)
if (elm_object_part_content_get(ad->sb_layout,"list")) {
elm_object_part_content_unset(ad->sb_layout, "list");
+
+ if (ad->search_gl)
evas_object_hide(ad->search_gl);
elm_object_part_content_set(ad->sb_layout,"list_noresult", ad->noresult_view);
@@ -583,5 +1094,5 @@ int search_layout_get_content_list_set_status(void* data)
return ret;
}
-
+