Add voice touch trun off command 81/281881/1
authorSuyeon Hwang <stom.hwang@samsung.com>
Thu, 22 Sep 2022 05:17:12 +0000 (14:17 +0900)
committerTizen AI <ai.tzn.sec@samsung.com>
Fri, 23 Sep 2022 01:19:36 +0000 (10:19 +0900)
Change-Id: I5d16fba600515cb571fec7af82b0c9502fb4fd8f
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
src/mmimgr/iu/VoiceTouchEngine.cpp
src/mmimgr/iu/VoiceTouchEngine.h

index ca502a4..0ddd4bd 100644 (file)
@@ -36,6 +36,7 @@ static const vector<string> __SHOW_NUMBER_KOKR = {"힌트 보여줘", "숫자 
 static const vector<string> __SHOW_LABEL_KOKR = {"힌트 메세지 보여줘", "텍스트 보여줘", "텍스트", "텍스트 힌트 보여줘"};
 static const vector<string> __SHOW_GRID_KOKR = {"그리드", "그리드 모드", "그리드로 보여줘", "그리드 보여줘"};
 static const vector<string> __REFRESH_WINDOW_INFO = {"화면 갱신해줘", "화면 업데이트", "리프레시", "새로고침", "새로 고침"};
+static const vector<string> __TURN_OF_REQUEST = {"동작 그만", "이제 그만"};
 
 static const int __DEFAULT_DISPLAY_WIDTH = 1920;
 static const int __DEFAULT_DISPLAY_HEIGHT = 1080;
@@ -49,16 +50,6 @@ static const int __DEFAULT_GRID_NUM_Y2 = 3;
 VoiceTouchEngine::VoiceTouchEngine()
 {
        _I("[VoiceTouchEngine] Constructor");
-       __touchModality.timestamp = -1;
-       __touchModality.mode = MMI_VOICE_TOUCH_MODE_TOOLTIP;
-       __touchModality.object_id = nullptr;
-       __touchModality.coord_x = 0;
-       __touchModality.coord_y = 0;
-
-       __currentMode = VOICE_TOUCH_MODE_TOOLTIP_TEXT;
-
-       __itemList.clear();
-
        __displayWidth = __DEFAULT_DISPLAY_WIDTH;
        __displayHeight = __DEFAULT_DISPLAY_HEIGHT;
 
@@ -67,22 +58,32 @@ VoiceTouchEngine::VoiceTouchEngine()
        __gridX[1] = __DEFAULT_GRID_NUM_X2;
        __gridY[1] = __DEFAULT_GRID_NUM_Y2;
 
-       __outputResultCallback = nullptr;
-       __outputResultUserData = nullptr;
-
-       __outputModalityCallback = nullptr;
-       __outputModalityUserData = nullptr;
-
        __findCommandTimer = nullptr;
        __makeClickableItemResultTimer = nullptr;
 
-       resetCurrentGridInfo();
+       InitializeMembers();
 }
 
 VoiceTouchEngine::~VoiceTouchEngine()
 {
        _I("[VoiceTouchEngine] Destructor");
+       InitializeMembers();
+}
+
+
+void VoiceTouchEngine::InitializeMembers()
+{
+       _I("[VoiceTouchEngine] Initialize all members");
+       __touchModality.timestamp = -1;
+       __touchModality.mode = MMI_VOICE_TOUCH_MODE_TOOLTIP;
+       __touchModality.object_id = nullptr;
+       __touchModality.coord_x = 0;
+       __touchModality.coord_y = 0;
+
+       __currentMode = VOICE_TOUCH_MODE_TOOLTIP_TEXT;
+
        __itemList.clear();
+       __gridList.clear();
 
        __outputResultCallback = nullptr;
        __outputResultUserData = nullptr;
@@ -90,6 +91,9 @@ VoiceTouchEngine::~VoiceTouchEngine()
        __outputModalityCallback = nullptr;
        __outputModalityUserData = nullptr;
 
+       __asrResult.clear();
+       __appId.clear();
+
        if (__findCommandTimer != nullptr) {
                ecore_timer_del(__findCommandTimer);
                __findCommandTimer = nullptr;
@@ -99,8 +103,10 @@ VoiceTouchEngine::~VoiceTouchEngine()
                ecore_timer_del(__makeClickableItemResultTimer);
                __makeClickableItemResultTimer = nullptr;
        }
-}
 
+       __commandManager.cleanCommands();
+       resetCurrentGridInfo();
+}
 
 void VoiceTouchEngine::setDisplayInfo(int width, int height)
 {
@@ -208,6 +214,14 @@ bool VoiceTouchEngine::handleVoiceInput(mmi_provider_event_voice *voiceEvent)
                return true;
        }
 
+       bool isVoiceTouchOff = __is_exist_in_candidates(asrResult, __TURN_OF_REQUEST);
+       if (isVoiceTouchOff) {
+               InitializeMembers();
+               setTurnOffEventResult(timestamp, provider);
+               invokeOutputResultCallback(provider.jsonToString());
+               return true;
+       }
+
        voice_touch_mode_e mode = getVoiceTouchMode(asrResult);
        if (mode == VOICE_TOUCH_MODE_INVALID) {
                _I("[VoiceTouchEngine] This is not mode command. Try to find proper command");
@@ -445,6 +459,14 @@ void VoiceTouchEngine::setRejectedEventResult(int timestamp, JsonProvider &provi
        provider.setRejectEvent(MMI_REASON_NO_MATCHED_COMMANDS, timestamp);
 }
 
+void VoiceTouchEngine::setTurnOffEventResult(int timestamp, JsonProvider &provider)
+{
+       _I("[VoiceTouchEngine] Set turn off event into output. timestamp(%d)", timestamp);
+
+       provider.setOutputEvent(MMI_KEY_TURN_OFF_REQUEST);
+       provider.setTurnOffRequestEvent(timestamp);
+}
+
 void VoiceTouchEngine::setSelectedItemResult(const ClickableItem &item, int timestamp, JsonProvider &provider)
 {
        _I("[VoiceTouchEngine] Set clicked object information into output. timestamp(%d). item(%s)", timestamp, item.objectId.c_str());
index 0956e5a..89131fd 100644 (file)
@@ -74,6 +74,7 @@ private:
        static Eina_Bool makeClickableItemResultCallback(void *data);
 
 private:
+       void InitializeMembers();
        long getCurrentTimestamp();
 
        bool handleVoiceInput(mmi_provider_event_voice *voiceEvent);
@@ -90,6 +91,7 @@ private:
        void setFinalAsrResult(const std::string &result, int timestamp, JsonProvider &provider);
        void setSelectedItemResult(const ClickableItem &item, int timestamp, JsonProvider &provider);
        void setRejectedEventResult(int timestamp, JsonProvider &provider);
+       void setTurnOffEventResult(int timestamp, JsonProvider &provider);
        void makeGridItemList(const grid_info_s &parentInfo, std::list<ClickableItem> &list);
 
        void makeTouchModality(const ClickableItem &item, int timestamp);