Provided tests currently fails. Patch https://review.tizen.org/gerrit/#/c/131357/ fix this problem.
Change-Id: I265113e244fc2db397ead0e1d4e8d6db6c0b2fa2
auto event = static_cast<Ecore_Event_Key *>(ev);
std::string keyId(event->key);
- auto accessoriesSwitchProvider = reinterpret_cast<AccessoriesSwitchProvider*>(data);
+ auto accessoriesSwitchProvider = reinterpret_cast<AccessoriesSwitchProvider *>(data);
auto switchId = SwitchId(keyId, accessoriesSwitchProvider->getId());
auto sw = accessoriesSwitchProvider->findSwitchById(switchId.getGlobalId());
#include "Activity.hpp"
-/*
-Activity::Activity(const std::shared_ptr<UIElement> &element)
-:uiElement(element)
+Activity::Activity(const std::string &activityType)
+ : type(activityType)
{}
-Activity::setUIElement(const std::shared_ptr<UIElement> &element) {
- UIElement = element;
+std::string Activity::getType()
+{
+ return type;
}
-*/
#ifndef ACTIVITY_HPP
#define ACTIVITY_HPP
-#include "UIElement.hpp"
-
#include <memory>
class Activity
{
public:
- Activity(){}
- Activity(const std::shared_ptr<UIElement> &element);
- virtual ~Activity();
- void setUIElement(const std::shared_ptr<UIElement> &element);
+ Activity(const std::string &activityType);
+ virtual ~Activity() = default;
+
+ std::string getType();
+ virtual bool prepare() = 0;
virtual void execute() = 0;
+
private:
- std::shared_ptr<UIElement> uiElement;
+ std::string type;
};
#endif
+++ /dev/null
-#ifndef ACTIVITY_BUILDER_HPP
-#define ACTIVITY_BUILDER_HPP
-
-#include "Activity.hpp"
-#include "Subject.hpp"
-#include "UIElement.hpp"
-
-class ActivityBuilder : public Subject<Activity>
-{
-public:
- virtual void createNewActivity() = 0;
- virtual void buildUIElement() = 0;
-};
-
-#endif
+++ /dev/null
-#ifndef ACTIVITY_BUILDER_FACTORY_HPP
-#define ACTIVITY_BUILDER_FACTORY_HPP
-
-#include "ActivityBuilder.hpp"
-
-#include <memory>
-
-class ActivityBuilderFactory
-{
-public:
- virtual ~ActivityBuilderFactory(){};
- virtual std::shared_ptr<ActivityBuilder> getActivityBuilder(const std::string &activityType) = 0;
-};
-
-#endif
class ActivityDispatcher
{
public:
- virtual ~ActivityDispatcher(){};
+ virtual ~ActivityDispatcher() {};
virtual void dispatch(std::shared_ptr<Activity> activity) = 0;
};
--- /dev/null
+#include "ActivityFactory.hpp"
+
+std::shared_ptr<Activity> ActivityFactory::getActivity(const std::string &activityType)
+{
+ auto it = constructorMap.find(activityType);
+
+ if (it == constructorMap.end())
+ return nullptr;
+
+ ActivityConstructor constructor = it->second;
+ return constructor();
+}
+
+void ActivityFactory::registerActivityConstructor(const char *activityType, ActivityConstructor c)
+{
+ constructorMap.emplace(activityType, c);
+}
+
+std::vector<std::string> ActivityFactory::getAllActivityTypes()
+{
+ std::vector<std::string> result;
+
+ for (auto &pair : constructorMap)
+ result.emplace_back(pair.first);
+
+ return result;
+}
+
+std::shared_ptr<ActivityFactory> ActivityFactory::getInstance()
+{
+ static auto instance = std::make_shared<ActivityFactory>();
+ return instance;
+}
--- /dev/null
+#ifndef ACTIVITY_FACTORY_HPP
+#define ACTIVITY_FACTORY_HPP
+
+#include "Activity.hpp"
+
+#include <memory>
+#include <unordered_map>
+#include <vector>
+
+class ActivityFactory
+{
+public:
+ using ActivityConstructor = std::function<std::shared_ptr<Activity>()>;
+
+ virtual ~ActivityFactory() = default;
+ static std::shared_ptr<ActivityFactory> getInstance();
+
+ std::shared_ptr<Activity> getActivity(const std::string &activityType);
+ void registerActivityConstructor(const char *activityType, ActivityConstructor c);
+ std::vector<std::string> getAllActivityTypes();
+
+private:
+ std::unordered_map<std::string, ActivityConstructor> constructorMap;
+};
+
+
+
+template <class T>
+class RegisterActivity
+{
+public:
+ static bool reg;
+ static bool init()
+ {
+ ActivityFactory::getInstance()->registerActivityConstructor(T::activityType, [](void) {
+ return std::make_shared<T>();
+ });
+ return true;
+ }
+};
+
+template <class T>
+bool RegisterActivity<T>::reg = RegisterActivity<T>::init();
+
+#endif
+++ /dev/null
-#include "ActivityTypes.hpp"
-
-std::set<std::string> ActivityTypes::getActivityCollection() {
- static ActivityTypes activityTypes;
- return activityTypes.activities;
-}
-
-ActivityTypes::ActivityTypes() {
- for (auto name : {"ACTIVITY_SELECT",
- "ACTIVITY_TOUCH",
- "ACTIVITY_MORE_OPTIONS",
- "ACTIVITY_MOVE_NEXT",
- "ACTIVITY_MORE_PREVIOUS",
- "ACTIVITY_HOME_SCREEN",
- "ACTIVITY_BACK",
- "ACTIVITY_RINGTONE_VOLUME_UP",
- "ACTIVITY_RINGTONE_VOLUME_DOWN",
- "ACTIVITY_NOTIFICATIONS",
- "ACTIVITY_RECENTLY_USED_APPS",
- "ACTIVITY_AUTO_SCAN_OFF",
- "ACTIVITY_AUTO_SCAN_ON",
-
- "ACTIVITY_GESTURES",
- "ACTIVITY_FLICK_LEFT",
- "ACTIVITY_FLICK_RIGHT",
- "ACTIVITY_FLICK_TOP",
- "ACTIVITY_FLICK_DOWN",
- "ACTIVITY_AUTOMATICALLY",
- "ACTIVITY_TOUCH_AND_HOLD",
- "ACTIVITY_FLICK",
- "ACTIVITY_TOUCH_AND_FLICK",
-
- "ACTIVITY_ACTIONS",
- "ACTIVITY_ZOOM_IN",
- "ACTIVITY_ZOOM_OUT",
- "ACTIVITY_SCREEN_ROTATION",
- "ACTIVITY_VIBRATION",
- "ACTIVITY_LOCK",
- "ACTIVITY_SCREEN_SHOT",
-
- "ACTIVITY_SETTINGS",
- "ACTIVITY_FASTER",
- "ACTIVITY_SLOWER",
- "ACTIVITY_POINT_SCANNING",
- "ACTIVITY_BOTTOM_UP",
- "ACTIVITY_UNMUTE",
- "ACTIVITY_MUTE",
- "ACTIVITY_MORE_SETTINGS",
-
- "ACTIVITY_KEYS",
- "ACTIVITY_MEDIA_VOLUME_UP",
- "ACTIVITY_MEDIA_VOLUME_DOWN",
- "ACTIVITY_DOUBLE_TAP_HOME_BTN",
- "ACTIVITY_TRIPLE_TAP_HOME_BTN",
- "ACTIVITY_DEVICE_OPTIONS",
- "ACTIVITY_MORE_OPTIONS"})
- activities.insert(name);
-}
+++ /dev/null
-#ifndef ACTIVITY_TYPES_HPP
-#define ACTIVITY_TYPES_HPP
-
-#include <set>
-#include <string>
-
-class ActivityTypes
-{
-public:
- static std::set<std::string> getActivityCollection();
-
-private:
- ActivityTypes();
- ~ActivityTypes(){};
-
- std::set<std::string> activities;
-};
-
-#endif
#include "AdHocActivityDispatcher.hpp"
-void AdHocActivityDispatcher::dispatch(std::shared_ptr<Activity> activity) {
+void AdHocActivityDispatcher::dispatch(std::shared_ptr<Activity> activity)
+{
if (activity)
activity->execute();
}
+++ /dev/null
-#ifndef ASYNC_ACTIVITY_CONSTRUCTOR_HPP
-#define ASYNC_ACTIVITY_CONSTRUCTOR_HPP
-
-#include "ActivityBuilder.hpp"
-#include "ActivityObserver.hpp"
-
-class AsyncActivityConstructor
-{
-public:
- void construct(const std::shared_ptr<ActivityBuilder> &builder, const std::shared_ptr<ActivityObserver> &observer);
-};
-
-#endif
SET(SRCS
AccessoriesSwitchProvider.cpp
- ActivityTypes.cpp
AdHocActivityDispatcher.cpp
- CachedActivityBuilderFactory.cpp
QueryBuilder.cpp
Switch.cpp
SwitchProvider.cpp
SQLiteConfiguration.cpp
SwitchManager.cpp
SwitchId.cpp
+ ScreenScannerManager.cpp
+ SelectActivity.cpp
+ ActivityFactory.cpp
+ UIActivity.cpp
)
ADD_LIBRARY(universal-switch-obj OBJECT ${SRCS})
+++ /dev/null
-#include "CachedActivityBuilderFactory.hpp"
-
-std::shared_ptr<ActivityBuilder> CachedActivityBuilderFactory::getActivityBuilder(const std::string &activityType) {
-}
+++ /dev/null
-#ifndef CACHED_ACTIVITY_BUILDER_FACTORY_HPP
-#define CACHED_ACTIVITY_BUILDER_FACTORY_HPP
-
-#include "ActivityBuilderFactory.hpp"
-
-class CachedActivityBuilderFactory : public ActivityBuilderFactory
-{
-public:
- std::shared_ptr<ActivityBuilder> getActivityBuilder(const std::string &activityType) override;
-};
-
-#endif
#include <memory>
template<typename T>
-class Condition {
+class Condition
+{
public:
virtual ~Condition() = default;
virtual bool matching(const T *item) const = 0;
class ConditionAll : public Condition<T>
{
public:
- bool matching(const T *item) const override {
+ bool matching(const T *item) const override
+ {
return true;
}
-
- std::shared_ptr<T> getItem() const override {
+
+ std::shared_ptr<T> getItem() const override
+ {
return nullptr;
}
};
{
public:
ConditionEqual(const std::shared_ptr<T> &item)
- :item(item)
+ : item(item)
{}
- bool matching(const T *item) const override {
+ bool matching(const T *item) const override
+ {
return *item == *(this->item);
}
- std::shared_ptr<T> getItem() const override {
+ std::shared_ptr<T> getItem() const override
+ {
return item;
}
{
public:
virtual ~Configuration() = default;
-
+
virtual void add(const std::shared_ptr<SwitchConfigurationItem> &item) = 0;
virtual void update(const std::shared_ptr<SwitchConfigurationItem> &item) = 0;
virtual void remove(const std::string &switchId) = 0;
#include <memory>
template<typename T>
-class Observer {
+class Observer
+{
public:
virtual void update(const std::shared_ptr<T> &item) = 0;
};
#include "UniversalSwitchLog.hpp"
-QueryBuilder &QueryBuilder::select(const std::initializer_list<std::string> &list) {
+QueryBuilder &QueryBuilder::select(const std::initializer_list<std::string> &list)
+{
query << "select ";
bool first = true;
return *this;
}
-QueryBuilder &QueryBuilder::from(const std::string &s) {
+QueryBuilder &QueryBuilder::from(const std::string &s)
+{
query << " from " << s << " ";
printDebug();
return *this;
}
-QueryBuilder &QueryBuilder::where(const std::string &lv, const std::string &op, const std::string &rv) {
+QueryBuilder &QueryBuilder::where(const std::string &lv, const std::string &op, const std::string &rv)
+{
query << "where " << lv << op << "'" << rv << "' ";
printDebug();
return *this;
}
-QueryBuilder &QueryBuilder::set(const std::initializer_list<std::pair<std::string, std::string>> &pairs) {
+QueryBuilder &QueryBuilder::set(const std::initializer_list<std::pair<std::string, std::string>> &pairs)
+{
query << "set ";
bool first = true;
first = false;
else
query << ", ";
- query << elem.first << "='" << elem.second <<"'";
+ query << elem.first << "='" << elem.second << "'";
}
printDebug();
return *this;
}
-QueryBuilder &QueryBuilder::insertInto(const std::string &s) {
+QueryBuilder &QueryBuilder::insertInto(const std::string &s)
+{
query << "insert into " << s << " ";
printDebug();
return *this;
}
-QueryBuilder &QueryBuilder::values(const std::initializer_list<std::string> &list) {
+QueryBuilder &QueryBuilder::values(const std::initializer_list<std::string> &list)
+{
query << "values (";
bool first = true;
first = false;
else
query << ", ";
- query << "'" << elem <<"'";
+ query << "'" << elem << "'";
}
query << ") ";
return *this;
}
-QueryBuilder &QueryBuilder::update(const std::string &s) {
+QueryBuilder &QueryBuilder::update(const std::string &s)
+{
query << "update " << s << " ";
printDebug();
return *this;
}
-QueryBuilder &QueryBuilder::deleteFrom(const std::string &s) {
+QueryBuilder &QueryBuilder::deleteFrom(const std::string &s)
+{
query << "delete from " << s << " ";
printDebug();
return *this;
}
-QueryBuilder &QueryBuilder::qAnd(const std::string &lv, const std::string &op, const std::string &rv) {
+QueryBuilder &QueryBuilder::qAnd(const std::string &lv, const std::string &op, const std::string &rv)
+{
query << "and " << lv << op << "'" << rv << "' ";
printDebug();
return *this;
}
-QueryBuilder &QueryBuilder::qOr(const std::string &lv, const std::string &op, const std::string &rv) {
+QueryBuilder &QueryBuilder::qOr(const std::string &lv, const std::string &op, const std::string &rv)
+{
query << "or " << lv << op << "'" << rv << "' ";
printDebug();
return *this;
}
-std::string QueryBuilder::build() {
+std::string QueryBuilder::build()
+{
query << ";";
printDebug();
return query.str();
}
-void QueryBuilder::printDebug() {
+void QueryBuilder::printDebug()
+{
DEBUG("query: %s", query.str().c_str());
}
void SQLiteConfiguration::add(const std::shared_ptr<SwitchConfigurationItem> &item)
{
auto query = QueryBuilder().insertInto(tableName).values({item->getSwitchId(),
- item->getUserName(),
- item->getActivityType()
- }).build();
+ item->getUserName(),
+ item->getActivityType()
+ }).build();
item->setChangeType(ChangeType::ADD);
if (executeQuery(query))
auto item = std::make_shared<SwitchConfigurationItem>();
- if (!executeQuery(query, [=](int argc, char **argv, char **azColName) { item->construct(argc, argv, azColName); }))
- return nullptr;
+ if (!executeQuery(query, [ = ](int argc, char **argv, char **azColName) {
+ item->construct(argc, argv, azColName);
+ }))
+ return nullptr;
INFO("Found: %s, %s, %s", item->getSwitchId().c_str(), item->getUserName().c_str(), item->getActivityType().c_str());
return item;
}
-std::vector<std::shared_ptr<SwitchConfigurationItem>> SQLiteConfiguration::findAll() const {
+std::vector<std::shared_ptr<SwitchConfigurationItem>> SQLiteConfiguration::findAll() const
+{
auto query = QueryBuilder().select({"*"}).from(tableName).build();
auto collection = std::vector<std::shared_ptr<SwitchConfigurationItem>>();
if (!executeQuery(query, [&](int argc, char **argv, char **azColName) {
- auto item = std::make_shared<SwitchConfigurationItem>();
- item->construct(argc, argv, azColName);
- collection.emplace_back(item); }))
- return {};
+ auto item = std::make_shared<SwitchConfigurationItem>();
+ item->construct(argc, argv, azColName);
+ collection.emplace_back(item);
+ }))
+ return {};
return collection;
}
static int call_functor(void *data, int argc, char **argv, char **colName)
{
- auto &callback = *(const SQLiteConfiguration::execCallback_t*)data;
+ auto &callback = *(const SQLiteConfiguration::execCallback_t *)data;
callback(argc, argv, colName);
return 0;
}
{
INFO("executeQuery: %s", query.c_str());
char *errorMessage = nullptr;
- auto result = sqlite3_exec(dbHandler, query.c_str(), call_functor, const_cast<execCallback_t*>(&cb), &errorMessage);
+ auto result = sqlite3_exec(dbHandler, query.c_str(), call_functor, const_cast<execCallback_t *>(&cb), &errorMessage);
if (result != SQLITE_OK) {
ERROR("sqlite ERROR: %s", errorMessage);
sqlite3_free(errorMessage);
void SQLiteConfiguration::createTable()
{
auto query = "CREATE TABLE IF NOT EXISTS " + tableName + "("
- + switchIdCol + " TEXT NOT NULL, "
- + userNameCol + " TEXT, "
- + activityTypeCol + " TEXT NOT NULL, "
- + "PRIMARY KEY (" + switchIdCol + "));";
+ + switchIdCol + " TEXT NOT NULL, "
+ + userNameCol + " TEXT, "
+ + activityTypeCol + " TEXT NOT NULL, "
+ + "PRIMARY KEY (" + switchIdCol + "));";
INFO("query: %s", query.c_str());
executeQuery(query);
+++ /dev/null
-#ifndef SCANNING_CONTROL_REQUEST_HPP
-#define SCANNING_CONTROL_REQUEST_HPP
-
-class ScannigControlRequest
-{
-
-};
-
-#endif
#ifndef SCREEN_SCANNER_HPP
#define SCREEN_SCANNER_HPP
-#include "Observer.hpp"
#include "UIElement.hpp"
-#include "ScanningControlRequest.hpp"
#include <memory>
-class ScreenScanner : public Subject<UIElement>
+class ScreenScanner
{
public:
virtual ~ScreenScanner();
- virtual void handle(std::shared_ptr<ScanningControlRequest> request) = 0;
+
+ virtual std::shared_ptr<UIElement> acceptAutoscanning() = 0;
+
+protected:
+ unsigned int speed;
};
#endif
--- /dev/null
+#include "ScreenScannerManager.hpp"
+
+ScreenScannerManager::ScreenScannerManager()
+{
+ //TODO: register for scanning parameteres in vconf.
+ // vconf key are defined in universal-switch UI in settings information
+}
+
+ScreenScannerManager &ScreenScannerManager::instance()
+{
+ static ScreenScannerManager *instance = new ScreenScannerManager;
+ return *instance;
+}
+
+void ScreenScannerManager::changeScanningMethod()
+{
+
+}
+
+void ScreenScannerManager::changeScanningDirection()
+{
+
+}
+
+void ScreenScannerManager::changeScanningSpeed(unsigned speed)
+{
+
+}
+
+void ScreenScannerManager::changeScanningLoopLimit(unsigned limit)
+{
+
+}
+
+void ScreenScannerManager::startAutoscanning()
+{
+
+}
+
+void ScreenScannerManager::stopAutoscanning()
+{
+
+}
+
+void ScreenScannerManager::acceptAutoscanning()
+{
+
+}
--- /dev/null
+#ifndef SCREEN_SCANNER_MANAGER_HPP
+#define SCREEN_SCANNER_MANAGER_HPP
+
+#include "Subject.hpp"
+#include "UIElement.hpp"
+#include "ScreenScanner.hpp"
+
+enum class ScanningMethod {
+ ROW,
+ POINT
+};
+
+class ScreenScannerManager : public Subject<UIElement>
+{
+public:
+ static ScreenScannerManager &instance();
+
+ void changeScanningMethod();
+ void changeScanningDirection();
+ void changeScanningSpeed(unsigned int speed);
+ void changeScanningLoopLimit(unsigned int limit);
+
+ void startAutoscanning();
+ void stopAutoscanning();
+ void acceptAutoscanning();
+
+private:
+ ScreenScannerManager();
+
+ ScanningMethod scanningMethod;
+ std::shared_ptr<ScreenScanner> screenScanner;
+};
+
+#endif
--- /dev/null
+#include "UIActivity.hpp"
+#include "ActivityFactory.hpp"
+
+
+
+class SelectActivity : public UIActivity, RegisterActivity<SelectActivity>
+{
+ static constexpr const char *activityType = "SELECT";
+ void execute()
+ {
+ //TODO: build contextual menu
+ }
+};
{
for (auto &it : observers) {
auto observer = it.first.lock();
- if (it.second->matching(item.get()))
+ if (observer && it.second->matching(item.get()))
observer->update(item);
+
}
}
this->switchId = switchId;
}
-std::string SwitchConfigurationItem::getUserName() const {
+std::string SwitchConfigurationItem::getUserName() const
+{
return userName;
}
-void SwitchConfigurationItem::setUserName(const std::string &userName) {
+void SwitchConfigurationItem::setUserName(const std::string &userName)
+{
this->userName = userName;
}
#include "AdHocActivityDispatcher.hpp"
SwitchManager::SwitchManager(const std::shared_ptr<SwitchProvider> &provider,
- const std::shared_ptr<Configuration> &configuration,
- const std::shared_ptr<ActivityBuilderFactory> &factory)
- : switchProvider(provider),
+ const std::shared_ptr<Configuration> &configuration,
+ const std::shared_ptr<ActivityFactory> &factory,
+ const std::shared_ptr<ActivityDispatcher> &dispatcher)
+ : switchProvider(provider),
configuration(configuration),
- activityBuilderFactory(factory)
-{
- asyncActivityConstructor = std::make_shared<AsyncActivityConstructor>();
- activityDispatcher = std::make_shared<AdHocActivityDispatcher>();
-}
+ activityFactory(factory),
+ activityDispatcher(dispatcher)
+{}
void SwitchManager::initialize()
{
}
}
-void SwitchManager::update(const std::shared_ptr<SwitchConfigurationItem> &item) {
- switch (item->getChangeType())
- {
+void SwitchManager::update(const std::shared_ptr<SwitchConfigurationItem> &item)
+{
+ switch (item->getChangeType()) {
case ChangeType::ADD: {
auto sw = switchProvider->findSwitchById(item->getSwitchId());
if (!sw)
}
}
-void SwitchManager::update(const std::shared_ptr<Switch> &item) {
+void SwitchManager::update(const std::shared_ptr<Switch> &sw)
+{
+ auto confItem = configuration->findBySwitchId(sw->getId()->getGlobalId());
+ auto activityType = confItem->getActivityType();
+
+ if (!activity || activity->getType() != activityType)
+ activity = activityFactory->getActivity(activityType);
+
+ bool ready = false;
+ if (!activity)
+ ERROR("No activity provided.");
+ else
+ ready = activity->prepare();
+
+ if (ready) {
+ activityDispatcher->dispatch(activity);
+ activity.reset();
+ }
+}
+
+void SwitchManager::setActivityProvider(const std::shared_ptr<SwitchProvider> &provider)
+{
+ switchProvider = provider;
+}
+void SwitchManager::setConfiguration(const std::shared_ptr<Configuration> &configuration)
+{
+ this->configuration = configuration;
}
-void SwitchManager::update(const std::shared_ptr<Activity> &item) {
+void SwitchManager::setActivityFactory(const std::shared_ptr<ActivityFactory> &factory)
+{
+ activityFactory = factory;
+}
+void SwitchManager::setActivityDispatcher(const std::shared_ptr<ActivityDispatcher> &dispatcher)
+{
+ activityDispatcher = dispatcher;
}
#include "SwitchConfigurationItemObserver.hpp"
#include "SwitchObserver.hpp"
#include "SwitchProvider.hpp"
-#include "AsyncActivityConstructor.hpp"
#include "ActivityDispatcher.hpp"
#include "Configuration.hpp"
#include "Condition.hpp"
-#include "ActivityBuilderFactory.hpp"
+#include "ActivityFactory.hpp"
#include "Activity.hpp"
#include <memory>
-class SwitchManager : public SwitchConfigurationItemObserver, public SwitchObserver, public ActivityObserver, public std::enable_shared_from_this<SwitchManager>
+class SwitchManager : public SwitchConfigurationItemObserver, public SwitchObserver, public std::enable_shared_from_this<SwitchManager>
{
public:
void update(const std::shared_ptr<SwitchConfigurationItem> &item) override;
void update(const std::shared_ptr<Switch> &item) override;
- void update(const std::shared_ptr<Activity> &item) override;
template<class A>
static std::shared_ptr<A> create(const std::shared_ptr<SwitchProvider> &provider,
- const std::shared_ptr<Configuration> &configuration,
- const std::shared_ptr<ActivityBuilderFactory> &factory) {
- auto ptr = std::shared_ptr<A>(new A(provider, configuration, factory));
+ const std::shared_ptr<Configuration> &configuration,
+ const std::shared_ptr<ActivityFactory> &factory,
+ const std::shared_ptr<ActivityDispatcher> &dispatcher)
+ {
+ auto ptr = std::shared_ptr<A>(new A(provider, configuration, factory, dispatcher));
ptr->initialize();
return ptr;
}
+ void setActivityProvider(const std::shared_ptr<SwitchProvider> &provider);
+ void setConfiguration(const std::shared_ptr<Configuration> &configuration);
+ void setActivityFactory(const std::shared_ptr<ActivityFactory> &factory);
+ void setActivityDispatcher(const std::shared_ptr<ActivityDispatcher> &dispatcher);
+
protected:
SwitchManager(const std::shared_ptr<SwitchProvider> &provider,
- const std::shared_ptr<Configuration> &configuration,
- const std::shared_ptr<ActivityBuilderFactory> &factory);
+ const std::shared_ptr<Configuration> &configuration,
+ const std::shared_ptr<ActivityFactory> &factory,
+ const std::shared_ptr<ActivityDispatcher> &dispatcher);
void initialize();
std::shared_ptr<SwitchProvider> switchProvider;
std::shared_ptr<Configuration> configuration;
- std::shared_ptr<ActivityBuilderFactory> activityBuilderFactory;
- std::shared_ptr<AsyncActivityConstructor> asyncActivityConstructor;
+ std::shared_ptr<ActivityFactory> activityFactory;
std::shared_ptr<ActivityDispatcher> activityDispatcher;
+
+ std::shared_ptr<Activity> activity;
};
#endif
--- /dev/null
+#include "UIActivity.hpp"
+
+#include "ScreenScannerManager.hpp"
+#include "ConditionAll.hpp"
+
+UIActivity::UIActivity(const std::string &type)
+ : Activity(type)
+{
+ auto cond = std::unique_ptr<Condition<UIElement>>(new ConditionAll<UIElement>);
+ ScreenScannerManager::instance().attach(shared_from_this(), std::move(cond));
+}
+
+UIActivity::~UIActivity()
+{
+ ScreenScannerManager::instance().detach(this, nullptr);
+}
+
+bool UIActivity::prepare()
+{
+ ScreenScannerManager::instance().acceptAutoscanning();
+
+ return uiElement != nullptr;
+}
+
+void UIActivity::update(const std::shared_ptr<UIElement> &elem)
+{
+ uiElement = elem;
+}
--- /dev/null
+#ifndef UI_ACTIVITY_HPP
+#define UI_ACTIVITY_HPP
+
+#include "Activity.hpp"
+#include "UIElementObserver.hpp"
+#include "UIElement.hpp"
+
+#include <memory>
+
+class UIActivity : public Activity, public UIElementObserver, public std::enable_shared_from_this<UIActivity>
+{
+public:
+ UIActivity(const std::string &type);
+ ~UIActivity();
+ bool prepare() override;
+
+ void update(const std::shared_ptr<UIElement> &elem) override;
+
+private:
+ std::shared_ptr<UIElement> uiElement;
+};
+
+#endif
#include "UIElement.hpp"
-int32_t UIElement::getX() {
+int32_t UIElement::getX()
+{
return x;
}
-int32_t UIElement::getY() {
+int32_t UIElement::getY()
+{
return y;
}
-std::shared_ptr<AtspiAccessible> UIElement::getObject() {
+std::shared_ptr<AtspiAccessible> UIElement::getObject()
+{
return obj;
}
class UIElementObserver : public Observer<UIElement>
{
public:
- virtual ~UIElementObserver();
+ virtual ~UIElementObserver() = default;
};
#endif
bool service_app_create(void *data)
{
- // Todo: add your code here.
- return true;
+ // Todo: add your code here.
+ return true;
}
void service_app_terminate(void *data)
{
- // Todo: add your code here.
- return;
+ // Todo: add your code here.
+ return;
}
void service_app_control(app_control_h app_control, void *data)
{
- // Todo: add your code here.
- return;
+ // Todo: add your code here.
+ return;
}
static void
/*APP_EVENT_LOW_MEMORY*/
}
-int main(int argc, char* argv[])
+int main(int argc, char *argv[])
{
DEBUG("main function called");
char ad[50] = {0,};
--- /dev/null
+#include "ActivityDispatchingTests.hpp"
+
+#include "ActivityFactory.hpp"
+
+#include <cassert>
+
+TEST_F(ActivityDispatchingFixture, FactoryWorks)
+{
+ EXPECT_TRUE(ActivityFactory::getInstance()->getActivity(activityType_));
+}
+
+TEST_F(ActivityDispatchingFixture, ActivityNotPrepared)
+{
+ initialEnvironmentExpect();
+ EXPECT_EQ(adHocActivityDispatcher_->updatedWithActivity, 0);
+}
+
+TEST_F(ActivityDispatchingFixture, ActivityReady)
+{
+ initialEnvironmentExpect();
+ EXPECT_EQ(adHocActivityDispatcher_->updatedWithActivity, 0);
+ simulateKeyDown(keyMappedToSelectActivity_);
+ EXPECT_EQ(adHocActivityDispatcher_->updatedWithActivity, 1);
+}
+
+TEST_F(ActivityDispatchingFixture, ActivityAbandoned)
+{
+ initialEnvironmentExpect();
+ EXPECT_EQ(adHocActivityDispatcher_->updatedWithActivity, 0);
+ simulateKeyDown(keyNotMappedToSelectActivity_);
+ EXPECT_EQ(adHocActivityDispatcher_->updatedWithActivity, 0);
+ simulateKeyDown(keyMappedToSelectActivity_);
+ EXPECT_EQ(adHocActivityDispatcher_->updatedWithActivity, 0);
+}
--- /dev/null
+#include "ConfigurationTests.hpp"
+
+#include "AdHocActivityDispatcher.hpp"
+
+class AdHocActivityDispatcher_ActivityDispatchingTest : public AdHocActivityDispatcher
+{
+public:
+ void dispatch(std::shared_ptr<Activity> activity) override
+ {
+ AdHocActivityDispatcher::dispatch(activity);
+ ++updatedWithActivity;
+ }
+
+ int updatedWithActivity = 0;
+};
+
+class ActivityDispatchingFixture : public ConfigurationTestsFixture
+{
+public:
+ void SetUp()
+ {
+ ConfigurationTestsFixture::SetUp();
+ configuration_->add(item_);
+
+ auto newSwitch = switchProvider_->findSwitchById(newSwitchId_);
+ auto newItem = std::make_shared<SwitchConfigurationItem>(newSwitch->getId()->getGlobalId(), newActivityType_);
+ configuration_->add(newItem);
+
+ adHocActivityDispatcher_ = std::make_shared<AdHocActivityDispatcher_ActivityDispatchingTest>();
+ switchManager_ = SwitchManager::create<SwitchManager_ConfigurationTests>(switchProvider_, configuration_, activityFactory_, adHocActivityDispatcher_);
+ }
+
+ void TearDown()
+ {
+ ConfigurationTestsFixture::TearDown();
+ }
+
+ void initialEnvironmentExpect()
+ {
+ simulateKeyDown(keyMappedToSelectActivity_);
+ EXPECT_EQ(switchManager_->updatedWithSwitch, 1);
+ }
+
+protected:
+ std::shared_ptr<AdHocActivityDispatcher_ActivityDispatchingTest> adHocActivityDispatcher_;
+ std::shared_ptr<SwitchManager_ConfigurationTests> switchManager_;
+ std::string keyMappedToSelectActivity_ = "Down";
+ std::string keyNotMappedToSelectActivity_ = "Up";
+ std::string newSwitchId_ = "AccessoriesSwitchProvider_Up";
+ std::string newActivityType_ = "SCAN_OFF";
+};
ENDFUNCTION(CREATE_TEST_FROM_SOURCE)
CREATE_TEST_FROM_SOURCE(ConfigurationTests.cpp)
+CREATE_TEST_FROM_SOURCE(ActivityDispatchingTests.cpp)
#include "ConfigurationTests.hpp"
-TEST_F(ConfigurationFixture, ConfigurationNotEmpty_BeUpdatedOnEvent) {
+TEST_F(ConfigurationTestsFixture, ConfigurationNotEmpty_BeUpdatedOnEvent)
+{
configuration_->add(item_);
- auto switchManager = SwitchManager::create<SwitchManagerMocked>(switchProvider_, configuration_, nullptr);
- simulateKeyDown();
+ auto switchManager = SwitchManager::create<SwitchManager_ConfigurationTests>(switchProvider_, configuration_, activityFactory_, nullptr);
+ simulateKeyDown(key_);
EXPECT_EQ(switchManager->updatedWithSwitch, 1);
EXPECT_EQ(switchManager->receivedItem->getId()->getGlobalId(), switchId_);
}
-TEST_F(ConfigurationFixture, ConfigurationEmpty_MappingAdded_BeUpdatedOnEvent) {
- auto switchManager = SwitchManager::create<SwitchManagerMocked>(switchProvider_, configuration_, nullptr);
+TEST_F(ConfigurationTestsFixture, ConfigurationEmpty_MappingAdded_BeUpdatedOnEvent)
+{
+ auto switchManager = SwitchManager::create<SwitchManager_ConfigurationTests>(switchProvider_, configuration_, activityFactory_, nullptr);
configuration_->add(item_);
- simulateKeyDown();
+ simulateKeyDown(key_);
EXPECT_EQ(switchManager->updatedWithSwitch, 1);
EXPECT_EQ(switchManager->receivedItem->getId()->getGlobalId(), switchId_);
}
-TEST_F(ConfigurationFixture, MappingAddedAndRemoved_BeNotUpdatedOnEvent) {
+TEST_F(ConfigurationTestsFixture, MappingAddedAndRemoved_BeNotUpdatedOnEvent)
+{
configuration_->add(item_);
- auto switchManager = SwitchManager::create<SwitchManagerMocked>(switchProvider_, configuration_, nullptr);
+ auto switchManager = SwitchManager::create<SwitchManager_ConfigurationTests>(switchProvider_, configuration_, activityFactory_, nullptr);
configuration_->remove(switchId_);
- simulateKeyDown();
+ simulateKeyDown(key_);
EXPECT_EQ(switchManager->updatedWithSwitch, 0);
}
-TEST_F(ConfigurationFixture, MappingAddedAndUpdated_BeUpdatedWithNewValue) {
+TEST_F(ConfigurationTestsFixture, MappingAddedAndUpdated_BeUpdatedWithNewValue)
+{
configuration_->add(item_);
- auto switchManager = SwitchManager::create<SwitchManagerMocked>(switchProvider_, configuration_, nullptr);
+ auto switchManager = SwitchManager::create<SwitchManager_ConfigurationTests>(switchProvider_, configuration_, activityFactory_, nullptr);
auto newActivityType = "SCAN_OFF";
auto newItem = std::make_shared<SwitchConfigurationItem>(switch_->getId()->getGlobalId(), newActivityType);
configuration_->update(newItem);
- simulateKeyDown();
+ simulateKeyDown(key_);
EXPECT_EQ(switchManager->updatedWithSwitch, 1);
EXPECT_EQ(switchManager->receivedItem->getId()->getGlobalId(), switchId_);
using ::testing::StrEq;
using ::testing::_;
-class ConfigurationFixture : public ::testing::Test {
+class ConfigurationTestsFixture : public ::testing::Test
+{
public:
- void SetUp() {
+ void SetUp()
+ {
EXPECT_TRUE(ecore_init());
EXPECT_TRUE(ecore_event_init());
configuration_ = std::make_shared<SQLiteConfiguration>(true);
switchProvider_ = std::make_shared<AccessoriesSwitchProvider>();
+ activityFactory_ = ActivityFactory::getInstance();
switch_ = switchProvider_->findSwitchById(switchId_);
item_ = std::make_shared<SwitchConfigurationItem>(switch_->getId()->getGlobalId(), activityType_);
}
- void TearDown() {
+ void TearDown()
+ {
ecore_event_shutdown();
ecore_shutdown();
}
- void simulateKeyDown() {
- Ecore_Event_Key *event = (Ecore_Event_Key*)malloc(sizeof(Ecore_Event_Key));
+ void simulateKeyDown(const std::string &key)
+ {
+ Ecore_Event_Key *event = (Ecore_Event_Key *)malloc(sizeof(Ecore_Event_Key));
event->key = key.c_str();
EXPECT_TRUE(ecore_event_add(ECORE_EVENT_KEY_DOWN, event, NULL, NULL));
ecore_main_loop_iterate();
protected:
std::shared_ptr<Configuration> configuration_;
std::shared_ptr<SwitchProvider> switchProvider_;
+ std::shared_ptr<ActivityFactory> activityFactory_;
std::shared_ptr<Switch> switch_;
std::shared_ptr<SwitchConfigurationItem> item_;
- std::string key = "Down";
+ std::string key_ = "Down";
std::string switchId_ = "AccessoriesSwitchProvider_Down";
std::string activityType_ = "SELECT";
};
-class SwitchManagerMocked : public SwitchManager {
+class SwitchManager_ConfigurationTests : public SwitchManager
+{
public:
- SwitchManagerMocked(const std::shared_ptr<SwitchProvider> &provider,
- const std::shared_ptr<Configuration> &configuration,
- const std::shared_ptr<ActivityBuilderFactory> &factory)
- : SwitchManager(provider, configuration, factory)
+ SwitchManager_ConfigurationTests(const std::shared_ptr<SwitchProvider> &provider,
+ const std::shared_ptr<Configuration> &configuration,
+ const std::shared_ptr<ActivityFactory> &factory,
+ const std::shared_ptr<ActivityDispatcher> &dispatcher)
+ : SwitchManager(provider, configuration, factory, dispatcher)
{}
- void update(const std::shared_ptr<Switch> &item) override {
+ void update(const std::shared_ptr<Switch> &item) override
+ {
SwitchManager::update(item);
receivedItem = item;
++updatedWithSwitch;