2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
23 #include <efl_assist.h>
25 #include <vconf-keys.h>
27 //#include "ui_extension.h"
28 #include "w-input-selector.h"
29 #include "w-input-template.h"
30 #include "w-input-smartreply.h"
31 #include "w-input-keyboard.h"
32 #include "w-input-stt-ise.h"
33 #include "w-input-emoticon.h"
34 #include "w-input-stt-tos.h"
36 #ifdef SUPPORT_LOG_MANAGER
37 #include <samsung_log_manager.h>
38 #include <samsung_log_manager_uri.h>
46 App_Data* app_data = NULL;
47 #ifdef SUPPORT_LOG_MANAGER
48 static samsung_log_manager_h g_log_manager = NULL;
51 InputKeyboardData g_input_keyboard_data;
53 static Elm_Object_Item *it_empty;
54 static Elm_Object_Item *it_title;
55 static Elm_Object_Item *it_plus;
56 static int g_smartreply_current_number = 0; /* currently loaded smartreply number */
57 static unsigned int g_template_current_number = 0; /* currnetly loaded template number */
59 Evas_Coord last_step; // 0 ~ 9 for gesture, 10~11 for rotary
61 static Eina_Bool force_highlight_to_top = EINA_FALSE;
62 static Eina_Bool force_highlight_to_bottom = EINA_FALSE;
63 static Eina_Bool is_genlist_highlighed = EINA_FALSE;
65 void _init_app_data(App_Data* app_data);
66 static void _app_language_changed(app_event_info_h event_info, void *user_data);
67 static int _app_control_request_transient_app_cb(void *data);
68 #ifdef SUPPORT_LOG_MANAGER
69 static void log_manager_init(void);
70 static void log_manager_exit(void);
71 static void log_manager_set(const char *feature, const char *extra, const char *value);
74 static char *_genlist_text_set_theme_color(const char *str, const char *code);
76 Evas_Object* _create_genlist(Evas_Object* parent);
77 void _create_genlist_items(void* user_data, bool is_type_reply);
78 void _update_genlist_items(void *user_data);
79 void _update_smartreply_items(void *user_data);
80 void _update_template_items(void *user_data);
81 static void _popup_close_cb(void *data, Evas_Object *obj, void *event_info);
82 static void _popup_back_cb(void *data, Evas_Object *obj, void *event_info);
83 char * _toast_delete_popup_access_info_cb(void *data, Evas_Object *obj);
87 void _init_app_data(App_Data* app_data)
89 app_data->win_main = NULL;
90 app_data->layout_main = NULL;
91 app_data->conform = NULL;
92 app_data->naviframe = NULL;
93 app_data->genlist = NULL;
95 app_data->res_path = NULL;
100 Evas_Object* load_edj(Evas_Object* parent, const char* file, const char* group)
103 Evas_Object* content;
106 window = elm_layout_add(parent);
108 ret = elm_layout_file_set(window, file, group);
110 evas_object_del(window);
114 content = elm_layout_add(parent);
115 elm_layout_theme_set(content, "layout", "application", "default");
116 elm_object_part_content_set(window, "elm.swallow.content", content);
118 evas_object_size_hint_weight_set(window, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
124 void init_customizing_theme(void)
126 string stt_edj_path = get_resource_path();
127 string app_edj_path = get_resource_path();
129 stt_edj_path = stt_edj_path + STT_EDJ_FILE;
130 app_edj_path = app_edj_path + APP_EDJ_FILE;
132 elm_theme_extension_add(NULL, stt_edj_path.c_str());
133 elm_theme_extension_add(NULL, app_edj_path.c_str());
137 static Eina_Bool back_cb(void *data, Elm_Object_Item *it)
139 reply_to_sender_by_callback_for_back();
144 static void _stt_clicked_cb(void *data, Evas_Object * obj, void *event_info)
146 App_Data* ad = (App_Data*)data;
148 PRINTFUNC(DLOG_DEBUG, "");
154 bool bAgreed = false;
155 stt_get_user_agreement(&bAgreed);
158 if(is_tos_N66_agreed() == EINA_FALSE){
159 if(is_sap_connection() == EINA_TRUE){
160 ise_show_tos_n66_popup(ad);
162 launch_bt_connection_popup(ad);
166 ise_show_stt_popup(ad);
170 #ifdef SUPPORT_LOG_MANAGER
171 log_manager_set("IM01", "STT", NULL);
175 static void _input_smartreply_notify_cb(void *user_data)
177 ecore_main_loop_iterate();
178 _update_genlist_items((void *)app_data);
181 static void _input_template_notify_cb(void *user_data)
183 _update_genlist_items((void *)app_data);
187 static void _emoticon_clicked_cb(void *data, Evas_Object * obj, void *event_info)
189 App_Data* ad = (App_Data*)data;
191 PRINTFUNC(DLOG_DEBUG, "");
196 // ise_show_emoticon_popup(ad);
197 ise_show_emoticon_popup_rotary(ad);
199 #ifdef SUPPORT_LOG_MANAGER
200 log_manager_set("IM01", "Emoticon", NULL);
204 static void _keyboard_clicked_cb(void *data, Evas_Object * obj, void *event_info)
206 App_Data* ad = (App_Data *)data;
208 PRINTFUNC(DLOG_DEBUG, "");
213 #ifdef SUPPORT_LOG_MANAGER
214 log_manager_set("IM01", "Keypad", NULL);
217 if(app_data->app_type == APP_TYPE_KEYBOARD_FROM_SMS)
218 input_keyboard_launch(ad->win_main);
220 input_keyboard_launch_with_ui(ad->win_main, data);
223 static void __bt_connection_result_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
228 PRINTFUNC(DLOG_ERROR, "service_h is NULL");
232 app_control_get_extra_data(reply, "__BT_CONNECTION__", &val);
234 if( strcmp(val, "Connected") == 0 )
236 PRINTFUNC(DLOG_ERROR, "BT Connected");
240 PRINTFUNC(DLOG_ERROR, "BT Not Connected");
248 static void __ise_smartreply_gl_sel(void *data, Evas_Object *obj, void *event_info)
250 App_Data* app_data = (App_Data*) data;
251 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
254 elm_genlist_item_selected_set(item, EINA_FALSE);
256 int index = (unsigned int) elm_object_item_data_get(item);
258 #ifdef SUPPORT_LOG_MANAGER
259 log_manager_set("IM01", "Preset", NULL);
260 log_manager_set("IM02", "Smart Reply", NULL);
262 char *reply = input_smartreply_get_nth_item(index);
264 input_smartreply_send_feedback(reply);
265 if(app_data->reply_type == REPLY_APP_CONTROL){
266 reply_to_sender_by_appcontrol((void*)app_data, reply, "smartreply");
269 reply_to_sender_by_callback(reply, "smartreply");
278 static void __ise_template_add_gl_sel(void *data, Evas_Object *obj, void *event_info)
280 App_Data* app_data = (App_Data*) data;
281 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
284 elm_genlist_item_selected_set(item, EINA_FALSE);
286 if(is_sap_connection() == EINA_TRUE){
288 show_popup_toast(gettext("WDS_IME_TPOP_ADD_TEMPLATE_ON_YOUR_PHONE_ABB"), true);
290 // send message to Host
291 app_control_h appctrl;
292 app_control_create( &appctrl );
293 app_control_set_app_id(appctrl, "com.samsung.w-manager-service");
294 app_control_add_extra_data(appctrl, "type", "gm_setting");
295 app_control_add_extra_data(appctrl, "data/setting_menu", "texttemplate_setting");
296 app_control_send_launch_request(appctrl, NULL, NULL);
297 app_control_destroy(appctrl);
299 app_control_h app_control;
300 app_control_create(&app_control);
301 app_control_set_app_id(app_control, "com.samsung.bt-connection-popup");
302 app_control_add_extra_data(app_control,"msg", "perform");
303 app_control_send_launch_request(app_control, __bt_connection_result_cb, NULL);
304 app_control_destroy(app_control);
309 static void __ise_template_gl_sel(void *data, Evas_Object *obj, void *event_info)
311 App_Data* app_data = (App_Data*) data;
312 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
316 elm_genlist_item_selected_set(item, EINA_FALSE);
318 index = (unsigned int) elm_object_item_data_get(item);
319 const std::vector<TemplateData> template_list = input_template_get_list();
321 //@ToDo : should call reply function when any template string is selected and confirmed.
322 // Here reply string will be template_list[index].text.c_str();
323 if( index < template_list.size()) {
324 #ifdef SUPPORT_LOG_MANAGER
325 log_manager_set("IM01", "Preset", NULL);
326 log_manager_set("IM02", "Preset except smart reply", NULL);
328 if(app_data->reply_type == REPLY_APP_CONTROL){
329 reply_to_sender_by_appcontrol((void*)app_data, gettext(template_list[index].text.c_str()), "template");
331 reply_to_sender_by_callback(gettext(template_list[index].text.c_str()), "template");
338 static Evas_Object * __ise_gl_3button_content_get(void *data, Evas_Object *obj, const char *part)
340 if (!strcmp(part,"elm.icon.1") || (!strcmp(part,"elm.icon.2")) || (!strcmp(part,"elm.icon.3"))) {
341 Evas_Object* btn = elm_button_add(obj);
342 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
343 evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
344 Evas_Object* ic = elm_image_add(btn);
345 elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
346 string path = get_resource_path();
347 if (!strcmp(part,"elm.icon.1")) {
348 elm_object_style_set(btn, "anchor");
349 string path_ic = path + "images/w_mode_stt_ic.png";
350 elm_image_file_set(ic, path_ic.c_str(), NULL);
351 elm_object_content_set(btn,ic);
352 evas_object_layer_set(btn, 32000);
353 if (elm_config_access_get())
354 elm_access_object_unregister(btn);
356 int powerSavingMode = -1;
358 // Power Saving mode check
359 ret = vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &powerSavingMode);
362 PRINTFUNC(DLOG_ERROR,"VCONFKEY_SETAPPL_PSMODE FAILED");
365 if (powerSavingMode == SETTING_PSMODE_WEARABLE_ENHANCED) {
366 PRINTFUNC(DLOG_ERROR,"Power Saving mode, disable stt !!!");
367 elm_object_disabled_set(btn, EINA_TRUE);
369 } else if (!strcmp(part,"elm.icon.2")){
370 elm_object_style_set(btn, "anchor");
371 string path_ic = path + "images/Delta_w_mode_emoticon_ic.png";
372 elm_image_file_set(ic, path_ic.c_str(), NULL);
373 elm_object_content_set(btn,ic);
374 evas_object_layer_set(btn, 32000);
375 if (elm_config_access_get())
376 elm_access_object_unregister(btn);
378 } else if (!strcmp(part,"elm.icon.3")){
379 elm_object_style_set(btn, "anchor");
380 string path_ic = path + "images/w_mode_keyboard_ic.png";
381 elm_image_file_set(ic, path_ic.c_str(), NULL);
382 elm_object_content_set(btn,ic);
383 evas_object_layer_set(btn, 32000);
384 evas_object_propagate_events_set(btn, EINA_FALSE);
385 if (elm_config_access_get())
386 elm_access_object_unregister(btn);
392 else if (!strcmp(part,"elm.icon.1.touch_area") || (!strcmp(part,"elm.icon.2.touch_area")) || (!strcmp(part,"elm.icon.3.touch_area"))) {
393 Evas_Object* btn = elm_button_add(obj);
394 elm_object_style_set(btn, "touch_area");
395 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
396 evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
397 string path = get_resource_path();
398 if (!strcmp(part,"elm.icon.1.touch_area")) {
400 int powerSavingMode = -1;
402 // Power Saving mode check
403 ret = vconf_get_int(VCONFKEY_SETAPPL_PSMODE, &powerSavingMode);
406 PRINTFUNC(DLOG_ERROR,"VCONFKEY_SETAPPL_PSMODE FAILED");
409 if (powerSavingMode == SETTING_PSMODE_WEARABLE_ENHANCED) {
410 PRINTFUNC(DLOG_ERROR,"Power Saving mode, disable stt !!!");
411 elm_object_disabled_set(btn, EINA_TRUE);
414 evas_object_layer_set(btn, 32000);
415 evas_object_smart_callback_add(btn, "clicked", _stt_clicked_cb, app_data);
416 if (elm_config_access_get()){
417 elm_access_info_set(btn, ELM_ACCESS_INFO, gettext("IDS_IME_MBODY_VOICE_INPUT"));
418 // elm_access_chain_end_set(btn, ELM_HIGHLIGHT_DIR_PREVIOUS);
421 } else if (!strcmp(part,"elm.icon.2.touch_area")){
422 evas_object_layer_set(btn, 32000);
423 evas_object_smart_callback_add(btn, "clicked", _emoticon_clicked_cb, app_data);
424 if (elm_config_access_get())
425 elm_access_info_set(btn, ELM_ACCESS_INFO, gettext("IDS_COM_HEADER_EMOTICON"));
426 } else if (!strcmp(part,"elm.icon.3.touch_area")){
427 evas_object_layer_set(btn, 32000);
428 evas_object_propagate_events_set(btn, EINA_FALSE);
429 evas_object_smart_callback_add(btn, "clicked", _keyboard_clicked_cb, app_data);
430 if (elm_config_access_get())
431 elm_access_info_set(btn, ELM_ACCESS_INFO, gettext("IDS_COM_OPT_KEYBOARD"));
436 else if(!strcmp(part,"base")){
437 Evas_Object* btn = elm_button_add(obj);
438 if (elm_config_access_get())
439 elm_access_object_unregister(btn);
440 elm_object_style_set(btn, "ime_transparent");
446 static char * __ise_smartreply_gl_text_get(void *data, Evas_Object *obj, const char *part)
448 if(!strcmp(part, "elm.text")) {
456 reply = input_smartreply_get_nth_item(index);
460 /* Set hightlight color on first 3 smartreply items */
462 char *colored = _genlist_text_set_theme_color(reply, "AT0113");
477 static char * __ise_template_gl_text_get(void *data, Evas_Object *obj, const char *part)
479 if(!strcmp(part, "elm.text")) {
480 unsigned int index = (unsigned int)data;
481 const std::vector<TemplateData> template_list = input_template_get_list();
483 if(index < template_list.size()) {
484 if(template_list[index].use_gettext)
485 return strdup(gettext(template_list[index].text.c_str()));
487 Eina_Strbuf *buf = NULL;
488 const char *str = NULL;
491 buf = eina_strbuf_new();
493 eina_strbuf_append(buf, template_list[index].text.c_str());
494 eina_strbuf_replace_all(buf, "\n", "");
495 eina_strbuf_replace_all(buf, "\r", "");
497 str = eina_strbuf_string_get(buf);
500 markup = elm_entry_utf8_to_markup(str);
502 eina_strbuf_free(buf);
513 static char * __ise_addtemplate_gl_text_get(void *data, Evas_Object *obj, const char *part)
515 if(!strcmp(part, "elm.text")) {
516 return(strdup(gettext("WDS_IME_MBODY_ADD_TEMPLATE_ABB")));
521 static Evas_Object * __ise_gl_1button_content_get(void *data, Evas_Object *obj, const char *part)
523 if (!strcmp(part,"elm.icon")) {
524 Evas_Object* btn = elm_button_add(obj);
525 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
526 evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
527 Evas_Object* ic = elm_image_add(btn);
528 elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
529 string path = get_resource_path();
530 elm_object_style_set(btn, "ime_button_template");
531 string path_ic = path + "/images/w_list_add_ic.png";
532 elm_image_file_set(ic, path_ic.c_str(), NULL);
533 elm_object_content_set(btn,ic);
534 evas_object_layer_set(btn, 32000);
535 if (elm_config_access_get())
536 elm_access_object_unregister(btn);
543 static void __ise_gl_lang_changed(void *data, Evas_Object *obj, void *event_info)
545 //Update genlist items. The Item texts will be translated in the _gl_text_get().
546 elm_genlist_realized_items_update(obj);
549 static int _app_control_request_transient_app_cb(void *data)
555 static char *_genlist_text_set_theme_color(const char *str, const char *code)
558 Eina_Strbuf *buf = NULL;
559 char *colored = NULL;
564 buf = eina_strbuf_new();
566 PRINTFUNC(DLOG_ERROR, "Can not get create strbuf");
570 // ea_theme_color_get(code,
572 // NULL, NULL, NULL, NULL,
573 // NULL, NULL, NULL, NULL);
575 eina_strbuf_append_printf(buf, "<color=#%02x%02x%02x%02x>%s</color>",
578 colored = eina_strbuf_string_steal(buf);
580 eina_strbuf_free(buf);
586 static void _app_control_send_reply_cb(app_control_h request, app_control_h reply,
587 app_control_result_e result, void *user_data)
589 PRINTFUNC(DLOG_DEBUG, "");
590 reply_to_sender_by_callback(NULL, NULL);
594 void set_source_caller_app_id(app_control_h app_control)
597 PRINTFUNC(DLOG_ERROR,"can't get app_control");
601 // CscFeatureBool is_security_permission_manager = CSC_FEATURE_BOOL_FALSE;
602 // is_security_permission_manager = csc_feature_get_bool(CSC_FEATURE_DEF_BOOL_SECURITY_PERMISSION_MANAGER);
604 // if(is_security_permission_manager == CSC_FEATURE_BOOL_TRUE){
607 app_control_get_caller(app_data->source_app_control, &caller);
610 PRINTFUNC(DLOG_DEBUG,"caller = %s", caller);
611 app_control_add_extra_data(app_control, "caller_appid", caller);
618 void reply_to_sender_by_appcontrol(void *data, const char *value, const char *type)
621 PRINTFUNC(DLOG_DEBUG, "");
626 app_control_h app_control;
628 App_Data *appdata = (App_Data *)data;
631 PRINTFUNC(DLOG_ERROR,"Null pointer");
635 ret = app_control_create(&app_control);
636 if (ret != APP_CONTROL_ERROR_NONE) {
637 PRINTFUNC(DLOG_ERROR, "Can not create app_control : %d", ret);
641 app_id = g_input_keyboard_data.app_id;
642 if (app_id == NULL) {
643 PRINTFUNC(DLOG_INFO, "app id is undefined, use defualt");
644 app_id = "com.samsung.message.appcontrol.compose";
647 if(!strcmp(app_id, "com.samsung.message.appcontrol.compose")){
648 app_id = "com.samsung.msg-send";
651 app_control_set_app_id(app_control, app_id);
652 app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT);
654 ret = app_control_set_window(app_control,
655 elm_win_xwindow_get(appdata->win_main));
656 if (ret != APP_CONTROL_ERROR_NONE) {
657 PRINTFUNC(DLOG_ERROR, "Can not app control set window : %d", ret);
658 app_control_destroy(app_control);
662 if (g_input_keyboard_data.data_array && g_input_keyboard_data.data_array_len > 0) {
663 app_control_add_extra_data_array(app_control,
664 "selector_keyboard_data_array",
665 (const char**)(g_input_keyboard_data.data_array),
666 g_input_keyboard_data.data_array_len);
669 app_control_add_extra_data(app_control, "selector_send_data_array", "sending_popup");
672 app_control_add_extra_data(app_control, "selected_context", value);
675 app_control_add_extra_data(app_control, "reply_type", type);
677 set_source_caller_app_id(app_control);
679 ret = app_control_send_launch_request(app_control,
680 _app_control_send_reply_cb,
683 if (ret != APP_CONTROL_ERROR_NONE)
684 PRINTFUNC(DLOG_ERROR, "Can not launch app_control: %d", ret);
686 app_control_destroy(app_control);
693 void reply_to_sender_by_callback(const char *value, const char *type)
696 PRINTFUNC(DLOG_DEBUG, "");
698 app_control_h app_control;
700 if(app_control_create(&app_control) == 0) {
704 app_control_add_extra_data(app_control, "selected_context", value);
707 app_control_add_extra_data(app_control, "reply_type", type);
709 set_source_caller_app_id(app_control);
711 ret = app_control_reply_to_launch_request( app_control, app_data->source_app_control, APP_CONTROL_RESULT_SUCCEEDED);
712 if (ret != APP_CONTROL_ERROR_NONE)
713 PRINTFUNC(DLOG_ERROR, "reply failed : %d", ret);
715 app_control_destroy(app_control);
716 app_control_destroy(app_data->source_app_control);
717 app_data->source_app_control = NULL;
721 void reply_to_sender_by_callback_for_back()
724 PRINTFUNC(DLOG_DEBUG, "");
726 app_control_h app_control;
728 if(app_control_create(&app_control) == 0) {
731 app_control_add_extra_data(app_control, "back_to_composer", "yes");
733 ret = app_control_reply_to_launch_request( app_control, app_data->source_app_control, APP_CONTROL_RESULT_SUCCEEDED);
734 if (ret != APP_CONTROL_ERROR_NONE)
735 PRINTFUNC(DLOG_ERROR, "reply failed : %d", ret);
737 app_control_destroy(app_control);
738 app_control_destroy(app_data->source_app_control);
739 app_data->source_app_control = NULL;
744 char* get_resource_path()
746 if(NULL == app_data->res_path) {
747 app_data->res_path = app_get_resource_path();
748 PRINTFUNC(DLOG_INFO, "set resource path = %s", app_data->res_path);
750 return (app_data->res_path);
753 char* get_shared_resource_path()
755 if(NULL == app_data->shared_res_path) {
756 app_data->shared_res_path = app_get_shared_resource_path();
757 PRINTFUNC(DLOG_INFO, "set shared resource path = %s", app_data->shared_res_path);
759 return (app_data->shared_res_path);
762 void show_gl_focus(Eina_Bool bVisible){
764 if(app_data->genlist == NULL)
767 if(bVisible == EINA_TRUE){
768 elm_object_signal_emit(app_data->genlist, "elm,state,focus_bg,enable", "elm");
769 //elm_layout_theme_set(app_data->genlist, "genlist", "base", "focus_bg");
770 //elm_object_signal_emit(app_data->genlist, "elm,state,focus_bg,show", "elm");
772 elm_object_signal_emit(app_data->genlist, "elm,state,focus_bg,disable", "elm");
773 //elm_layout_theme_set(app_data->genlist, "genlist", "base", "default");
774 //elm_object_signal_emit(app_data->genlist, "elm,state,focus_bg,hide", "elm");
778 void show_popup_toast(const char *text, bool check_img)
781 PRINTFUNC(DLOG_ERROR, "show_popup_toast");
785 popup = elm_popup_add(app_data->win_main);
786 elm_object_style_set(popup, "toast/circle");
787 elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM);
788 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
791 string path = get_resource_path();
792 string path_ic = path + "/images/toast_check_icon.png";
793 Evas_Object * img = elm_image_add(popup);
794 elm_image_file_set(img, path_ic.c_str(), NULL);
795 elm_object_part_content_set(popup, "toast,icon", img);
798 elm_object_part_text_set(popup,"elm.text", text);
801 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, _popup_back_cb, NULL);
802 evas_object_smart_callback_add(popup, "dismissed", _popup_close_cb, NULL);
803 evas_object_smart_callback_add(popup, "block,clicked", _popup_back_cb, NULL);
805 if(elm_config_access_get() == EINA_FALSE)
806 elm_popup_timeout_set(popup, 2.0);
808 elm_object_access_info_set(popup, text);
809 // Evas_Object *ao = elm_object_part_access_object_get(popup, "access.outline");
810 // elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _toast_delete_popup_access_info_cb, popup);
811 elm_popup_timeout_set(popup, 8.0);
814 evas_object_show(popup);
817 static void _popup_close_cb(void *data, Evas_Object *obj, void *event_info)
820 evas_object_hide(obj);
821 evas_object_del(obj);
825 static void _popup_back_cb(void *data, Evas_Object *obj, void *event_info)
828 elm_popup_dismiss(obj);
831 char * _toast_delete_popup_access_info_cb(void *data, Evas_Object *obj)
833 PRINTFUNC(DLOG_ERROR, "%s", __func__);
834 const char * info = elm_object_part_text_get((Evas_Object*)data,"elm.text");
840 void _back_to_genlist_for_selector()
843 PRINTFUNC(DLOG_DEBUG,"");
845 if(!app_data) return;
847 if(app_data->app_type == APP_TYPE_STT || app_data->app_type == APP_TYPE_EMOTICON){
848 PRINTFUNC(DLOG_DEBUG,"launched as STT/EMOTICON mode, So exit here.");
849 reply_to_sender_by_callback(NULL, NULL);
853 Evas_Object *circle_genlist = (Evas_Object *) evas_object_data_get(app_data->genlist, "circle");
855 eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE);
860 char *_it_plus_access_info_cb(void *data, Evas_Object *obj)
862 PRINTFUNC(DLOG_DEBUG,"%s", __func__);
863 std::string text = std::string(gettext("IDS_ACCS_BODY_BUTTON_TTS"));
865 return strdup(text.c_str());
868 char *_access_info_cb(void *data, Evas_Object *obj)
870 PRINTFUNC(DLOG_DEBUG,"%s", __func__);
871 return strdup(gettext("WDS_TTS_TBBODY_DOUBLE_TAP_TO_SEND"));
874 Eina_Bool _access_action_next_cb(void *data, Evas_Object *obj, Elm_Access_Action_Info *action_info)
876 Evas_Object *genlist = (Evas_Object*)data;
877 PRINTFUNC(DLOG_ERROR, "[TNT] _access_action_next_cb called, genlist type:%s", evas_object_type_get(genlist));
878 Elm_Object_Item *it = elm_genlist_first_item_get(genlist);//emptry item?
879 PRINTFUNC(DLOG_ERROR, "[TNT] get first item:%p", it);
880 it = elm_genlist_item_next_get(it);//title item(3 button?)
881 PRINTFUNC(DLOG_ERROR, "[TNT] get Second item:%p, title_item:%p", it, it_title);
882 elm_genlist_item_show(it, ELM_GENLIST_ITEM_SCROLLTO_IN);
883 force_highlight_to_top = EINA_TRUE;
887 Eina_Bool _access_action_prev_cb(void *data, Evas_Object *obj, Elm_Access_Action_Info *action_info)
889 Evas_Object *genlist = (Evas_Object*)data;
890 PRINTFUNC(DLOG_ERROR, "[TNT] _access_action_prev_cb called, genlist type:%s", evas_object_type_get(genlist));
891 Elm_Object_Item *it = elm_genlist_last_item_get(genlist);//plus button item
892 PRINTFUNC(DLOG_ERROR, "[TNT] get last item:%p", it);
893 elm_genlist_item_show(it, ELM_GENLIST_ITEM_SCROLLTO_IN);
894 force_highlight_to_bottom= EINA_TRUE;
898 static void _item_realized(void *data, Evas_Object *obj, void *event_info) //called when list scrolled
900 PRINTFUNC(DLOG_DEBUG,"%s", __func__);
901 if (elm_config_access_get()) {
902 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
903 Evas_Object *item_access = elm_object_item_access_object_get(item);
905 if (item == it_empty || item == it_title) {
906 elm_access_object_unregister(item_access);
907 if (item == it_title)
909 Evas_Object *btn = elm_object_item_part_content_get(item, "elm.icon.1.touch_area");
910 PRINTFUNC(DLOG_ERROR, "[TNT] 1st button(%p), type:%s",btn, evas_object_type_get(btn));
911 Evas_Object *btn_access = btn;//elm_access_object_get(btn);
912 PRINTFUNC(DLOG_ERROR, "[TNT] title item realized!!!!, force_highlight_to_top:%d, is_genlist_highlighed:%d",force_highlight_to_top, is_genlist_highlighed);
913 if (force_highlight_to_top || !is_genlist_highlighed)
915 //highlight to first button.
916 PRINTFUNC(DLOG_ERROR, "[TNT] force highlight to 1st button(%p), acces_obj:%p",btn, btn_access);
917 elm_access_highlight_set(btn_access);
918 force_highlight_to_top = EINA_FALSE;
919 is_genlist_highlighed = EINA_TRUE;
921 PRINTFUNC(DLOG_ERROR, "[TNT] set highlight pre callback on btn");
922 elm_access_action_cb_set(btn_access, ELM_ACCESS_ACTION_HIGHLIGHT_PREV, _access_action_prev_cb, obj);
925 else if (item == it_plus) {
926 //elm_access_object_unregister(item_access); // there is no guide line
927 elm_access_info_cb_set(item_access, ELM_ACCESS_CONTEXT_INFO, _it_plus_access_info_cb, NULL);
928 PRINTFUNC(DLOG_ERROR, "[TNT] set highlight next callback on plus item");
929 elm_access_action_cb_set(item_access, ELM_ACCESS_ACTION_HIGHLIGHT_NEXT, _access_action_next_cb, obj);
930 if (force_highlight_to_bottom)
932 PRINTFUNC(DLOG_ERROR, "[TNT] Forcely set highlight on plus item!!");
933 elm_access_highlight_set(item_access);
934 force_highlight_to_bottom = EINA_FALSE;
935 is_genlist_highlighed = EINA_TRUE;
939 elm_access_info_cb_set(item_access, ELM_ACCESS_CONTEXT_INFO, _access_info_cb, NULL);
944 Evas_Object* _create_genlist(Evas_Object* navi)
947 Evas_Object* genlist = elm_genlist_add(navi);
951 elm_genlist_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
953 Evas_Object* circle_object_genlist = eext_circle_object_genlist_add(genlist, app_data->circle_surface);
954 eext_circle_object_genlist_scroller_policy_set(circle_object_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
955 evas_object_data_set(genlist, "circle", (void *) circle_object_genlist);
956 eext_rotary_object_event_activated_set(circle_object_genlist, EINA_TRUE);
958 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
959 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
961 evas_object_smart_callback_add(genlist, "language,changed", __ise_gl_lang_changed, genlist);
962 evas_object_show(genlist);
964 // uxt_genlist_set_bottom_margin_enabled(genlist, EINA_TRUE);
966 show_gl_focus(EINA_FALSE);
968 Elm_Object_Item *nf_main_item = elm_naviframe_item_push(navi,
975 elm_naviframe_item_pop_cb_set(nf_main_item, back_cb, app_data);
976 evas_object_smart_callback_add(genlist, "realized", _item_realized, NULL);
981 static void _item_position_changed_cb(void *data, Evas_Object *obj, void *event_info)
986 Evas_Object *genlist = (Evas_Object *)obj;
987 Elm_Object_Item *gen_item = (Elm_Object_Item *)data;
990 elm_scroller_region_get(genlist, NULL, &y, NULL, NULL);
992 // PRINTFUNC(DLOG_DEBUG,"y=%d",y);
994 if( 250 > y && y >= 100 ){
995 if(last_step == 0) return;
997 elm_object_item_signal_emit(gen_item, "elm,action,ime,0.0", "elm");
998 show_gl_focus(EINA_TRUE);
999 } else if( 100 > y && y >= 50 ){
1000 if(last_step == 1) return;
1002 elm_object_item_signal_emit(gen_item, "elm,action,ime,0.1", "elm");
1003 show_gl_focus(EINA_TRUE);
1004 } else if( y < 50 && y >=0){
1005 if(last_step == 2) return;
1007 elm_object_item_signal_emit(gen_item, "elm,action,ime,0.9", "elm");
1008 show_gl_focus(EINA_FALSE);
1015 _main_menu_title_text_get(void *data, Evas_Object *obj, const char *part)
1019 snprintf(buf, 1023, "%s", "Select method");
1023 void _create_genlist_items(void* user_data, bool is_type_reply)
1025 LOGD("[psw] _create_genlist_items");
1027 App_Data* app_data = (App_Data*) user_data;
1029 if(NULL == app_data->genlist) {
1030 app_data->genlist = _create_genlist(app_data->naviframe);
1031 if(NULL == app_data->genlist)
1035 elm_genlist_clear(app_data->genlist);
1036 g_smartreply_current_number = 0; /* reset previous smartreply size to 0 */
1038 Elm_Genlist_Item_Class * itc0 = elm_genlist_item_class_new();
1039 itc0->item_style = "title";
1040 itc0->func.text_get = _main_menu_title_text_get;
1041 itc0->func.content_get = NULL;
1042 itc0->func.state_get = NULL;
1043 itc0->func.del = NULL;
1045 Elm_Genlist_Item_Class * itc1 = elm_genlist_item_class_new();
1046 itc1->item_style = "3button";
1047 itc1->func.text_get = NULL;
1048 itc1->func.content_get = __ise_gl_3button_content_get;
1049 itc1->func.state_get = NULL;
1050 itc1->func.del = NULL;
1053 // dummy title for empty space
1054 it_empty = elm_genlist_item_append(app_data->genlist, itc0,
1056 ELM_GENLIST_ITEM_NONE,
1059 if(!is_type_reply) {
1061 it_title = elm_genlist_item_append(app_data->genlist, itc1,
1063 ELM_GENLIST_ITEM_NONE,
1066 elm_genlist_item_select_mode_set(it_title, ELM_OBJECT_SELECT_MODE_NONE);
1069 if (input_smartreply_is_enabled() == false) {
1070 _update_template_items(app_data);
1071 if(g_template_current_number > 0) {
1072 Evas_Object *circle_genlist = (Evas_Object *) evas_object_data_get(app_data->genlist, "circle");
1073 eext_circle_object_genlist_scroller_policy_set(circle_genlist,
1074 ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
1078 // dummy title for bottom
1079 Elm_Object_Item *dummy;
1081 dummy = elm_genlist_item_append(app_data->genlist, itc0,
1083 ELM_GENLIST_ITEM_NONE,
1086 elm_genlist_item_select_mode_set(dummy, ELM_OBJECT_SELECT_MODE_NONE);
1090 Elm_Object_Item *item = elm_genlist_item_next_get(it_title);
1091 elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
1093 evas_object_smart_callback_add(app_data->genlist, "elm,item,position,changed", _item_position_changed_cb, it_title);
1095 elm_genlist_item_class_free(itc0);
1096 elm_genlist_item_class_free(itc1);
1099 void _update_genlist_items(void *user_data)
1103 if (input_smartreply_is_enabled())
1104 len = input_smartreply_get_reply_num();
1106 if (g_smartreply_current_number != len)
1107 _update_smartreply_items(user_data);
1109 _update_template_items(user_data);
1111 g_smartreply_current_number = len;
1113 if (g_smartreply_current_number > 0 || g_template_current_number > 0) {
1114 Evas_Object *circle_genlist = (Evas_Object *) evas_object_data_get(app_data->genlist, "circle");
1115 eext_circle_object_genlist_scroller_policy_set(circle_genlist,
1116 ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
1120 void _update_smartreply_items(void *user_data)
1124 Elm_Object_Item *first;
1125 Elm_Object_Item *menu;
1126 Elm_Object_Item *pos;
1131 app_data = (App_Data *)user_data;
1133 if (app_data == NULL) {
1134 PRINTFUNC(DLOG_ERROR, "Can not get app_data");
1138 if (app_data->genlist == NULL) {
1139 /* smartreply will update when genlist is exist only */
1140 PRINTFUNC(DLOG_ERROR, "Can not get getlist");
1144 if (input_smartreply_is_enabled())
1145 len = input_smartreply_get_reply_num();
1147 if (g_smartreply_current_number == len)
1150 first = elm_genlist_first_item_get(app_data->genlist);
1151 menu = elm_genlist_item_next_get(first);
1153 /* Remove current smartreply list */
1154 pos = elm_genlist_item_next_get(menu);
1155 for (i = 0; i < g_smartreply_current_number; i++) {
1156 Elm_Object_Item *next;
1161 next = elm_genlist_item_next_get(pos);
1162 elm_object_item_del(pos);
1166 /* Append newly added smartreply list */
1168 Elm_Genlist_Item_Class *itc;
1170 itc = elm_genlist_item_class_new();
1172 itc->item_style = "1text";
1173 itc->func.text_get = __ise_smartreply_gl_text_get;
1174 itc->func.content_get = NULL;
1175 itc->func.state_get = NULL;
1176 itc->func.del = NULL;
1179 for (i = 0; i < len; i++) {
1180 pos = elm_genlist_item_insert_after(app_data->genlist,
1185 ELM_GENLIST_ITEM_NONE,
1186 __ise_smartreply_gl_sel,
1191 elm_genlist_item_show(menu, ELM_GENLIST_ITEM_SCROLLTO_TOP);
1193 elm_genlist_item_class_free(itc);
1196 g_smartreply_current_number = len;
1200 void _update_template_items(void *user_data)
1204 Elm_Object_Item *first;
1205 Elm_Object_Item *menu;
1206 Elm_Object_Item *pos;
1207 Elm_Object_Item *template_pos;
1209 unsigned int template_len = 0;
1212 app_data = (App_Data *)user_data;
1214 if (app_data == NULL) {
1215 PRINTFUNC(DLOG_ERROR, "Can not get app_data");
1219 if (app_data->genlist == NULL) {
1220 /* smartreply will update when genlist is exist only */
1221 PRINTFUNC(DLOG_ERROR, "Can not get getlist");
1225 if (app_data->app_type == APP_TYPE_REPLY) {
1226 menu = elm_genlist_first_item_get(app_data->genlist);
1228 first = elm_genlist_first_item_get(app_data->genlist);
1229 menu = elm_genlist_item_next_get(first);
1233 /* move to smartreply next if it need */
1234 if (input_smartreply_is_enabled()) {
1235 int smartreply_len = 0;
1237 smartreply_len = input_smartreply_get_reply_num();
1238 if (smartreply_len > 0) {
1241 for (j = 0; j < smartreply_len; j++) {
1245 pos = elm_genlist_item_next_get(pos);
1250 /* Remove Current template list */
1251 template_pos = elm_genlist_item_next_get(pos);
1252 for (i = 0 ; i < g_template_current_number; i++) {
1253 Elm_Object_Item *next;
1255 if (template_pos == NULL) {
1256 PRINTFUNC(DLOG_ERROR, "Template mismatched, iter : %d, current num: %d",
1257 i, g_template_current_number);
1261 next = elm_genlist_item_next_get(template_pos);
1262 elm_object_item_del(template_pos);
1263 template_pos = next;
1266 /* Remove Add or dummpy button */
1268 Elm_Object_Item *next;
1270 next = elm_genlist_item_next_get(template_pos);
1271 elm_object_item_del(template_pos);
1272 template_pos = next;
1275 /* Append New Template list */
1276 const std::vector<TemplateData> template_list = input_template_get_list();
1279 if (template_list.size() > 0) {
1280 Elm_Genlist_Item_Class *itc;
1282 itc = elm_genlist_item_class_new();
1284 itc->item_style = "1text";
1285 itc->func.text_get = __ise_template_gl_text_get;
1286 itc->func.content_get = NULL;
1287 itc->func.state_get = NULL;
1288 itc->func.del = NULL;
1290 for (i = 0; i < template_list.size(); i++) {
1291 bool matched = false;
1293 if(!template_list[i].use_gettext) {
1294 int smartreply_len = 0;
1297 smartreply_len = input_smartreply_get_reply_num();
1298 for (j = 0; j < smartreply_len; j++) {
1301 reply = input_smartreply_get_nth_item(j);
1303 if (!strcmp(reply, template_list[i].text.c_str())) {
1313 if (matched == false) {
1314 pos = elm_genlist_item_insert_after(app_data->genlist,
1319 ELM_GENLIST_ITEM_NONE,
1320 __ise_template_gl_sel,
1326 elm_genlist_item_class_free(itc);
1330 // template add button (+)
1331 /* if (!input_template_is_user_template()) {
1332 Elm_Genlist_Item_Class *itc;
1334 itc = elm_genlist_item_class_new();
1336 itc->item_style = "1text.1icon";
1337 itc->func.text_get = __ise_addtemplate_gl_text_get;;
1338 itc->func.content_get = __ise_gl_1button_content_get;
1339 itc->func.state_get = NULL;
1340 itc->func.del = NULL;
1343 pos = elm_genlist_item_insert_after(app_data->genlist,
1348 ELM_GENLIST_ITEM_NONE,
1349 __ise_template_add_gl_sel,
1352 elm_genlist_item_class_free(itc);
1356 elm_genlist_item_show(menu, ELM_GENLIST_ITEM_SCROLLTO_TOP);
1358 g_template_current_number = template_len;
1362 bool _app_create(void* user_data)
1364 int width=1000, height=1000;
1365 // App_Data* app_data = NULL;
1366 Evas_Object* layout = NULL;
1367 Evas_Object* conform = NULL;
1368 Evas_Object* bg = NULL;
1369 Evas_Object* window = NULL;
1370 Eext_Circle_Surface *surface;
1376 _app_language_changed(NULL, NULL);
1377 #ifdef SUPPORT_LOG_MANAGER
1381 app_data = (App_Data*)user_data;
1383 elm_app_base_scale_set(1.3);
1385 window = elm_win_add(NULL, PACKAGE, ELM_WIN_BASIC);
1387 init_customizing_theme();
1389 elm_win_title_set(window, PACKAGE);
1390 elm_win_borderless_set(window, EINA_TRUE);
1391 // ecore_x_window_size_get(ecore_x_window_root_first_get(), &width, &height);
1392 evas_object_resize(window, width, height);
1393 elm_win_indicator_mode_set(window, ELM_WIN_INDICATOR_SHOW);
1396 LOGE("elm_win_add() is failed.");
1400 bg = elm_bg_add(window);
1401 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1402 elm_win_resize_object_add(window, bg);
1403 evas_object_show(bg);
1405 layout = elm_layout_add(window);
1406 elm_layout_theme_set(layout, "layout", "application", "default");
1407 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1409 conform = elm_conformant_add(window);
1410 surface = eext_circle_surface_conformant_add(conform);
1411 evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1414 elm_win_resize_object_add(window, conform);
1415 elm_object_content_set(conform, layout);
1417 evas_object_show(layout);
1418 evas_object_show(conform);
1419 evas_object_show(window);
1420 app_data->win_main = window;
1421 app_data->conform = conform;
1422 app_data->layout_main = layout;
1423 app_data->circle_surface = surface;
1424 app_data->app_type = APP_TYPE_SELECT_MODE;
1426 Evas_Object *naviframe = elm_naviframe_add(layout);
1427 elm_naviframe_prev_btn_auto_pushed_set(naviframe, EINA_FALSE);
1428 eext_object_event_callback_add(naviframe, EEXT_CALLBACK_BACK, eext_naviframe_back_cb, NULL);
1429 elm_object_part_content_set(layout, "elm.swallow.content", naviframe);
1430 evas_object_show(naviframe);
1432 app_data->naviframe = naviframe;
1437 void _app_service(app_control_h service, void* user_data)
1441 char *context = NULL;
1442 char *app_id = NULL;
1444 app_control_clone(&(app_data->source_app_control), service);
1446 app_data->reply_type = REPLY_APP_NORMAL;
1447 ret = app_control_get_extra_data(service, "selector_keyboard_app_id", &app_id);
1448 if (ret == APP_CONTROL_ERROR_NONE) {
1449 PRINTFUNC(DLOG_DEBUG, "app_id = %s", app_id);
1453 if(!strcmp(app_id, "com.samsung.message.appcontrol.compose") || !strcmp(app_id, "com.samsung.wemail-send")) {
1454 app_data->reply_type = REPLY_APP_CONTROL;
1456 app_data->reply_type = REPLY_APP_NORMAL;
1463 bool is_type_reply = false;
1464 ret = app_control_get_extra_data(service, APP_CONTROL_DATA_INPUT_TYPE, &context);
1465 if (ret == APP_CONTROL_ERROR_NONE) {
1466 if(!strcmp(context, "input_voice")) {
1467 app_data->app_type = APP_TYPE_STT;
1468 _stt_clicked_cb( (void *)app_data, NULL, NULL );
1470 } else if(!strcmp(context, "input_emoticon")) {
1471 app_data->app_type = APP_TYPE_EMOTICON;
1472 _emoticon_clicked_cb( (void *)app_data, NULL, NULL);
1474 } else if(!strcmp(context, "input_keyboard")) {
1475 app_data->app_type = APP_TYPE_KEYBOARD;
1476 input_keyboard_init(service);
1477 _keyboard_clicked_cb( (void *)app_data, NULL, NULL);
1479 } else if(!strcmp(context, "keyboard_input_from_sms")) {
1480 app_data->app_type = APP_TYPE_KEYBOARD_FROM_SMS;
1481 input_keyboard_init(service);
1482 _keyboard_clicked_cb( (void *)app_data, NULL, NULL);
1484 } else if(!strcmp(context, "input_reply")) {
1485 app_data->app_type = APP_TYPE_REPLY;
1486 is_type_reply = true;
1490 if (app_data->genlist == NULL)
1491 app_data->genlist = _create_genlist(app_data->naviframe);
1493 input_keyboard_init(service);
1495 // input_smartreply_init(service);
1496 // input_smartreply_set_notify(_input_smartreply_notify_cb, NULL);
1498 // if (input_smartreply_is_enabled())
1499 // input_smartreply_get_reply_async();
1502 input_template_init(service);
1503 input_template_set_notify(_input_template_notify_cb, NULL);
1505 _create_genlist_items(app_data, is_type_reply);
1508 elm_win_activate(app_data->win_main);
1510 // app_control_request_transient_app(service, elm_win_xwindow_get(app_data->win_main), _app_control_request_transient_app_cb, NULL);
1516 void _app_pause(void* user_data)
1518 PRINTFUNC(DLOG_DEBUG, "");
1522 void _app_resume(void* user_data)
1524 PRINTFUNC(DLOG_DEBUG, "");
1527 void _app_terminate(void* user_data)
1529 App_Data* app_data = NULL;
1530 app_data = (App_Data*)user_data;
1532 if(app_data->genlist){
1533 evas_object_smart_callback_del(app_data->genlist, "elm,item,position,changed", _item_position_changed_cb);
1536 if(app_data->res_path)
1537 free(app_data->res_path);
1539 if(app_data->shared_res_path)
1540 free(app_data->shared_res_path);
1542 input_keyboard_deinit();
1543 input_smartreply_deinit();
1545 input_template_unset_notify();
1546 input_template_deinit();
1548 #ifdef SUPPORT_LOG_MANAGER
1553 static int init_i18n(const char *domain, const char *dir, char *lang_str)
1555 if (setlocale(LC_ALL, "") == NULL) {
1556 PRINTFUNC(DLOG_INFO,"Some environment variable is invalid, setlocale(LC_ALL, \"\") has returns\ed a null pointer");
1557 if (setlocale(LC_ALL, lang_str) == NULL)
1560 if (bindtextdomain(domain, dir) == NULL)
1562 if (textdomain(domain) == NULL)
1569 * @brief Set language and locale.
1573 static void _app_language_changed(app_event_info_h event_info, void *user_data)
1575 char* lang_str = vconf_get_str(VCONFKEY_LANGSET);
1577 setenv("LANG", lang_str, 1);
1578 setenv("LC_MESSAGES", lang_str, 1);
1580 setenv("LANG", "en_GB.utf8", 1);
1581 setenv("LC_MESSAGES", "en_GB.utf8", 1);
1582 lang_str = strdup("en_GB.UTF-8");
1585 init_i18n(PACKAGE, LOCALEDIR, lang_str);
1588 elm_language_set(lang_str);
1595 int main(int argc, char* argv[])
1597 App_Data app_data = {0,};
1598 ui_app_lifecycle_callback_s event_callback = {0,};
1599 app_event_handler_h handlers[5] = {NULL, };
1601 event_callback.create = _app_create;
1602 event_callback.terminate = _app_terminate;
1603 event_callback.pause = _app_pause;
1604 event_callback.resume = _app_resume;
1605 event_callback.app_control = _app_service;
1607 ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, NULL, &app_data);
1608 ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, NULL, &app_data);
1609 ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, NULL, &app_data);
1610 ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, _app_language_changed, &app_data);
1611 ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, NULL, &app_data);
1613 _init_app_data(&app_data);
1615 int ret = ui_app_main(argc, argv, &event_callback, &app_data);
1616 if (ret != APP_ERROR_NONE) {
1617 LOGD("ui_app_main() is failed. err = %d", ret);
1623 #ifdef SUPPORT_LOG_MANAGER
1624 static void log_manager_init(void)
1629 samsung_log_manager_create(&g_log_manager);
1632 static void log_manager_exit(void)
1634 samsung_log_manager_destroy(g_log_manager);
1635 g_log_manager = NULL;
1638 static void log_manager_set(const char *feature, const char *extra, const char *value)
1640 const char *uri = USE_APP_FEATURE_SURVEY_URI;
1642 unsigned int request_id;
1645 if (g_log_manager == NULL) {
1646 PRINTFUNC(DLOG_ERROR, "log manager doesn't initialized");
1650 if (feature == NULL) {
1651 PRINTFUNC(DLOG_ERROR, "feature is empty");
1655 log_data = bundle_create();
1657 bundle_add(log_data, "app_id", PACKAGE);
1658 bundle_add(log_data, "feature", feature);
1661 bundle_add(log_data, "extra", extra);
1663 bundle_add(log_data, "value", value);
1665 samsung_log_manager_insert(g_log_manager, uri, log_data, NULL, NULL, &request_id);
1667 bundle_free(log_data);