Add operation to output modality voice touch 89/282889/2
authorulgal-park <ulgal.park@samsung.com>
Thu, 6 Oct 2022 07:16:22 +0000 (16:16 +0900)
committerDaYe Lee <dyamy.lee@samsung.com>
Thu, 3 Nov 2022 02:22:00 +0000 (02:22 +0000)
Change-Id: I161b0e865124ea66ecf629a165b9c2b92e0c388f

src/mmimgr/mmi-common.h
src/mmimgr/output_modality/TouchModule.cpp
src/mmimgr/output_modality/TouchModule.h
src/mmimgr/output_modality/mmi_output_modality.cpp

index 14ba463..7a53a0c 100644 (file)
@@ -154,9 +154,25 @@ typedef enum mmi_event_state_change_type
 typedef enum mmi_voice_touch_mode
 {
        MMI_VOICE_TOUCH_MODE_TOOLTIP,
-       MMI_VOICE_TOUCH_MODE_GRID
+       MMI_VOICE_TOUCH_MODE_GRID,
+       MMI_VOICE_TOUCH_MODE_OPERATION,
 } mmi_voice_touch_mode;
 
+typedef enum mmi_voice_touch_operation
+{
+       MMI_VOICE_TOUCH_OPERATION_PRESS_BACK,
+       MMI_VOICE_TOUCH_OPERATION_PRESS_UP,
+       MMI_VOICE_TOUCH_OPERATION_PRESS_DOWN,
+       MMI_VOICE_TOUCH_OPERATION_PRESS_LEFT,
+       MMI_VOICE_TOUCH_OPERATION_PRESS_RIGHT,
+       MMI_VOICE_TOUCH_OPERATION_PRESS_RETURN,
+       MMI_VOICE_TOUCH_OPERATION_IOT_HEADED,
+       MMI_VOICE_TOUCH_OPERATION_TRAY_ON,
+       MMI_VOICE_TOUCH_OPERATION_TRAY_OFF,
+       MMI_VOICE_TOUCH_OPERATION_PANEL_ON,
+       MMI_VOICE_TOUCH_OPERATION_PANEL_OFF,
+} mmi_voice_touch_operation;
+
 typedef struct
 {
        int type;
@@ -297,11 +313,12 @@ typedef struct
 
 typedef struct
 {
-       int mode;// tooltip, grid
+       int mode; // tooltip, grid, operation
        int timestamp;
        const char *object_id;
        int coord_x;
        int coord_y;
+       int operation;
 } mmi_output_modality_voice_touch;
 
 typedef unsigned long long ull;
index d8c6002..d041ff1 100644 (file)
@@ -52,6 +52,10 @@ bool TouchModule::ClickByObjectId(std::string objectId)
        std::string input_text("Return");
        ret = device->pressKeyCode(input_text, Aurum::KeyRequestType::PRESS);
        LOGD("press ret = %d", ret);
+       if (false == ret) {
+               LOGD("press %s Failed", input_text);
+               return ret;
+       }
 
        ret = device->pressKeyCode(input_text, Aurum::KeyRequestType::RELEASE);
        LOGD("release ret = %d", ret);
@@ -68,4 +72,40 @@ bool TouchModule::ClickByCoordinate(int x, int y)
        ret = device->click(x,y);
        LOGD("clicked, ret = %d", ret);
        return ret;
+}
+
+bool TouchModule::PressBack()
+{
+       LOGD("execute press back");
+       std::shared_ptr<Aurum::UiDevice> device = Aurum::UiDevice::getInstance();
+       bool ret = false;
+       ret = device->pressBack(Aurum::KeyRequestType::STROKE);
+       LOGD("press backed, ret = %d", ret);
+       return ret;
+}
+
+bool TouchModule::PressKey(std::string keyCode)
+{
+       LOGD("execute keycode");
+       std::shared_ptr<Aurum::UiDevice> device = Aurum::UiDevice::getInstance();
+       bool ret = false;
+       ret = device->pressKeyCode(keyCode, Aurum::KeyRequestType::PRESS);
+       if (false == ret) {
+               LOGD("press %s Failed", keyCode);
+               return ret;
+       }
+       LOGD("press %s, ret = %d", keyCode, ret);
+       ret = device->pressKeyCode(keyCode, Aurum::KeyRequestType::RELEASE);
+       LOGD("release %s, ret = %d", keyCode, ret);
+       return ret;
+}
+
+bool TouchModule::Drag(int startX, int startY, int endX, int endY, int steps, int duration_ms)
+{
+       LOGD("execute drag");
+       std::shared_ptr<Aurum::UiDevice> device = Aurum::UiDevice::getInstance();
+       bool ret = false;
+       ret = device->drag(startX, startY, endX, endY, steps, duration_ms);
+       LOGD("drag backed, ret = %d", ret);
+       return ret;
 }
\ No newline at end of file
index fa86c39..f7f5a2f 100644 (file)
@@ -30,6 +30,9 @@ public:
 
        bool ClickByObjectId(std::string key);
        bool ClickByCoordinate(int x, int y);
+       bool PressBack();
+       bool PressKey(std::string keyCode);
+       bool Drag(int startX, int startY, int endX, int endY, int steps, int duration_ms);
 };
 
 #endif /* __TOUCH_MODULE_H__ */
\ No newline at end of file
index 260fd3e..3c3e102 100644 (file)
 
 static TouchModule *g_touch_module = nullptr;
 
+static int _tray_start_x = 960;
+static int _tray_start_y = 1080;
+static int _tray_end_x = 960;
+static int _tray_end_y = 980;
+
+static int _panel_start_x = 400;
+static int _panel_start_y = 10;
+static int _panel_end_x = 400;
+static int _panel_end_y = 1080;
+
+static int _drag_steps = 6;
+static int _drag_duration_ms = 600;
+
 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;
@@ -70,30 +83,102 @@ EXPORT_API void output_modality_shutdown()
        }
 }
 
+static int __voice_touch_operation(mmi_output_modality_voice_touch modality)
+{
+       mmi_voice_touch_operation operation = (mmi_voice_touch_operation)modality.operation;
+       LOGD("voice touch operation %d", operation);
+       if (TIZEN_PROFILE_TV && operation > MMI_VOICE_TOUCH_OPERATION_IOT_HEADED) {
+               LOGD("operation(%d) is not supported at TV profile", operation);
+               return 0;
+       }
+
+       int ret = 0;
+       switch(operation)
+       {
+       case MMI_VOICE_TOUCH_OPERATION_PRESS_BACK:
+               ret = g_touch_module->PressBack();
+               break;
+
+       case MMI_VOICE_TOUCH_OPERATION_PRESS_UP:
+               ret = g_touch_module->PressKey(std::string("Up"));
+               break;
+
+       case MMI_VOICE_TOUCH_OPERATION_PRESS_DOWN:
+               ret = g_touch_module->PressKey(std::string("Down"));
+               break;
+
+       case MMI_VOICE_TOUCH_OPERATION_PRESS_LEFT:
+               ret = g_touch_module->PressKey(std::string("Left"));
+               break;
+
+       case MMI_VOICE_TOUCH_OPERATION_PRESS_RIGHT:
+               ret = g_touch_module->PressKey(std::string("Right"));
+               break;
+
+       case MMI_VOICE_TOUCH_OPERATION_PRESS_RETURN:
+               ret = g_touch_module->PressKey(std::string("Return"));
+               break;
+
+       case MMI_VOICE_TOUCH_OPERATION_TRAY_ON:
+               ret = g_touch_module->Drag(_tray_start_x, _tray_start_y, _tray_end_x, _tray_end_y, _drag_steps, _drag_duration_ms);
+               break;
+
+       case MMI_VOICE_TOUCH_OPERATION_TRAY_OFF:
+               ret = g_touch_module->Drag(_tray_end_x, _tray_end_y, _tray_start_x, _tray_start_y, _drag_steps, _drag_duration_ms);
+               break;
+
+       case MMI_VOICE_TOUCH_OPERATION_PANEL_ON:
+               ret = g_touch_module->Drag(_panel_start_x, _panel_start_y, _panel_end_x, _panel_end_y, _drag_steps, _drag_duration_ms);
+               break;
+
+       case MMI_VOICE_TOUCH_OPERATION_PANEL_OFF:
+               ret = g_touch_module->PressBack();
+               break;
+
+       default:
+               LOGD("operation(%d) is not supported", operation);
+               return 0;
+       }
+
+       return ret;
+}
+
 EXPORT_API int output_modality_voice_touch(mmi_output_modality_voice_touch modality)
 {
-       mmi_voice_touch_mode mode = (mmi_voice_touch_mode)modality.mode;
+       mmi_voice_touch_mode modality_mode = (mmi_voice_touch_mode)modality.mode;
+       LOGD("voice touch mode %d", modality_mode);
        int ret = 0;
 
-       if (MMI_VOICE_TOUCH_MODE_TOOLTIP == mode) {
+       switch (modality_mode)
+       {
+       case MMI_VOICE_TOUCH_MODE_TOOLTIP:
                if (TIZEN_PROFILE_TV) {
-                       LOGD("voice touch by tooltip in TV");
                        if (modality.object_id == NULL) {
                                LOGE("mmi_output_modality_voice_touch modality's object id is NULL");
-                               return -1;
+                               return 0;
                        }
                        std::string objID = std::string(modality.object_id, strlen(modality.object_id));
                        ret = g_touch_module->ClickByObjectId(objID);
                }
                else {
-                       LOGD("voice touch by tooltip in others");
                        ret = g_touch_module->ClickByCoordinate(modality.coord_x, modality.coord_y);
                }
-       } else if (MMI_VOICE_TOUCH_MODE_GRID == mode) {
-               LOGD("voice touch by grid");
+               break;
+
+       case MMI_VOICE_TOUCH_MODE_GRID:
                ret = g_touch_module->ClickByCoordinate(modality.coord_x, modality.coord_y);
-       } else {
-               LOGE("mode(%d) is not supported", mode);
+               break;
+
+       case MMI_VOICE_TOUCH_MODE_OPERATION:
+               ret = __voice_touch_operation(modality);
+               if (0 == ret) {
+                       LOGE("operation not executed");
+                       return 0;
+               }
+               break;
+
+       default:
+               LOGE("mode(%d) is not supported", modality_mode);
                return 0;
        }
        LOGD("voice touch done");
@@ -101,7 +186,7 @@ EXPORT_API int output_modality_voice_touch(mmi_output_modality_voice_touch modal
        mmi_event_refresh_screen_inform *ev = (mmi_event_refresh_screen_inform *)calloc(1, sizeof(mmi_event_refresh_screen_inform));
        if (ev == NULL) {
                LOGE("mmi_event_refresh_screen_inform malloc failed");
-               return -1;
+               return 0;
        }
 
        ev->msec = 1000000;