diff options
Diffstat (limited to 'src/ps_app_interface.cpp')
-rwxr-xr-x | src/ps_app_interface.cpp | 760 |
1 files changed, 760 insertions, 0 deletions
diff --git a/src/ps_app_interface.cpp b/src/ps_app_interface.cpp new file mode 100755 index 0000000..dbecb51 --- /dev/null +++ b/src/ps_app_interface.cpp @@ -0,0 +1,760 @@ +/* + * Copyright 2012-2013 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://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + + + + +#include "smartsearch.h" +#include "ps_app_interface.h" +#include "ps_searcher.h" +#include <ui-gadget.h> +#include <contacts-ug.h> +#include <aul_service.h> +#include <app.h> +#include <app_manager.h> +#include <bundle.h> + +static void __search_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, + void *priv) +{ + SEARCH_FUNC_START; + + Evas_Object *base = NULL; (Evas_Object *) ug_get_layout(ug); + Evas_Object *win = NULL; + + SEARCH_RET_IF(ug == NULL || priv == NULL); + + base = (Evas_Object *)ug_get_layout(ug); + win = (Evas_Object *)ug_get_window(); + + SEARCH_RET_IF(base == NULL); + SEARCH_RET_IF(win == NULL); + + switch (mode) { + case UG_MODE_FULLVIEW: + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, base); + evas_object_show(base); + break; + default: + break; + } + + SEARCH_FUNC_END; +} + +static void __search_ug_closed_cb(ui_gadget_h ug, void *priv) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)priv; + + SEARCH_RET_IF(ug == NULL); + SEARCH_RET_IF(ad == NULL); + + ug_destroy(ug); + ad->detail_ug = NULL; + + elm_genlist_select_mode_set(ad->search_gl, ELM_OBJECT_SELECT_MODE_DEFAULT); + + if (elm_object_scroll_freeze_get(ad->search_gl) > 0) { + elm_object_scroll_freeze_pop(ad->search_gl); + } + + SEARCH_FUNC_END; +} + +void search_launch_contact_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + service_h service = NULL; + int ret = 0; + bool err_popup_show = true; + + Ecore_X_Window win_id = -1; + + win_id = elm_win_xwindow_get(ad->win_main); + + ret = service_create(&service); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_create"); + goto out_func; + } + + ret = service_set_app_id(service, "contacts-details-efl"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_app_id!"); + goto out_func; + } + + ret = service_set_window(service, win_id); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_window!"); + goto out_func; + } + + ret = service_add_extra_data(service, "type", "0");; + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_add_extra_data : type!"); + goto out_func; + } + + ret = service_add_extra_data(service, "person_id", cur_category_mem->launch_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_add_extra_data : person_id"); + goto out_func; + } + + ret = service_send_launch_request(service, NULL, NULL); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_send_launch_request"); + goto out_func; + } else { + err_popup_show = false; + } + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_AUL_LAUNCH, ad); + } + + if (service != NULL) { + service_destroy(service); + } + + SEARCH_FUNC_END; +} + +void search_launch_msg_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + service_h service = NULL; + int ret = 0; + bool err_popup_show = true; + + ret = service_create(&service); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_create"); + goto out_func; + } + + ret = service_set_package(service, "org.tizen.message"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_package!"); + goto out_func; + } + + ret = service_add_extra_data(service, "type", "msg_id"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_extra_data : msg_id"); + goto out_func; + } + + ret = service_add_extra_data(service, "msgId", cur_category_mem->launch_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_set_extra_data : msgId parameter!"); + goto out_func; + } + + ret = service_send_launch_request(service, NULL, NULL); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("[Fail] service_send_launch_request"); + goto out_func; + } else { + err_popup_show = false; + } + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_AUL_LAUNCH, ad); + } + + if (service != NULL) { + service_destroy(service); + } + + SEARCH_FUNC_END; +} + +void search_launch_email_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + char *token_param = NULL; + char *saveptr1; + int i = 0; + int ret = 0; + bool err_popup_show = true; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + + char temp_path[MAX_LENGTH_PER_PATH] = { 0, }; + + service_h service = NULL; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + ret = service_create(&service); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to create service handle!"); + goto out_func; + } + + snprintf(temp_path, MAX_LENGTH_PER_PATH - 1, "%s", cur_category_mem->launch_path); + token_param = strtok_r(temp_path, " ", &saveptr1); + + while (token_param != NULL) { + SEARCH_DEBUG_LOG("PARAMETER (%d) : %s", i, token_param); + if (i == 0) { + ret = service_add_extra_data(service, "ACCOUNT_ID", token_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add extra data : ACCOUND_ID!"); + goto out_func; + } + } else if (i == 1) { + ret = service_add_extra_data(service, "MAIL_ID", token_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add extra data : MAIL_ID!"); + goto out_func; + } + } else if (i == 2) { + ret = service_add_extra_data(service, "MAILBOX_ID", token_param); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add extra data : MAILBOX_ID!"); + goto out_func; + } + } else { + break; + } + + i++; + token_param = strtok_r(NULL, " ", &saveptr1); + } + + ret = service_add_extra_data(service, "RUN_TYPE", "7"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add extra data : RUN_TYPE!"); + goto out_func; + } + + ret = service_set_package(service, "org.tizen.email"); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to set package!"); + goto out_func; + } + + ret = service_send_launch_request(service, NULL, NULL); + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to send service!"); + goto out_func; + } + err_popup_show = false; + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_APPSVC, ad); + } + + if (service != NULL) { + ret = service_destroy(service); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to destroy service header : [%d]", ret); + } + } + + SEARCH_FUNC_END; +} + +void search_launch_image_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + int ret; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (access(cur_category_mem->launch_path, F_OK) != 0) { + SEARCH_DEBUG_ERROR("image access error : %s", + cur_category_mem->launch_path); + search_launch_popup_error(LAUNCH_ERROR_FILE_NOT_FOUND, + ad); + } else { + SEARCH_DEBUG_LOG("cur_category_mem->launch_path : %s", + cur_category_mem->launch_path); + + service_h service; + ret = service_create(&service); + + if (ret == 0) { + service_set_operation(service, SERVICE_OPERATION_VIEW); + service_set_uri(service, cur_category_mem->launch_path); + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != 0) { + SEARCH_DEBUG_ERROR("image app service launching error(%d)", ret); + search_launch_popup_error(LAUNCH_ERROR_APPSVC, + ad); + } + service_destroy(service); + } + } + + SEARCH_FUNC_END; +} + +void search_launch_video_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + int ret; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (access(cur_category_mem->launch_path, F_OK) != 0) { + SEARCH_DEBUG_ERROR("video access error : %s", + cur_category_mem->launch_path); + search_launch_popup_error(LAUNCH_ERROR_FILE_NOT_FOUND, ad); + } else { + SEARCH_DEBUG_LOG("cur_category_mem->launch_path : %s", + cur_category_mem->launch_path); + + service_h service; + ret = service_create(&service); + + if (ret == 0) { + service_set_operation(service, SERVICE_OPERATION_VIEW); + service_set_uri(service, cur_category_mem->launch_path); + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != 0) { + SEARCH_DEBUG_ERROR("video app service launching error(%d)", ret); + search_launch_popup_error(LAUNCH_ERROR_APPSVC, + ad); + } + service_destroy(service); + } + } + + SEARCH_FUNC_END; +} + +void search_launch_music_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + int ret; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (access(cur_category_mem->launch_path, F_OK) != 0) { + SEARCH_DEBUG_ERROR("music file access error : %s", + cur_category_mem->launch_path); + search_launch_popup_error(LAUNCH_ERROR_FILE_NOT_FOUND, ad); + } else { + SEARCH_DEBUG_LOG("cur_category_mem->launch_path : %s", + cur_category_mem->launch_path); + + service_h service; + ret = service_create(&service); + + if (ret == 0) { + service_set_operation(service, SERVICE_OPERATION_VIEW); + service_set_uri(service, cur_category_mem->launch_path); + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != 0) { + SEARCH_DEBUG_ERROR("music app service launching error(%d)", ret); + search_launch_popup_error(LAUNCH_ERROR_APPSVC, + ad); + } + service_destroy(service); + } + } + + SEARCH_FUNC_END; +} + +void search_launch_calendar_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + ui_gadget_h ug = NULL; + struct ug_cbs cbs = { 0, }; + int ret = 0; + bool err_popup_show = true; + service_h service = NULL; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (strlen(cur_category_mem->launch_param) <= 0) { + SEARCH_DEBUG_ERROR("Selected item does not have data!"); + goto out_func; + } else { + ret = service_create(&service); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to create service handle!"); + goto out_func; + } + + ret = service_add_extra_data(service, "itemType", "event"); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add service extra data : parameter 1!"); + goto out_func; + } + + ret = service_add_extra_data(service, "eventId", cur_category_mem->launch_param); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add service extra data : parameter 2!"); + goto out_func; + } + + cbs.destroy_cb = __search_ug_closed_cb; + cbs.layout_cb = __search_ug_layout_cb; + cbs.result_cb = NULL; + cbs.priv = ad; + + ug = ug_create(NULL, "calendar-detail-efl", UG_MODE_FULLVIEW, service, &cbs); + + if (!ug) { + SEARCH_DEBUG_ERROR("... create_ug_calendar : failed !!!"); + goto out_func; + } + + ad->detail_ug = ug; + err_popup_show = false; + } + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_AUL_LAUNCH, ad); + } + + if (service != NULL) { + service_destroy(service); + } + + SEARCH_FUNC_END; +} + +void search_launch_memo_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = (struct search_item_sel *)record_info; + ui_gadget_h ug = NULL; + struct ug_cbs cbs = { 0, }; + + int ret = 0; + bool err_popup_show = true; + + service_h service = NULL; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + if (strlen(cur_category_mem->launch_param) <= 0) { + SEARCH_DEBUG_ERROR("Selected item does not have data!"); + goto out_func; + } else { + if (ad->detail_ug) { + SEARCH_DEBUG_WARNING("prev ug is exist. destroy prev ug"); + ug_destroy(ug); + ad->detail_ug = NULL; + } + + ret = service_create(&service); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to create service handle!"); + goto out_func; + } + + ret = service_add_extra_data(service, "index", cur_category_mem->launch_param); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to add service extra data : parameter 1!"); + goto out_func; + } + + cbs.layout_cb = __search_ug_layout_cb; + cbs.result_cb = NULL; + cbs.destroy_cb = __search_ug_closed_cb; + cbs.priv = ad; + + ug = ug_create(NULL, "memo-efl", UG_MODE_FULLVIEW, service, &cbs); + + if (!ug) { + SEARCH_DEBUG_ERROR("... create_ug_email : failed !!!"); + goto out_func; + } + + ad->detail_ug = ug; + err_popup_show = false; + } + +out_func: + if (err_popup_show == true) { + search_launch_popup_error(LAUNCH_ERROR_AUL_LAUNCH, ad); + } + + if (service != NULL) { + service_destroy(service); + } + + SEARCH_FUNC_END; +} + +void search_launch_menu_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = + (struct search_item_sel *)record_info; + char *pkg_name = NULL; + bool is_running = false; + app_context_h app_h; + + bool err_popup_show = true; + int ret; + service_h service = NULL; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + pkg_name = cur_category_mem->launch_path; + + if (pkg_name != NULL && strlen(pkg_name)) { + ret = app_manager_is_running(pkg_name, &is_running); + + if (ret != APP_MANAGER_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to get info : app_manager_is_running [%d]", ret); + goto out_func; + } + + if (is_running == true) { + ret = app_manager_get_app_context(pkg_name, &app_h); + if (ret != APP_MANAGER_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to get info : app_manager_get_app_context [%d]", ret); + goto out_func; + } + + ret = app_manager_resume_app(app_h); + + if (ret != APP_MANAGER_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to get info : app_manager_resume_app [%d]", ret); + goto out_func; + } + err_popup_show = false; + } else { + ret = service_create(&service); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to create service header : [%d]", ret); + goto out_func; + } + + ret = service_set_operation(service, SERVICE_OPERATION_DEFAULT); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to set operation : [%d]", ret); + goto out_func; + } + + ret = service_set_package(service, pkg_name); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to set package : [%d]", ret); + goto out_func; + } + + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != SERVICE_ERROR_NONE) { + SEARCH_DEBUG_ERROR("Fail to send launch request : [%d]", ret); + goto out_func; + } + err_popup_show = false; + } + } else { + SEARCH_DEBUG_ERROR("Pkg name is NULL!"); + } + +out_func: + if (err_popup_show == true) + search_launch_popup_error(LAUNCH_ERROR_APPSVC, ad); + + if (service != NULL) { + ret = service_destroy(service); + + if (ret != SERVICE_ERROR_NONE) + SEARCH_DEBUG_ERROR("Fail to destroy service header : [%d]", ret); + } + + SEARCH_FUNC_END; +} + +void search_launch_browser_view(void *data, void *record_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + struct search_item_sel *cur_category_mem = + (struct search_item_sel *)record_info; + int ret; + service_h service; + + SEARCH_RET_IF(ad == NULL); + SEARCH_RET_IF(cur_category_mem == NULL); + + SEARCH_DEBUG_LOG("cur_category_mem->launch_path : %s", cur_category_mem->launch_path); + + ret = service_create(&service); + + if (ret == 0 && strlen(cur_category_mem->launch_path) > 0 ) { + service_set_operation(service, SERVICE_OPERATION_VIEW); + service_set_uri(service, cur_category_mem->launch_path); + ret = service_send_launch_request(service, NULL, NULL); + + if (ret != 0) { + SEARCH_DEBUG_ERROR("browser app service launching error(%d)", ret); + search_launch_popup_error(LAUNCH_ERROR_APPSVC, + ad); + } + service_destroy(service); + } + +} + +static void __search_launch_popup_error_response_cb(void *data, + Evas_Object * obj, + void *event_info) +{ + SEARCH_FUNC_START; + + struct appdata *ad = (struct appdata *)data; + SEARCH_RET_IF(ad == NULL); + + evas_object_del(ad->ctxpopup); + ad->ctxpopup = NULL; + + SEARCH_FUNC_END; +} + +void search_launch_popup_error(int error_type, void *data) +{ + Evas_Object *popup; + Evas_Object *btn1; + + struct appdata *ad = (struct appdata *)data; + + SEARCH_RET_IF(ad == NULL); + + if (error_type >= LAUNCH_ERROR_MAX) { + SEARCH_DEBUG_ERROR("wrong error_type : %d", error_type); + } + + if (ad->ctxpopup) { + evas_object_del(ad->ctxpopup); + ad->ctxpopup = NULL; + } + + elm_genlist_select_mode_set(ad->search_gl, ELM_OBJECT_SELECT_MODE_DEFAULT); + + if (elm_object_scroll_freeze_get(ad->search_gl) > 0) { + elm_object_scroll_freeze_pop(ad->search_gl); + } + + popup = elm_popup_add(ad->win_main); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + switch(error_type) { + case LAUNCH_ERROR_FILE_NOT_FOUND: + elm_object_text_set(popup, + dgettext("sys_string", + "IDS_COM_POP_FILE_NOT_FOUND")); + break; + case LAUNCH_ERROR_AUL_LAUNCH: + /* This Message String enable to be another string in the future */ + elm_object_text_set(popup, + gettext("IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST")); + break; + case LAUNCH_ERROR_APPSVC: + elm_object_text_set(popup, + gettext("IDS_SSEARCH_POP_SELECTED_DATA_DOES_NOT_EXIST")); + break; + } + + btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + + elm_object_text_set(btn1, + dgettext("sys_string","IDS_COM_POP_CLOSE")); + evas_object_smart_callback_add(btn1, "clicked", + __search_launch_popup_error_response_cb, + ad); + + elm_object_part_content_set(popup, "button1", btn1); + + elm_popup_timeout_set(popup, 3.0); + + evas_object_smart_callback_add(popup, "timeout", + __search_launch_popup_error_response_cb, + ad); + evas_object_smart_callback_add(popup, "block,clicked", + __search_launch_popup_error_response_cb, + ad); + evas_object_show(popup); + + ad->ctxpopup = popup; +} + |