#include <string>
#include <vconf.h>
#include <vconf-keys.h>
+#include <stdint.h>
+#include <system_info.h>
-//#include "ui_extension.h"
#include "w-input-selector.h"
+#include "w-input-template.h"
#include "w-input-keyboard.h"
#include "w-input-stt-ise.h"
#include "w-input-emoticon.h"
-#include "w-input-stt-tos.h"
#include <stt.h>
static Elm_Object_Item *it_empty;
static Elm_Object_Item *it_title;
+static unsigned int g_template_item_size = 0; /* Current Template item size */
+
Evas_Coord last_step; // 0 ~ 9 for gesture, 10~11 for rotary
+tizen_profile_t _get_tizen_profile()
+{
+ static tizen_profile_t profile = TIZEN_PROFILE_UNKNOWN;
+ if (__builtin_expect(profile != TIZEN_PROFILE_UNKNOWN, 1))
+ return profile;
+
+ char *profileName;
+ system_info_get_platform_string("http://tizen.org/feature/profile", &profileName);
+ switch (*profileName)
+ {
+ case 'm':
+ case 'M':
+ profile = TIZEN_PROFILE_MOBILE;
+ break;
+ case 'w':
+ case 'W':
+ profile = TIZEN_PROFILE_WEARABLE;
+ break;
+ case 't':
+ case 'T':
+ profile = TIZEN_PROFILE_TV;
+ break;
+ case 'i':
+ case 'I':
+ profile = TIZEN_PROFILE_IVI;
+ break;
+ default: // common or unknown ==> ALL ARE COMMON.
+ profile = TIZEN_PROFILE_COMMON;
+ }
+ free(profileName);
+
+ return profile;
+}
+
+
void _init_app_data(App_Data* app_data);
static void _app_language_changed(app_event_info_h event_info, void *user_data);
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_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);
-
-
void _init_app_data(App_Data* app_data)
{
- app_data->win_main = NULL;
- app_data->layout_main = NULL;
- app_data->conform = NULL;
- app_data->naviframe = NULL;
- app_data->genlist = NULL;
+ app_data->win_main = NULL;
+ app_data->layout_main = NULL;
+ app_data->conform = NULL;
+ app_data->naviframe = NULL;
+ app_data->genlist = NULL;
- app_data->res_path = NULL;
+ app_data->res_path = NULL;
}
-
-
Evas_Object* load_edj(Evas_Object* parent, const char* file, const char* group)
{
Evas_Object* window;
evas_object_size_hint_weight_set(window, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
}
-
return window;
}
string stt_edj_path = get_resource_path();
string app_edj_path = get_resource_path();
- stt_edj_path = stt_edj_path + STT_EDJ_FILE;
- app_edj_path = app_edj_path + APP_EDJ_FILE;
+ 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) {
+ stt_edj_path = stt_edj_path + STT_EDJ_FILE_MOBILE;
+ app_edj_path = app_edj_path + APP_EDJ_FILE_MOBILE;
+ }
elm_theme_extension_add(NULL, stt_edj_path.c_str());
elm_theme_extension_add(NULL, app_edj_path.c_str());
static Eina_Bool back_cb(void *data, Elm_Object_Item *it)
{
- reply_to_sender_by_callback_for_back();
- elm_exit();
- return EINA_FALSE;
+ reply_to_sender_by_callback_for_back();
+ elm_exit();
+ return EINA_FALSE;
}
static void _stt_clicked_cb(void *data, Evas_Object * obj, void *event_info)
PRINTFUNC(DLOG_DEBUG, "");
- if(!ad)
+ if (!ad)
return;
-#if 0
- bool bAgreed = false;
- stt_get_user_agreement(&bAgreed);
- if(!bAgreed){
-#endif
- if(is_tos_N66_agreed() == EINA_FALSE){
- if(is_sap_connection() == EINA_TRUE){
- ise_show_tos_n66_popup(ad);
- } else {
- launch_bt_connection_popup(ad);
- }
- } else {
- ise_show_stt_popup(ad);
- }
+ ise_show_stt_popup(ad);
+}
+
+static void _input_template_notify_cb(void *user_data)
+{
+ _update_genlist_items((void *)app_data);
}
static void _emoticon_clicked_cb(void *data, Evas_Object * obj, void *event_info)
PRINTFUNC(DLOG_DEBUG, "");
- if(!ad)
+ if (!ad)
return;
-// ise_show_emoticon_popup(ad);
- ise_show_emoticon_popup_rotary(ad);
+ ise_show_emoticon_list(ad);
}
static void _keyboard_clicked_cb(void *data, Evas_Object * obj, void *event_info)
input_keyboard_launch(ad->win_main, data);
}
+static void __ise_template_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+ int index = 0;
+
+ if (item) {
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ index = (uintptr_t) elm_object_item_data_get(item);
+ const std::vector<TemplateData> 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();
+ }
+ }
+}
+
+static char * __ise_template_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ if (!strcmp(part, "elm.text")) {
+ unsigned int index = (uintptr_t)data;
+ const std::vector<TemplateData> template_list = input_template_get_list();
+
+ if (index < template_list.size()) {
+ if (template_list[index].use_gettext) {
+ return strdup(gettext(template_list[index].text.c_str()));
+ } else {
+ Eina_Strbuf *buf = NULL;
+ const char *str = NULL;
+ char *markup = NULL;
+
+ buf = eina_strbuf_new();
+ if (buf) {
+ eina_strbuf_append(buf, template_list[index].text.c_str());
+ eina_strbuf_replace_all(buf, "\n", "");
+ eina_strbuf_replace_all(buf, "\r", "");
+
+ str = eina_strbuf_string_get(buf);
+
+ if (str) {
+ markup = elm_entry_utf8_to_markup(str);
+ }
+ eina_strbuf_free(buf);
+ }
+ return markup;
+ }
+ }
+ }
+ return NULL;
+}
+
static Evas_Object * __ise_gl_2button_content_get(void *data, Evas_Object *obj, const char *part)
{
char *first_input_type = *(g_input_type_data.input_type_array + 0);
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
+ path = path + "mobile/";
+
if (!strcmp(part, "elm.icon.1")) {
string path_ic;
- if(!strcmp(first_input_type, "input_voice")) {
+ if (!strcmp(first_input_type, "input_voice")) {
elm_object_style_set(btn, "ime_button_stt");
path_ic = path + "images/w_mode_stt_ic.png";
} else if (!strcmp(first_input_type, "input_emoticon")) {
evas_object_layer_set(btn, 32000);
} else if (!strcmp(part, "elm.icon.2")){
string path_ic;
- if(!strcmp(second_input_type, "input_voice")) {
+ if (!strcmp(second_input_type, "input_voice")) {
elm_object_style_set(btn, "ime_button_stt");
path_ic = path + "images/w_mode_stt_ic.png";
} else if (!strcmp(second_input_type, "input_emoticon")) {
string path = get_resource_path();
if (!strcmp(part, "elm.icon.1.touch_area")) {
evas_object_layer_set(btn, 32000);
- if(!strcmp(first_input_type, "input_voice")) {
+ if (!strcmp(first_input_type, "input_voice")) {
evas_object_smart_callback_add(btn, "clicked", _stt_clicked_cb, app_data);
} else if (!strcmp(first_input_type, "input_emoticon")) {
evas_object_smart_callback_add(btn, "clicked", _emoticon_clicked_cb, app_data);
}
} else if (!strcmp(part, "elm.icon.2.touch_area")){
evas_object_layer_set(btn, 32000);
- if(!strcmp(second_input_type, "input_voice")) {
+ if (!strcmp(second_input_type, "input_voice")) {
evas_object_smart_callback_add(btn, "clicked", _stt_clicked_cb, app_data);
} else if (!strcmp(second_input_type, "input_emoticon")) {
evas_object_smart_callback_add(btn, "clicked", _emoticon_clicked_cb, app_data);
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
+ path = path + "mobile/";
+
if (!strcmp(part, "elm.icon.1")) {
elm_object_style_set(btn, "ime_button_stt");
string path_ic = path + "images/w_mode_stt_ic.png";
void set_source_caller_app_id(app_control_h app_control)
{
- if(!app_control){
+ if (!app_control){
PRINTFUNC(DLOG_ERROR, "can't get app_control");
return;
}
char *caller = NULL;
app_control_get_caller(app_data->source_app_control, &caller);
- if(caller){
+ if (caller){
PRINTFUNC(DLOG_DEBUG, "caller = %s", caller);
app_control_add_extra_data(app_control, "caller_appid", caller);
free(caller);
app_control_h app_control;
- if(app_control_create(&app_control) == 0) {
+ if (app_control_create(&app_control) == 0) {
int ret;
if (value)
app_control_h app_control;
- if(app_control_create(&app_control) == 0) {
+ if (app_control_create(&app_control) == 0) {
int ret;
app_control_add_extra_data(app_control, "back_to_composer", "yes");
char* get_resource_path()
{
- if(NULL == app_data->res_path) {
+ if (NULL == app_data->res_path) {
app_data->res_path = app_get_resource_path();
PRINTFUNC(DLOG_INFO, "set resource path = %s", app_data->res_path);
}
char* get_shared_resource_path()
{
- if(NULL == app_data->shared_res_path) {
+ if (NULL == app_data->shared_res_path) {
app_data->shared_res_path = app_get_shared_resource_path();
PRINTFUNC(DLOG_INFO, "set shared resource path = %s", app_data->shared_res_path);
}
}
void show_gl_focus(Eina_Bool bVisible){
- if(app_data->genlist == NULL)
+ if (app_data->genlist == NULL)
return;
- if(bVisible == EINA_TRUE){
+ if (bVisible == EINA_TRUE){
elm_object_signal_emit(app_data->genlist, "elm,state,focus_bg,enable", "elm");
//elm_layout_theme_set(app_data->genlist, "genlist", "base", "focus_bg");
//elm_object_signal_emit(app_data->genlist, "elm,state,focus_bg,show", "elm");
if (check_img) {
string path = get_resource_path();
+ if (_WEARABLE)
+ path = path + "wearable/";
+ else
+ path = path + "mobile/";
string path_ic = path + "/images/toast_check_icon.png";
Evas_Object * img = elm_image_add(popup);
elm_image_file_set(img, path_ic.c_str(), NULL);
elm_object_part_content_set(popup, "toast,icon", img);
}
- if(text) {
+ if (text) {
elm_object_part_text_set(popup, "elm.text", text);
}
static void _popup_close_cb(void *data, Evas_Object *obj, void *event_info)
{
- if(obj){
+ if (obj){
evas_object_hide(obj);
evas_object_del(obj);
}
static void _popup_back_cb(void *data, Evas_Object *obj, void *event_info)
{
- if(obj)
+ if (obj)
elm_popup_dismiss(obj);
}
{
PRINTFUNC(DLOG_DEBUG, "");
- if(!app_data) return;
+ if (!app_data) return;
- if(app_data->app_type == APP_TYPE_STT || app_data->app_type == APP_TYPE_EMOTICON){
+ 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();
}
-
+#ifdef _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);
+#endif
}
static void _item_realized(void *data, Evas_Object *obj, void *event_info) //called when list scrolled
Evas_Object* _create_genlist(Evas_Object* navi)
{
Evas_Object* genlist = elm_genlist_add(navi);
- if(NULL == genlist)
+ if (NULL == genlist)
return NULL;
elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
-
+#ifdef _WEARABLE
Evas_Object* circle_object_genlist = eext_circle_object_genlist_add(genlist, app_data->circle_surface);
eext_circle_object_genlist_scroller_policy_set(circle_object_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
evas_object_data_set(genlist, "circle", (void *) circle_object_genlist);
eext_rotary_object_event_activated_set(circle_object_genlist, EINA_TRUE);
-
+#endif
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);
static void _item_position_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
- if(!obj) return;
- if(!data) return;
+ if (!obj) return;
+ if (!data) return;
Evas_Object *genlist = (Evas_Object *)obj;
Elm_Object_Item *gen_item = (Elm_Object_Item *)data;
void _create_genlist_items(void* user_data)
{
- LOGD("[psw] _create_genlist_items");
-
App_Data* app_data = (App_Data*) user_data;
- if(NULL == app_data->genlist) {
+ if (NULL == app_data->genlist) {
app_data->genlist = _create_genlist(app_data->naviframe);
- if(NULL == app_data->genlist)
+ if (NULL == app_data->genlist)
return;
}
itc0->func.del = NULL;
Elm_Genlist_Item_Class * itc1 = elm_genlist_item_class_new();
- if(g_input_type_data.input_type_array_len == 2){
+ if (g_input_type_data.input_type_array_len == 2){
itc1->item_style = "2button_flat";
itc1->func.text_get = NULL;
itc1->func.content_get = __ise_gl_2button_content_get;
elm_genlist_item_select_mode_set(it_title, ELM_OBJECT_SELECT_MODE_NONE);
+ g_template_item_size = _update_template_items(app_data);
+
Elm_Object_Item *item = elm_genlist_item_next_get(it_title);
elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
elm_genlist_item_class_free(itc1);
}
+void _create_header_items(void *user_data)
+{
+ 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;
+
+ Elm_Genlist_Item_Class * itc1 = elm_genlist_item_class_new();
+ if (g_input_type_data.input_type_array_len == 2) {
+ itc1->item_style = "2button_flat";
+ itc1->func.text_get = NULL;
+ itc1->func.content_get = __ise_gl_2button_content_get;
+ itc1->func.state_get = NULL;
+ itc1->func.del = NULL;
+ } else {
+ itc1->item_style = "3button_flat";
+ itc1->func.text_get = NULL;
+ itc1->func.content_get = __ise_gl_3button_content_get;
+ itc1->func.state_get = NULL;
+ itc1->func.del = NULL;
+ }
+
+ // dummy title for empty space
+ it_empty = elm_genlist_item_append(app_data->genlist, itc0,
+ NULL, NULL,
+ ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+
+ // 3 Buttons
+ it_title = elm_genlist_item_append(app_data->genlist, itc1,
+ NULL, NULL,
+ ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+
+ elm_genlist_item_select_mode_set(it_title, ELM_OBJECT_SELECT_MODE_NONE);
+
+ elm_genlist_item_class_free(itc0);
+ elm_genlist_item_class_free(itc1);
+}
+
+void _update_genlist_items(void *user_data)
+{
+ elm_genlist_clear(app_data->genlist);
+
+ _create_header_items(user_data);
+
+ g_template_item_size = _update_template_items(user_data);
+
+ /* Update genlist item position */
+ Elm_Object_Item *item = elm_genlist_item_next_get(it_title);
+ elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
+}
+
+unsigned int _update_template_items(void *user_data)
+{
+ App_Data* app_data;
+
+ Elm_Object_Item *first;
+
+ unsigned int i = 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;
+ }
+
+ first = elm_genlist_first_item_get(app_data->genlist);
+ if (first == NULL)
+ return 0;
+ elm_genlist_item_next_get(first);
+
+ /* Append New Template list */
+ const std::vector<TemplateData> template_list = input_template_get_list();
+
+ if (template_list.size() > 0) {
+ Elm_Genlist_Item_Class *itc;
+
+ itc = elm_genlist_item_class_new();
+
+ itc->item_style = "1text";
+ itc->func.text_get = __ise_template_gl_text_get;
+ itc->func.content_get = NULL;
+ itc->func.state_get = NULL;
+ itc->func.del = NULL;
+
+ for (i = 0; i < template_list.size(); i++) {
+ elm_genlist_item_append(app_data->genlist,
+ itc,
+ (void *)(uintptr_t)i,
+ NULL,
+ ELM_GENLIST_ITEM_NONE,
+ __ise_template_gl_sel,
+ app_data);
+ item_size++;
+ }
+ elm_genlist_item_class_free(itc);
+ }
+
+ return item_size;
+}
+
bool _app_create(void* user_data)
{
int width = 1000, height = 1000;
Evas_Object* conform = NULL;
Evas_Object* bg = NULL;
Evas_Object* window = NULL;
+#ifdef _WEARABLE
Eext_Circle_Surface *surface;
-
+#endif
if (!user_data) {
return false;
}
evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
conform = elm_conformant_add(window);
+#ifdef _WEARABLE
surface = eext_circle_surface_conformant_add(conform);
+#endif
evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
app_data->win_main = window;
app_data->conform = conform;
app_data->layout_main = layout;
+#ifdef _WEARABLE
app_data->circle_surface = surface;
+#endif
app_data->app_type = APP_TYPE_SELECT_MODE;
Evas_Object *naviframe = elm_naviframe_add(layout);
app_data->reply_type = REPLY_APP_NORMAL;
ret = app_control_is_extra_data_array(service, APP_CONTROL_DATA_INPUT_TYPE, &is_extra_data_array);
- if( is_extra_data_array == true) {
+ if ( is_extra_data_array == true) {
ret = app_control_get_extra_data_array(service, APP_CONTROL_DATA_INPUT_TYPE, &input_type_array, &input_type_array_len);
g_input_type_data.input_type_array = input_type_array;
g_input_type_data.input_type_array_len = input_type_array_len;
input_keyboard_init(service);
+ input_template_init(service);
+ input_template_set_notify(_input_template_notify_cb, NULL);
+
_create_genlist_items(app_data);
ACTIVATE :
elm_win_activate(app_data->win_main);
- if(context)
+ if (context)
free(context);
}
App_Data* app_data = NULL;
app_data = (App_Data*)user_data;
- if(app_data->genlist){
+ if (app_data->genlist){
evas_object_smart_callback_del(app_data->genlist, "elm,item,position,changed", _item_position_changed_cb);
}
- if(app_data->res_path)
+ if (app_data->res_path)
free(app_data->res_path);
- if(app_data->shared_res_path)
+ if (app_data->shared_res_path)
free(app_data->shared_res_path);
input_keyboard_deinit();
+
+ input_template_unset_notify();
+ input_template_deinit();
+
input_type_deinit();
}
g_input_type_data.input_type_array_len = 0;
}
-int main(int argc, char* argv[])
+EXPORTED int main(int argc, char* argv[])
{
App_Data app_data = {0, };
ui_app_lifecycle_callback_s event_callback = {0, };