TouchHoldThenDragActivity & TouchAndHoldActivity 48/162648/7
authorPawel Kurowski <p.kurowski2@samsung.com>
Mon, 4 Dec 2017 18:35:47 +0000 (19:35 +0100)
committerLukasz Oleksak <l.oleksak@samsung.com>
Thu, 7 Dec 2017 10:01:29 +0000 (10:01 +0000)
Minor fix of CancelActivity

Change-Id: I587727c8732ce035f08f3326499e06e81e3b24c6

res/po/en_US.po
src/DragActivity.cpp
src/MenuBuilder.cpp
src/SelectActivity.cpp
tests/ui-scenarios/MenuBuilderTests.cpp

index 60a8062..bdc409a 100644 (file)
@@ -110,7 +110,7 @@ msgid "IDS_TOUCH_AND_HOLD"
 msgstr "Touch and hold"
 
 
-msgid "IDS_TOUCH_HOLD_THEN_DRAG"
+msgid "IDS_TOUCH_AND_HOLD_THEN_DRAG"
 msgstr "Touch, hold then drag"
 
 
index 23a8552..b0e544d 100644 (file)
@@ -7,50 +7,75 @@
 
 #include <memory>
 
-//DispatchDragEvent will generate 20 middle steps between start point and end point
-static constexpr int MIDDLE_STEPS_COUNT = 20;
+static constexpr int MIDDLE_STEPS_COUNT = 20; //DispatchDragEvent will generate 20 middle steps between start and end point
 static constexpr double NO_DELAY_AFTER_TOUCH = 0.0;
+static constexpr double LONG_PRESS_TIME = 1.0; //according to homescreen app long press duration = 0.75s
 
-class DragActivity : public UIActivity, private RegisterActivity<DragActivity>
+template <typename DerivedType>
+class DispatchDragActivity : public UIActivity, private RegisterActivity<DerivedType>
 {
 public:
-       constexpr static const char *activityType = "DRAG_DONE";
-       DragActivity() : UIActivity(activityType)
+       constexpr static const char *activityType = DerivedType::activityType;
+       DispatchDragActivity() : UIActivity(activityType)
        {}
 
        void update(const std::shared_ptr<UIElement> &elem) override
        {
                uiElements.push_back(elem);
        }
+
        void process() override
        {
-               ASSERT(uiElements.size() == 2);
+               ASSERT(uiElements.size() == DerivedType::REQUIRED_UIELEMENTS);
 
                markAsCompleted();
                auto from = uiElements[0]->getScanningCoordinates();
-               auto to = uiElements[1]->getScanningCoordinates();
+               auto to = uiElements[DerivedType::REQUIRED_UIELEMENTS - 1]->getScanningCoordinates();
 
                DBus::DBusClient dbus {dbusLocators::accessibilityEMod::BUS,
                                                           dbusLocators::accessibilityEMod::OBJ_PATH,
                                                           dbusLocators::accessibilityEMod::INTERFACE,
                                                           DBus::ConnectionType::SYSTEM};
+               auto pressTime = DerivedType::HOLD_TIME;
+               DEBUG("Drag %d, %d, %d, %d, %d, %f", from.x, from.y, to.x, to.y, MIDDLE_STEPS_COUNT, pressTime);
                dbus.method<void(int, int, int, int, int, double)>("DispatchDragEvent").
-               call(from.x, from.y, to.x, to.y, MIDDLE_STEPS_COUNT, NO_DELAY_AFTER_TOUCH);
+               call(from.x, from.y, to.x, to.y, MIDDLE_STEPS_COUNT, pressTime);
        }
 private:
        std::vector<std::shared_ptr<UIElement>> uiElements;
 };
 
-class CancelActivity : public UIActivity, private RegisterActivity<DragActivity>
+class DragActivity : public DispatchDragActivity<DragActivity>
+{
+public:
+       constexpr static const char *activityType = "DRAG";
+       constexpr static double HOLD_TIME = NO_DELAY_AFTER_TOUCH;
+       constexpr static int REQUIRED_UIELEMENTS = 2;
+};
+
+class TouchAndHoldThenDragActivity : public DispatchDragActivity<TouchAndHoldThenDragActivity>
+{
+public:
+       constexpr static const char *activityType = "TOUCH_AND_HOLD_THEN_DRAG";
+       constexpr static double HOLD_TIME = LONG_PRESS_TIME;
+       constexpr static int REQUIRED_UIELEMENTS = 2;
+};
+
+class TouchAndHoldActivity : public DispatchDragActivity<TouchAndHoldActivity>
+{
+public:
+       constexpr static const char *activityType = "TOUCH_AND_HOLD";
+       constexpr static double HOLD_TIME = LONG_PRESS_TIME;
+       constexpr static int REQUIRED_UIELEMENTS = 1;
+};
+
+class CancelActivity : public Activity, private RegisterActivity<CancelActivity>
 {
 public:
        constexpr static const char *activityType = "CANCEL";
-       CancelActivity() : UIActivity(activityType)
+       CancelActivity() : Activity(activityType)
        {}
 
-       void update(const std::shared_ptr<UIElement> &elem) override
-       {
-       }
        void process() override
        {
                markAsCompleted();
index ce91319..fe3e42f 100644 (file)
@@ -381,10 +381,13 @@ MenuBuilderImplementation::MenuBuilderImplementation()
                                                                                "CUT");
        auto touchHold                          =       std::make_shared<MenuItemImplementation>(
                                                                                std::vector<std::string> {"IDS_TOUCH_AND_HOLD"},
-                                                                               defaultImg);
+                                                                               defaultImg,
+                                                                               "TOUCH_AND_HOLD");
        auto touchHoldThenDrag          =       std::make_shared<MenuItemImplementation>(
-                                                                               std::vector<std::string> {"IDS_TOUCH_HOLD_THEN_DRAG"},
-                                                                               defaultImg);
+                                                                               std::vector<std::string> {"IDS_TOUCH_AND_HOLD_THEN_DRAG"},
+                                                                               defaultImg,
+                                                                               std::string {},
+                                                                               "IDS_MENU_FOR_TOUCH_AND_HOLD_THEN_DRAG");
        auto swipeUp                            =       std::make_shared<MenuItemImplementation>(
                                                                                std::vector<std::string> {"IDS_SWIPE_UP"},
                                                                                defaultImg,
@@ -448,11 +451,15 @@ MenuBuilderImplementation::MenuBuilderImplementation()
                                                                                std::vector<std::string> {"IDS_DRAG"},
                                                                                defaultImg,
                                                                                std::string {},
-                                                                               "IDS_MENU_DONE_CANCEL_FOR_DRAG");
+                                                                               "IDS_MENU_FOR_DRAG");
        auto dragDone                           =       std::make_shared<MenuItemImplementation>(
                                                                                std::vector<std::string> {"IDS_DONE"},
                                                                                defaultImg,
-                                                                               "DRAG_DONE");
+                                                                               "DRAG");
+       auto touchHoldThenDragDone      =       std::make_shared<MenuItemImplementation>(
+                                                                               std::vector<std::string> {"IDS_DONE"},
+                                                                               defaultImg,
+                                                                               "TOUCH_AND_HOLD_THEN_DRAG");
        auto cancel                                     =       std::make_shared<MenuItemImplementation>(
                                                                                std::vector<std::string> {"IDS_CANCEL"},
                                                                                defaultImg,
@@ -755,8 +762,12 @@ MenuBuilderImplementation::MenuBuilderImplementation()
        addToMap("IDS_MENU_GRANULARITY", std::make_shared<MenuImplementation>(MenuImplementation {
                {character, word, line, paragraph}
        }));
-       addToMap("IDS_MENU_DONE_CANCEL_FOR_DRAG", std::make_shared<MenuImplementation>(MenuImplementation {
-               { dragDone, cancel },
+       addToMap("IDS_MENU_FOR_DRAG", std::make_shared<MenuImplementation>(MenuImplementation {
+               {dragDone, cancel},
+               Alignment::CENTER, NavigateToSuperMenu::DENY
+       }));
+       addToMap("IDS_MENU_FOR_TOUCH_AND_HOLD_THEN_DRAG", std::make_shared<MenuImplementation>(MenuImplementation {
+               {touchHoldThenDragDone, cancel},
                Alignment::CENTER, NavigateToSuperMenu::DENY
        }));
 }
index f80329d..29d940b 100644 (file)
@@ -183,7 +183,7 @@ void SelectActivity::update(const std::shared_ptr<UIElement> &elem)
                return;
        }
 
-       if (nestedMenusLabels.empty() || nestedMenusLabels.back() != "IDS_MENU_DONE_CANCEL_FOR_DRAG")
+       if (nestedMenusLabels.empty())
                nestedMenusLabels.push_back("IDS_MENU_MAIN");
        createMenu();
        ASSERT(isMenuShown());
@@ -337,7 +337,7 @@ void SelectActivity::navigateThroughSubMenuOrCreateActivityChangeRequest(MenuIte
                return;
 
        if (!menuItem->getSubMenuLabel().empty()) {
-               if (menuItem->getSubMenuLabel() == "IDS_MENU_DONE_CANCEL_FOR_DRAG") {
+               if (menuItem->getSubMenuLabel() == "IDS_MENU_FOR_DRAG" || menuItem->getSubMenuLabel() == "IDS_MENU_FOR_TOUCH_AND_HOLD_THEN_DRAG") {
                        removeMenu();
                        nestedMenusLabels.clear();
                        nestedMenusLabels.push_back(menuItem->getSubMenuLabel());
index f184626..0668ade 100644 (file)
@@ -252,12 +252,12 @@ TEST_F(MenuBuilderTest, testContentOfMenuGestures)
 {
        testMenuContent("IDS_MENU_GESTURES_SCROLLABLE", {
                "IDS_SWIPE_UP", "IDS_SWIPE_DOWN", "IDS_SWIPE_LEFT", "IDS_SWIPE_RIGHT",
-               "IDS_AUTO_SCROLL", "IDS_TOUCH_AND_HOLD", "IDS_DRAG", "IDS_TOUCH_HOLD_THEN_DRAG"
+               "IDS_AUTO_SCROLL", "IDS_TOUCH_AND_HOLD", "IDS_DRAG", "IDS_TOUCH_AND_HOLD_THEN_DRAG"
        });
 
        testMenuContent("IDS_MENU_GESTURES_NOT_SROLLABLE", {
                "IDS_SWIPE_UP", "IDS_SWIPE_DOWN", "IDS_SWIPE_LEFT", "IDS_SWIPE_RIGHT",
-               "IDS_TOUCH_AND_HOLD", "IDS_DRAG", "IDS_TOUCH_HOLD_THEN_DRAG"
+               "IDS_TOUCH_AND_HOLD", "IDS_DRAG", "IDS_TOUCH_AND_HOLD_THEN_DRAG"
        });
 }