Use PreDefinedCommands class for managing pre-defined commands 95/283795/1
authorSuyeon Hwang <stom.hwang@samsung.com>
Wed, 12 Oct 2022 09:16:49 +0000 (18:16 +0900)
committerTizen AI <ai.tzn.sec@samsung.com>
Thu, 3 Nov 2022 05:44:38 +0000 (14:44 +0900)
- Requirement:
IU module can handle pre-defined command with various language.

- Solution:
This patch makes IU module use PreDefinedCommands class for managing
pre-defined commands. Through this patch, IU module can handle
pre-defined commands with various language state.

Change-Id: Iefbe26cf5e49dc6a614f0bf2065ab191befb261e
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
src/mmimgr/iu/VoiceTouchEngine.cpp
src/mmimgr/iu/VoiceTouchEngine.h

index f7e2017..86d44fc 100644 (file)
 
 using namespace std;
 
-static const string __SHOW_TOOLTIP_INVOCATION = "show tooltip";
-static const string __SHOW_NUMBER_INVOCATION = "show numbers";
-static const string __SHOW_GRID_INVOCATION = "show grid";
-
-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 string __PRE_DEFINED_COMMANDS_FILE_PATH = "/usr/share/iu/voice_touch_commands.json";
+
+static const string __PRE_DEFINED_SHOW_NUMBER = "SHOW_NUMBER";
+static const string __PRE_DEFINED_SHOW_LABEL = "SHOW_LABEL";
+static const string __PRE_DEFINED_SHOW_GRID = "SHOW_GRID";
+static const string __PRE_DEFINED_REFRESH_WINDOW_INFO = "REFRESH_WINDOW_INFO";
+static const string __PRE_DEFINED_REQUEST_TURNING_OFF = "REQUEST_TURNING_OFF";
+static const string __PRE_DEFINED_OPERATION_PRESS_BACK = "OPERATION_PRESS_BACK";
+static const string __PRE_DEFINED_OPERATION_PRESS_UP = "OPERATION_PRESS_UP";
+static const string __PRE_DEFINED_OPERATION_PRESS_DOWN = "OPERATION_PRESS_DOWN";
+static const string __PRE_DEFINED_OPERATION_PRESS_LEFT = "OPERATION_PRESS_LEFT";
+static const string __PRE_DEFINED_OPERATION_PRESS_RIGHT = "OPERATION_PRESS_RIGHT";
+static const string __PRE_DEFINED_OPERATION_PRESS_RETURN = "OPERATION_PRESS_RETURN";
+static const string __PRE_DEFINED_OPERATION_TRAY_ON = "OPERATION_TRAY_ON";
+static const string __PRE_DEFINED_OPERATION_TRAY_OFF = "OPERATION_TRAY_OFF";
+static const string __PRE_DEFINED_OPERATION_PANEL_ON = "OPERATION_PANEL_ON";
+static const string __PRE_DEFINED_OPERATION_PANEL_OFF = "OPERATION_PANEL_OFF";
+
 static const map<string, int> __OPERATION_REQUEST = {
-       {"뒤로", MMI_VOICE_TOUCH_OPERATION_PRESS_BACK},
-       {"위", MMI_VOICE_TOUCH_OPERATION_PRESS_UP}, {"위로", MMI_VOICE_TOUCH_OPERATION_PRESS_UP},
-       {"아래", MMI_VOICE_TOUCH_OPERATION_PRESS_DOWN}, {"아래로", MMI_VOICE_TOUCH_OPERATION_PRESS_DOWN},
-       {"왼쪽", MMI_VOICE_TOUCH_OPERATION_PRESS_LEFT}, {"왼쪽으로", MMI_VOICE_TOUCH_OPERATION_PRESS_LEFT},
-       {"오른쪽", MMI_VOICE_TOUCH_OPERATION_PRESS_RIGHT}, {"오른쪽으로", MMI_VOICE_TOUCH_OPERATION_PRESS_RIGHT},
-       {"선택", MMI_VOICE_TOUCH_OPERATION_PRESS_RETURN}, {"선택해줘", MMI_VOICE_TOUCH_OPERATION_PRESS_RETURN}, {"클릭", MMI_VOICE_TOUCH_OPERATION_PRESS_RETURN},
-       {"트레이 열어", MMI_VOICE_TOUCH_OPERATION_TRAY_ON}, {"트레이 올려", MMI_VOICE_TOUCH_OPERATION_TRAY_ON},
-       {"트레이 닫아", MMI_VOICE_TOUCH_OPERATION_TRAY_OFF}, {"트레이 내려", MMI_VOICE_TOUCH_OPERATION_TRAY_OFF},
-       {"패널 열어", MMI_VOICE_TOUCH_OPERATION_PANEL_ON}, {"패널 내려", MMI_VOICE_TOUCH_OPERATION_PANEL_ON},
-       {"패널 닫아", MMI_VOICE_TOUCH_OPERATION_PANEL_OFF}, {"패널 올려", MMI_VOICE_TOUCH_OPERATION_PANEL_OFF},
+       {__PRE_DEFINED_OPERATION_PRESS_BACK, MMI_VOICE_TOUCH_OPERATION_PRESS_BACK},
+       {__PRE_DEFINED_OPERATION_PRESS_UP, MMI_VOICE_TOUCH_OPERATION_PRESS_UP},
+       {__PRE_DEFINED_OPERATION_PRESS_DOWN, MMI_VOICE_TOUCH_OPERATION_PRESS_DOWN},
+       {__PRE_DEFINED_OPERATION_PRESS_LEFT, MMI_VOICE_TOUCH_OPERATION_PRESS_LEFT},
+       {__PRE_DEFINED_OPERATION_PRESS_RIGHT, MMI_VOICE_TOUCH_OPERATION_PRESS_RIGHT},
+       {__PRE_DEFINED_OPERATION_PRESS_RETURN, MMI_VOICE_TOUCH_OPERATION_PRESS_RETURN},
+       {__PRE_DEFINED_OPERATION_TRAY_ON, MMI_VOICE_TOUCH_OPERATION_TRAY_ON},
+       {__PRE_DEFINED_OPERATION_TRAY_OFF, MMI_VOICE_TOUCH_OPERATION_TRAY_OFF},
+       {__PRE_DEFINED_OPERATION_PANEL_ON, MMI_VOICE_TOUCH_OPERATION_PANEL_ON},
+       {__PRE_DEFINED_OPERATION_PANEL_OFF, MMI_VOICE_TOUCH_OPERATION_PANEL_OFF},
        };
 
 static const int __DEFAULT_DISPLAY_WIDTH = 1920;
@@ -74,6 +83,8 @@ VoiceTouchEngine::VoiceTouchEngine()
        __findCommandTimer = nullptr;
        __makeClickableItemResultTimer = nullptr;
 
+       __preDefinedCommands.setCommandFilePath(__PRE_DEFINED_COMMANDS_FILE_PATH);
+
        InitializeMembers();
 }
 
@@ -163,17 +174,6 @@ bool VoiceTouchEngine::setInputModalityData(int modalityType, void *data)
        return false;
 }
 
-static bool __is_exist_in_candidates(const string &text, const vector<string> &candidates)
-{
-       for (auto &candidate : candidates) {
-               if (0 == text.compare(candidate)) {
-                       return true;
-               }
-       }
-
-       return false;
-}
-
 static void __refresh_screen_inform_event_free(void *data EINA_UNUSED, void *event)
 {
        mmi_event_refresh_screen_inform *ev = (mmi_event_refresh_screen_inform *)event;
@@ -219,16 +219,17 @@ bool VoiceTouchEngine::handleVoiceInput(mmi_provider_event_voice *voiceEvent)
        setFinalAsrResult(asrResult, timestamp, provider);
        invokeOutputResultCallback(provider.jsonToString());
 
-       bool isRefreshNeed = __is_exist_in_candidates(asrResult, __REFRESH_WINDOW_INFO);
-       if (isRefreshNeed) {
+       __preDefinedCommands.setLanguage(voiceEvent->language);
+       auto preDefinedCommand = __preDefinedCommands.findCommand(asrResult);
+
+       if (preDefinedCommand == __PRE_DEFINED_REFRESH_WINDOW_INFO) {
                _I("[VoiceTouchEngine] Request to refresh clickable object information.");
                setAndSendPreDefinedCommandResult(timestamp, MMI_VOICE_TOUCH_OPERATION_PRESS_BACK);
                __invoke_event_for_refreshing_window();
                return true;
        }
 
-       bool isVoiceTouchOff = __is_exist_in_candidates(asrResult, __TURN_OF_REQUEST);
-       if (isVoiceTouchOff) {
+       if (preDefinedCommand == __PRE_DEFINED_REQUEST_TURNING_OFF) {
                JsonProvider finishProvider;
                finishProvider.setInputEvent(MMI_KEY_VOICE_TOUCH);
                setTurnOffEventResult(timestamp, finishProvider);
@@ -237,7 +238,7 @@ bool VoiceTouchEngine::handleVoiceInput(mmi_provider_event_voice *voiceEvent)
                return true;
        }
 
-       auto operationIterator = __OPERATION_REQUEST.find(asrResult);
+       auto operationIterator = __OPERATION_REQUEST.find(preDefinedCommand);
        if (operationIterator != __OPERATION_REQUEST.end()) {
                int operation = operationIterator->second;
                setAndSendPreDefinedCommandResult(timestamp, operation);
@@ -246,7 +247,7 @@ bool VoiceTouchEngine::handleVoiceInput(mmi_provider_event_voice *voiceEvent)
                return true;
        }
 
-       voice_touch_mode_e mode = getVoiceTouchMode(asrResult);
+       voice_touch_mode_e mode = getVoiceTouchMode(preDefinedCommand);
        if (mode == VOICE_TOUCH_MODE_INVALID) {
                _I("[VoiceTouchEngine] This is not mode command. Try to find proper command");
                __asrResult = asrResult;
@@ -377,19 +378,18 @@ void VoiceTouchEngine::makeClickedItemResult(ClickableItem* command, int timesta
        }
 }
 
-voice_touch_mode_e VoiceTouchEngine::getVoiceTouchMode(const std::string &text)
+voice_touch_mode_e VoiceTouchEngine::getVoiceTouchMode(const std::string &preDefinedCommand)
 {
-       string loweredText = StringUtil::makeLowerCase(text);
        voice_touch_mode_e mode = VOICE_TOUCH_MODE_INVALID;
-       if (__is_exist_in_candidates(loweredText, __SHOW_LABEL_KOKR)) {
+       if (preDefinedCommand == __PRE_DEFINED_SHOW_LABEL) {
                mode = VOICE_TOUCH_MODE_TOOLTIP_TEXT;
-       } else if (__is_exist_in_candidates(loweredText, __SHOW_NUMBER_KOKR)) {
+       } else if (preDefinedCommand == __PRE_DEFINED_SHOW_NUMBER) {
                mode = VOICE_TOUCH_MODE_TOOLTIP_NUMBER;
-       } else if (__is_exist_in_candidates(loweredText, __SHOW_GRID_KOKR)) {
+       } else if (preDefinedCommand == __PRE_DEFINED_SHOW_GRID) {
                mode = VOICE_TOUCH_MODE_GRID;
        }
 
-       _I("[VoiceTouchEngine] Mode from text(%s) is (%d)", text.c_str(), static_cast<int>(mode));
+       _I("[VoiceTouchEngine] Mode from pre-defined command(%s) is (%d)", preDefinedCommand.c_str(), static_cast<int>(mode));
        return mode;
 }
 
index cbbeefe..65b2ad9 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "CommandManager.h"
 #include "json_provider.h"
+#include "PreDefinedCommands.h"
 #include "mmi-common.h"
 
 
@@ -80,7 +81,7 @@ private:
        bool handleVoiceInput(mmi_provider_event_voice *voiceEvent);
        bool handleScreenAnalyzerInput(mmi_provider_event_screen_analyzer *screenAnalyzerEvent);
 
-       voice_touch_mode_e getVoiceTouchMode(const std::string &text);
+       voice_touch_mode_e getVoiceTouchMode(const std::string &preDefinedCommand);
        ClickableItem * findCommand();
 
        void makeClickedItemResult(ClickableItem* command, int timestamp, JsonProvider &provider);
@@ -135,6 +136,8 @@ private:
 
        Ecore_Timer *__findCommandTimer;
        Ecore_Timer *__makeClickableItemResultTimer;
+
+       PreDefinedCommands __preDefinedCommands;
 };
 
 #endif /* __VOICE_TOUCH_ENGINE_H__ */