Handling back button in SelectActivity 03/156703/2
authorPawel Kurowski <p.kurowski2@samsung.com>
Thu, 19 Oct 2017 10:56:39 +0000 (12:56 +0200)
committerPawel Kurowski <p.kurowski2@samsung.com>
Thu, 19 Oct 2017 13:38:33 +0000 (15:38 +0200)
Change-Id: I31977a539f8a7451ce1fe7ef664a10408600c91d

src/SelectActivity.cpp
src/dbusLocators.hpp

index 655896d..994be57 100644 (file)
@@ -10,6 +10,7 @@
 #include "UniversalSwitch.hpp"
 #include "ecore.hpp"
 #include "ConditionAll.hpp"
+#include "dbusLocators.hpp"
 
 #include <Elementary.h>
 #include <ui/efl_util.h>
@@ -27,7 +28,6 @@ static const std::string AUTO_SCROLL_KEY                    = VCONF_KEY_AUTO_SCR
 static const std::string AUTO_TAP_KEY                       = VCONF_KEY_AUTO_TAP_ENABLED;
 static const std::string AUTO_TAP_WAITING_PERIOD_KEY        = VCONF_KEY_AUTO_TAP_WAITING_TIME;
 
-
 class SelectActivity : public UIActivity, public Observer<MenuItem>, RegisterBindableActivity<SelectActivity>
 {
 public:
@@ -76,6 +76,7 @@ private:
        Optional<bool> realUiElementHasEditableText;
        std::unique_ptr<Evas_Object, void(*)(Evas_Object *)> popup;
        std::unique_ptr<Evas_Object, void(*)(Evas_Object *)> virtualBackButton;
+       std::unique_ptr<DBus::DBusClient> dbusClient;
        VConfInterface::CallbackHandle autoTapWaitingPeriodCallbackHandle;
        ecore::Timer timer;
        double autoTapWaitingPeriod;
@@ -153,6 +154,15 @@ void SelectActivity::createMenu()
        createMenuContent();
        evas_object_size_hint_weight_set(popup.get(), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_smart_callback_add(popup.get(), "dismissed", popupDismissedCb, this);
+
+       dbusClient = std::make_unique<DBus::DBusClient>(dbusLocators::accessibilityEMod::BUS,
+                                dbusLocators::accessibilityEMod::OBJ_PATH, dbusLocators::accessibilityEMod::INTERFACE, DBus::ConnectionType::SYSTEM);
+       dbusClient->method<void(bool)>(dbusLocators::accessibilityEMod::BACK_BUTTON_INTERCEPTION_ENABLED).call(true);
+       dbusClient->addSignal<void()>(dbusLocators::accessibilityEMod::BACK_BUTTON_UP_SIGNAL, [this]() {
+               markAsCompleted();
+               removeMenu();
+       });
+
        evas_object_show(popup.get());
        timer.reset();
 }
@@ -177,6 +187,11 @@ void SelectActivity::removeMenu()
        }
 
        timer.reset();
+
+       if (dbusClient) {
+               dbusClient->method<void(bool)>(dbusLocators::accessibilityEMod::BACK_BUTTON_INTERCEPTION_ENABLED).call(false);
+               dbusClient.reset();
+       }
 }
 
 void SelectActivity::createMenuContent()
index fc07d8f..b5c84f6 100644 (file)
@@ -23,6 +23,10 @@ namespace dbusLocators
                static constexpr const char *SCREEN_SP_ENABLED = "ScreenSwitchProviderEnabled";
                static constexpr const char *MOUSE_DOWN_SIGNAL = "MouseDown";
                static constexpr const char *MOUSE_UP_SIGNAL = "MouseUp";
+
+               static constexpr const char *BACK_BUTTON_INTERCEPTION_ENABLED = "BackButtonInterceptionEnabled";
+               static constexpr const char *BACK_BUTTON_DOWN_SIGNAL = "BackButtonDown";
+               static constexpr const char *BACK_BUTTON_UP_SIGNAL = "BackButtonUp";
        }
 }