Modify the screen UI for stt mode and refactoring code 65/148165/3
authorsungwook79.park <sungwook79.park@samsung.com>
Thu, 7 Sep 2017 04:28:52 +0000 (13:28 +0900)
committersungwook79.park <sungwook79.park@samsung.com>
Thu, 7 Sep 2017 06:54:43 +0000 (15:54 +0900)
Change-Id: Icee4362896d7604caa3c1798d2a95e96a988add2
Signed-off-by: sungwook79.park <sungwook79.park@samsung.com>
13 files changed:
edje/wearable/images/wi_stt_icon_error.png [new file with mode: 0644]
inc/MoreOption.h
inc/w-input-stt-engine.h
inc/w-input-stt-ise.h
inc/w-input-stt-voice.h
po/en_US.po
res/wearable/edje/w-input-stt.edc
src/MoreOption.cpp
src/SttFeedback.cpp
src/w-input-emoticon.cpp
src/w-input-selector.cpp
src/w-input-stt-ise.cpp
src/w-input-stt-voice.cpp

diff --git a/edje/wearable/images/wi_stt_icon_error.png b/edje/wearable/images/wi_stt_icon_error.png
new file mode 100644 (file)
index 0000000..7720b4f
Binary files /dev/null and b/edje/wearable/images/wi_stt_icon_error.png differ
index f410d52..1aca4ff 100755 (executable)
@@ -47,6 +47,14 @@ class MoreOption
 
                Evas_Object *getMoreOptionLayout(){return more_option_layout;};
 
+               static void moreOptionOpened(void *data, Evas_Object * obj, void *event_info);
+               static void moreOptionClosed(void *data, Evas_Object * obj, void *event_info);
+
+               static void moreItemClicked(void *data, Evas_Object * obj, void *event_info);
+               static void moreItemSelected(void *data, Evas_Object * obj, void *event_info);
+               Eina_Bool isMoreOptionOpened(){ return option_opened;};
+               Eina_Bool discard_popup_opened;
+
        private :
                /**
                 * Main layout
@@ -68,5 +76,12 @@ class MoreOption
                 *
                 */
                Evas_Object *AddLanguageIcon(Evas_Object *parent);
+
+               /**
+                * Show /Hide Cue button of More Option.
+                *
+                */
+               void hideCue();
+               void showCue();
 };
 
index 0cf85e1..044a7a3 100755 (executable)
@@ -65,15 +65,13 @@ struct _VoiceData
        Evas_Object *progressbar; //progressbar
        Evas_Object *scroller; //scroller
        Evas_Object *main_entry; //entry
-       Evas_Object *mic_button; //MIC button
+       Evas_Object *bottom_button; //bottom button
        SttStateVal state;
        char *kbd_lang;
+       Ecore_Timer *setup_timer;
        Ecore_Timer *start_timer;
        Ecore_Timer *refresh_timer;
-       Ecore_Timer *progressbar_timer;
        Ecore_Timer *textblock_timer;
-       Ecore_Timer *guide_text_timer;
-       Ecore_Timer *btn_disabling_timer;
        Ecore_Timer *power_unlock_timer;
 
        std::vector<std::string> stt_results;
index 9be2138..99aaae9 100755 (executable)
@@ -47,6 +47,7 @@ extern "C"
 
 void show_voice_input(Evas_Object *parent, const char *lang, void (*get_string)(char *, int));
 void pause_voice();
+void resume_voice();
 void destroy_voice();
 int is_lang_supported_by_voice_input(const char *lang);
 void ise_show_stt_popup(void *data);
index 685f252..7696789 100755 (executable)
@@ -81,10 +81,12 @@ int init_voice(Evas_Object *parent, const char *lang, VoiceData *r_voicedata);
 int is_lang_supported_by_stt(char lang[]);
 Evas_Object *show_voice_window(Evas_Object *parent, VoiceData *voicedata);
 void on_stt_pause(VoiceData *voicedata);
+void on_stt_resume(VoiceData *voicedata);
 void on_destroy(VoiceData *voicedata);
 const char* get_lang_label(char lang[]);
 void _stt_lang_changed_cb(keynode_t *key, void* data);
 void start_by_press(VoiceData *voicedata);
+void restart_listening(double in);
 void voice_get_string(const char *keyValue, VoiceData *voicedata);
 void create_setting_window(Evas_Object *more_option_layout);
 void activate_circle_scroller_for_stt_textbox(void* data, Eina_Bool bActivate);
@@ -92,6 +94,11 @@ void stt_feedback_initialize();
 void stt_feedback_deinitialize();
 void show_error_message(VoiceData *voicedata, stt_error_e reason);
 void powerUnlock(void);
+Evas_Object *create_text_detiled_view(Evas_Object *parent);
+bool is_textblock_empty(void *data);
+void set_textblock_empty(void *data);
+void show_bottom_button(void* data, bool delayed);
+void hide_bottom_button(void* data);
 
 
 #endif /* W_INPUT_STT_VOICE_H_ */
index 4331d77..8d82798 100644 (file)
@@ -125,7 +125,7 @@ msgid "IDS_MSG_HEADER_QUICK_RESPONSES_ABB"
 msgstr "Quick responses"
 
 msgid "IDS_AMEMO_BUTTON_SEND"
-msgstr "Send"
+msgstr "SEND"
 
 msgid "IDS_IME_BODY_OK_HAND_SIGN_M_EMOTICON_NAME_TTS"
 msgstr "OK hand sign"
index 13168ba..89fdbf1 100755 (executable)
@@ -1,7 +1,7 @@
 #include "w-input-stt-button.edc"
 
 #define VOICE_CANDIDATE_AREA_HEIGHT 56
-#define BUTTON_TEXT_SIZE_INC 85
+#define BUTTON_TEXT_SIZE_INC 80
 
 collections
 {
@@ -36,11 +36,6 @@ collections
                   * web: http://slp-info.sec.samsung.net/gerrit/plugins/gitiles/magnolia/framework/system/libsvi
                   */
           }
-          plugin {
-                 name: "haptic_tap";
-                 source: "feedback";
-                 param: "FEEDBACK_TYPE_VIBRATION FEEDBACK_PATTERN_TAP";
-          }
        }
 
        images {
@@ -50,8 +45,6 @@ collections
                image, "./icon/B13_mic_Que.png" COMP;
                image, "./icon/B13_mic_Que_01.png" COMP;
                image, "./icon/B13_mic_procecessing_bg.png" COMP;
-               image, "./text_downdrop.#.png" COMP;
-               image, "./text_downdrop_press.#.png" COMP;
 
                image, "./input_ic_voice_mic.png" COMP;
                image, "./w_sip_mask_bg.png" COMP;
@@ -64,6 +57,7 @@ collections
                image, "./b_stt_icon_btn.png" COMP;
                image, "./b_stt_confirm_icon.png" COMP;
                image, "./b_stt_send_icon.png" COMP;
+               image, "./wi_stt_icon_error.png" COMP;
        }
 
        color_classes 
@@ -387,7 +381,7 @@ collections
           {
              name: "AT0114";
 #            color: 0 0 0 100;
-          color: 128 128 128 100;
+              color: 128 128 128 100;
           }
           color_class 
           {
@@ -469,14 +463,23 @@ collections
                        tag,  "b" "+ font=Tizen:style=Bold";
                        tag,  "tab" "\t";
                }
+               style { name: "button_general_text_normal";
+                       base: "font=Tizen:style=Regular font_size="BUTTON_TEXT_SIZE_INC" align=center color=#FFFFFF ellipsis=0.0 wrap=mixed";
+               }
                style { name: "button_general_text_dim";
                        base: "font=Tizen:style=Regular font_size="BUTTON_TEXT_SIZE_INC" align=center color=#FFFFFF ellipsis=0.0 wrap=mixed";
                }
                style { name: "button_general_text_press";
                        base: "font=Tizen:style=Regular font_size="BUTTON_TEXT_SIZE_INC" align=center color=#888888 ellipsis=0.0 wrap=mixed";
                }
-               style { name: "button_general_text_normal";
-                       base: "font=Tizen:style=Regular font_size="BUTTON_TEXT_SIZE_INC" align=center color=#FFFFFF ellipsis=0.0 wrap=mixed";
+               style { name: "button_send_text_normal";
+                       base: "font=Tizen:style=Regular font_size="BUTTON_TEXT_SIZE_INC" align=center color=#FFFFFF color_class=AT0117 ellipsis=0.0 wrap=mixed";
+               }
+               style { name: "button_cue_text_normal";
+                       base: "font=Tizen:style=Regular font_size="BUTTON_TEXT_SIZE_INC" align=center color=#FFFFFF color_class=AT032 ellipsis=0.0 wrap=mixed";
+               }
+               style { name: "button_bottom_text_normal";
+                       base: "font=Tizen:style=Regular font_size=26 align=center color=#FFFFFF color_class=AT0118";
                }
        }
 
@@ -507,6 +510,21 @@ collections
                        }
                        part
                        {
+                               name, "access_bg";
+                               type, SWALLOW;
+                               scale, 1;
+                               description
+                               {
+                                       state, "default" 0.0;
+                                       visible, 1;
+                                       min, 360 360;
+                                       max, 360 360;
+                                       rel1.to, "bg";
+                                       rel2.to, "bg";
+                               }
+                       }
+                       part
+                       {
                                name, "top_block";
                                type, SPACER;
                                scale, 1;
@@ -526,6 +544,23 @@ collections
                                                to, "bg";
                                        }
                                }
+                               description
+                               {
+                                       state, "hide" 0.0;
+                                       min, 360 360;
+                                       align, 0.5 0;
+                                       rel1
+                                       {
+                                               relative, 0.0 0.0;
+                                               to, "bg";
+                                       }
+                                       rel2
+                                       {
+                                               relative, 1.0 0.0;
+                                               to, "bg";
+                                       }
+                               }
+
                        }
 
                        part
@@ -536,20 +571,18 @@ collections
                                {
                                        state, "default" 0.0;
                                        align, 0.5 1;
-                                       min, 282 (360-103);
-                                       max, 282 (360-103);
+                                       min, 282 360;
+                                       max, 282 360;
 
                                        rel1
                                        {
                                                relative, 39/360 1;
-                                               to, "top_block";
-                                               offset, 0 -1;
+                                               to, "bg";
                                        }
                                        rel2
                                        {
                                                relative, 321/360 1;
-                                               to, "top_block";
-                                               offset, 0 -1;
+                                               to, "bg";
                                        }
                                }
                        }
@@ -583,11 +616,11 @@ collections
                                description
                                {
                                        state, "default" 0.0;
-                                       min, 360 100;
-                                       max, 360 100;
+                                       min, 360 78;
+                                       max, 360 78;
                                        rel1
                                        {
-                                               relative, 0 260/360;
+                                               relative, 0 (360-78)/360;
                                                to, "bg";
                                        }
                                        rel2
@@ -600,6 +633,25 @@ collections
                                }
                                description
                                {
+                                       state, "hide" 0.0;
+                                       min, 360 78;
+                                       max, 360 78;
+                                       rel1
+                                       {
+                                               relative, 0 1;
+                                               to, "bg";
+                                       }
+                                       rel2
+                                       {
+                                               relative, 1 (360+78)/360;
+                                               to, "bg";
+                                       }
+                                       image.normal, "./tw_bottom_btn_bg.png";
+                                       color: 128 128 128 128;
+                               }
+
+                               description
+                               {
                                        state, "pressed" 0.0;
                                        inherit, "default" 0.0;
                                        color: 128 128 128 128;
@@ -658,7 +710,6 @@ collections
                                }
 
                        }
-
                        part
                        {
                                name, "EFFECT_BG";
@@ -686,123 +737,286 @@ collections
                                }
                        }
 
-
+                       //Part for mic button
                        part
                        {
-                               name, "MIC_ICON";
-                               type, IMAGE;
+                               name, "BOTTOM_BUTTON";
+                               type, SWALLOW;
+                               scale, 1;
+                               description
+                               {
+                                       state, "default" 0.0;
+                                       visible, 1;
+                                       min, 290 78;
+                                       max, 290 78;
+                                       rel1
+                                       {
+                                               relative, 35/360 0.0;
+                                               to, "background";
+                                       }
+                                       rel2
+                                       {
+                                               relative, 325/360 1.0;
+                                               to, "background";
+                                       }
+                               }
+                       }
+                       part
+                       {
+                               name, "PROGRESS_BAR";
+                               type, SWALLOW;
                                scale, 1;
                                description
                                {
                                        state, "default" 0.0;
                                        min, 50 50;
                                        max, 50 50;
+                                       visible, 0;
                                        rel1
                                        {
-                                               relative, 155/360 26/100;
+                                               relative, 155/360 27/100;
                                                to, "background";
                                        }
                                        rel2
                                        {
-                                               relative, 205/360 76/100;
+                                               relative, 205/360 77/100;
                                                to, "background";
                                        }
-                                       image.normal, "./input_ic_voice_mic.png";
                                }
                                description
                                {
-                                       state, "recording" 0.0;
+                                       state, "message" 0.0;
                                        inherit, "default" 0.0;
-                                       visible, 0;
                                }
                                description
                                {
                                        state, "processing" 0.0;
                                        inherit, "default" 0.0;
-                                       visible, 0;
+                                       visible, 1;
+                               }
                                }
+
+                       part
+                       {
+                               name, "cue_text_block";
+                               type, SPACER;
                                description
                                {
-                                       state, "message" 0.0;
-                                       inherit, "default" 0.0;
+                                       state, "default" 0.0;
+                                       align, 0.5 0;
                                        rel1
                                        {
-                                               relative, 155/360 41/100;
-                                               to, "background";
+                                               relative, 30/360 158/360;
+                                               to, "bg";
                                        }
                                        rel2
                                        {
-                                               relative, 205/360 91/100;
-                                               to, "background";
+                                               relative, (360-30)/360 (158+43)/360;
+                                               to, "bg";
+                                       }
+                               }
+                       }
+
+                       part
+                       {
+                               name, "elm.text.cue";
+                               type, TEXTBLOCK;
+                               mouse_events, 0;
+                               scale, 1;
+                               description
+                               {
+                                       state, "default" 0.0;
+                                       visible, 0;
+                                       rel1.to, "cue_text_block";
+                                       rel2.to, "cue_text_block";
+                                       text
+                                       {
+                                               fit: 1 1;
+                                               style, "button_cue_text_normal";
                                        }
+                               }
+                               description
+                               {
+                                       state, "show" 0.0;
                                        visible, 1;
+                                       align, 0.5 0.6;
+                                       rel1.to, "cue_text_block";
+                                       rel2.to, "cue_text_block";
+                                       text
+                                       {
+                                               fit: 1 1;
+                                               style, "button_cue_text_normal";
+                                       }
+                               }
+                       }
+
+                       part
+                       {
+                               name, "guide_text_block_left_padding";
+                               type, SPACER;
+                               description
+                               {
+                                       state, "default" 0.0;
+                                       min, (80+28+8) 0;
+                                       max, (80+28+8) -1;
+                                       fixed, 1 0;
+                                       align, 0.0 0.0;
+                                       rel1
+                                       {
+                                               relative, 0 (360-70)/360;
+                                               to, "bg";
+                                       }
+                                       rel2
+                                       {
+                                               relative, 0 (360-33)/360;
+                                               to, "bg";
                                }
                        }
 
+                       }
+                       part
+                       {
+                               name, "guide_text_block_right_padding";
+                               type, SPACER;
+                               description
+                               {
+                                       state, "default" 0.0;
+                                       min, 80 0;
+                                       max, 80 -1;
+                                       fixed, 1 0;
+                                       align, 1.0 0.0;
+                                       rel1
+                                       {
+                                               relative, 1 (360-70)/360;
+                                               to, "bg";
+                                       }
+                                       rel2
+                                       {
+                                               relative, 1 (360-33)/360;
+                                               to, "bg";
+                                       }
+                               }
 
+                       }
 
-                       //Part for mic button
                        part
                        {
-                               name, "MIC";
-                               type, SWALLOW;
-                               scale, 1;
+                               name, "guide_text_block";
+                               type, SPACER;
                                description
                                {
                                        state, "default" 0.0;
-                                       visible, 1;
-                                       min, 290 100;
-                                       max, 290 100;
+                                       align, 0.5 0;
                                        rel1
                                        {
-                                               relative, 35/360 0.0;
-                                               to, "background";
+                                               relative, 1.0 0.0;
+                                               to, "guide_text_block_left_padding";
                                        }
                                        rel2
                                        {
-                                               relative, 325/360 1.0;
-                                               to, "background";
+                                               relative, 0.0 1.0;
+                                               to, "guide_text_block_right_padding";
                                        }
                                }
+
                        }
                        part
                        {
-                               name, "PROGRESS_BAR";
-                               type, SWALLOW;
+                               name, "elm.text";
+                               type, TEXTBLOCK;
+                               mouse_events, 0;
                                scale, 1;
                                description
                                {
                                        state, "default" 0.0;
-                                       min, 50 50;
-                                       max, 50 50;
+                                       min, 0 37;
+                                       max, -1 37;
+                                       fixed, 0 1;
+                                       align, 0.5 0.5;
+                                       text {
+                                               min, 0 1;
+                                               max, 1 1;
+                                               ellipsis, -1.0;
+                                               fade_ellipsis, 1.0;
+                                               style, "button_bottom_text_normal";
+                                       }
                                        visible, 0;
                                        rel1
                                        {
-                                               relative, 155/360 27/100;
-                                               to, "background";
+                                               relative, 0.0 0.0;
+                                               to, "guide_text_block";
                                        }
                                        rel2
                                        {
-                                               relative, 205/360 77/100;
-                                               to, "background";
+                                               relative, 1.0 1.0;
+                                               to, "guide_text_block";
                                        }
                                }
                                description
                                {
-                                       state, "message" 0.0;
-                                       inherit, "default" 0.0;
+                                       state, "show" 0.0;
+                                       inherit, "default";
+                                       visible, 1;
+                               }
                                }
+                       part
+                       {
+                               name, "guide_text_block_icon_padding";
+                               type, SPACER;
                                description
                                {
-                                       state, "processing" 0.0;
-                                       inherit, "default" 0.0;
-                                       visible, 1;
+                                       state, "default" 0.0;
+                                       min, 8 0;
+                                       max, 8 -1;
+                                       fixed, 1 0;
+                                       align, 1.0 0.0;
+                                       rel1
+                                       {
+                                               relative, 0 0;
+                                               to, "elm.text";
+                                       }
+                                       rel2
+                                       {
+                                               relative, 0 1;
+                                               to, "elm.text";
                                }
                        }
 
+                       }
                        part
                        {
-                               name, "guide_text_block";
+                               name, "error_icon";
+                               type, IMAGE;
+                               description
+                               {
+                                       state, "default" 0.0;
+                                       min, 28 37;
+                                       max, 28 37;
+                                       align, 1.0 0.5;
+                                       rel1
+                                       {
+                                               relative, 0.0 0.0;
+                                               to, "guide_text_block_icon_padding";
+                                       }
+                                       rel2
+                                       {
+                                               relative, 0.0 1.0;
+                                               to, "guide_text_block_icon_padding";
+                                       }
+                                       image.normal, "./wi_stt_icon_error.png";
+                                       color_class, "AO015";
+                                       visible, 0;
+                               }
+                               description
+                               {
+                                       state, "show" 0.0;
+                                       inherit, "default";
+                                       visible, 1;
+                               }
+                       }
+                       part
+                       {
+                               name, "send_text_block";
                                type, SPACER;
                                description
                                {
@@ -810,35 +1024,35 @@ collections
                                        align, 0.5 0;
                                        rel1
                                        {
-                                               relative, 39/360 140/360;
-                                               to, "bg";
+                                               relative, 105/360 5/78;
+                                               to, "background";
                                        }
                                        rel2
                                        {
-                                               relative, (360-39)/360 (140+42)/360;
-                                               to, "bg";
+                                               relative, (360-105)/360 (78-38)/78;
+                                               to, "background";
                                        }
                                }
                                description
                                {
-                                       state, "bottom" 0.0;
+                                       state, "expand" 0.0;
                                        align, 0.5 0;
                                        rel1
                                        {
-                                               relative, 74/360 (360-91)/360;
-                                               to, "bg";
+                                               relative, 84/360 18/78;
+                                               to, "background";
                                        }
                                        rel2
                                        {
-                                               relative, (360-74)/360 (360-57)/360;
-                                               to, "bg";
-                                       }
+                                               relative, (360-82)/360 (78-23)/78;
+                                               to, "background";
                                }
                        }
 
+                       }
                        part
                        {
-                               name, "elm.text";
+                               name, "elm.text.send";
                                type, TEXTBLOCK;
                                mouse_events, 0;
                                scale, 1;
@@ -846,28 +1060,17 @@ collections
                                {
                                        state, "default" 0.0;
                                        visible, 1;
-                                       align, 0.5 0.6;
-                                       rel1.to, "guide_text_block";
-                                       rel2.to, "guide_text_block";
-                                       text
-                                       {
-                                               fit: 1 1;
-                                               style, "textblock_style";
-                                       }
-                                       color, 120 120 120 120;
-                               }
-                               description
-                               {
-                                       state, "bottom" 0.0;
-                                       inherit, "default" 0.0;
+                                       align, 0.5 0.5;
+                                       rel1.to, "send_text_block";
+                                       rel2.to, "send_text_block";
                                        text
                                        {
                                                fit: 1 1;
-                                               style, "textblock_style_bottom";
+                                               style, "button_send_text_normal";
                                        }
-                                       color, 120 120 120 120;
                                }
                        }
+
                }
 
                programs
@@ -889,60 +1092,73 @@ collections
 
                        program
                        {
-                               name,   "listening";
-                               signal, "elm,state,listening";
+                               name,   "cue_text_show";
+                               signal, "idle,state,cue_text,visible";
                                source, "elm";
-                               action, STATE_SET "recording" 0.0;
-                               target, "MIC_ICON";
+                               action, STATE_SET "show" 0.0;
+                               target, "elm.text.cue";
+                               after: "cue_text_hide";
                        }
 
                        program
                        {
-                               name,   "start_processing";
-                               signal, "elm,state,processing";
+                               name,   "cue_text_hide";
+                               signal, "idle,state,cue_text,hidden";
                                source, "elm";
-                               action, STATE_SET "processing" 0.0;
-                               target, "PROGRESS_BAR";
-                               target, "MIC_ICON";
-                               transition, DECELERATE 0.3;
+                               in, 2.0 0.0;
+                               action, STATE_SET "default" 0.0;
+                               target, "elm.text.cue";
                        }
 
                        program
                        {
-                               name,   "idle";
-                               signal, "elm,state,init";
+                               name,   "text_show";
+                               signal, "idle,state,text,visible";
                                source, "elm";
-                               action, STATE_SET "default" 0.0;
-                               target, "PROGRESS_BAR";
-                               target, "MIC_ICON";
-                               transition, DECELERATE 0.3;
+                               action, STATE_SET "show" 0.0;
+                               target, "elm.text";
+                               target, "error_icon";
+                               after: "text_hide_delayed";
                        }
+
                        program
                        {
-                               name, "idle_message";
-                               signal, "elm,state,init_message";
+                               name,   "text_hide";
+                               signal, "idle,state,text,hidden";
                                source, "elm";
-                               action, STATE_SET "message" 0.0;
-                               target, "PROGRESS_BAR";
-                               target, "MIC_ICON";
+                               action, STATE_SET "default" 0.0;
+                               target, "elm.text";
+                               target, "error_icon";
                        }
 
                        program
                        {
-                               name,   "text_show";
-                               signal, "idle,state,text,visible";
+                               name,   "text_hide_delayed";
+                               signal, "idle,state,text,hidden,delayed";
                                source, "elm";
-                               action, STATE_SET "expand" 0.0;
+                               in, 2.0 0.0;
+                               action, STATE_SET "default" 0.0;
                                target, "elm.text";
+                               target, "error_icon";
                        }
 
                        program
                        {
-                               name,   "text_hide";
-                               signal, "idle,state,text,hidden";
+                               name,   "contract_send_text";
+                               signal, "idle,state,send,text,contract";
                                source, "elm";
                                action, STATE_SET "default" 0.0;
-                               target, "elm.text";
+                               target, "send_text_block";
+
+                       }
+                       program
+                       {
+                               name,   "expand_send_text";
+                               signal, "idle,state,send,text,expand";
+                               source, "elm";
+                               action, STATE_SET "expand" 0.0;
+                               target, "send_text_block";
+
                        }
                        program
                        {
@@ -962,24 +1178,55 @@ collections
                                target, "EFFECT_BG";
                        }
 
+                       // Button
                        program
                        {
-                               name,   "guide_text_up";
-                               signal, "idle,state,guide_text,up";
+                               name,   "bottom_button_show";
+                               signal, "idle,state,show,bottom_button";
                                source, "elm";
                                action, STATE_SET "default" 0.0;
-                               target, "guide_text_block";
+                               target, "background";
+                               transition, DECELERATE 0.2;
                        }
                        program
                        {
-                               name,   "guide_text_bottom";
-                               signal, "idle,state,guide_text,bottom";
+                               name,   "bottom_button_show_delayed";
+                               signal, "idle,state,show,bottom_button,delayed";
                                source, "elm";
-                               action, STATE_SET "bottom" 0.0;
-                               target, "guide_text_block";
+                               in, 2.0 0.0;
+                               action, STATE_SET "default" 0.0;
+                               target, "background";
+                               transition, DECELERATE 0.2;
                        }
 
-
+                       program
+                       {
+                               name,   "bottom_button_hide";
+                               signal, "idle,state,hide,bottom_button";
+                               source, "elm";
+                               action, STATE_SET "hide" 0.0;
+                               target, "background";
+                               transition, DECELERATE 0.2;
+                       }
+                       // EFFECT Area
+                       program
+                       {
+                               name,   "bottom_effect_show";
+                               signal, "idle,state,show,effect";
+                               source, "elm";
+                               action, STATE_SET "default" 0.0;
+                               target, "EFFECT_BG_AREA";
+                               transition, DECELERATE 0.2;
+                       }
+                       program
+                       {
+                               name,   "bottom_effect_hide";
+                               signal, "idle,state,hide,effect";
+                               source, "elm";
+                               action, STATE_SET "hide" 0.0;
+                               target, "EFFECT_BG_AREA";
+                               transition, DECELERATE 0.2;
+                       }
                }
        }
 
@@ -1117,7 +1364,15 @@ collections
                          type: SWALLOW;
                          description { state: "default" 0.0;
                                 min: 282 39;
-                                color, 120 120 120 120;
+                                align: 0.5 1;
+                                rel1
+                                {
+                                        relative, 0.0 1.0;
+                                }
+                                rel2
+                                {
+                                        relative, 1.0 1.0;
+                                }
                          }
                   }
                }
@@ -1158,7 +1413,7 @@ collections
                                                relative, 1.0 1.0;
                                        }
                                        visible: 1;
-                                       color, 120 120 120 120;
+                                       color: 0 0 0 255;
                                }
                        }
                        part { name: "padding_top";
@@ -1169,7 +1424,7 @@ collections
                                        align: 0.0 0.0;
                                        rel1.relative: 0.0 0.0;
                                        rel2.relative: 1.0 0.0;
-                                       min: 0 20;
+                                       min: 0 24;
                                        fixed: 1 1;
                                }
                        }
@@ -1215,205 +1470,6 @@ collections
 
 
 
-#define PROGRESSBAR_ACTIVITY_SMALL_SIZE_INC 50
-       group
-       {
-               name: "elm/progressbar/horizontal/voice_input/process/small";
-               images {
-                       image: "style/tw_loading_small_00.png" COMP;
-                       image: "style/tw_loading_small_01.png" COMP;
-                       image: "style/tw_loading_small_02.png" COMP;
-                       image: "style/tw_loading_small_03.png" COMP;
-                       image: "style/tw_loading_small_04.png" COMP;
-                       image: "style/tw_loading_small_05.png" COMP;
-                       image: "style/tw_loading_small_06.png" COMP;
-                       image: "style/tw_loading_small_07.png" COMP;
-                       image: "style/tw_loading_small_08.png" COMP;
-                       image: "style/tw_loading_small_09.png" COMP;
-                       image: "style/tw_loading_small_10.png" COMP;
-                       image: "style/tw_loading_small_11.png" COMP;
-                       image: "style/tw_loading_small_12.png" COMP;
-                       image: "style/tw_loading_small_13.png" COMP;
-                       image: "style/tw_loading_small_14.png" COMP;
-                       image: "style/tw_loading_small_15.png" COMP;
-                       image: "style/tw_loading_small_16.png" COMP;
-                       image: "style/tw_loading_small_17.png" COMP;
-                       image: "style/tw_loading_small_18.png" COMP;
-                       image: "style/tw_loading_small_19.png" COMP;
-                       image: "style/tw_loading_small_20.png" COMP;
-                       image: "style/tw_loading_small_21.png" COMP;
-                       image: "style/tw_loading_small_22.png" COMP;
-                       image: "style/tw_loading_small_23.png" COMP;
-                       image: "style/tw_loading_small_24.png" COMP;
-                       image: "style/tw_loading_small_25.png" COMP;
-                       image: "style/tw_loading_small_26.png" COMP;
-                       image: "style/tw_loading_small_27.png" COMP;
-                       image: "style/tw_loading_small_28.png" COMP;
-                       image: "style/tw_loading_small_29.png" COMP;
-                       image: "style/tw_loading_small_30.png" COMP;
-                       image: "style/tw_loading_small_31.png" COMP;
-                       image: "style/tw_loading_small_32.png" COMP;
-                       image: "style/tw_loading_small_33.png" COMP;
-                       image: "style/tw_loading_small_34.png" COMP;
-                       image: "style/tw_loading_small_35.png" COMP;
-                       image: "style/tw_loading_small_36.png" COMP;
-                       image: "style/tw_loading_small_37.png" COMP;
-                       image: "style/tw_loading_small_38.png" COMP;
-                       image: "style/tw_loading_small_39.png" COMP;
-                       image: "style/tw_loading_small_40.png" COMP;
-                       image: "style/tw_loading_small_41.png" COMP;
-                       image: "style/tw_loading_small_42.png" COMP;
-                       image: "style/tw_loading_small_43.png" COMP;
-                       image: "style/tw_loading_small_44.png" COMP;
-                       image: "style/tw_loading_small_45.png" COMP;
-                       image: "style/tw_loading_small_46.png" COMP;
-                       image: "style/tw_loading_small_47.png" COMP;
-                       image: "style/tw_loading_small_48.png" COMP;
-                       image: "style/tw_loading_small_49.png" COMP;
-                       image: "style/tw_loading_small_50.png" COMP;
-                       image: "style/tw_loading_small_51.png" COMP;
-                       image: "style/tw_loading_small_52.png" COMP;
-                       image: "style/tw_loading_small_53.png" COMP;
-                       image: "style/tw_loading_small_54.png" COMP;
-                       image: "style/tw_loading_small_55.png" COMP;
-                       image: "style/tw_loading_small_56.png" COMP;
-                       image: "style/tw_loading_small_57.png" COMP;
-                       image: "style/tw_loading_small_58.png" COMP;
-                       image: "style/tw_loading_small_59.png" COMP;
-                       image: "style/tw_loading_small_60.png" COMP;
-                       image: "style/tw_loading_small_61.png" COMP;
-                       image: "style/tw_loading_small_62.png" COMP;
-                       image: "style/tw_loading_small_63.png" COMP;
-                       image: "style/tw_loading_small_64.png" COMP;
-               }
-               parts {
-                       part {
-                               name: "access";
-                               type: RECT;
-                               description
-                               {
-                                       state: "default" 0.0;
-                                       fixed: 1 1;
-                                       color: 0 0 0 0;
-                               }
-                       }
-                       part {
-                               name: "elm.background.progressbar";
-                               mouse_events: 0;
-                               scale: 1;
-                               type: RECT;
-                               description {
-                                       state: "default" 0.0;
-                               }
-                       }
-                       part {
-                               name: "bar";
-                               mouse_events: 0;
-                               scale: 1;
-                               clip_to: "elm.background.progressbar";
-                               description {
-                                       state: "default" 0.0;
-                                       min: PROGRESSBAR_ACTIVITY_SMALL_SIZE_INC PROGRESSBAR_ACTIVITY_SMALL_SIZE_INC;
-                                       max: PROGRESSBAR_ACTIVITY_SMALL_SIZE_INC PROGRESSBAR_ACTIVITY_SMALL_SIZE_INC;
-                                       fixed, 1 1;
-                                       aspect: 1.0 1.0;
-                                       aspect_preference: BOTH;
-                                       image.normal: "style/tw_loading_small_00.png";
-                                       image.tween: "style/tw_loading_small_01.png";
-                                       image.tween: "style/tw_loading_small_02.png";
-                                       image.tween: "style/tw_loading_small_03.png";
-                                       image.tween: "style/tw_loading_small_04.png";
-                                       image.tween: "style/tw_loading_small_05.png";
-                                       image.tween: "style/tw_loading_small_06.png";
-                                       image.tween: "style/tw_loading_small_07.png";
-                                       image.tween: "style/tw_loading_small_08.png";
-                                       image.tween: "style/tw_loading_small_09.png";
-                                       image.tween: "style/tw_loading_small_10.png";
-                                       image.tween: "style/tw_loading_small_11.png";
-                                       image.tween: "style/tw_loading_small_12.png";
-                                       image.tween: "style/tw_loading_small_13.png";
-                                       image.tween: "style/tw_loading_small_14.png";
-                                       image.tween: "style/tw_loading_small_15.png";
-                                       image.tween: "style/tw_loading_small_16.png";
-                                       image.tween: "style/tw_loading_small_17.png";
-                                       image.tween: "style/tw_loading_small_18.png";
-                                       image.tween: "style/tw_loading_small_19.png";
-                                       image.tween: "style/tw_loading_small_20.png";
-                                       image.tween: "style/tw_loading_small_21.png";
-                                       image.tween: "style/tw_loading_small_22.png";
-                                       image.tween: "style/tw_loading_small_23.png";
-                                       image.tween: "style/tw_loading_small_24.png";
-                                       image.tween: "style/tw_loading_small_25.png";
-                                       image.tween: "style/tw_loading_small_26.png";
-                                       image.tween: "style/tw_loading_small_27.png";
-                                       image.tween: "style/tw_loading_small_28.png";
-                                       image.tween: "style/tw_loading_small_29.png";
-                                       image.tween: "style/tw_loading_small_30.png";
-                                       image.tween: "style/tw_loading_small_31.png";
-                                       image.tween: "style/tw_loading_small_32.png";
-                                       image.tween: "style/tw_loading_small_33.png";
-                                       image.tween: "style/tw_loading_small_34.png";
-                                       image.tween: "style/tw_loading_small_35.png";
-                                       image.tween: "style/tw_loading_small_36.png";
-                                       image.tween: "style/tw_loading_small_37.png";
-                                       image.tween: "style/tw_loading_small_38.png";
-                                       image.tween: "style/tw_loading_small_39.png";
-                                       image.tween: "style/tw_loading_small_40.png";
-                                       image.tween: "style/tw_loading_small_41.png";
-                                       image.tween: "style/tw_loading_small_42.png";
-                                       image.tween: "style/tw_loading_small_43.png";
-                                       image.tween: "style/tw_loading_small_44.png";
-                                       image.tween: "style/tw_loading_small_45.png";
-                                       image.tween: "style/tw_loading_small_46.png";
-                                       image.tween: "style/tw_loading_small_47.png";
-                                       image.tween: "style/tw_loading_small_48.png";
-                                       image.tween: "style/tw_loading_small_48.png";
-                                       image.tween: "style/tw_loading_small_49.png";
-                                       image.tween: "style/tw_loading_small_50.png";
-                                       image.tween: "style/tw_loading_small_51.png";
-                                       image.tween: "style/tw_loading_small_52.png";
-                                       image.tween: "style/tw_loading_small_53.png";
-                                       image.tween: "style/tw_loading_small_54.png";
-                                       image.tween: "style/tw_loading_small_55.png";
-                                       image.tween: "style/tw_loading_small_56.png";
-                                       image.tween: "style/tw_loading_small_57.png";
-                                       image.tween: "style/tw_loading_small_58.png";
-                                       image.tween: "style/tw_loading_small_59.png";
-                                       image.tween: "style/tw_loading_small_60.png";
-                                       image.tween: "style/tw_loading_small_61.png";
-                                       image.tween: "style/tw_loading_small_62.png";
-                                       image.tween: "style/tw_loading_small_63.png";
-                                       image.tween: "style/tw_loading_small_64.png";
-                                       color: 128 128 128 128;
-                               }
-                       }
-               }
-               programs {
-                       program {
-                               name: "start_pulse";
-                               signal: "elm,state,pulse,start";
-                               source: "elm";
-                               action: STATE_SET "default" 0.0;
-                               target: "bar";
-                               transition: LINEAR 1.8;
-                               after: "start_pulse";
-                       }
-                       program {
-                               name: "stop_pulse";
-                               signal: "elm,state,pulse,stop";
-                               source: "elm";
-                               action: ACTION_STOP;
-                               target: "start_pulse";
-                               after: "init_pulse";
-                       }
-                       program { name: "init_pulse";
-                               action: STATE_SET "default" 0.0;
-                               target: "bar";
-                       }
-               }
-       }
-
-
 #define BUTTON_PADDING_SIZE_INC                            20 0
 #define BUTTON_HEIGHT_INC                                  122
 #define BUTTON_ICON_SIZE_INC                               60 60
@@ -1591,7 +1647,8 @@ collections
                                get_state(PART:"bg", st, 30, vl);
                                if (strcmp(st, "disabled")) {
                                        set_state(PART:"bg", "pressed", 0.0);
-                                       set_state(PART:"elm.text", "pressed", 0.0);
+                                       //set_state(PART:"bg_image", "pressed", 0.0);
+                                       set_state(PART:"elm.swallow.content.clip", "pressed", 0.0);
                                        emit("elm,action,press", "");
                                }
                        }
@@ -1613,7 +1670,8 @@ collections
                                get_state(PART:"bg", st, 30, vl);
                                if (strcmp(st, "disabled")) {
                                        set_state(PART:"bg", "default", 0.0);
-                                       set_state(PART:"elm.text", "default", 0.0);
+                                       //set_state(PART:"bg_image", "default", 0.0);
+                                       set_state(PART:"elm.swallow.content.clip", "default", 0.0);
                                        emit("elm,action,unpress", "");
                                }
                        }
@@ -1681,7 +1739,7 @@ collections
                program { name: "icon_hide";
                        signal: "elm,state,icon,hidden";
                        source: "elm";
-                       action: STATE_SET "default" 0.0;
+                       action: STATE_SET "visible" 0.0;
                        target: "elm.swallow.content";
                        target: "icon_rect";
                }
@@ -1944,45 +2002,6 @@ collections
                }
        }
 
-       group { name: "elm/button/base/ime_button_stt_confirm";
-               inherit: "elm/button/base/ime_button";
-               parts {
-                       part { name: "bg";
-                               type: IMAGE;
-                               scale: 1;
-                               description { state: "default" 0.0;
-                                       min: 0 0;
-                                       color_class: "AO015L2";
-                                       visible: 0;
-                                       image.normal: "./b_stt_icon_btn.png";
-                               }
-                               description { state: "pressed" 0.0;
-                                       inherit: "default" 0.0;
-                                       color_class: "AO015L2P";
-                               }
-                               description { state: "disabled" 0.0;
-                                       inherit: "default" 0.0;
-                                       color_class: "AO015L2D";
-                               }
-                       }
-                       part { name: "elm.swallow.content.clip";
-                               type: RECT;
-                               scale: 1;
-                               description { state: "default" 0.0;
-                                       color_class: "AO015L2";
-                               }
-                               description { state: "pressed" 0.0;
-                                       inherit: "default" 0.0;
-                                       color_class: "AO015L2P";
-                               }
-                               description { state: "disabled" 0.0;
-                                       inherit: "default" 0.0;
-                                       color_class: "AO015L2D";
-                               }
-                       }
-               }
-       }
-
        group { name: "elm/button/base/touch_area";
                inherit: "elm/button/base/default";
                parts {
@@ -2080,7 +2099,7 @@ collections
                                                to: "padding_right_bottom";
                                        }
                                        text {
-                                               min: 1 0;
+                                               max: 1 0;
                                                style: "button_general_text_normal";
                                        }
                                }
@@ -2523,14 +2542,42 @@ group { name: "elm_naviframe_item_basic_customized";
                                rel2 {relative: 1.0 1.0; to: "title_bg"; }
                        }
                }
+               part { name: "left_padding_content";
+                       type: RECT;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 33 0;
+                               max: 33 -1;
+                               fixed: 1 0;
+                               align: 0.0 0.5;
+                               rel1 { relative: 0.0 0.0; to: "base"; }
+                               rel2 { relative: 0.0 1.0; to: "base"; }
+                               visible: 0;
+                               color: 255 0 0 100;
+                       }
+               }
+               part { name: "right_padding_content";
+                       type: RECT;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 33 0;
+                               max: 33 -1;
+                               fixed: 1 0;
+                               align: 1.0 0.5;
+                               rel1 { relative: 1.0 0.0; to: "base"; }
+                               rel2 { relative: 1.0 1.0; to: "base"; }
+                               visible: 0;
+                               color: 0 255 0 100;
+                       }
+               }
                part { name: "elm.swallow.content";
                        type: SWALLOW;
                        scale: 1;
                        repeat_events: 0;
                        clip_to: "clipper";
                        description { state: "default" 0.0;
-                               rel1 { relative: 0.0 1.0; to_x: "base"; to_y: "title_expand"; }
-                               rel2 { relative: 1.0 0.0; to_x: "base"; to_y: "button_padding"; }
+                               rel1 { relative: 1.0 1.0; to_x: "left_padding_content"; to_y: "title_expand"; }
+                               rel2 { relative: 0.0 0.0; to_x: "right_padding_content"; to_y: "button_padding"; }
                        }
                }
                part { name: "elm.swallow.circle_bg";
@@ -2741,7 +2788,7 @@ images {
        image, "./b_ic_press_full_circle_bg.png" COMP;
 }
 
-group { name: "elm/panel/right1/default";
+group { name: "elm/panel/right/default";
    script {
       public mouse_down = 0;
       public mouse_click = 0;
@@ -3244,8 +3291,8 @@ group { name: "elm/panel/right1/default";
    }
 }
 
-group { name: "elm/panel/left1/default";
-   inherit: "elm/panel/right1/default";
+group { name: "elm/panel/left/default";
+   inherit: "elm/panel/right/default";
    parts {
       part { name: "cue.padding";
          type: SPACER;
@@ -3460,8 +3507,8 @@ group { name: "elm/panel/left1/default";
    }
 }
 
-group { name: "elm/panel/left_sending/default";
-       inherit: "elm/panel/left1/default";
+group { name: "elm/panel/left/sending";
+       inherit: "elm/panel/left/default";
        parts {
                part { name: "cue.padding";
                   type: SPACER;
@@ -3517,8 +3564,8 @@ group { name: "elm/panel/left_sending/default";
        }
 }
 
-group { name: "elm/panel/left_confirm/default";
-       inherit: "elm/panel/left_sending/default";
+group { name: "elm/panel/left/confirm";
+       inherit: "elm/panel/left/sending";
        parts {
                part { name: "cue";
                   description { state: "default" 0.0;
index 7550d75..39bc951 100755 (executable)
 using namespace std;
 
 extern Evas_Object *g_setting_window;
+static bool voice_input_back_agree = false;
+
+static void
+popup_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!obj) return;
+       elm_popup_dismiss(obj);
+}
+
+static void
+popup_hide_finished_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!obj) return;
+       evas_object_del(obj);
+}
+
+static void voice_input_back_disagree_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if(!obj) return;
+       if(!data) return;
+
+       VoiceData *voicedata = (VoiceData *)data;
+       Evas_Object *popup = (Evas_Object *)evas_object_data_get(obj, "popup");
+
+       voicedata->mo->discard_popup_opened = EINA_FALSE;
+
+       if (popup)
+               elm_popup_dismiss(popup);
+}
+
+static void voice_input_back_agree_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if(!obj) return;
+       if(!data) return;
+
+       VoiceData *voicedata = (VoiceData *)data;
+       Evas_Object *popup = (Evas_Object *)evas_object_data_get(obj, "popup");
+
+       voicedata->mo->discard_popup_opened = EINA_FALSE;
+
+       if (popup)
+               elm_popup_dismiss(popup);
+
+       if(voicedata->naviframe){
+               voice_input_back_agree = true;
+
+               if(voicedata->disclaimer == 1){
+                       voicedata->disclaimer = 0;
+                       elm_naviframe_item_pop_to(elm_naviframe_bottom_item_get(voicedata->naviframe));
+               } else {
+                       elm_naviframe_item_pop(voicedata->naviframe);
+               }
+       }
+}
+
+static void show_discard_popup(void *data)
+{
+       if(!data) return;
+
+       VoiceData *voicedata = (VoiceData *)data;
+
+       Evas_Object *popup = NULL;
+       Evas_Object *layout = NULL;
+       Evas_Object *btn_popup = NULL;
+       Evas_Object *icon = NULL;
+
+       std::string path = get_resource_path();
+
+       popup = elm_popup_add(voicedata->naviframe);
+       elm_object_style_set(popup, "circle");
+//     uxt_popup_set_rotary_event_enabled(popup, EINA_TRUE);
+       eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, popup_hide_cb, NULL);
+       evas_object_smart_callback_add(popup, "dismissed", popup_hide_finished_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "popup", "content/circle/buttons2");
+       elm_object_domain_translatable_part_text_set(layout, "elm.text", PACKAGE, "IDS_ST_SK_OK");
+       elm_object_content_set(popup, layout);
+       evas_object_show(layout);
+
+       btn_popup = elm_button_add(popup);
+       elm_object_style_set(btn_popup, "popup/circle/left");
+       elm_object_part_content_set(popup, "button1", btn_popup);
+       elm_access_info_set(btn_popup, ELM_ACCESS_INFO, dgettext(PACKAGE, "IDS_ST_SK_OK"));
+       evas_object_smart_callback_add(btn_popup, "clicked", voice_input_back_disagree_cb, voicedata);
+       evas_object_data_set(btn_popup, "popup", popup);
+       evas_object_show(btn_popup);
+
+       std::string path_ic_left = path + "/images/tw_ic_popup_btn_delete.png";
+       icon = elm_image_add(btn_popup);
+       elm_image_file_set(icon, path_ic_left.c_str(), NULL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_content_set(btn_popup, "elm.swallow.content", icon);
+       evas_object_show(icon);
+
+       btn_popup = elm_button_add(popup);
+       elm_object_style_set(btn_popup, "popup/circle/right");
+       elm_access_info_set(btn_popup, ELM_ACCESS_INFO, dgettext(PACKAGE, "IDS_ST_SK_OK"));
+       elm_object_part_content_set(popup, "button2", btn_popup);
+       evas_object_smart_callback_add(btn_popup, "clicked", voice_input_back_agree_cb, voicedata);
+       evas_object_data_set(btn_popup, "popup", popup);
+       evas_object_show(btn_popup);
+
+       std::string path_ic_right = path + "/images/tw_ic_popup_btn_check.png";
+       icon = elm_image_add(btn_popup);
+       elm_image_file_set(icon, path_ic_right.c_str(), NULL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_content_set(btn_popup, "elm.swallow.content", icon);
+       evas_object_show(icon);
+
+       evas_object_show(popup);
+
+       voicedata->mo->discard_popup_opened = EINA_TRUE;
+}
 
 MoreOption::MoreOption(Evas_Object *naviframe, void* voicedata)
        : nf(naviframe)
        , more_option_layout(NULL)
        , item(NULL)
        , option_opened(EINA_FALSE)
+       , discard_popup_opened(EINA_FALSE)
        , voicedata(voicedata) {
        /** todo. implement constructor */
+       voice_input_back_agree = false;
 }
 
 MoreOption::~MoreOption() {
        /** todo. implement destructor */
 
-//     if(more_option_layout)
-//             evas_object_del(more_option_layout);
+       if(more_option_layout)
+       {
+               PRINTFUNC(DLOG_DEBUG, "del callbacks");
+               evas_object_smart_callback_del(more_option_layout, "item,clicked", moreItemClicked);
+               evas_object_smart_callback_del(more_option_layout, "item,selected", moreItemSelected);
+
+               evas_object_smart_callback_del(more_option_layout, "more,option,opened", moreOptionOpened);
+               evas_object_smart_callback_del(more_option_layout, "more,option,closed", moreOptionClosed);
+       }
 }
 
 void MoreOption::Create() {
@@ -68,45 +192,15 @@ void MoreOption::AddLayout() {
        /** add layout */
        more_option_layout = eext_more_option_add(nf);
 
-       if(!more_option_layout)
+       if(!more_option_layout){
                PRINTFUNC(DLOG_ERROR, "It's failed to create layout");
+               return;
+       }
 
-       evas_object_smart_callback_add(more_option_layout, "more,option,opened",
-               [](void *data, Evas_Object *obj, void *event_info){
-                       PRINTFUNC(DLOG_DEBUG, "more option is opened!!! \n");
-
-                       if(!data) return;
-
-                       /**
-                       * if more option is completed, stt have to be stopped.
-                       *
-                       */
-                       MoreOption *opt = (MoreOption *)data;
-                       VoiceData *vd = (VoiceData *) opt->voicedata;
-                       try {
-                                  if (vd->sttmanager->GetCurrent() == STT_STATE_RECORDING ||
-                                                  vd->sttmanager->GetCurrent() == STT_STATE_PROCESSING) {
-                                                  vd->sttmanager->Cancel();
-                                 }
-                       }
-                       catch(is::stt::SttException &e) {
-                               PRINTFUNC(DLOG_ERROR, "%s", e.what());
-                       }
-
-                       opt->option_opened = EINA_TRUE;
-       }, this);
-
-       evas_object_smart_callback_add(more_option_layout, "more,option,closed",
-               [](void *data, Evas_Object *obj, void *event_info){
-               PRINTFUNC(DLOG_DEBUG, "more option is closed!!! \n");
-
-               MoreOption *opt = (MoreOption *)data;
-               VoiceData *vd = (VoiceData *) opt->voicedata;
-
-               activate_circle_scroller_for_stt_textbox(vd, EINA_TRUE);
+       evas_object_smart_callback_add(more_option_layout, "more,option,opened", moreOptionOpened, this);
+       evas_object_smart_callback_add(more_option_layout, "more,option,closed", moreOptionClosed, this);
 
-               opt->option_opened = EINA_FALSE;
-       }, this);
+       hideCue();
 
        evas_object_show(more_option_layout);
 }
@@ -142,17 +236,8 @@ void MoreOption::SetContentLayout(Evas_Object *content) {
                                                                   vd->sttmanager->GetCurrent() == STT_STATE_READY) {
                                                        PRINTFUNC(DLOG_DEBUG, "STT_STATE_CREATED || STT_STATE_READY\n");
 
-                                               } else if (vd->sttmanager->GetCurrent() == STT_STATE_RECORDING) {
-                                                       PRINTFUNC(DLOG_DEBUG, "STT_STATE_RECORDING\n");
-                                                       vd->effector->Stop();
-                                                       try{
-                                                               vd->sttmanager->Stop();
-                                                       }catch(is::stt::SttException &e){
-                                                               PRINTFUNC(DLOG_ERROR, "reason : %s", e.what());
-                                                       }
-
-                                               } else if (vd->sttmanager->GetCurrent() == STT_STATE_PROCESSING) {
-                                                       PRINTFUNC(DLOG_DEBUG, "STT_STATE_RECORDING\n");
+                                               } else if (vd->sttmanager->GetCurrent() == STT_STATE_RECORDING || vd->sttmanager->GetCurrent() == STT_STATE_PROCESSING) {
+                                                       PRINTFUNC(DLOG_DEBUG, "STT_STATE_RECORDING or STT_STATE_PROCESSING\n");
                                                        try{
                                                                vd->sttmanager->Cancel();
                                                        }catch(is::stt::SttException &e){
@@ -162,6 +247,10 @@ void MoreOption::SetContentLayout(Evas_Object *content) {
                                        }
                                }
 
+                               if (voice_input_back_agree == false && !is_textblock_empty(vd)){
+                                       show_discard_popup(vd);
+                                       return EINA_FALSE;
+                               }
 
                                elm_naviframe_item_pop_to(elm_naviframe_bottom_item_get(vd->naviframe));
                                vd->disclaimer  = 0;
@@ -169,44 +258,37 @@ void MoreOption::SetContentLayout(Evas_Object *content) {
                                powerUnlock();
                                _back_to_genlist_for_selector();
 
+                               destroy_voice();
+
                                return EINA_TRUE;
                        }
 
-                       if(opt->option_opened == EINA_FALSE){
+                       if (opt->option_opened == EINA_FALSE){
                                PRINTFUNC(DLOG_DEBUG, "pop_cb called in STT view\n");
 
-                               if(vd->sttmanager){
+                               if (vd->sttmanager){
                                        if (vd->sttmanager->GetCurrent() == STT_STATE_CREATED ||
                                                           vd->sttmanager->GetCurrent() == STT_STATE_READY) {
                                                PRINTFUNC(DLOG_DEBUG, "STT_STATE_CREATED || STT_STATE_READY\n");
 
-                                       } else if (vd->sttmanager->GetCurrent() == STT_STATE_RECORDING) {
-                                               PRINTFUNC(DLOG_DEBUG, "STT_STATE_RECORDING\n");
-                                               vd->effector->Stop();
-                                               try{
-                                                       vd->sttmanager->Stop();
-                                               }catch(is::stt::SttException &e){
-                                                       PRINTFUNC(DLOG_ERROR, "reason : %s", e.what());
-                                               }
-
-                                       } else if (vd->sttmanager->GetCurrent() == STT_STATE_PROCESSING) {
-                                               PRINTFUNC(DLOG_DEBUG, "STT_STATE_RECORDING\n");
+                                       } else if (vd->sttmanager->GetCurrent() == STT_STATE_RECORDING || vd->sttmanager->GetCurrent() == STT_STATE_PROCESSING) {
+                                               PRINTFUNC(DLOG_DEBUG, "STT_STATE_RECORDING or STT_STATE_PROCESSING\n");
                                                try{
                                                        vd->sttmanager->Cancel();
                                                }catch(is::stt::SttException &e){
                                                        PRINTFUNC(DLOG_ERROR, "reason : %s", e.what());
                                                }
                                        }
+                               }
 
-                                       _back_to_genlist_for_selector();
-
-                                       destroy_voice();
-
-                                       return EINA_TRUE;
-                               } else {
-                                       PRINTFUNC(DLOG_DEBUG, "naviframe transition, not finished\n");
+                               if (voice_input_back_agree == false && !is_textblock_empty(vd)){
+                                       show_discard_popup(vd);
                                        return EINA_FALSE;
                                }
+
+                               _back_to_genlist_for_selector();
+                               destroy_voice();
+                               return EINA_TRUE;
                        }
                        return EINA_FALSE;
                }, this);
@@ -219,6 +301,8 @@ void MoreOption::Update()
 
        const char* display_lang = get_lang_label(lang);
        eext_more_option_item_part_text_set(item, "selector,sub_text", display_lang);
+
+       showCue();
 }
 
 Evas_Object* MoreOption::AddLanguageIcon(Evas_Object *parent) {
@@ -257,18 +341,139 @@ void MoreOption::AddMorePage() {
 
        eext_more_option_item_part_content_set(item, "item,icon", img);
 
-       evas_object_smart_callback_add(more_option_layout, "item,clicked",
-       [](void *data, Evas_Object *obj, void *event_info)
-       {
-               PRINTFUNC(DLOG_DEBUG, "item,clicked");
-               if(g_setting_window == NULL)
-                       create_setting_window(obj);
-       }, NULL);
+       evas_object_smart_callback_add(more_option_layout, "item,clicked", moreItemClicked, NULL);
+       evas_object_smart_callback_add(more_option_layout, "item,selected", moreItemSelected , NULL);
+}
+
+void MoreOption::moreOptionOpened(void *data, Evas_Object * obj, void *event_info)
+{
+       PRINTFUNC(DLOG_DEBUG, "more option is opened!!! \n");
+
+       if(!data) return;
+
+       /**
+       * if more option is completed, stt have to be stopped.
+       *
+       */
+       MoreOption *opt = (MoreOption *)data;
+       VoiceData *vd = (VoiceData *) opt->voicedata;
+
+       if(vd && vd->setup_timer){
+               ecore_timer_del(vd->setup_timer);
+               vd->setup_timer = NULL;
+       }
 
-       evas_object_smart_callback_add(more_option_layout, "item,selected",
-       [](void *data, Evas_Object *obj, void *event_info)
+       try {
+               if (vd && vd->sttmanager && (vd->sttmanager->GetCurrent() == STT_STATE_RECORDING ||
+                       vd->sttmanager->GetCurrent() == STT_STATE_PROCESSING)) {
+                       vd->sttmanager->Cancel();
+               }
+       }
+       catch(is::stt::SttException &e) {
+               PRINTFUNC(DLOG_ERROR, "%s", e.what());
+       }
+
+       // Clear guide text
+       if(vd && vd->layout_main){
+               elm_object_signal_emit((Evas_Object *)vd->layout_main, "idle,state,text,hidden", "elm");
+       }
+
+       opt->option_opened = EINA_TRUE;
+}
+
+void MoreOption::moreOptionClosed(void *data, Evas_Object * obj, void *event_info)
+{
+       PRINTFUNC(DLOG_DEBUG, "more option is closed!!! \n");
+
+       if (!data) return;
+
+       MoreOption *opt = (MoreOption *)data;
+       VoiceData *vd = (VoiceData *) opt->voicedata;
+
+       if (opt->option_opened == EINA_TRUE && is_textblock_empty(vd)) {
+               restart_listening(2.0);
+       }
+
+       if (vd)
+               activate_circle_scroller_for_stt_textbox(vd, EINA_TRUE);
+
+       opt->option_opened = EINA_FALSE;
+}
+
+void MoreOption::moreItemClicked(void *data, Evas_Object * obj, void *event_info)
+{
+       PRINTFUNC(DLOG_DEBUG, "item,clicked");
+       if(g_setting_window == NULL)
+               create_setting_window(obj);
+}
+
+void MoreOption::moreItemSelected(void *data, Evas_Object * obj, void *event_info)
+{
+       PRINTFUNC(DLOG_DEBUG, "item,selected");
+       if(!obj) return;
+
+       Eext_Object_Item *selected_item = (Eext_Object_Item *)event_info;
+
+       //for custom accessibility
+       if (elm_config_access_get())
        {
-               PRINTFUNC(DLOG_DEBUG, "item,selected");
-       }, NULL);
+               Evas_Object *panel = elm_object_part_content_get(obj, "elm.swallow.right");
+               if (!panel) return;
+
+               Evas_Object *rotary_selector = elm_object_content_get(panel);
+               if (!rotary_selector) return;
+
+               Evas_Object *content = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(rotary_selector), "content");
+               if (!content) return;
+
+               Evas_Object *content_access = elm_access_object_get(content);
+               if (!content_access) return;
+
+               if (eext_more_option_item_part_text_get(selected_item, "selector,main_text"))
+               {
+                       std::string text;
+                       text = text + std::string(gettext("WDS_IME_HEADER_INPUT_LANGUAGES_ABB")) + " ";
+
+                       if(eext_more_option_item_part_text_get(selected_item, "selector,sub_text"))
+                               text = text + std::string(eext_more_option_item_part_text_get(selected_item, "selector,sub_text"));
+
+                       elm_access_info_set(content_access, ELM_ACCESS_INFO, text.c_str());
+               }
+       }
+}
+
+void MoreOption::hideCue()
+{
+       Evas_Object *panel_right = NULL;
+       if (!more_option_layout) {
+               PRINTFUNC(DLOG_ERROR, "more_option_layout == NULL");
+               return;
+       }
+
+       panel_right = elm_object_part_content_get(more_option_layout, "elm.swallow.right");
+       if (!panel_right) {
+               PRINTFUNC(DLOG_ERROR, "panel_right == NULL");
+               return;
+       }
+
+       elm_object_signal_emit(panel_right, "cue,hide", "elm");
+}
+
+void MoreOption::showCue()
+{
+       Evas_Object *panel_right = NULL;
+
+       if (!more_option_layout) {
+               PRINTFUNC(DLOG_ERROR, "more_option_layout == NULL");
+               return;
+       }
+
+       panel_right = elm_object_part_content_get(more_option_layout, "elm.swallow.right");
+       if (!panel_right) {
+               PRINTFUNC(DLOG_ERROR, "panel_right == NULL");
+               return;
+       }
+
+       elm_object_signal_emit(panel_right, "cue,show", "elm");
 }
 
index a3b5f2a..ec7d91f 100755 (executable)
@@ -73,6 +73,11 @@ void SttFeedback::OnResult(
                                                vd.result_type = STT_RESULT_EVENT_PARTIAL_RESULT;
                                                voice_get_string(result.c_str(), &vd);
                                                break;
+                                       case STT_RESULT_EVENT_ERROR:
+                                               PRINTFUNC(DLOG_DEBUG, "STT_RESULT_EVENT_ERROR");
+                                               vd.state = STT_STATE_VAL_NOT_RECOGNISED;
+                                               set_animation_state(&vd);
+                                               break;
                                        default:
                                                PRINTFUNC(DLOG_INFO, "");
                                                break;
index d94c553..2a19150 100755 (executable)
@@ -280,7 +280,7 @@ static Eina_Bool _custom_back_cb2(void *data, Elm_Object_Item *it)
             lazy_loading_timer_for_contents = NULL;
         }
 
-        if(emoticon_drawing_pool.used == 0){
+        if (emoticon_drawing_pool.used == 0){
             evas_object_del(emoticon_drawing_pool.content);
         }
         emoticon_drawing_pool.content = NULL;
@@ -368,7 +368,6 @@ void set_recent_emoticons(vector <int> &emoticon_list, int val)
     if (PREFERENCE_ERROR_NONE != ret) {
         PRINTFUNC(DLOG_ERROR, "preference_set_string error!(%d)", ret);
     }
-
 }
 
 static void _drawing_app_control_reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
@@ -376,7 +375,7 @@ static void _drawing_app_control_reply_cb(app_control_h request, app_control_h r
     char* path = NULL;
     app_control_get_extra_data(reply, APP_CONTROL_DATA_PATH, &path);
 
-    if(path){
+    if (path){
         PRINTFUNC(DLOG_DEBUG, "path=%s", path);
         char *pathes[] = {path, };
         reply_to_sender_by_callback(NULL, "image", (const char **)pathes, NULL);
@@ -566,7 +565,7 @@ static Evas_Object * __emoticon_gl_1_content_get(void *data, Evas_Object *obj, c
         emoticon_drawing_pool.content = btn;
         emoticon_drawing_pool.used = 0;
         return btn;
-    } else if(!strcmp(part, "base")){
+    } else if (!strcmp(part, "base")){
         Evas_Object* btn = elm_button_add(obj);
         elm_object_style_set(btn, "ime/transparent");
         return btn;
index 57320ec..0bfbeff 100755 (executable)
@@ -1130,14 +1130,14 @@ void _app_service(app_control_h service, void* user_data)
                                if (mime_type)
                                        free(mime_type);
                                goto ACTIVATE;
-                       } else if(!strncmp(mime_type, "audio/", strlen("audio/"))) {
+                       } else if (!strncmp(mime_type, "audio/", strlen("audio/"))) {
                                app_data->mime_type = MIME_TYPE_AUDIO;
                                app_data->app_type = APP_TYPE_STT;
                                _stt_clicked_cb((void *)app_data, NULL, NULL);
                                if (mime_type)
                                        free(mime_type);
                                goto ACTIVATE;
-                       } else if(!strncmp(mime_type, "text/", strlen("text/"))) {
+                       } else if (!strncmp(mime_type, "text/", strlen("text/"))) {
                                app_data->mime_type = MIME_TYPE_TEXT;
                        }
                }
@@ -1212,6 +1212,7 @@ void _app_pause(void* user_data)
 void _app_resume(void* user_data)
 {
        PRINTFUNC(DLOG_DEBUG, "");
+       resume_voice();
 }
 
 void _app_terminate(void* user_data)
index db786c4..0d14c94 100755 (executable)
@@ -68,7 +68,7 @@ void show_voice_input(Evas_Object *parent, const char *lang, void (*get_string)(
        vconf_notify_key_changed(VCONFKEY_ISE_STT_LANGUAGE, _stt_lang_changed_cb, my_voicedata);
 }
 
-void  pause_voice(){
+void pause_voice(){
        PRINTFUNC(DLOG_DEBUG, "pause_voice");
 
        powerUnlock();
@@ -77,8 +77,15 @@ void  pause_voice(){
        }
 }
 
- void destroy_voice()
- {
+void resume_voice(){
+       if (my_voicedata) {
+               PRINTFUNC(DLOG_DEBUG, "resume_voice");
+               on_stt_resume(my_voicedata);
+       }
+}
+
+void destroy_voice()
+{
         PRINTFUNC(DLOG_DEBUG, "destroy voice");
 
         //stt_feedback_deinitialize();  // It disable w-input-selector touch sound. So removed.
index 1795cc8..6f137e5 100755 (executable)
@@ -48,6 +48,10 @@ using namespace std;
                "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;
 
@@ -66,28 +70,31 @@ static Elm_Genlist_Item_Class itc_title;
 static Elm_Genlist_Item_Class itc_1text;
 static Elm_Genlist_Item_Class itc_2text;
 
-static Eina_Bool change_guide_text(void *data);
+static bool sroll_bar_show = false;
+
+static bool g_send_button_clicked = false;
+
+
 static void set_guide_text(VoiceData *vd, const char* text, bool translatable = false);
 
 const char *supported_language[] = {
-                "auto",
-                "en_US",
-                "es_US",
-                "fr_FR",
-                "zh_CN",
-                "ja_JP",
-                "ko_KR",
+       "auto",
+       "en_US",
+       "es_US",
+       "fr_FR",
+       "zh_CN",
+       "ja_JP",
+       "ko_KR",
 };
 
-
 const char *disp_lang_array[] = {
-                "",
-                "English (United States)",
-                "Español (América Latina)",
-                "Français (France)",
-                "简体中文",
-                "日本語",
-                "한국어",
+       "",
+       "English (United States)",
+       "Español (América Latina)",
+       "Français (France)",
+       "简体中文",
+       "日本語",
+       "한국어",
 };
 
 typedef enum {
@@ -141,25 +148,24 @@ const char* get_lang_label(char lang[])
 }
 
 
-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)
@@ -200,7 +206,7 @@ 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;
@@ -224,33 +230,38 @@ static Eina_Bool _update_textblock_timer_cb(void *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");
 
@@ -269,12 +280,12 @@ static Eina_Bool _update_textblock_timer_cb(void *data)
 
 //     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);
@@ -306,29 +317,36 @@ static Eina_Bool _update_textblock_timer_cb(void *data)
        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){
-                       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;
@@ -344,7 +362,7 @@ void _update_textblock(void *data)
 
 void voice_get_string(const char *keyValue, _VoiceData *voicedata)
 {
-       if(!voicedata)
+       if (!voicedata)
                return;
 
        char* strbuf = NULL;
@@ -404,71 +422,45 @@ static void on_mic_button_press_cb(void *data, Evas_Object *obj, void *event_inf
        VoiceData *voicedata = (VoiceData *)data;
        if (!voicedata) return;
 
-       if (voicedata->sttmanager != NULL &&
-               (voicedata->sttmanager->GetCurrent() == STT_STATE_RECORDING
-               || voicedata->sttmanager->GetCurrent() == STT_STATE_PROCESSING)) {
-               try {
-                       voicedata->state = STT_STATE_VAL_INIT;
-                       voicedata->sttmanager->Stop();
-               }
-               catch (is::stt::SttException &e) {
-               }
-
-               if (voicedata->effector)
-                       voicedata->effector->Stop(true);
+       edje_object_signal_emit(_EDJ(voicedata->layout_main), "mouse,clicked,1", "background");
 
-               if (NULL != voicedata->start_timer) {
-                       ecore_timer_del(voicedata->start_timer);
-                       voicedata->start_timer = NULL;
-               }
-               if (NULL != voicedata->guide_text_timer) {
-                       ecore_timer_del(voicedata->guide_text_timer);
-                       voicedata->guide_text_timer = NULL;
-               }
-               if (NULL != voicedata->refresh_timer) {
-                       ecore_timer_del(voicedata->refresh_timer);
-                       voicedata->refresh_timer = NULL;
-               }
-       } else {
-               if (NULL != voicedata->guide_text_timer) {
-                       ecore_timer_del(voicedata->guide_text_timer);
-                       voicedata->guide_text_timer = NULL;
-               }
-               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 += " ";
        }
 
@@ -491,18 +483,15 @@ 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;
@@ -515,7 +504,7 @@ void stt_feedback(FeedbackType type)
        int ret;
 
        ret = feedback_initialize();
-       if(ret != 0)
+       if (ret != 0)
        {
                PRINTFUNC(DLOG_ERROR, "feedback_initialize failed!");
                return;
@@ -528,7 +517,7 @@ void stt_feedback(FeedbackType type)
        }
 
        ret = feedback_deinitialize();
-       if(ret != 0)
+       if (ret != 0)
        {
                PRINTFUNC(DLOG_ERROR, "feedback_initialize failed!");
                return;
@@ -540,7 +529,7 @@ void stt_feedback_deinitialize()
        int ret = 0;
 
        ret = feedback_deinitialize();
-       if(ret != 0)
+       if (ret != 0)
        {
                PRINTFUNC(DLOG_ERROR, "feedback_initialize failed!");
                return;
@@ -550,14 +539,14 @@ void stt_feedback_deinitialize()
 
 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)) {
+       if (true == _app_stt_initialize(voicedata)) {
                LOGD("_app_stt_initialize None Error");
                voicedata->voicefw_state = 1;
                voicedata->state = STT_STATE_VAL_INIT;
@@ -582,12 +571,11 @@ static Eina_Bool _idler_cb(void *data)
 
        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");
 
@@ -610,28 +598,28 @@ void powerLock(void *data, bool enable)
 
        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;
                }
@@ -639,31 +627,66 @@ void powerLock(void *data, bool enable)
        }
 }
 
-static Eina_Bool change_guide_text(void *data){
-       VoiceData *voicedata = (VoiceData *) data;
-       if (!voicedata) return ECORE_CALLBACK_CANCEL;
+static void expand_send_text(void *data)
+{
+       PRINTFUNC(DLOG_DEBUG, "");
 
-       stt_state_e state = voicedata->sttmanager->GetCurrent();
-       if (state == STT_STATE_RECORDING || state == STT_STATE_PROCESSING)
-               elm_object_domain_translatable_part_text_set(voicedata->layout_main, "elm.text", PACKAGE, SK_TAP_TO_PAUSE);
+       if(data) {
+               VoiceData *voicedata = (VoiceData *) data;
+               elm_object_signal_emit((Evas_Object *)voicedata->layout_main, "idle,state,send,text,expand", "elm");
+       }
+}
 
-       return ECORE_CALLBACK_CANCEL;
+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");
+       }
 }
 
+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");
+       }
+}
 
 static void set_guide_text(VoiceData *vd, const char* text, bool translatable)
 {
-       elm_object_signal_emit(vd->layout_main, "idle,state,guide_text,bottom", "elm");
+       PRINTFUNC(DLOG_DEBUG, "text = %s", text);
+
+       if (!vd) return;
 
-       if(translatable)
+       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)
                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, change_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);
 }
 
 /**
@@ -674,32 +697,22 @@ static void set_guide_text(VoiceData *vd, const char* text, bool translatable)
 void set_animation_state(VoiceData *voicedata)
 {
        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, "Tap mic to speak");
+               expand_send_text(voicedata);
 
                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();
 
@@ -707,11 +720,12 @@ void set_animation_state(VoiceData *voicedata)
        } else {
                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)
@@ -770,15 +784,20 @@ static Eina_Bool _start_timer_cb(void* data)
                        voicedata->sttmanager->Start();
                }
                catch (is::stt::SttException &e) {
+                       PRINTFUNC(DLOG_ERROR, "%s", e.what());
+
                        if (e.GetEcode() == STT_ERROR_OUT_OF_NETWORK)
                        {
+                               PRINTFUNC(DLOG_DEBUG, "SK_NETWORK_ERROR");
                                set_guide_text(voicedata, _(SK_NETWORK_ERROR));
                                voicedata->state = STT_STATE_VAL_INIT;
                        } else if (e.GetEcode() == STT_ERROR_RECORDER_BUSY) {
-                               set_guide_text(voicedata, _(SK_STT_BUSY));
+                               PRINTFUNC(DLOG_WARN, "STT is used by another application");
+                               show_popup_toast(_(SK_STT_BUSY), false);
                                voicedata->state = STT_STATE_VAL_INIT;
                        } else {
-                               set_guide_text(voicedata, _(SK_STT_BUSY));
+                               PRINTFUNC(DLOG_WARN, "Check error code");
+                               show_popup_toast(_(SK_STT_BUSY), false);
                                voicedata->state = STT_STATE_VAL_INIT;
                        }
                }
@@ -790,6 +809,57 @@ static Eina_Bool _start_timer_cb(void* data)
        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 -
@@ -839,8 +909,6 @@ void on_initial_anim_press_cb(void *data, Evas_Object *obj, const char *emission
                                 * Cuased touch reponse time, it can be called to stop animator.
                                 *
                                 */
-                               set_guide_text(vd, "");
-
                                if(vd->effector)
                                        vd->effector->Stop();
                        }
@@ -867,8 +935,6 @@ void on_initial_anim_press_cb(void *data, Evas_Object *obj, const char *emission
                        catch (is::stt::SttException &e) {
                                PRINTFUNC(DLOG_ERROR, "%s", e.what());
                        }
-                       if (vd->effector)
-                               vd->effector->Stop(true);
 
                        break;
 
@@ -884,7 +950,7 @@ void on_initial_anim_press_cb(void *data, Evas_Object *obj, const char *emission
 
 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);
 
@@ -915,9 +981,9 @@ char *__get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
        const int BUF_LEN = 128;
        char text[BUF_LEN] = {'\0', };
 
-       if(!strcmp(part, "elm.text"))
+       if (!strcmp(part, "elm.text"))
        {
-               if((uintptr_t)data == 0) {
+               if ((uintptr_t)data == 0) {
                        return strdup(_("IDS_VC_BODY_AUTOMATIC"));
                } else {
                        char *s = NULL;
@@ -1029,7 +1095,7 @@ static void set_language_value(int type)
 
 static void get_stt_default_language(VoiceData *my_voicedata)
 {
-       if(!my_voicedata) {
+       if (!my_voicedata) {
                PRINTFUNC(DLOG_ERROR, "my_voicedata NULL");
                return;
        }
@@ -1107,7 +1173,7 @@ static Eina_Bool close_setting_window_idler_cb(void *data)
 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;
 
@@ -1120,12 +1186,16 @@ static void language_set_genlist_radio_cb(void *data, Evas_Object *obj, void *ev
        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);
 }
 
@@ -1146,9 +1216,9 @@ static void _language_list_item_realized(void *data, Evas_Object *obj, void *eve
        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;
@@ -1156,7 +1226,7 @@ static Evas_Object *create_language_list(Evas_Object *parent)
        elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
        elm_genlist_homogeneous_set(genlist, EINA_TRUE);
 #ifdef _CIRCLE
-       Evas_Object *circle_language_genlist = eext_circle_object_genlist_add(genlist, NULL);
+       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);
@@ -1268,7 +1338,7 @@ void create_setting_window(Evas_Object *more_option_layout)
         *
         */
        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;
        }
@@ -1330,7 +1400,7 @@ void create_setting_window(Evas_Object *more_option_layout)
         * Push language list
         *
         */
-       genlist = create_language_list(naviframe);
+       genlist = create_language_list(naviframe, NULL);
 
        const char *item_style = NULL;
        if (_WEARABLE)
@@ -1347,7 +1417,7 @@ void create_setting_window(Evas_Object *more_option_layout)
 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);
@@ -1361,8 +1431,8 @@ static void __done_key_cb(void *data, Evas_Object *obj, void *event_info )
 {
        PRINTFUNC(DLOG_DEBUG, "");
 
-       if(!obj) return;
-       if(!data) return;
+       if (!obj) return;
+       if (!data) return;
 
        VoiceData *voicedata = (VoiceData *)data;
 
@@ -1371,7 +1441,7 @@ static void __done_key_cb(void *data, Evas_Object *obj, void *event_info )
 
 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;
 
@@ -1397,7 +1467,7 @@ static void __stt_detailed_entry_del_cb(void *data, Evas *e, Evas_Object *obj, v
        }
 }
 
-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();
        if(_WEARABLE)
@@ -1417,10 +1487,8 @@ static Evas_Object *create_text_detiled_view(Evas_Object *parent)
        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);
@@ -1431,12 +1499,18 @@ static Evas_Object *create_text_detiled_view(Evas_Object *parent)
        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;
 
@@ -1444,26 +1518,37 @@ static Eina_Bool __stt_entry_detailed_view_pop_cb(void *data, Elm_Object_Item *i
        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);
+               }
+
+               elm_entry_entry_set(main_entry, str);
+               elm_entry_cursor_pos_set(main_entry, pos);
 
-//     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);
+               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;
 }
@@ -1472,18 +1557,24 @@ static void _stt_entry_clicked_cb(void *data, Evas_Object * obj, void *event_inf
 {
        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 {
@@ -1520,12 +1611,11 @@ static void _stt_entry_clicked_cb(void *data, Evas_Object * obj, void *event_inf
        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;
@@ -1539,7 +1629,7 @@ void activate_circle_scroller_for_stt_textbox(void* data, Eina_Bool bActivate)
 
 static Evas_Object *create_textblock(void* data)
 {
-       if(!data) return NULL;
+       if (!data) return NULL;
 
        VoiceData *voicedata = (VoiceData *)data;
 
@@ -1558,16 +1648,11 @@ static Evas_Object *create_textblock(void* data)
                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);
+
        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);
@@ -1579,11 +1664,7 @@ static Evas_Object *create_textblock(void* data)
        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;
@@ -1613,22 +1694,141 @@ static Evas_Object *create_textblock(void* data)
        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)
 {
-       Evas_Object *progressbar = NULL;
+       PRINTFUNC(DLOG_DEBUG, "show_bottom_button");
+       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 (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");
+       }
+}
 
-//     ea_theme_object_color_replace(progressbar, "B065L6", "AO012");
+void hide_bottom_button(void* data)
+{
+       PRINTFUNC(DLOG_DEBUG, "hide_bottom_button");
+       if (!data) return;
 
-       evas_object_show(progressbar);
+       VoiceData *voicedata = (VoiceData *)data;
 
-       return progressbar;
+       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)
+{
+       PRINTFUNC(DLOG_DEBUG, "scroll_effect_stop");
+       if (!data) return;
+
+       VoiceData *voicedata = (VoiceData *)data;
+
+       if (voicedata->state == STT_STATE_VAL_LISTENING)
+               return;
+
+       Evas_Coord x, y, w, h;
+       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);
+       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);
+       }
 }
 
 static Eina_Bool _custom_back_cb(void *data, Elm_Object_Item *it)
@@ -1657,7 +1857,6 @@ static Evas_Object *create_fullview(Evas_Object *parent, VoiceData *r_voicedata)
 
        voicedata->mo = mo;
 
-
        layout_main = elm_layout_add(mo->getMoreOptionLayout());
 
        if (!layout_main)
@@ -1682,10 +1881,9 @@ static Evas_Object *create_fullview(Evas_Object *parent, VoiceData *r_voicedata)
 
        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);
@@ -1693,7 +1891,7 @@ static Evas_Object *create_fullview(Evas_Object *parent, VoiceData *r_voicedata)
 
        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);
@@ -1701,55 +1899,26 @@ static Evas_Object *create_fullview(Evas_Object *parent, VoiceData *r_voicedata)
 
        elm_object_part_content_set(layout_main, "EFFECT_BG", canvas);
 
-       // 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;
+       // 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;
 
-       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);
@@ -1790,15 +1959,11 @@ int init_voicedata(VoiceData *r_voicedata)
        voicedata->progressbar = NULL;
        voicedata->scroller = NULL;
        voicedata->main_entry = NULL;
-       voicedata->mic_button = NULL;
        voicedata->state = STT_STATE_VAL_INIT;
        voicedata->kbd_lang = NULL;
        voicedata->start_timer = NULL;
        voicedata->refresh_timer = NULL;
-       voicedata->progressbar_timer = NULL;
        voicedata->textblock_timer = NULL;
-       voicedata->guide_text_timer = NULL;
-       voicedata->btn_disabling_timer = NULL;
        voicedata->power_unlock_timer = NULL;
        voicedata->stt_results.clear();
        voicedata->partial_result = NULL;
@@ -1853,12 +2018,6 @@ int init_voice(Evas_Object *parent, const char *lang, VoiceData *r_voicedata)
                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;
@@ -1880,6 +2039,7 @@ static Eina_Bool init_view(void *data)
        voicedata->layout_main = create_fullview(voicedata->naviframe, voicedata);
 
        if (voicedata->layout_main) {
+               hide_bottom_button(voicedata);
                evas_object_show(voicedata->layout_main);
        }
 
@@ -1936,11 +2096,13 @@ void on_stt_pause(VoiceData *r_voicedata){
 
        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());
                }
 
@@ -1948,8 +2110,8 @@ void on_stt_pause(VoiceData *r_voicedata){
                close_setting_window_idler_cb(NULL);
                Evas_Object *mo_layout = voicedata->mo->getMoreOptionLayout();
                if (_WEARABLE) {
-                       if(mo_layout){
-                               if(eext_more_option_opened_get(mo_layout) == EINA_TRUE) {
+                       if (mo_layout){
+                               if (eext_more_option_opened_get(mo_layout) == EINA_TRUE) {
                                        eext_more_option_opened_set(mo_layout, EINA_FALSE);
                                }
                        }
@@ -1957,6 +2119,21 @@ void on_stt_pause(VoiceData *r_voicedata){
        }
 }
 
+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;
+                       }
+               }
+       }
+}
+
 void on_destroy(VoiceData *r_voicedata)
 {
        PRINTFUNC(NO_PRINT, "");
@@ -1966,7 +2143,27 @@ void on_destroy(VoiceData *r_voicedata)
        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;
                }
 
@@ -1974,6 +2171,11 @@ void on_destroy(VoiceData *r_voicedata)
                        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;
@@ -1984,27 +2186,11 @@ void on_destroy(VoiceData *r_voicedata)
                        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;
@@ -2043,6 +2229,3 @@ void on_destroy(VoiceData *r_voicedata)
                delete voicedata;
        }
 }
-
-
-