X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fw-input-selector.cpp;h=51a15af6bc59deb2e571c537b60585c803c106e8;hb=refs%2Fchanges%2F79%2F156979%2F1;hp=9536088963b56d8730d14402d3db64f78aa07d7a;hpb=dfdc976692bd07a731a17166d42b12fe86a32772;p=platform%2Fcore%2Fuifw%2Finputdelegator.git diff --git a/src/w-input-selector.cpp b/src/w-input-selector.cpp index 9536088..51a15af 100755 --- a/src/w-input-selector.cpp +++ b/src/w-input-selector.cpp @@ -30,6 +30,7 @@ #include "w-input-keyboard.h" #include "w-input-stt-ise.h" #include "w-input-emoticon.h" +#include "w-input-smartreply.h" #include @@ -44,6 +45,7 @@ InputTypeData g_input_type_data; static Elm_Object_Item *it_empty; static Elm_Object_Item *it_title; +static unsigned int g_smartreply_item_size = 0; /* Current Smartreply item size */ static unsigned int g_template_item_size = 0; /* Current Template item size */ Evas_Coord last_step; // 0 ~ 9 for gesture, 10~11 for rotary @@ -89,11 +91,14 @@ Evas_Object* _create_genlist(Evas_Object* parent); void _create_genlist_items(void* user_data); void _create_header_items(void *user_data); void _update_genlist_items(void *user_data); +unsigned int _update_smartreply_items(void *user_data); unsigned int _update_template_items(void *user_data); static void _popup_close_cb(void *data, Evas_Object *obj, void *event_info); static void _popup_back_cb(void *data, Evas_Object *obj, void *event_info); static void input_type_deinit(void); +bool __compare_string(const char * src, const char * dst); + void _init_app_data(App_Data* app_data) { app_data->win_main = NULL; @@ -136,7 +141,10 @@ void init_customizing_theme(void) if (_WEARABLE) { stt_edj_path = stt_edj_path + STT_EDJ_FILE_WEARABLE; app_edj_path = app_edj_path + APP_EDJ_FILE_WEARABLE; - } else if (_MOBILE) { + } else if (_TV) { + stt_edj_path = stt_edj_path + STT_EDJ_FILE_TV; + app_edj_path = app_edj_path + APP_EDJ_FILE_TV; + } else { stt_edj_path = stt_edj_path + STT_EDJ_FILE_MOBILE; app_edj_path = app_edj_path + APP_EDJ_FILE_MOBILE; } @@ -149,7 +157,7 @@ void init_customizing_theme(void) static Eina_Bool back_cb(void *data, Elm_Object_Item *it) { reply_to_sender_by_callback_for_back(); - elm_exit(); + ui_app_exit(); return EINA_FALSE; } @@ -165,6 +173,12 @@ static void _stt_clicked_cb(void *data, Evas_Object * obj, void *event_info) ise_show_stt_popup(ad); } +static void _input_smartreply_notify_cb(void *user_data) +{ + ecore_main_loop_iterate(); + _update_genlist_items((void *)app_data); +} + static void _input_template_notify_cb(void *user_data) { _update_genlist_items((void *)app_data); @@ -194,6 +208,26 @@ static void _keyboard_clicked_cb(void *data, Evas_Object * obj, void *event_info input_keyboard_launch(ad->win_main, data); } +static void __ise_smartreply_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + Elm_Object_Item *item = (Elm_Object_Item *) event_info; + + if (item) { + elm_genlist_item_selected_set(item, EINA_FALSE); + + int index = (intptr_t) elm_object_item_data_get(item); + + int type; + char *reply = input_smartreply_get_nth_item(index, &type); + if (reply) { + input_smartreply_send_feedback(reply); + reply_to_sender_by_callback(reply, "smartreply", NULL, NULL); + free(reply); + elm_exit(); + } + } +} + static void __ise_template_gl_sel(void *data, Evas_Object *obj, void *event_info) { Elm_Object_Item *item = (Elm_Object_Item *) event_info; @@ -206,8 +240,8 @@ static void __ise_template_gl_sel(void *data, Evas_Object *obj, void *event_info const std::vector template_list = input_template_get_list(); if (index < (int)template_list.size()) { - reply_to_sender_by_callback(gettext(template_list[index].text.c_str()), "template"); - elm_exit(); + reply_to_sender_by_callback(gettext(template_list[index].text.c_str()), "template", NULL, NULL); + ui_app_exit(); } } } @@ -261,6 +295,8 @@ static Evas_Object * __ise_gl_2button_content_get(void *data, Evas_Object *obj, string path = get_resource_path(); if (_WEARABLE) path = path + "wearable/"; + else if (_TV) + path = path + "tv/"; else path = path + "mobile/"; @@ -269,13 +305,22 @@ static Evas_Object * __ise_gl_2button_content_get(void *data, Evas_Object *obj, if (!strcmp(first_input_type, "input_voice")) { elm_object_style_set(btn, "ime_button_stt"); path_ic = path + "images/w_mode_stt_ic.png"; + evas_object_smart_callback_add(btn, "clicked", _stt_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_IME_MBODY_VOICE_INPUT"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(first_input_type, "input_emoticon")) { elm_object_style_set(btn, "ime_button_emoticon"); path_ic = path + "images/Delta_w_mode_emoticon_ic.png"; + evas_object_smart_callback_add(btn, "clicked", _emoticon_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_HEADER_EMOTICON"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(first_input_type, "input_keyboard")) { elm_object_style_set(btn, "ime_button_keyboard"); path_ic = path + "images/w_mode_keyboard_ic.png"; evas_object_propagate_events_set(btn, EINA_FALSE); + evas_object_smart_callback_add(btn, "clicked", _keyboard_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_OPT_KEYBOARD"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } elm_image_file_set(ic, path_ic.c_str(), NULL); elm_object_content_set(btn, ic); @@ -285,13 +330,22 @@ static Evas_Object * __ise_gl_2button_content_get(void *data, Evas_Object *obj, if (!strcmp(second_input_type, "input_voice")) { elm_object_style_set(btn, "ime_button_stt"); path_ic = path + "images/w_mode_stt_ic.png"; + evas_object_smart_callback_add(btn, "clicked", _stt_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_IME_MBODY_VOICE_INPUT"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(second_input_type, "input_emoticon")) { elm_object_style_set(btn, "ime_button_emoticon"); path_ic = path + "images/Delta_w_mode_emoticon_ic.png"; + evas_object_smart_callback_add(btn, "clicked", _emoticon_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_HEADER_EMOTICON"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(second_input_type, "input_keyboard")) { elm_object_style_set(btn, "ime_button_keyboard"); path_ic = path + "images/w_mode_keyboard_ic.png"; evas_object_propagate_events_set(btn, EINA_FALSE); + evas_object_smart_callback_add(btn, "clicked", _keyboard_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_OPT_KEYBOARD"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } elm_image_file_set(ic, path_ic.c_str(), NULL); elm_object_content_set(btn, ic); @@ -308,21 +362,33 @@ static Evas_Object * __ise_gl_2button_content_get(void *data, Evas_Object *obj, evas_object_layer_set(btn, 32000); if (!strcmp(first_input_type, "input_voice")) { evas_object_smart_callback_add(btn, "clicked", _stt_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_IME_MBODY_VOICE_INPUT"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(first_input_type, "input_emoticon")) { evas_object_smart_callback_add(btn, "clicked", _emoticon_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_HEADER_EMOTICON"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(first_input_type, "input_keyboard")) { evas_object_propagate_events_set(btn, EINA_FALSE); evas_object_smart_callback_add(btn, "clicked", _keyboard_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_OPT_KEYBOARD"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } } else if (!strcmp(part, "elm.icon.2.touch_area")){ evas_object_layer_set(btn, 32000); if (!strcmp(second_input_type, "input_voice")) { evas_object_smart_callback_add(btn, "clicked", _stt_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_IME_MBODY_VOICE_INPUT"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(second_input_type, "input_emoticon")) { evas_object_smart_callback_add(btn, "clicked", _emoticon_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_HEADER_EMOTICON"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(second_input_type, "input_keyboard")) { evas_object_propagate_events_set(btn, EINA_FALSE); evas_object_smart_callback_add(btn, "clicked", _keyboard_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_OPT_KEYBOARD"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } } return btn; @@ -345,6 +411,8 @@ static Evas_Object * __ise_gl_3button_content_get(void *data, Evas_Object *obj, string path = get_resource_path(); if (_WEARABLE) path = path + "wearable/"; + else if (_TV) + path = path + "tv/"; else path = path + "mobile/"; @@ -354,6 +422,9 @@ static Evas_Object * __ise_gl_3button_content_get(void *data, Evas_Object *obj, elm_image_file_set(ic, path_ic.c_str(), NULL); elm_object_content_set(btn, ic); evas_object_layer_set(btn, 32000); + evas_object_smart_callback_add(btn, "clicked", _stt_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_IME_MBODY_VOICE_INPUT"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(part, "elm.icon.2")){ elm_object_style_set(btn, "ime_button_emoticon"); @@ -361,6 +432,9 @@ static Evas_Object * __ise_gl_3button_content_get(void *data, Evas_Object *obj, elm_image_file_set(ic, path_ic.c_str(), NULL); elm_object_content_set(btn, ic); evas_object_layer_set(btn, 32000); + evas_object_smart_callback_add(btn, "clicked", _emoticon_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_HEADER_EMOTICON"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(part, "elm.icon.3")){ elm_object_style_set(btn, "ime_button_keyboard"); @@ -369,6 +443,9 @@ static Evas_Object * __ise_gl_3button_content_get(void *data, Evas_Object *obj, elm_object_content_set(btn, ic); evas_object_layer_set(btn, 32000); evas_object_propagate_events_set(btn, EINA_FALSE); + evas_object_smart_callback_add(btn, "clicked", _keyboard_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_OPT_KEYBOARD"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } return btn; @@ -381,14 +458,20 @@ static Evas_Object * __ise_gl_3button_content_get(void *data, Evas_Object *obj, if (!strcmp(part, "elm.icon.1.touch_area")) { evas_object_layer_set(btn, 32000); evas_object_smart_callback_add(btn, "clicked", _stt_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_IME_MBODY_VOICE_INPUT"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(part, "elm.icon.2.touch_area")){ evas_object_layer_set(btn, 32000); evas_object_smart_callback_add(btn, "clicked", _emoticon_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_HEADER_EMOTICON"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } else if (!strcmp(part, "elm.icon.3.touch_area")) { evas_object_layer_set(btn, 32000); evas_object_propagate_events_set(btn, EINA_FALSE); evas_object_smart_callback_add(btn, "clicked", _keyboard_clicked_cb, app_data); + elm_atspi_accessible_name_set(btn, "IDS_COM_OPT_KEYBOARD"); + elm_atspi_accessible_translation_domain_set(btn, PACKAGE); } return btn; @@ -400,6 +483,23 @@ static Evas_Object * __ise_gl_3button_content_get(void *data, Evas_Object *obj, return NULL; } +static char * __ise_smartreply_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + if(!strcmp(part, "elm.text")) { + int index; + char *reply = NULL; + index = (intptr_t)data; + if (index < 0) + return NULL; + + reply = input_smartreply_get_nth_item(index, NULL); + if (reply == NULL) + return NULL; + + return reply; + } + return NULL; +} static void __ise_gl_lang_changed(void *data, Evas_Object *obj, void *event_info) { @@ -407,6 +507,39 @@ static void __ise_gl_lang_changed(void *data, Evas_Object *obj, void *event_info elm_genlist_realized_items_update(obj); } +static char * __ise_drawing_text_get(void *data, Evas_Object *obj, const char *part) +{ + if(!strcmp(part, "elm.text")) { + return(strdup(gettext("WDS_IME_MBODY_DRAWING_M_EMOTICON_ABB"))); + } + return NULL; +} + +static Evas_Object * __ise_drawing_content_get(void *data, Evas_Object *obj, const char *part) +{ + if (!strcmp(part, "elm.icon")) { + Evas_Object* btn = elm_button_add(obj); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + Evas_Object* ic = elm_image_add(btn); + elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE); + string path = get_resource_path(); + if (_WEARABLE) + path = path + "wearable/"; + else if (_TV) + path = path + "tv/"; + else + path = path + "mobile/"; + elm_object_style_set(btn, "ime_button_drawing"); + string path_ic = path + "images/wi_drawing_icon.png"; + elm_image_file_set(ic, path_ic.c_str(), NULL); + elm_object_content_set(btn, ic); + evas_object_layer_set(btn, 32000); + return btn; + } + return NULL; +} + void set_source_caller_app_id(app_control_h app_control) { if (!app_control){ @@ -424,7 +557,7 @@ void set_source_caller_app_id(app_control_h app_control) } } -void reply_to_sender_by_callback(const char *value, const char *type) +void reply_to_sender_by_callback(const char *value, const char *type, const char *path[], const char *cursor_position) { PRINTFUNC(DLOG_DEBUG, ""); @@ -439,6 +572,13 @@ void reply_to_sender_by_callback(const char *value, const char *type) if (type) app_control_add_extra_data(app_control, "reply_type", type); + if (path != NULL) { + app_control_add_extra_data_array(app_control, APP_CONTROL_DATA_PATH, path, 1); + } + + if (cursor_position != NULL) + app_control_add_extra_data(app_control, "cursor_position_get", cursor_position); + set_source_caller_app_id(app_control); ret = app_control_reply_to_launch_request(app_control, app_data->source_app_control, APP_CONTROL_RESULT_SUCCEEDED); @@ -520,6 +660,8 @@ void show_popup_toast(const char *text, bool check_img) string path = get_resource_path(); if (_WEARABLE) path = path + "wearable/"; + else if (_TV) + path = path + "tv/"; else path = path + "mobile/"; string path_ic = path + "/images/toast_check_icon.png"; @@ -560,15 +702,15 @@ void _back_to_genlist_for_selector() if (!app_data) return; - if (app_data->app_type == APP_TYPE_STT || app_data->app_type == APP_TYPE_EMOTICON){ - PRINTFUNC(DLOG_DEBUG, "launched as STT/EMOTICON mode, So exit here."); - reply_to_sender_by_callback(NULL, NULL); - elm_exit(); - } if (_WEARABLE) { Evas_Object *circle_genlist = (Evas_Object *) evas_object_data_get(app_data->genlist, "circle"); eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE); } + if (app_data->app_type == APP_TYPE_STT || app_data->app_type == APP_TYPE_EMOTICON || app_data->app_type == APP_TYPE_KEYBOARD){ + PRINTFUNC(DLOG_DEBUG, "launched as STT/EMOTICON/KEYBOARD mode, So exit here."); + reply_to_sender_by_callback(NULL, NULL, NULL, NULL); + ui_app_exit(); + } } static void _item_realized(void *data, Evas_Object *obj, void *event_info) //called when list scrolled @@ -599,12 +741,15 @@ Evas_Object* _create_genlist(Evas_Object* navi) show_gl_focus(EINA_FALSE); + const char *item_style = NULL; + if (_WEARABLE) + item_style = "empty"; Elm_Object_Item *nf_main_item = elm_naviframe_item_push(navi, NULL, NULL, NULL, genlist, - "empty"); + item_style); elm_naviframe_item_pop_cb_set(nf_main_item, back_cb, app_data); evas_object_smart_callback_add(genlist, "realized", _item_realized, NULL); @@ -643,15 +788,6 @@ static void _item_position_changed_cb(void *data, Evas_Object *obj, void *event_ } } -static char * -_main_menu_title_text_get(void *data, Evas_Object *obj, const char *part) -{ - char buf[1024]; - - snprintf(buf, 1023, "%s", "Select method"); - return strdup(buf); -} - void _create_genlist_items(void* user_data) { App_Data* app_data = (App_Data*) user_data; @@ -665,8 +801,8 @@ void _create_genlist_items(void* user_data) elm_genlist_clear(app_data->genlist); Elm_Genlist_Item_Class * itc0 = elm_genlist_item_class_new(); - itc0->item_style = "title"; - itc0->func.text_get = _main_menu_title_text_get; + itc0->item_style = NULL; + itc0->func.text_get = NULL; itc0->func.content_get = NULL; itc0->func.state_get = NULL; itc0->func.del = NULL; @@ -759,6 +895,11 @@ void _update_genlist_items(void *user_data) _create_header_items(user_data); + if (input_smartreply_is_enabled()) + g_smartreply_item_size = _update_smartreply_items(user_data); + else + g_smartreply_item_size = 0; + g_template_item_size = _update_template_items(user_data); /* Update genlist item position */ @@ -766,11 +907,115 @@ void _update_genlist_items(void *user_data) elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE); } +unsigned int _update_smartreply_items(void *user_data) +{ + App_Data* app_data; + + Elm_Object_Item *first; + + unsigned int i = 0; + unsigned int len = 0; + unsigned int item_size = 0; + + app_data = (App_Data *)user_data; + + if (app_data == NULL) { + PRINTFUNC(DLOG_ERROR, "Can not get app_data"); + return item_size; + } + + if (app_data->genlist == NULL) { + /* smartreply will update when genlist is exist only */ + PRINTFUNC(DLOG_ERROR, "Can not get getlist"); + return item_size; + } + + /* Move to smartreply */ + first = elm_genlist_first_item_get(app_data->genlist); + elm_genlist_item_next_get(first); + + if (input_smartreply_is_enabled() == false) + return item_size; + + /* Append newly added smartreply list */ + len = input_smartreply_get_reply_num(); + + if (len > 0) { + const std::vector template_list = input_template_get_list(); + + Elm_Genlist_Item_Class *itc; + + itc = elm_genlist_item_class_new(); + itc->item_style = "1text"; + itc->func.text_get = __ise_smartreply_gl_text_get; + itc->func.content_get = NULL; + itc->func.state_get = NULL; + itc->func.del = NULL; + + for (i = 0; i < len; i++) { + char *reply = (char *)"hello"; + unsigned int j; + bool matched; + + matched = false; + + int type; + reply = input_smartreply_get_nth_item(i, &type); + if (reply == NULL) + continue; + SECURE_LOGD("SmartReply = [%d]%s", i, reply); + + for (j = 0; j < template_list.size(); j++) { + const char *template_str; + + if (template_list[j].use_gettext) + template_str = gettext(template_list[j].text.c_str()); + else + template_str = template_list[j].text.c_str(); + + if (!__compare_string(reply, template_str)) { + matched = true; + break; + } + } + + if (matched == true) + continue; + + elm_genlist_item_append(app_data->genlist, + itc, + (void *)(uintptr_t)i, + NULL, + ELM_GENLIST_ITEM_NONE, + __ise_smartreply_gl_sel, + app_data); + + item_size++; + if (item_size >= 3) + break; + } + elm_genlist_item_class_free(itc); + } + return item_size; +} + +static void _drawing_item_clicked_cb(void *data, Evas_Object * obj, void *event_info) +{ + PRINTFUNC(DLOG_DEBUG, "%s", __func__); + App_Data* ad = (App_Data*) data; + if (!ad) + return; + + launch_drawing_app(ad); +} + unsigned int _update_template_items(void *user_data) { App_Data* app_data; Elm_Object_Item *first; + Elm_Object_Item *menu; + Elm_Object_Item *pos; unsigned int i = 0; unsigned int item_size = 0; @@ -791,7 +1036,20 @@ unsigned int _update_template_items(void *user_data) first = elm_genlist_first_item_get(app_data->genlist); if (first == NULL) return 0; - elm_genlist_item_next_get(first); + menu = elm_genlist_item_next_get(first); + + pos = menu; + /* move to smartreply next if it need */ + if (input_smartreply_is_enabled()) { + unsigned int j = 0; + + for (j = 0; j < g_smartreply_item_size; j++) { + if (pos == NULL) + break; + + pos = elm_genlist_item_next_get(pos); + } + } /* Append New Template list */ const std::vector template_list = input_template_get_list(); @@ -808,7 +1066,7 @@ unsigned int _update_template_items(void *user_data) itc->func.del = NULL; for (i = 0; i < template_list.size(); i++) { - elm_genlist_item_append(app_data->genlist, + pos = elm_genlist_item_append(app_data->genlist, itc, (void *)(uintptr_t)i, NULL, @@ -818,11 +1076,75 @@ unsigned int _update_template_items(void *user_data) item_size++; } elm_genlist_item_class_free(itc); + + // drawing button (+) + if (app_data->mime_type == MIME_TYPE_ALL) { + Elm_Genlist_Item_Class *itc; + itc = elm_genlist_item_class_new(); + + itc->item_style = "1text.1icon"; + itc->func.text_get = __ise_drawing_text_get;; + itc->func.content_get = __ise_drawing_content_get; + itc->func.state_get = NULL; + itc->func.del = NULL; + + elm_genlist_item_append(app_data->genlist, + itc, + NULL, + NULL, + ELM_GENLIST_ITEM_NONE, + _drawing_item_clicked_cb, + app_data); + + elm_genlist_item_class_free(itc); + } + + // dummy item for empty space + Elm_Genlist_Item_Class * itc0 = elm_genlist_item_class_new(); + itc0->item_style = "title"; + itc0->func.text_get = NULL; + itc0->func.content_get = NULL; + itc0->func.state_get = NULL; + itc0->func.del = NULL; + + it_empty = elm_genlist_item_append(app_data->genlist, itc0, + NULL, NULL, + ELM_GENLIST_ITEM_NONE, + NULL, NULL); + elm_genlist_item_class_free(itc0); } return item_size; } +bool __compare_string(const char * smart_str, const char * template_str) +{ + int src_len = 0; + int dst_len = 0; + bool ret = true; + + if(!smart_str||!template_str) + return ret; + + src_len = strlen(smart_str); + dst_len = strlen(template_str); + + if(smart_str[src_len-1] == '.') + src_len--; + + while(template_str[dst_len-1] == ' ') + dst_len--; + if(template_str[dst_len-1] == '.') + dst_len--; + + dst_len = (dst_len > src_len)? dst_len : src_len; + + if(!strncmp(smart_str, template_str, (size_t)dst_len)) + ret = false; + + return (ret); +} + bool _app_create(void* user_data) { int width = 1000, height = 1000; @@ -831,7 +1153,7 @@ bool _app_create(void* user_data) Evas_Object* conform = NULL; Evas_Object* bg = NULL; Evas_Object* window = NULL; - Eext_Circle_Surface *surface; + Eext_Circle_Surface *surface = NULL; if (!user_data) { return false; @@ -902,9 +1224,46 @@ void _app_service(app_control_h service, void* user_data) char **input_type_array = NULL; int input_type_array_len = -1; bool is_extra_data_array = false; + char *mime_type = NULL; app_control_clone(&(app_data->source_app_control), service); app_data->reply_type = REPLY_APP_NORMAL; + app_data->mime_type = MIME_TYPE_ALL; + + ret = app_control_get_mime(service, &mime_type); + if (ret != APP_CONTROL_ERROR_NONE) { + LOGD("Fail to get mime type : %d", ret); + } else { + if (mime_type) { + LOGD("mime type = %s", mime_type); + if (!strncmp(mime_type, "image/", strlen("image/"))) { + app_data->mime_type = MIME_TYPE_IMAGE; + app_data->app_type = APP_TYPE_DRAWING; + launch_drawing_app((void *)app_data); + if (mime_type) + free(mime_type); + goto ACTIVATE; + } else if (!strncmp(mime_type, "audio/", strlen("audio/"))) { + app_data->mime_type = MIME_TYPE_AUDIO; + app_data->app_type = APP_TYPE_STT; + _stt_clicked_cb((void *)app_data, NULL, NULL); + if (mime_type) + free(mime_type); + goto ACTIVATE; + } else if (!strncmp(mime_type, "text/", strlen("text/"))) { + app_data->mime_type = MIME_TYPE_TEXT; + } + } + } + if (mime_type) + free(mime_type); + + if (_TV || _MOBILE) { + app_data->app_type = APP_TYPE_KEYBOARD; + input_keyboard_init(service); + _keyboard_clicked_cb((void *)app_data, NULL, NULL); + goto ACTIVATE; + } ret = app_control_is_extra_data_array(service, APP_CONTROL_DATA_INPUT_TYPE, &is_extra_data_array); if ( is_extra_data_array == true) { @@ -938,6 +1297,12 @@ void _app_service(app_control_h service, void* user_data) input_keyboard_init(service); + input_smartreply_init(service); + input_smartreply_set_notify(_input_smartreply_notify_cb, NULL); + + if (input_smartreply_is_enabled()) + input_smartreply_get_reply_async(); + input_template_init(service); input_template_set_notify(_input_template_notify_cb, NULL); @@ -960,6 +1325,7 @@ void _app_pause(void* user_data) void _app_resume(void* user_data) { PRINTFUNC(DLOG_DEBUG, ""); + resume_voice(); } void _app_terminate(void* user_data) @@ -978,6 +1344,7 @@ void _app_terminate(void* user_data) free(app_data->shared_res_path); input_keyboard_deinit(); + input_smartreply_deinit(); input_template_unset_notify(); input_template_deinit();