#include <device/power.h>
#include <app_common.h>
#include <app.h>
+#include <app_preference.h>
#include <string>
#include <efl_extension.h>
#include <feedback.h>
+#include <stdint.h>
#include "Debug.h"
#include "w-input-selector.h"
#include "w-input-stt-voice.h"
#include "w-input-stt-engine.h"
#include "w-input-stt-ise.h"
+#include "voice-recorder.h"
using namespace std;
#define GRP_PORTRAIT "mic_control"
#define item_append(obj, style, index, cb, udata) \
- elm_genlist_item_append(obj, &(style), (void *)index, NULL, ELM_GENLIST_ITEM_NONE, cb, udata)
+ elm_genlist_item_append(obj, &(style), (void *)(uintptr_t)index, NULL, ELM_GENLIST_ITEM_NONE, cb, udata)
#define VIRTUAL_TEXT_AREA_FONT_STYLE \
- "DEFAULT='font=Tizen:style=Regular font_size=32 color=#FFFFFF color_class=AT013 text_class=tizen wrap=mixed align=center' \
- newline='br' b='+ font=Tizen:style=Bold'link='+ underline=on underline_color=#FFFFFF'"
+ "DEFAULT = 'font = Tizen:style = Regular font_size = 32 color = #FFFFFF color_class = AT013 text_class = tizen wrap = mixed align = center' \
+ newline = 'br' b = '+ font = Tizen:style = Bold'link = '+ underline = on underline_color = #FFFFFF'"
+
+#define TOP_PADDING_AREA 120
+#define BOTTOM_PADDING_AREA 81 // Bottom Button H 78 + margin 3
+
extern App_Data* app_data;
extern VoiceData *my_voicedata;
static Elm_Genlist_Item_Class itc_1text;
static Elm_Genlist_Item_Class itc_2text;
+static bool g_send_button_clicked = false;
+
static void set_guide_text(VoiceData *vd, const char* text, bool translatable = false);
-const char *supported_language[7] = {
- "auto",
- "en_US",
- "es_US",
- "fr_FR",
- "zh_CN",
- "ja_JP",
- "ko_KR",
+const char *supported_language[] = {
+ "auto",
+ "en_US",
+ "es_US",
+ "fr_FR",
+ "zh_CN",
+ "ja_JP",
+ "ko_KR",
};
-
-const char *disp_lang_array[7] = {
- "",
- "English (United States)",
- "Español (América Latina)",
- "Français (France)",
- "简体中文",
- "日本語",
- "한국어",
+const char *disp_lang_array[] = {
+ "",
+ "English (United States)",
+ "Español (América Latina)",
+ "Français (France)",
+ "简体中文",
+ "日本語",
+ "한국어",
};
typedef enum {
}
-static Eina_Bool
-_bring_in_cb(void *data)
+static void _bring_in_cb(void* data, Evas_Object* obj, const char* s, const char* e)
{
- if(!data)
- return ECORE_CALLBACK_CANCEL;
+ if (!data) return;
+
+ VoiceData *voicedata = (VoiceData *)data;
Evas_Coord x, y, w, h;
- Evas_Object *scroller = (Evas_Object *)data;
+ Evas_Object *scroller = (Evas_Object *)voicedata->scroller;
Evas_Object *inner_layout = NULL;
inner_layout = (Evas_Object *) evas_object_data_get(scroller, "inner_layout");
-
evas_object_geometry_get(inner_layout, &x, &y, &w, &h);
- elm_scroller_region_bring_in(scroller, x, h, w, h);
+ elm_scroller_region_bring_in(scroller, x, h + BOTTOM_PADDING_AREA, w, h); // in case of 3 line textblock, bring in is not working so, bottom padding size will be added
PRINTFUNC(NO_PRINT, "scroller %d %d %d %d", x, y, w, h);
- return ECORE_CALLBACK_CANCEL;
+ return;
}
static inline Evas_Coord get_text_block_size(Evas_Object *obj, std::string text)
static Eina_Bool _update_textblock_timer_cb(void *data)
{
- if(!data)
+ if (!data)
return ECORE_CALLBACK_CANCEL;
VoiceData* voicedata = (VoiceData*)data;
Evas_Object *inner_layout = NULL;
scroller = elm_layout_content_get((Evas_Object *)voicedata->layout_main, "text_area");
- if(!scroller)
+ if (!scroller)
{
PRINTFUNC(DLOG_ERROR, "failed to get scroller");
return ECORE_CALLBACK_CANCEL;
}
box = elm_object_content_get(scroller);
- if(!box)
+ if (!box)
{
PRINTFUNC(DLOG_ERROR, "failed to get box");
return ECORE_CALLBACK_CANCEL;
}
inner_layout = (Evas_Object *) evas_object_data_get(scroller, "inner_layout");
- if(!inner_layout)
+ if (!inner_layout)
{
PRINTFUNC(DLOG_ERROR, "failed to get inner_layout");
return ECORE_CALLBACK_CANCEL;
}
entry = elm_layout_content_get(inner_layout, "elm.swallow.content");
- if(!entry)
+ if (!entry)
{
PRINTFUNC(DLOG_ERROR, "failed to get entry");
return ECORE_CALLBACK_CANCEL;
}
+ if (!strcmp(result_text.c_str(), elm_entry_entry_get(entry))){
+ PRINTFUNC(DLOG_ERROR, "Nothing to update");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
Evas_Object *top = (Evas_Object *) evas_object_data_get(box, "top_padding");
Evas_Object *bottom = (Evas_Object *) evas_object_data_get(box, "bottom_padding");
// if(height < 173) {
{
- int text_area_height = 360-102; // screen H - bottom button H
- int top_height = ((text_area_height - height) / 2);
- if(top_height < 120) top_height = 120; // Top fade area H
+ int text_area_height = 360; // screen H
+ int top_height = ((text_area_height - height - BOTTOM_PADDING_AREA) / 2); // 78 + 3 : bottom button H ++ margin
+ if (top_height < TOP_PADDING_AREA) top_height = TOP_PADDING_AREA; // Top fade area H
int bottom_height = (text_area_height - top_height - height);
- if(bottom_height < 1) bottom_height = 0;
+ if (bottom_height < BOTTOM_PADDING_AREA) bottom_height = BOTTOM_PADDING_AREA;
PRINTFUNC(SECURE_DEBUG, "str : %s", result_text.c_str());
PRINTFUNC(DLOG_DEBUG, "height : %d", height);
Evas_Object *panel_left = elm_layout_content_get((Evas_Object *)panel_layout, "elm.swallow.right");
if (result_text.size() > 0) {
+ show_bottom_button(voicedata, false);
elm_object_signal_emit(panel_left, "elm,state,enabled", "elm");
} else {
elm_object_signal_emit(panel_left, "elm,state,disabled", "elm");
}
- elm_object_signal_emit((Evas_Object *)voicedata->layout_main, "idle,state,guide_text,bottom", "elm");
+ elm_object_signal_emit(inner_layout, "scrolling", "entry");
- if(voicedata->state == STT_STATE_VAL_LISTENING){
- if(voicedata->guide_text_timer != NULL){
- PRINTFUNC(DLOG_DEBUG, "Skip hide_guide_text");
- ecore_timer_del(voicedata->guide_text_timer);
- voicedata->guide_text_timer = NULL;
+ Evas_Coord x, y, w, h;
+ evas_object_geometry_get(inner_layout , &x, &y, &w, &h);
+ PRINTFUNC(DLOG_DEBUG, "inner_layout x=%d, y=%d, w=%d, h=%d", x, y, w, h);
+
+ if (h > 3900){ // to avoid Textblock size overflow (limit : 4000x4000)
+ PRINTFUNC(DLOG_ERROR, "Stop STT to avoid text block overflow");
+ if(voicedata->sttmanager->GetCurrent() == STT_STATE_RECORDING || voicedata->sttmanager->GetCurrent() == STT_STATE_PROCESSING) {
+ PRINTFUNC(DLOG_DEBUG, "STT_STATE_RECORDING or STT_STATE_PROCESSING\n");
+ try{
+ voicedata->sttmanager->Cancel();
+ }catch(is::stt::SttException &e){
+ PRINTFUNC(DLOG_ERROR, "reason : %s", e.what());
+ }
}
- set_guide_text(voicedata, SK_TAP_TO_PAUSE, true);
}
- elm_object_signal_emit(inner_layout, "scrolling", "entry");
-
return ECORE_CALLBACK_CANCEL;
}
void _update_textblock(void *data)
{
- if(!data)
+ if (!data)
return;
VoiceData *voicedata = (VoiceData *) data;
void voice_get_string(const char *keyValue, _VoiceData *voicedata)
{
- if(!voicedata)
+ if (!voicedata)
return;
char* strbuf = NULL;
strbuf = elm_entry_utf8_to_markup(keyValue);
- PRINTFUNC(DLOG_DEBUG, "text : %s, voicedata->partial_result=%s", strbuf, voicedata->partial_result);
+ SECURE_LOGD("text : %s, voicedata->partial_result=%s", strbuf, voicedata->partial_result);
if(strbuf){
if(voicedata->partial_result){ // partial_result is not Null so replace
void start_by_press(VoiceData *voicedata)
{
- PRINTFUNC(DLOG_DEBUG, "");
-
- edje_object_signal_emit(_EDJ(voicedata->layout_main), "mouse,clicked,1", "background");
-
- return;
-}
-
-static void on_mic_button_press_cb(void *data, Evas_Object *obj, void *event_info)
-{
- PRINTFUNC(NO_PRINT, "");
-
- VoiceData *voicedata = (VoiceData *)data;
+ LOGD("start_by_press ");
edje_object_signal_emit(_EDJ(voicedata->layout_main), "mouse,clicked,1", "background");
-
- return;
}
-
-static Eina_Bool _mic_button_enable_cb(void *data)
+static void on_confirm_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
- PRINTFUNC(DLOG_DEBUG, "");
-
- if(!data)
- return ECORE_CALLBACK_CANCEL;
+ if (!data)
+ return;
VoiceData* voicedata = (VoiceData*)data;
- voicedata->btn_disabling_timer = NULL;
-
- Evas_Object *button = (Evas_Object *)voicedata->mic_button;
-
- elm_object_disabled_set(button, EINA_FALSE);
-
- return ECORE_CALLBACK_CANCEL;
-}
-
+ if (g_send_button_clicked == true){
+ PRINTFUNC(DLOG_ERROR, "skipped seding STT result");
+ return;
+ }
-static void on_confirm_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
-{
- if(!data)
+ if (is_textblock_empty(voicedata) == true){
return;
+ }
- VoiceData* voicedata = (VoiceData*)data;
+ if (voicedata->sttmanager){
+ if (voicedata->sttmanager->GetCurrent() == STT_STATE_RECORDING ||
+ voicedata->sttmanager->GetCurrent() == STT_STATE_PROCESSING) {
+ PRINTFUNC(DLOG_DEBUG, "STT_STATE_RECORDING or STT_STATE_PROCESSING\n");
+ try{
+ voicedata->sttmanager->Cancel();
+ }catch(is::stt::SttException &e){
+ PRINTFUNC(DLOG_ERROR, "reason : %s", e.what());
+ }
+ }
+ }
+
+ g_send_button_clicked = true;
std::string result_text;
for(unsigned int i = 0; i < voicedata->stt_results.size(); i++){
result_text += voicedata->stt_results.at(i);
- if(i != voicedata->stt_results.size()-1)
+ if (i != voicedata->stt_results.size()-1)
result_text += " ";
}
- PRINTFUNC(DLOG_DEBUG, "result_text = %s", result_text.c_str());
+ SECURE_LOGD("result_text = %s", result_text.c_str());
- reply_to_sender_by_callback(result_text.c_str(), "voice");
+ char *filePath = NULL;
+ voice_recorder *vr = _voice_recorder_get_data();
+ if (!vr)
+ filePath = vr->file_path;
+ char *path[] = {filePath, };
+ reply_to_sender_by_callback(result_text.c_str(), "voice", (const char **)path, NULL);
destroy_voice();
powerUnlock();
- elm_exit();
+ ui_app_exit();
return;
}
-static void
-_panel_cue_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
- PRINTFUNC(DLOG_DEBUG, "left cue clicked!!");
-
- on_confirm_button_clicked_cb(data, NULL, NULL);
-}
-
-
-
void stt_feedback_initialize()
{
int ret = 0;
ret = feedback_initialize();
- if(ret != 0)
+ if (ret != 0)
{
PRINTFUNC(DLOG_ERROR, "feedback_initialize failed!");
return;
int ret;
ret = feedback_initialize();
- if(ret != 0)
+ if (ret != 0)
{
PRINTFUNC(DLOG_ERROR, "feedback_initialize failed!");
return;
}
ret = feedback_deinitialize();
- if(ret != 0)
+ if (ret != 0)
{
PRINTFUNC(DLOG_ERROR, "feedback_initialize failed!");
return;
int ret = 0;
ret = feedback_deinitialize();
- if(ret != 0)
+ if (ret != 0)
{
PRINTFUNC(DLOG_ERROR, "feedback_initialize failed!");
return;
static Eina_Bool _idler_cb(void *data)
{
- if(!data) return ECORE_CALLBACK_CANCEL;
+ if (!data) return ECORE_CALLBACK_CANCEL;
VoiceData *voicedata = (VoiceData *)data;
PRINTFUNC(DLOG_DEBUG, "");
- if(true == _app_stt_initialize(voicedata)) {
- PRINTFUNC(NO_PRINT, "_app_stt_initialize None Error");
+ if (true == _app_stt_initialize(voicedata)) {
+ LOGD("_app_stt_initialize None Error");
voicedata->voicefw_state = 1;
voicedata->state = STT_STATE_VAL_INIT;
} else {
voicedata->voicefw_state = 0;
- PRINTFUNC(DLOG_ERROR, "Initialization Fail!<br>Check STT-daemon is running");
+ LOGD("Initialization Fail!<br>Check STT-daemon is running");
}
Evas_Object *canvas = elm_object_part_content_get(voicedata->layout_main, "EFFECT_BG");
-
is::ui::WInputSttMicEffect *ieffect = new is::ui::WInputSttMicEffect();
- ieffect->SetSttHandle(voicedata->sttmanager->GetSttHandle());
+ if (ieffect) {
+ ieffect->SetSttHandle(voicedata->sttmanager->GetSttHandle());
- is::ui::MicEffector *effector = new is::ui::MicEffector(canvas, voicedata->layout_main, *ieffect);
- voicedata->ieffect = ieffect;
- voicedata->effector = effector;
+ is::ui::MicEffector *effector = new is::ui::MicEffector(canvas, voicedata->layout_main, *ieffect);
+ voicedata->ieffect = ieffect;
+ voicedata->effector = effector;
- ieffect->SetProgressBar(voicedata->progressbar);
- ieffect->SetSttHandle(voicedata->sttmanager->GetSttHandle());
+ ieffect->SetProgressBar(voicedata->progressbar);
+ ieffect->SetSttHandle(voicedata->sttmanager->GetSttHandle());
+ }
voicedata->mo->Update();
- elm_access_highlight_set(voicedata->mic_button);
-
+ voicedata->setup_timer = NULL;
return ECORE_CALLBACK_CANCEL;
}
-
static Eina_Bool _power_delayed_unlock(void *data){
PRINTFUNC(DLOG_DEBUG, "POWER Unlock");
VoiceData *voicedata = (VoiceData *) data;
- if(enable) {
+ if (enable) {
ret = device_power_wakeup(false);
PRINTFUNC(DLOG_DEBUG, "LCD Wakeup");
- if(ret != DEVICE_ERROR_NONE)
+ if (ret != DEVICE_ERROR_NONE)
PRINTFUNC(DLOG_ERROR, "LCD Wakeup ERROR = %d", ret);
ret = device_power_request_lock(POWER_LOCK_DISPLAY, 0);
PRINTFUNC(DLOG_DEBUG, "POWER LOCK");
power_state = enable;
- if(ret != DEVICE_ERROR_NONE)
+ if (ret != DEVICE_ERROR_NONE)
PRINTFUNC(DLOG_ERROR, "ERROR = %d", ret);
- if(voicedata->power_unlock_timer != NULL){
+ if (voicedata->power_unlock_timer != NULL){
ecore_timer_del(voicedata->power_unlock_timer);
voicedata->power_unlock_timer = NULL;
}
} else {
PRINTFUNC(DLOG_DEBUG, "POWER Unlock Delayed(5 sec)");
- if(voicedata->power_unlock_timer != NULL){
+ if (voicedata->power_unlock_timer != NULL){
ecore_timer_del(voicedata->power_unlock_timer);
voicedata->power_unlock_timer = NULL;
}
}
}
+static void expand_send_text(void *data)
+{
+ PRINTFUNC(DLOG_DEBUG, "");
-static Eina_Bool hide_guide_text(void *data){
if(data) {
VoiceData *voicedata = (VoiceData *) data;
+ elm_object_signal_emit((Evas_Object *)voicedata->layout_main, "idle,state,send,text,expand", "elm");
+ }
+}
- voicedata->guide_text_timer = NULL;
+static void contract_send_text(void *data)
+{
+ PRINTFUNC(DLOG_DEBUG, "");
+ if(data) {
+ VoiceData *voicedata = (VoiceData *) data;
+ elm_object_signal_emit((Evas_Object *)voicedata->layout_main, "idle,state,send,text,contract", "elm");
+ }
+}
- PRINTFUNC(DLOG_ERROR, "");
- elm_object_part_text_set(voicedata->layout_main, "elm.text", "");
+static void set_cue_text(void *data)
+{
+ PRINTFUNC(DLOG_DEBUG, "");
+
+ if(data) {
+ VoiceData *voicedata = (VoiceData *) data;
+ elm_object_domain_translatable_part_text_set(voicedata->layout_main, "elm.text.cue", PACKAGE, SK_SPEAK_NOW);
+ elm_object_signal_emit((Evas_Object *)voicedata->layout_main, "idle,state,cue_text,visible", "elm");
}
- return ECORE_CALLBACK_CANCEL;
}
static void set_guide_text(VoiceData *vd, const char* text, bool translatable)
{
- //elm_object_signal_emit(vd->layout_main, "idle,state,text,visible", "elm");
+ SECURE_LOGD("text = %s", text);
+
+ if (!vd) return;
+
+ if (vd->mo){
+ PRINTFUNC(DLOG_DEBUG, "isMoreOptionOpend() = %d, discard_popup_opend == %d, g_send_button_clicked = %d", vd->mo->isMoreOptionOpened(), vd->mo->discard_popup_opened, g_send_button_clicked);
+ if (vd->mo->isMoreOptionOpened() == EINA_TRUE || vd->mo->discard_popup_opened == EINA_TRUE
+ || g_send_button_clicked == true){
+ elm_object_signal_emit((Evas_Object *)vd->layout_main, "idle,state,text,hidden", "elm");
+ PRINTFUNC(DLOG_DEBUG, "MoreOption or DiscardPopup is opened, So skipped");
+ return;
+ }
+ }
- if(translatable)
+ if (translatable)
elm_object_domain_translatable_part_text_set(vd->layout_main, "elm.text", PACKAGE, text);
else
elm_object_part_text_set(vd->layout_main, "elm.text", text);
- if(!strcmp(text, SK_SPEAK_NOW)){
- if(vd->guide_text_timer == NULL)
- vd->guide_text_timer = ecore_timer_add(2.0, hide_guide_text, vd);
- }
+ elm_object_signal_emit((Evas_Object *)vd->layout_main, "idle,state,text,visible", "elm");
+ hide_bottom_button(vd);
+
+ // check whether any result exists
+ if (is_textblock_empty(vd))
+ return;
+
+ show_bottom_button(vd, true);
}
/**
*/
void set_animation_state(VoiceData *voicedata)
{
- PRINTFUNC(DLOG_DEBUG, "");
-
- PRINTFUNC(DLOG_ERROR, "voicedata->state == %s",
- voicedata->state == STT_STATE_VAL_INIT ?
- "STT_STATE_VAL_INIT" :
- voicedata->state == STT_STATE_VAL_LISTENING ?
- "STT_STATE_VAL_LISTENING" :
- voicedata->state == STT_STATE_VAL_PREPARE_LISTENING ?
- "STT_STATE_VAL_PREPARE_LISTENING" :
- voicedata->state == STT_STATE_VAL_PROCESSING ?
- "STT_STATE_VAL_PROCESSING" :
- voicedata->state == STT_STATE_VAL_PREPARE_PROCESSING ?
- "STT_STATE_VAL_PREPARE_PROCESSING" :
- voicedata->state == STT_STATE_VAL_TERMINATING ?
- "STT_STATE_VAL_TERMINATING" : "STT_STATE_VAL_NOT_RECOGNISED");
-
if (voicedata->state == STT_STATE_VAL_INIT) {
-#if 0
- if (voicedata->sttmanager->GetCurrent() == STT_STATE_READY) {
- set_guide_text(voicedata, "", false);
- //_elm_access_say(voicedata->layout_main, _(SK_INIT));
- } else {
- PRINTFUNC(DLOG_DEBUG, "SK_NETWORK_ERROR [%d]", voicedata->sttmanager->GetCurrent());
- set_guide_text(voicedata, _(SK_NETWORK_ERROR));
- //_elm_access_say(voicedata->layout_main, _(SK_NETWORK_CONNECTION_ERROR));
- }
-#endif
-
if(voicedata->effector)
voicedata->effector->Stop(true);
- set_guide_text(voicedata, "");
+ expand_send_text(voicedata);
- PRINTFUNC(DLOG_DEBUG, "%d", voicedata->stt_results.size());
powerLock((void*)voicedata, false);
} else if (voicedata->state == STT_STATE_VAL_LISTENING) {
- set_guide_text(voicedata, SK_SPEAK_NOW, true);
+ set_cue_text(voicedata);
+ contract_send_text(voicedata);
if(voicedata->effector)
voicedata->effector->Start();
powerLock((void*)voicedata, true);
} else if (voicedata->state == STT_STATE_VAL_PROCESSING) {
- set_guide_text(voicedata, "");
+ expand_send_text(voicedata);
if(voicedata->effector)
voicedata->effector->Stop();
stt_feedback(VIBRATION_STOP);
} else {
- PRINTFUNC(DLOG_DEBUG, "SK_NETWORK_ERROR");
set_guide_text(voicedata, _(SK_RECOGNITION_FAILED));
//_elm_access_say(voicedata->layout_main, _(SK_RECOGNITION_FAILED));
-
+ expand_send_text(voicedata);
voicedata->state = STT_STATE_VAL_NOT_RECOGNISED;
if(voicedata->refresh_timer) {
ecore_timer_del(voicedata->refresh_timer);
+ voicedata->refresh_timer = NULL;
}
if(voicedata->effector)
voicedata->effector->Stop(true);
voicedata->refresh_timer = ecore_timer_add(2.0, _recognition_failure_cb, voicedata);
-
- //powerLock((void*)voicedata, false);
}
}
}
voicedata->start_timer = NULL;
}
+
+ start_voice_recorder();
+
return ECORE_CALLBACK_CANCEL;
}
+void restart_listening(double in)
+{
+ PRINTFUNC(DLOG_DEBUG, "");
+
+ if(my_voicedata){
+ // reset STT Objects
+ if(my_voicedata->ieffect) {
+ delete my_voicedata->ieffect;
+ my_voicedata->ieffect = NULL;
+ }
+
+ if(my_voicedata->effector) {
+ delete my_voicedata->effector;
+ my_voicedata->effector = NULL;
+ }
+
+ if(my_voicedata->sttmanager) {
+ delete my_voicedata->sttmanager;
+ my_voicedata->sttmanager = NULL;
+ }
+
+ if(my_voicedata->sttfeedback) {
+ delete my_voicedata->sttfeedback;
+ my_voicedata->sttfeedback = NULL;
+ }
+
+ if(my_voicedata->setup_timer){
+ ecore_timer_del(my_voicedata->setup_timer);
+ my_voicedata->setup_timer = NULL;
+ }
+
+ my_voicedata->setup_timer = ecore_timer_add(0.5, _idler_cb, my_voicedata);
+
+ // clear resut
+ my_voicedata->stt_results.clear();
+
+ if(my_voicedata->textblock_timer){
+ ecore_timer_del(my_voicedata->textblock_timer);
+ my_voicedata->textblock_timer = NULL;
+ }
+
+ if(my_voicedata->refresh_timer){
+ ecore_timer_del(my_voicedata->refresh_timer);
+ my_voicedata->refresh_timer = NULL;
+ }
+
+ hide_bottom_button(my_voicedata);
+ _update_textblock_timer_cb(my_voicedata);
+ }
+}
+
/**
* @brief - cancel button press callback for cross button
* @param -
PRINTFUNC(NO_PRINT, "");
VoiceData *vd = (VoiceData *)data;
+ if (vd == NULL)
+ return;
int tempVal = vd->sttmanager->GetCurrent();
if(tempVal == STT_STATE_CREATED) {
* Cuased touch reponse time, it can be called to stop animator.
*
*/
- set_guide_text(vd, "");
-
if(vd->effector)
vd->effector->Stop();
}
static inline void ea_naviframe_back(void *data, Evas_Object *obj, void *event_info)
{
- if(!data) return;
+ if (!data) return;
evas_object_del((Evas_Object *) data);
ecore_event_handler_del(g_evt_key_down);
g_evt_key_down = NULL;
-
- //Hide more option
- if(g_more_option_layout){
- if(eext_more_option_opened_get(g_more_option_layout) == EINA_TRUE) {
- eext_more_option_opened_set(g_more_option_layout, EINA_FALSE);
+ if (_WEARABLE) {
+ //Hide more option
+ if(g_more_option_layout){
+ if(eext_more_option_opened_get(g_more_option_layout) == EINA_TRUE) {
+ eext_more_option_opened_set(g_more_option_layout, EINA_FALSE);
+ }
}
}
}
char *__get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
{
- char text[128] = {0, };
+ const int BUF_LEN = 128;
+ char text[BUF_LEN] = {'\0', };
- if(!strcmp(part, "elm.text"))
+ if (!strcmp(part, "elm.text"))
{
- if((int)data == 0) {
+ if ((uintptr_t)data == 0) {
return strdup(_("IDS_VC_BODY_AUTOMATIC"));
} else {
char *s = NULL;
- s = (char *)disp_lang_array[(int)data];
+ s = (char *)disp_lang_array[(uintptr_t)data];
if(s) {
char *p = strchr(s, '(');
if(p) {
strncpy(text, s, p-s);
} else {
- strncpy(text, s, strlen(s));
+ snprintf(text, BUF_LEN, "%s", s);
}
} else {
- strncpy(text, "", strlen(""));
+ snprintf(text, BUF_LEN, "%s", "");
}
}
return strdup(text);
} else if (!strcmp(part, "elm.text.1")) {
- if ((int)data == 0) {
+ if ((uintptr_t)data == 0) {
char* value = NULL;
value = vconf_get_str(VCONFKEY_LANGSET);
if (NULL == value) {
} else {
char *s = NULL;
- s = (char *)disp_lang_array[(int)data];
+ s = (char *)disp_lang_array[(uintptr_t)data];
if(s) {
char *p = strchr(s, '(');
if(p) {
strncpy(text, p+1, strlen(s)-(p-s)-2);
} else {
- strncpy(text, s, strlen(s));
+ snprintf(text, BUF_LEN, "%s", s);
}
} else {
- strncpy(text, "", strlen(""));
+ snprintf(text, BUF_LEN, "%s", "");
}
return strdup(text);
}
static Evas_Object *__get_genlist_item_content(void *data, Evas_Object *obj, const char *part)
{
- int index = (int)data;
+ int index = (intptr_t)data;
Evas_Object * content = NULL;
- if (!strcmp(part, "elm.icon")) {
+ if (!strcmp(part, "elm.icon") ||
+ !strcmp(part, "elm.swallow.end")) {
content = elm_radio_add(obj);
+ elm_object_style_set(content, "list");
elm_radio_state_value_set(content, index);
elm_radio_group_add(content, radio_gp);
evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_propagate_events_set(content, EINA_TRUE);
evas_object_size_hint_align_set(content, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_object_style_set(content, "list");
}
return content;
}
static int get_language_value()
{
-#if 1
int lang = 0, ret = 0;
ret = preference_get_int(PREFERENCE_ISE_STT_LANGUAGE, &lang);
- if(PREFERENCE_ERROR_NONE != ret){
+ if (PREFERENCE_ERROR_NONE != ret) {
PRINTFUNC(DLOG_ERROR, "preference_get_int error!(%d)", ret);
- preference_set_int(PREFERENCE_ISE_STT_LANGUAGE, (int)2); //auto
- lang = 2;
+ preference_set_int(PREFERENCE_ISE_STT_LANGUAGE, STT_VOICE_N66_AUTO); //auto
+ lang = STT_VOICE_N66_AUTO;
}
-#else
- int lang = 0, ret = 0;
- ret = vconf_get_int(VCONFKEY_ISE_STT_LANGUAGE, &lang);
- if (ret !=0) {
- PRINTFUNC(DLOG_ERROR, "Vconf_get_int error!(%d)", ret);
- }
-#endif
- if(g_is_n66) {
- if(lang < 0 || lang > 6) {
- PRINTFUNC(DLOG_WARN, "vconf lang orig(%d) to be 0", lang);
- lang = 0;
- }
- PRINTFUNC(DLOG_DEBUG, "n66 current language value for stt (%s).", disp_lang_array[lang]);
+ if (lang < 0 || lang > (int)(sizeof(supported_language)/sizeof(supported_language[0])-1)) {
+ PRINTFUNC(DLOG_WARN, "vconf lang orig(%d) to be 0", lang);
+ lang = 0;
}
+ PRINTFUNC(DLOG_DEBUG, "n66 current language value for stt (%s).", disp_lang_array[lang]);
return lang;
}
// Add implementation to store language type.
int ret = 0;
-#if 1
ret = preference_set_int(PREFERENCE_ISE_STT_LANGUAGE, (int)type);
if(PREFERENCE_ERROR_NONE != ret){
PRINTFUNC(DLOG_ERROR, "preference_set_int error!(%d)", ret);
}
-#else
- ret = vconf_set_int(VCONFKEY_ISE_STT_LANGUAGE, (int) type);
- if (ret != 0) {
- PRINTFUNC(DLOG_ERROR, "Vconf_set_int error!(%d)", ret);
- return;
- }
-#endif
PRINTFUNC(DLOG_DEBUG, "language type (%d)", type);
// Update string
static void get_stt_default_language(VoiceData *my_voicedata)
{
- if(!my_voicedata) {
+ if (!my_voicedata) {
PRINTFUNC(DLOG_ERROR, "my_voicedata NULL");
return;
}
static void language_set_genlist_radio_cb(void *data, Evas_Object *obj, void *event_info)
{
PRINTFUNC(DLOG_DEBUG, "");
- if(!data) return;
+ if (!data) return;
int index = 0;
Elm_Object_Item * item = (Elm_Object_Item *) event_info;
if (item) {
elm_genlist_item_selected_set(item, 0);
- index = (int)elm_object_item_data_get(item);
+ index = (uintptr_t)elm_object_item_data_get(item);
elm_genlist_item_update(item);
}
set_language_value(index);
elm_radio_value_set(radio_gp, index);
+
+ if(my_voicedata)
+ set_textblock_empty(my_voicedata);
+
ecore_timer_add(0.3, close_setting_window_idler_cb, NULL);
}
static void language_changed_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
{
- if(!obj) return;
+ if (!obj) return;
elm_genlist_realized_items_update(obj);
}
PRINTFUNC(DLOG_DEBUG, "%s", __func__);
}
-static Evas_Object *create_language_list(Evas_Object *parent)
+static Evas_Object *create_language_list(Evas_Object *parent, Eext_Circle_Surface* circle_surface)
{
- if(!parent) return NULL;
+ if (!parent) return NULL;
Evas_Object *genlist = elm_genlist_add(parent);
if (!genlist) return NULL;
elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
elm_genlist_homogeneous_set(genlist, EINA_TRUE);
-// uxt_genlist_set_bottom_margin_enabled(genlist, EINA_TRUE);
-
- Evas_Object *circle_language_genlist = eext_circle_object_genlist_add(genlist, NULL);
+#ifdef _CIRCLE
+ Evas_Object *circle_language_genlist = eext_circle_object_genlist_add(genlist, circle_surface);
eext_circle_object_genlist_scroller_policy_set(circle_language_genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
evas_object_resize(circle_language_genlist, 360, 360);
evas_object_show(circle_language_genlist);
eext_rotary_object_event_activated_set(circle_language_genlist, EINA_TRUE);
-
+#else
+ evas_object_show(genlist);
+#endif
int i = 0;
int lang_val = 0;
Elm_Object_Item * item = NULL;
itc_title.item_style = "title";
itc_title.func.text_get = __get_genlist_title_label;
itc_title.func.content_get = NULL;
-
- item = elm_genlist_item_append(genlist, &itc_title, (void *)-1, NULL, ELM_GENLIST_ITEM_GROUP, NULL, genlist);
+ if (_WEARABLE) {
+ item = elm_genlist_item_append(genlist, &itc_title, (void *)-1, NULL, ELM_GENLIST_ITEM_GROUP, NULL, genlist);
+ }
// 2 line text
- itc_2text.item_style = "2text.1icon.1/sub1.multiline";
+ if (_WEARABLE) {
+ itc_2text.item_style = "2text.1icon.1/sub1.multiline";
+ } else {
+ itc_2text.item_style = "type1";
+ }
itc_2text.func.text_get = __get_genlist_item_label;
itc_2text.func.content_get = __get_genlist_item_content;
}
// 1 line text
- itc_1text.item_style = "1text.1icon.1";
+ if (_WEARABLE) {
+ itc_1text.item_style = "1text.1icon.1";
+ } else {
+ itc_1text.item_style = "type1";
+ }
itc_1text.func.text_get = __get_genlist_item_label;
itc_1text.func.content_get = __get_genlist_item_content;
- if(g_is_n66) {
- for (i = 1; i < 7; i++)
- {
- char *s = (char *)disp_lang_array[i];
+ for (i = 1; i < (long)(sizeof(disp_lang_array)/sizeof(disp_lang_array[0])); i++)
+ {
+ char *s = (char *)disp_lang_array[i];
- if(strchr(s, '(')){
- item = item_append(genlist, itc_2text, i, language_set_genlist_radio_cb, genlist);
- } else {
- item = item_append(genlist, itc_1text, i, language_set_genlist_radio_cb, genlist);
- }
+ if(strchr(s, '(')){
+ item = item_append(genlist, itc_2text, i, language_set_genlist_radio_cb, genlist);
+ } else {
+ item = item_append(genlist, itc_1text, i, language_set_genlist_radio_cb, genlist);
+ }
- if(lang_val == i) {
- PRINTFUNC(DLOG_DEBUG, "%d item is choiced.", i);
- elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
- }
+ if(lang_val == i) {
+ PRINTFUNC(DLOG_DEBUG, "%d item is choiced.", i);
+ elm_genlist_item_show(item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
+ }
- if ( item == NULL ) {
- PRINTFUNC(DLOG_DEBUG, "elm_genlist_item_append was failed");
- break;
- }
+ if ( item == NULL ) {
+ PRINTFUNC(DLOG_DEBUG, "elm_genlist_item_append was failed");
+ break;
}
}
+ Elm_Object_Item *dummy;
+ Elm_Genlist_Item_Class *itc_dummy = elm_genlist_item_class_new();
+ if (itc_dummy) {
+ itc_dummy->item_style = "title";
+ itc_dummy->func.text_get = NULL;
+ itc_dummy->func.content_get = NULL;
+ }
+ dummy = elm_genlist_item_append(genlist, itc_dummy, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(dummy, ELM_OBJECT_SELECT_MODE_NONE);
+ LOGD("before elm_radio_value_set > lang_val = %d", lang_val);
+ radio_gp = elm_radio_add(genlist);
+ elm_radio_state_value_set(radio_gp, lang_val);
elm_radio_value_set(radio_gp, lang_val);
elm_object_signal_callback_add(genlist, "elm,system,language,change", "elm", language_changed_cb, NULL);
-// eext_rotary_event_callback_set(genlist, _language_list_rotary_cb, NULL);
evas_object_smart_callback_add(genlist, "realized", _language_list_item_realized, NULL);
-
g_evt_key_down = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _ise_keydown_cb, NULL);
return genlist;
}
*
*/
window = elm_win_add(NULL, "voice-input-setting", ELM_WIN_BASIC);
- if(!window) {
+ if (!window) {
PRINTFUNC(DLOG_DEBUG, "it's fail to create window.");
return;
}
* Push language list
*
*/
- genlist = create_language_list(naviframe);
+ genlist = create_language_list(naviframe, NULL);
+ const char *item_style = NULL;
+ if (_WEARABLE)
+ item_style = "empty";
//item = elm_naviframe_item_push(naviframe, "IDS_VC_HEADER_VOICE_INPUT_LANGUAGE", NULL, NULL, genlist, NULL);
- elm_naviframe_item_push(naviframe, NULL, NULL, NULL, genlist, "empty");
+ elm_naviframe_item_push(naviframe, NULL, NULL, NULL, genlist, item_style);
//elm_object_item_domain_text_translatable_set(item, PACKAGE, EINA_TRUE);
g_setting_window = window;
void _stt_lang_changed_cb(keynode_t *key, void* data)
{
PRINTFUNC(DLOG_DEBUG, "");
- if(!data) return;
+ if (!data) return;
VoiceData *vd = (VoiceData *) data;
get_stt_default_language(vd);
{
PRINTFUNC(DLOG_DEBUG, "");
- if(!obj) return;
- if(!data) return;
+ if (!obj) return;
+ if (!data) return;
VoiceData *voicedata = (VoiceData *)data;
static void __stt_detailed_entry_input_panel_event_cb(void *data, Ecore_IMF_Context *imf_context, int value)
{
- if(!data) return;
+ if (!data) return;
VoiceData *voicedata = (VoiceData *)data;
}
}
-static Evas_Object *create_text_detiled_view(Evas_Object *parent)
+Evas_Object *create_text_detiled_view(Evas_Object *parent)
{
string edj_path = get_resource_path();
- edj_path = edj_path + STT_EDJ_FILE;
-
+ if(_WEARABLE)
+ edj_path = edj_path + STT_EDJ_FILE_WEARABLE;
+ else if (_TV)
+ edj_path = edj_path + STT_EDJ_FILE_TV;
+ else
+ edj_path = edj_path + STT_EDJ_FILE_MOBILE;
//layout
Evas_Object *layout = elm_layout_add(parent);
elm_layout_file_set(layout, edj_path.c_str(), "entry_focused_layout");
Evas_Object *entry = elm_entry_add(parent);
evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
-// ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
elm_entry_context_menu_disabled_set(entry, EINA_TRUE);
elm_entry_select_allow_set(entry, EINA_FALSE);
-// elm_entry_cursor_handler_disabled_set(entry, EINA_TRUE);
elm_entry_single_line_set(entry, EINA_TRUE);
elm_entry_scrollable_set(entry, EINA_TRUE);
elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
return layout;
}
+static Eina_Bool _idler_cb2(void *data)
+{
+ if (!data) return ECORE_CALLBACK_CANCEL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
static Eina_Bool __stt_entry_detailed_view_pop_cb(void *data, Elm_Object_Item *it)
{
PRINTFUNC(DLOG_DEBUG, "");
- if(!data) return EINA_FALSE;
+ if (!data) return EINA_FALSE;
VoiceData *voicedata = (VoiceData *)data;
Evas_Object *detailed_layout = elm_object_item_part_content_get(it, "elm.swallow.content");
Evas_Object *detailed_entry = elm_object_part_content_get(detailed_layout, "contents");
- const char *str = NULL;
+ if (elm_entry_is_empty(detailed_entry) == EINA_TRUE){
+ PRINTFUNC(DLOG_DEBUG, "detailed_entry is empty");
+ voicedata->stt_results.clear();
+ elm_entry_entry_set(main_entry, "");
- int pos = 0;
- pos = elm_entry_cursor_pos_get(detailed_entry);
- PRINTFUNC(DLOG_DEBUG, "pos = %d", pos);
+ hide_bottom_button(voicedata);
+ } else {
+ const char *str = NULL;
+ int pos = 0;
+ pos = elm_entry_cursor_pos_get(detailed_entry);
+ PRINTFUNC(DLOG_DEBUG, "pos = %d", pos);
- str = elm_entry_entry_get(detailed_entry);
+ str = elm_entry_entry_get(detailed_entry);
+ PRINTFUNC(DLOG_DEBUG, "str = %s", str);
- voicedata->stt_results.clear();
- voicedata->stt_results.push_back(str);
+ if (str) {
+ voicedata->stt_results.clear();
+ voicedata->stt_results.push_back(str);
+ }
-// uxt_scroller_set_auto_scroll_enabled(voicedata->scroller, EINA_TRUE);
- elm_entry_entry_set(main_entry, str);
- elm_entry_cursor_pos_set(main_entry, pos);
+ elm_entry_entry_set(main_entry, str);
+ elm_entry_cursor_pos_set(main_entry, pos);
- int x, y, w, h;
- elm_entry_cursor_geometry_get(main_entry, &x, &y, &w, &h);
- PRINTFUNC(DLOG_DEBUG, "%d %d %d %d", x, y, w, h);
+ int x, y, w, h;
+ elm_entry_cursor_geometry_get(main_entry, &x, &y, &w, &h);
+ PRINTFUNC(DLOG_DEBUG, "%d %d %d %d", x, y, w, h);
- elm_scroller_region_bring_in(voicedata->scroller, 0, y+h, 300, 168);
+ elm_scroller_region_bring_in(voicedata->scroller, 0, y+h, 300, 168);
+
+ ecore_idler_add(_idler_cb2, voicedata);
+ }
return EINA_TRUE;
}
{
PRINTFUNC(DLOG_DEBUG, "");
- if(!obj) return;
- if(!data) return;
+ if (!obj) return;
+ if (!data) return;
VoiceData *voicedata = (VoiceData *)data;
char *str = NULL;
+ char *utf8 = NULL;
int pos = 0;
pos = elm_entry_cursor_pos_get(obj);
PRINTFUNC(DLOG_DEBUG, "pos = %d", pos);
- str = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
+ utf8 = elm_entry_markup_to_utf8(elm_entry_entry_get(obj)); // to remove the tag for fade-in effect
+ if (utf8) {
+ str = elm_entry_utf8_to_markup(utf8);
+ free(utf8);
+ utf8 = NULL;
+ }
if (str && strlen(str) > 0) {
try {
return;
}
-
void activate_circle_scroller_for_stt_textbox(void* data, Eina_Bool bActivate)
{
PRINTFUNC(DLOG_DEBUG, "");
- if(!data) return;
+ if (!data) return;
VoiceData *voicedata = (VoiceData *)data;
Evas_Object *scroller = NULL;
- Evas_Object *circle_scroller = NULL;
-
scroller = elm_layout_content_get((Evas_Object *)voicedata->layout_main, "text_area");
- circle_scroller = (Evas_Object *) evas_object_data_get(scroller, "circle");
- eext_rotary_object_event_activated_set(circle_scroller, bActivate);
+ if (_WEARABLE) {
+ Evas_Object *circle_scroller = NULL;
+ circle_scroller = (Evas_Object *) evas_object_data_get(scroller, "circle");
+ eext_rotary_object_event_activated_set(circle_scroller, bActivate);
+ }
}
static Evas_Object *create_textblock(void* data)
{
- if(!data) return NULL;
+ if (!data) return NULL;
VoiceData *voicedata = (VoiceData *)data;
Evas_Object *circle_scroller = NULL;
string edj_path = get_resource_path();
- edj_path = edj_path + STT_EDJ_FILE;
+ if(_WEARABLE)
+ edj_path = edj_path + STT_EDJ_FILE_WEARABLE;
+ else if (_TV)
+ edj_path = edj_path + STT_EDJ_FILE_TV;
+ else
+ edj_path = edj_path + STT_EDJ_FILE_MOBILE;
scroller = elm_scroller_add(voicedata->layout_main);
-
elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
-
evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
- elm_scroller_page_size_set(scroller, 0, 50);
- elm_scroller_page_scroll_limit_set(scroller, 0, 1);
-
elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
-// uxt_scroller_set_auto_scroll_enabled(scroller, EINA_FALSE);
-
- circle_scroller = eext_circle_object_scroller_add(scroller, app_data->circle_surface);
- eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
- eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
-
+ if (_WEARABLE) {
+ circle_scroller = eext_circle_object_scroller_add(scroller, app_data->circle_surface);
+ eext_circle_object_scroller_policy_set(circle_scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+ eext_rotary_object_event_activated_set(circle_scroller, EINA_TRUE);
+ }
box = elm_box_add(scroller);
inner_layout = elm_layout_add(scroller);
elm_layout_file_set(inner_layout, edj_path.c_str(), "layout_textblock");
evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_signal_callback_add(inner_layout, "do_scroll", "entry",
- [](void *data, Evas_Object *obj, const char* signal, const char* e)
- {
- _bring_in_cb((void *) data);
- }, (void *) scroller);
+ elm_object_signal_callback_add(inner_layout, "do_scroll", "entry", _bring_in_cb, (void *) voicedata);
entry = elm_entry_add(inner_layout);
voicedata->main_entry = entry;
return scroller;
}
-static Evas_Object *create_progressbar(Evas_Object *parent)
+bool is_textblock_empty(void *data)
+{
+ if (!data) return false;
+
+ VoiceData *voicedata = (VoiceData *)data;
+
+ Evas_Object *scroller = (Evas_Object *)voicedata->scroller;
+ Evas_Object *inner_layout = NULL;
+
+ inner_layout = (Evas_Object *) evas_object_data_get(scroller, "inner_layout");
+
+ Evas_Object *entry = elm_layout_content_get(inner_layout, "elm.swallow.content");
+ if (!entry)
+ {
+ PRINTFUNC(DLOG_ERROR, "failed to get entry");
+ return false;
+ }
+
+ if (elm_entry_is_empty(entry)) {
+ PRINTFUNC(DLOG_ERROR, "entry empty");
+ return true;
+ }
+
+ return false;
+}
+
+void set_textblock_empty(void *data)
+{
+ if (!data) return;
+
+ VoiceData *voicedata = (VoiceData *)data;
+
+ Evas_Object *scroller = (Evas_Object *)voicedata->scroller;
+ Evas_Object *inner_layout = NULL;
+
+ inner_layout = (Evas_Object *) evas_object_data_get(scroller, "inner_layout");
+
+ Evas_Object *entry = elm_layout_content_get(inner_layout, "elm.swallow.content");
+ if (!entry) {
+ PRINTFUNC(DLOG_ERROR, "failed to get entry");
+ return;
+ }
+
+ PRINTFUNC(DLOG_DEBUG, "set entry empty");
+ elm_entry_entry_set(entry, NULL);
+
+ return;
+}
+
+static Evas_Object *create_bottom_button(void* data)
+{
+ PRINTFUNC(DLOG_DEBUG, "create_bottom_button");
+ if (!data) return NULL;
+
+ VoiceData *voicedata = (VoiceData *)data;
+
+ Evas_Object *bottom_button = elm_button_add(voicedata->layout_main);
+ elm_object_style_set(bottom_button, "vic/micbutton");
+
+ evas_object_smart_callback_add(bottom_button, "clicked", on_confirm_button_clicked_cb, voicedata);
+ evas_object_show(bottom_button);
+
+ return bottom_button;
+}
+
+void show_bottom_button(void* data, bool delayed)
+{
+ PRINTFUNC(DLOG_DEBUG, "show_bottom_button");
+ if (!data) return;
+
+ VoiceData *voicedata = (VoiceData *)data;
+
+ if (delayed) {
+ elm_object_signal_emit((Evas_Object *)voicedata->layout_main, "idle,state,show,bottom_button,delayed", "elm");
+ PRINTFUNC(DLOG_DEBUG, "Emit idle,state,show,bottom_button,delayed");
+ } else {
+ elm_object_signal_emit((Evas_Object *)voicedata->layout_main, "idle,state,show,bottom_button", "elm");
+ PRINTFUNC(DLOG_DEBUG, "Emit idle,state,show,bottom_button");
+ }
+}
+
+void hide_bottom_button(void* data)
+{
+ PRINTFUNC(DLOG_DEBUG, "hide_bottom_button");
+ if (!data) return;
+
+ VoiceData *voicedata = (VoiceData *)data;
+
+ elm_object_signal_emit((Evas_Object *)voicedata->layout_main, "idle,state,hide,bottom_button", "elm");
+ PRINTFUNC(DLOG_DEBUG, "Emit idle,state,hide,bottom_button");
+}
+
+static void scroll_effect_start(void* data, Evas_Object* obj, const char* s, const char* e)
+{
+ PRINTFUNC(DLOG_DEBUG, "scroll_effect_start");
+ if (!data) return;
+
+ VoiceData *voicedata = (VoiceData *)data;
+
+ if (voicedata->state == STT_STATE_VAL_LISTENING)
+ return;
+
+ if (is_textblock_empty(voicedata) == true)
+ return;
+
+ hide_bottom_button(voicedata);
+}
+
+static void scroll_effect_stop(void* data, Evas_Object* obj, const char* s, const char* e)
{
- Evas_Object *progressbar = NULL;
+ PRINTFUNC(DLOG_DEBUG, "scroll_effect_stop");
+ if (!data) return;
- progressbar = elm_progressbar_add(parent);
- elm_object_style_set(progressbar, "voice_input/process/small");
- elm_progressbar_pulse(progressbar, EINA_TRUE);
+ VoiceData *voicedata = (VoiceData *)data;
- evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ if (voicedata->state == STT_STATE_VAL_LISTENING)
+ return;
-// ea_theme_object_color_replace(progressbar, "B065L6", "AO012");
+ Evas_Coord x, y, w, h;
+ Evas_Object *scroller = (Evas_Object *)voicedata->scroller;
+ Evas_Object *inner_layout = NULL;
- evas_object_show(progressbar);
+ inner_layout = (Evas_Object *) evas_object_data_get(scroller, "inner_layout");
+
+ evas_object_geometry_get(inner_layout , &x, &y, &w, &h);
+ PRINTFUNC(DLOG_DEBUG, "scroll x=%d, y=%d, w=%d, h=%d", x, y, w, h);
+
+ if (is_textblock_empty(voicedata) == true)
+ return;
+
+ if (h+y != (360 - BOTTOM_PADDING_AREA)) {
+ show_bottom_button(voicedata, true);
+ } else {
+ show_bottom_button(voicedata, false);
+ }
+}
- return progressbar;
+static Eina_Bool _custom_back_cb(void *data, Elm_Object_Item *it)
+{
+ PRINTFUNC(DLOG_DEBUG, "");
+ _back_to_genlist_for_selector();
+ return EINA_TRUE;
}
static Evas_Object *create_fullview(Evas_Object *parent, VoiceData *r_voicedata)
voicedata->mo = mo;
-
layout_main = elm_layout_add(mo->getMoreOptionLayout());
if (!layout_main)
voicedata->layout_main = layout_main;
string edj_path = get_resource_path();
- edj_path = edj_path + STT_EDJ_FILE;
+ if(_WEARABLE)
+ edj_path = edj_path + STT_EDJ_FILE_WEARABLE;
+ else if (_TV)
+ edj_path = edj_path + STT_EDJ_FILE_TV;
+ else
+ edj_path = edj_path + STT_EDJ_FILE_MOBILE;
if (vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &is_screen_reader_on) == -1) {
PRINTFUNC(DLOG_ERROR, "Cannot read value of screen reader from vconf");
elm_layout_file_set(layout_main, edj_path.c_str(), "mic_control");
- elm_object_content_set(parent, layout_main);
-
//Canvas for Cairo effect
Evas_Object *canvas = evas_object_image_filled_add(evas_object_evas_get(layout_main));
+ evas_object_propagate_events_set(canvas, EINA_TRUE);
evas_object_image_alpha_set(canvas, EINA_TRUE);
evas_object_size_hint_align_set(canvas, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(canvas, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
Evas_Coord CanvasW, CanvasH;
CanvasW = 360;
- CanvasH = 74;
+ CanvasH = 64;
evas_object_image_size_set(canvas, CanvasW, CanvasH);
evas_object_resize(canvas, CanvasW, CanvasH);
evas_object_size_hint_min_set(canvas, CanvasW, CanvasH);
elm_object_part_content_set(layout_main, "EFFECT_BG", canvas);
+ // Bottom Button
+ Evas_Object *bottom_button = create_bottom_button(voicedata);
+ elm_object_part_content_set(voicedata->layout_main, "BOTTOM_BUTTON", bottom_button);
+ voicedata->bottom_button = bottom_button;
- // MIC Button
- Evas_Object *m_mic_button = elm_button_add(layout_main);
- elm_object_style_set(m_mic_button, "vic/micbutton");
- elm_object_part_content_set(layout_main, "MIC", m_mic_button);
-
- elm_object_disabled_set(m_mic_button, EINA_TRUE);
- evas_object_smart_callback_add(m_mic_button, "clicked", on_mic_button_press_cb, (void *) voicedata);
-
- voicedata->mic_button = m_mic_button;
-
- if(voicedata->btn_disabling_timer == NULL){
- voicedata->btn_disabling_timer = ecore_timer_add(2.0, _mic_button_enable_cb, voicedata);
+ // STT Setup timer
+ if (voicedata->setup_timer == NULL) {
+ voicedata->setup_timer = ecore_timer_add(0.3, _idler_cb, voicedata);
}
-// ecore_idler_add(_idler_cb, voicedata);
- ecore_timer_add(0.6, _idler_cb, voicedata);
-
- // Confirm panel layout
- Evas_Object *panel_layout;
- panel_layout = elm_layout_add(layout_main);
- elm_layout_theme_set(panel_layout, "layout", "drawer", "panel");
- evas_object_show(panel_layout);
-
- // Confirm panel
- Evas_Object *panel;
- panel = elm_panel_add(panel_layout);
- elm_panel_orient_set(panel, ELM_PANEL_ORIENT_LEFT);
- elm_layout_theme_set(panel, "panel", "left_confirm", "default");
- elm_layout_theme_set(panel, "panel", "left_sending", "default");
-
- elm_layout_signal_callback_add(panel, "cue,clicked", "elm", _panel_cue_clicked_cb, (void *) voicedata);
- evas_object_show(panel);
-
- elm_object_part_content_set(panel_layout, "elm.swallow.right", panel);
- elm_object_part_content_set(layout_main, "left_panel_area", panel_layout);
-
- elm_object_signal_emit(panel, "elm,state,disabled", "elm");
- elm_panel_toggle(panel);
-
-
// Textblock
Evas_Object *scroller = create_textblock(voicedata);
elm_object_part_content_set(layout_main, "text_area", scroller);
voicedata->scroller = scroller;
- // Progress Bar
- Evas_Object *progress_bar = create_progressbar(layout_main);
- elm_object_part_content_set(layout_main, "PROGRESS_BAR", progress_bar);
- voicedata->progressbar = progress_bar;
+ elm_object_signal_callback_add(scroller, "do-show-vbar", "", scroll_effect_start, voicedata);
+ elm_object_signal_callback_add(scroller, "do-hide-vbar", "", scroll_effect_stop, voicedata);
+
+ // Send Text
+ elm_object_part_text_set(layout_main, "elm.text.send", dgettext(PACKAGE, "IDS_AMEMO_BUTTON_SEND"));
// add callback
elm_object_signal_callback_add(layout_main, "idle,state,pulse,visible", "", on_initial_anim_press_cb, voicedata);
return FALSE;
}
+int init_voicedata(VoiceData *r_voicedata)
+{
+ VoiceData *voicedata = (VoiceData *)r_voicedata;
+ if (!voicedata) {
+ return FALSE;
+ }
+
+ voicedata->voicefw_state = 0;
+ voicedata->voicefw_handle = NULL;
+ voicedata->naviframe = NULL;
+ voicedata->layout_main = NULL;
+ voicedata->progressbar = NULL;
+ voicedata->scroller = NULL;
+ voicedata->main_entry = NULL;
+ voicedata->state = STT_STATE_VAL_INIT;
+ voicedata->kbd_lang = NULL;
+ voicedata->start_timer = NULL;
+ voicedata->refresh_timer = NULL;
+ voicedata->textblock_timer = NULL;
+ voicedata->power_unlock_timer = NULL;
+ voicedata->stt_results.clear();
+ voicedata->partial_result = NULL;
+ voicedata->result_type = 0;
+ voicedata->disclaimer = 1;
+ voicedata->mo = NULL;
+ voicedata->sttfeedback = NULL;
+ voicedata->sttmanager = NULL;
+ voicedata->ieffect = NULL;
+ voicedata->effector = NULL;
+
+ return TRUE;
+}
+
int init_voice(Evas_Object *parent, const char *lang, VoiceData *r_voicedata)
{
PRINTFUNC(DLOG_DEBUG, "[init_voice]");
return FALSE;
}
- if (NULL != voicedata->textblock_timer) {
- PRINTFUNC(DLOG_DEBUG, "delete previous textblock");
- ecore_timer_del(voicedata->textblock_timer);
- voicedata->textblock_timer = NULL;
- }
+ init_voice_recorder(NULL);
return TRUE;
}
if(voicedata == NULL)
return ECORE_CALLBACK_CANCEL;
+ const char *item_style = NULL;
+ if (_WEARABLE)
+ item_style = "empty";
+ Elm_Object_Item *nf_voice_item = elm_naviframe_item_push(voicedata->naviframe, NULL, NULL, NULL, NULL, item_style);
+ elm_naviframe_item_pop_cb_set(nf_voice_item, _custom_back_cb, NULL);
+
voicedata->layout_main = create_fullview(voicedata->naviframe, voicedata);
if (voicedata->layout_main) {
+ hide_bottom_button(voicedata);
evas_object_show(voicedata->layout_main);
}
VoiceData *voicedata = (VoiceData *)r_voicedata;
- if(voicedata){
- try{
- //voicedata->state = STT_STATE_VAL_PREPARE_CANCEL;
- voicedata->sttmanager->Cancel();
- }catch(is::stt::SttException &e){
+ if (voicedata) {
+ try {
+ if (voicedata->sttmanager)
+ voicedata->sttmanager->Cancel();
+ else
+ PRINTFUNC(DLOG_ERROR, "sttmanager is null");
+ } catch(is::stt::SttException &e) {
PRINTFUNC(DLOG_ERROR, "reason : %s", e.what());
}
//Hide more option and language settings by interrupt scenario.
close_setting_window_idler_cb(NULL);
Evas_Object *mo_layout = voicedata->mo->getMoreOptionLayout();
- if(mo_layout){
- if(eext_more_option_opened_get(mo_layout) == EINA_TRUE) {
- eext_more_option_opened_set(mo_layout, EINA_FALSE);
+ if (_WEARABLE) {
+ if (mo_layout){
+ if (eext_more_option_opened_get(mo_layout) == EINA_TRUE) {
+ eext_more_option_opened_set(mo_layout, EINA_FALSE);
+ }
+ }
+ }
+ }
+}
+
+void on_stt_resume(VoiceData *r_voicedata)
+{
+ PRINTFUNC(NO_PRINT, "");
+
+ VoiceData *voicedata = (VoiceData *)r_voicedata;
+ if (voicedata){
+ if (voicedata->mo) {
+ if (voicedata->mo->isMoreOptionOpened() == EINA_FALSE && is_textblock_empty(voicedata)) {
+ restart_listening(2.0);
+ return;
}
}
}
powerUnlock();
if (NULL != voicedata) {
+ if (NULL != voicedata->main_entry) {
+ evas_object_smart_callback_del(voicedata->main_entry, "clicked", _stt_entry_clicked_cb);
+ voicedata->main_entry = NULL;
+ }
+
+ if (NULL != voicedata->scroller) {
+ Evas_Object *inner_layout = NULL;
+ inner_layout = (Evas_Object *) evas_object_data_get(voicedata->scroller, "inner_layout");
+
+ if (NULL != inner_layout)
+ elm_object_signal_callback_del(inner_layout, "do_scroll", "entry", _bring_in_cb);
+
+
+ elm_object_signal_callback_del(voicedata->scroller, "do-show-vbar", "", scroll_effect_start);
+ elm_object_signal_callback_del(voicedata->scroller, "do-hide-vbar", "", scroll_effect_stop);
+
+ voicedata->scroller = NULL;
+ }
+
if (NULL != voicedata->layout_main) {
+ elm_object_signal_callback_del(voicedata->layout_main, "idle,state,pulse,visible", "", on_initial_anim_press_cb);
voicedata->layout_main = NULL;
}
voicedata->naviframe = NULL;
}
+ if (NULL != voicedata->setup_timer) {
+ ecore_timer_del(voicedata->setup_timer);
+ voicedata->setup_timer = NULL;
+ }
+
if (NULL != voicedata->start_timer) {
ecore_timer_del(voicedata->start_timer);
voicedata->start_timer = NULL;
voicedata->refresh_timer = NULL;
}
- if (NULL != voicedata->progressbar_timer) {
- ecore_timer_del(voicedata->progressbar_timer);
- voicedata->progressbar_timer = NULL;
- elm_progressbar_pulse(voicedata->progressbar, EINA_FALSE);
- }
-
if (NULL != voicedata->textblock_timer) {
ecore_timer_del(voicedata->textblock_timer);
voicedata->textblock_timer = NULL;
}
- if (NULL != voicedata->guide_text_timer) {
- ecore_timer_del(voicedata->guide_text_timer);
- voicedata->guide_text_timer = NULL;
- }
-
- if (NULL != voicedata->btn_disabling_timer) {
- ecore_timer_del(voicedata->btn_disabling_timer);
- voicedata->btn_disabling_timer = NULL;
- }
-
if (NULL != voicedata->power_unlock_timer) {
ecore_timer_del(voicedata->power_unlock_timer);
voicedata->power_unlock_timer = NULL;
voicedata->sttfeedback = NULL;
}
- free(voicedata);
+ delete voicedata;
}
}
-
-
-