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;
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;
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);
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
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;
}
}
+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");
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;