#include "ActivityFactory.hpp"
#include "DBus.hpp"
#include "dbusLocators.hpp"
+#include "UniversalSwitch.hpp"
+#include "Window.hpp"
namespace
{
ZOOM_IN,
ZOOM_OUT,
};
+
+ static const int DEFAULT_STEPS_NUMBER = 20; //DispatchDragEvent will generate 20 middle steps between start and end point
+ static const double DEFAULT_HOLD_TIME = 0.0; //Gesture will be proceed without holding an element
}
template <typename DerivedType>
void process() override
{
+ auto dbus = DBus::DBusClient {dbusLocators::accessibilityEMod::BUS,
+ dbusLocators::accessibilityEMod::OBJ_PATH,
+ dbusLocators::accessibilityEMod::INTERFACE,
+ DBus::ConnectionType::SYSTEM};
+ DerivedType::dispatchEvent(dbus, uiElement.get());
+ markAsCompleted();
+ }
+};
+
+template <typename DerivedType>
+class DispatchGestureEventActivity : public GestureActivity<DerivedType>
+{
+public:
+ static void dispatchEvent(DBus::DBusClient &dbus, const UIElement *uiElement)
+ {
auto point = uiElement->getScanningCoordinates();
- DBus::DBusClient dbus {dbusLocators::accessibilityEMod::BUS, dbusLocators::accessibilityEMod::OBJ_PATH, dbusLocators::accessibilityEMod::INTERFACE, DBus::ConnectionType::SYSTEM};
- SwipeType swipeType = DerivedType::swipeType;
+ const auto swipeType = DerivedType::swipeType;
dbus.method<void(int, int, int)>("DispatchGestureEvent").call(swipeType, point.x, point.y);
- markAsCompleted();
}
};
-class SwipeRightActivity : public GestureActivity<SwipeRightActivity>
+class SwipeRightActivity : public DispatchGestureEventActivity<SwipeRightActivity>
{
public:
static constexpr const char *activityType = "SWIPE_RIGHT";
static constexpr const SwipeType swipeType = SWIPE_RIGHT;
};
-class SwipeLeftActivity : public GestureActivity<SwipeLeftActivity>
+class SwipeLeftActivity : public DispatchGestureEventActivity<SwipeLeftActivity>
{
public:
static constexpr const char *activityType = "SWIPE_LEFT";
static constexpr SwipeType swipeType = SWIPE_LEFT;
};
-class SwipeUpActivity : public GestureActivity<SwipeUpActivity>
+class SwipeUpActivity : public DispatchGestureEventActivity<SwipeUpActivity>
{
public:
static constexpr const char *activityType = "SWIPE_UP";
static constexpr SwipeType swipeType = SWIPE_UP;
};
-class SwipeDownActivity : public GestureActivity<SwipeDownActivity>
+class SwipeDownActivity : public DispatchGestureEventActivity<SwipeDownActivity>
{
public:
static constexpr const char *activityType = "SWIPE_DOWN";
static constexpr SwipeType swipeType = SWIPE_DOWN;
};
-class ZoomInActivity : public GestureActivity<ZoomInActivity>
+class ZoomInActivity : public DispatchGestureEventActivity<ZoomInActivity>
{
public:
static constexpr const char *activityType = "ZOOM_IN";
static constexpr SwipeType swipeType = ZOOM_IN;
};
-class ZoomOutActivity : public GestureActivity<ZoomOutActivity>
+class ZoomOutActivity : public DispatchGestureEventActivity<ZoomOutActivity>
{
public:
static constexpr const char *activityType = "ZOOM_OUT";
static constexpr SwipeType swipeType = ZOOM_OUT;
+};
+
+template <typename DerivedType>
+class DispatchCustomGestureEventActivity : public GestureActivity<DerivedType>
+{
+public:
+ static void dispatchEvent(DBus::DBusClient &dbus, const UIElement *uiElement)
+ {
+ //move: x in range 25% - 75% , and y = 50% of screen dimensions
+ auto screenSize = Singleton<UniversalSwitch>::instance().getMainWindow()->getDimensions().size;
+ Point startPoint;
+ Point endPoint;
+ switch (DerivedType::swipeType) {
+ case SWIPE_LEFT:
+ startPoint = {screenSize.width * 3 / 4, screenSize.height / 2};
+ endPoint = {screenSize.width / 4, screenSize.height / 2};
+ break;
+ case SWIPE_RIGHT:
+ startPoint = {screenSize.width / 4, screenSize.height / 2};
+ endPoint = {screenSize.width * 3 / 4, screenSize.height / 2};
+ break;
+ default:
+ ERROR("Incorect gesture");
+ return;
+ }
+ DEBUG("Swipe %d, %d, %d, %d, %d", startPoint.x, startPoint.y, endPoint.x, endPoint.y, DEFAULT_STEPS_NUMBER);
+ dbus.method<void(int, int, int, int, int, double)>("DispatchDragEvent").call(startPoint.x, startPoint.y, endPoint.x, endPoint.y, DEFAULT_STEPS_NUMBER, DEFAULT_HOLD_TIME);
+ }
+};
+
+class CustomSwipeRightActivity : public DispatchCustomGestureEventActivity<CustomSwipeRightActivity>
+{
+public:
+ static constexpr const char *activityType = "LEFT_PAGE";
+ static constexpr SwipeType swipeType = SWIPE_RIGHT;
+};
+
+class CustomSwipeLeftActivity : public DispatchCustomGestureEventActivity<CustomSwipeLeftActivity>
+{
+public:
+ static constexpr const char *activityType = "RIGHT_PAGE";
+ static constexpr SwipeType swipeType = SWIPE_LEFT;
};
\ No newline at end of file