Move to left/right page using custom swipe. 16/161316/18
authorPawel Kurowski <p.kurowski2@samsung.com>
Wed, 22 Nov 2017 18:50:12 +0000 (19:50 +0100)
committerPawel Kurowski <p.kurowski2@samsung.com>
Fri, 1 Dec 2017 17:42:56 +0000 (18:42 +0100)
Change-Id: I853ce733009ffbafb9ccccea75a64c9bae3eb682

src/GestureActivity.cpp
src/MenuBuilder.cpp

index bd99a90..92d9c9a 100644 (file)
@@ -18,6 +18,8 @@
 #include "ActivityFactory.hpp"
 #include "DBus.hpp"
 #include "dbusLocators.hpp"
+#include "UniversalSwitch.hpp"
+#include "Window.hpp"
 
 namespace
 {
@@ -29,6 +31,9 @@ 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>
@@ -43,52 +48,107 @@ public:
 
        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
index 1d5c018..9718145 100644 (file)
@@ -310,10 +310,18 @@ MenuBuilderImplementation::MenuBuilderImplementation()
                                                                                "END_CALL");
        auto leftPage                           =       std::make_shared<MenuItemImplementation>(
                                                                                std::vector<std::string> {"IDS_LEFT_PAGE"},
-                                                                               defaultImg);
+                                                                               defaultImg,
+                                                                               "LEFT_PAGE",
+                                                                               std::string {},
+                                                                               std::string {},
+                                                                               RepetitionPolicy::multiple);
        auto rightPage                          =       std::make_shared<MenuItemImplementation>(
                                                                                std::vector<std::string> {"IDS_RIGHT_PAGE"},
-                                                                               defaultImg);
+                                                                               defaultImg,
+                                                                               "RIGHT_PAGE",
+                                                                               std::string {},
+                                                                               std::string {},
+                                                                               RepetitionPolicy::multiple);
        auto increase                           =       std::make_shared<MenuItemImplementation>(
                                                                                std::vector<std::string> {"IDS_INCREASE"},
                                                                                defaultImg,