From 53f7e9b840d2088484be78552c0c116060bc02b8 Mon Sep 17 00:00:00 2001 From: Oskar Chodowicz Date: Mon, 17 Jun 2019 19:20:25 +0200 Subject: [PATCH] Camera Switches Page in MVP Change-Id: I5473263543dfffdce3b257c8ae0c848c41931c5e --- src/model/AddSwitchPageModel.cpp | 6 ++--- src/model/AddSwitchPageModel.hpp | 2 +- src/model/CameraSwitchesPageModel.cpp | 32 +++++++++++++++++++++++++++ src/model/CameraSwitchesPageModel.hpp | 15 +++++++++++++ src/presenter/AddSwitchPagePresenter.cpp | 5 +++-- src/presenter/CameraSwitchesPagePresenter.cpp | 31 ++++++++++++++++++++++++++ src/presenter/CameraSwitchesPagePresenter.hpp | 17 ++++++++++++++ 7 files changed, 102 insertions(+), 6 deletions(-) create mode 100644 src/model/CameraSwitchesPageModel.cpp create mode 100644 src/model/CameraSwitchesPageModel.hpp create mode 100644 src/presenter/CameraSwitchesPagePresenter.cpp create mode 100644 src/presenter/CameraSwitchesPagePresenter.hpp diff --git a/src/model/AddSwitchPageModel.cpp b/src/model/AddSwitchPageModel.cpp index a57e396..5a6c939 100644 --- a/src/model/AddSwitchPageModel.cpp +++ b/src/model/AddSwitchPageModel.cpp @@ -34,7 +34,7 @@ bool AddSwitchPageModel::areAllSwitchesConfigured(const InfoType &switchProvider } return false; }; - for (auto &aSwitch : getAllSwitchesByProvider(switchProvider)) { + for (auto &aSwitch : getAllSwitchesByProviderId(switchProvider.id)) { if (!isSwitchConfigured(aSwitch)) return false; } @@ -46,10 +46,10 @@ const std::vector &AddSwitchPageModel::getProviders() return providers_; } -std::vector AddSwitchPageModel::getAllSwitchesByProvider(const InfoType &switchProvider) +std::vector AddSwitchPageModel::getAllSwitchesByProviderId(const std::string &providerId) { std::vector allSwitches; - auto reply = dBusClient_.method>>(std::string)>("getAllSwitchesByProviderId").call(switchProvider.id); + auto reply = dBusClient_.method>>(std::string)>("getAllSwitchesByProviderId").call(providerId); if (reply) { for (auto aSwitch : std::get<0>(reply)) allSwitches.push_back(InfoType{std::get<0>(aSwitch), std::get<1>(aSwitch), std::get<2>(aSwitch)}); diff --git a/src/model/AddSwitchPageModel.hpp b/src/model/AddSwitchPageModel.hpp index 216b2af..eba90d0 100644 --- a/src/model/AddSwitchPageModel.hpp +++ b/src/model/AddSwitchPageModel.hpp @@ -15,7 +15,7 @@ class AddSwitchPageModel const std::vector &getProviders(); bool areAllSwitchesConfigured(const InfoType &switchProvider); ObservableProperty switchesConfigurationChanged_; - std::vector getAllSwitchesByProvider(const InfoType &switchProvider); + std::vector getAllSwitchesByProviderId(const std::string &providerId); private: void synchronizeProviders(); diff --git a/src/model/CameraSwitchesPageModel.cpp b/src/model/CameraSwitchesPageModel.cpp new file mode 100644 index 0000000..4785267 --- /dev/null +++ b/src/model/CameraSwitchesPageModel.cpp @@ -0,0 +1,32 @@ +#include "CameraSwitchesPageModel.hpp" + +#include "DBus.hpp" +#include "UniversalSwitchConstants.hpp" + +std::vector CameraSwitchesPageModel::getAllSwitchesByProvider(const std::string &providerId) +{ + std::vector allSwitches; + auto reply = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION}.method>>(std::string)>("getAllSwitchesByProviderId").call(providerId); + if (reply) { + for (auto aSwitch : std::get<0>(reply)) + allSwitches.push_back(InfoType{std::get<0>(aSwitch), std::get<1>(aSwitch), std::get<2>(aSwitch)}); + } else { + ERROR("Error on function getAllSwitchesByProviderId call"); + ERROR("%s", reply.getError().message.c_str()); + } + return allSwitches; +} + +bool CameraSwitchesPageModel::isSwitchConfigured(const std::string &switchId) +{ + auto reply = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION}.method>>()>("getAllSwitchConfigurationItems").call(); + if (reply) { + for (auto item : std::get<0>(reply)) + if (std::get<0>(item) == switchId) + return true; + } else { + ERROR("Error on function getAllSwitchConfigurationItems call"); + ERROR("%s", reply.getError().message.c_str()); + } + return false; +} diff --git a/src/model/CameraSwitchesPageModel.hpp b/src/model/CameraSwitchesPageModel.hpp new file mode 100644 index 0000000..50a63a7 --- /dev/null +++ b/src/model/CameraSwitchesPageModel.hpp @@ -0,0 +1,15 @@ +#ifndef CAMERA_SWITCHES_PAGE_MODEL_HPP +#define CAMERA_SWITCHES_PAGE_MODEL_HPP + +#include "ObservableProperty.hpp" +#include "UniversalSwitchTypes.hpp" +#include "VConf.hpp" + +class CameraSwitchesPageModel +{ + public: + std::vector getAllSwitchesByProvider(const std::string &provider); + bool isSwitchConfigured(const std::string &switchId); +}; + +#endif \ No newline at end of file diff --git a/src/presenter/AddSwitchPagePresenter.cpp b/src/presenter/AddSwitchPagePresenter.cpp index f29b61c..cb0bd00 100644 --- a/src/presenter/AddSwitchPagePresenter.cpp +++ b/src/presenter/AddSwitchPagePresenter.cpp @@ -1,6 +1,7 @@ #include "AddSwitchPagePresenter.hpp" #include "AppContext.hpp" +#include "CameraSwitchesPagePresenter.hpp" #include "SelectActionPagePresenter.hpp" #include "UniversalSwitchConstants.hpp" @@ -45,7 +46,7 @@ void AddSwitchPagePresenter::createPageForProvider(const InfoType &provider) void AddSwitchPagePresenter::createPageForScreenProvider() { - auto switches = model_.getAllSwitchesByProvider(ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN_SWITCH_PROVIDER); + auto switches = model_.getAllSwitchesByProviderId(ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN_SWITCH_PROVIDER); if (switches.size() != 1) return; auto screenSwitch = switches[0]; @@ -59,5 +60,5 @@ void AddSwitchPagePresenter::createPageForAccessoriesProvider() void AddSwitchPagePresenter::createPageForCameraProvider() { - //Singleton::instance().push(std::make_unique()); + Singleton::instance().push(std::make_unique()); } \ No newline at end of file diff --git a/src/presenter/CameraSwitchesPagePresenter.cpp b/src/presenter/CameraSwitchesPagePresenter.cpp new file mode 100644 index 0000000..f7b51ea --- /dev/null +++ b/src/presenter/CameraSwitchesPagePresenter.cpp @@ -0,0 +1,31 @@ +#include "CameraSwitchesPagePresenter.hpp" + +#include "AppContext.hpp" +#include "SelectActionPagePresenter.hpp" +#include "UniversalSwitchConstants.hpp" + +CameraSwitchesPagePresenter::CameraSwitchesPagePresenter() +{ + setTitle("IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_TITLE"); + groups_.emplace_back(""); + groups_.back().items_.push_back(std::make_unique( + std::string{}, + "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_COMMENT")); + + groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD"); + auto &items = groups_.back().items_; + for (auto &aSwitch : model_.getAllSwitchesByProvider(ACCESSIBILITY_UNIVERSAL_SWITCH_CAMERA_SWITCH_PROVIDER)) { + items.push_back(std::make_unique( + aSwitch.name, + aSwitch.description, + [=](auto item) { + this->createSelectActionPageForSwitch(aSwitch); + })); + items.back()->enabled_ = !model_.isSwitchConfigured(aSwitch.id); + } +} + +void CameraSwitchesPagePresenter::createSelectActionPageForSwitch(const InfoType &aSwitch) +{ + Singleton::instance().push(std::make_unique(aSwitch.id, aSwitch.name, ChangeType::ADD, 2)); +} \ No newline at end of file diff --git a/src/presenter/CameraSwitchesPagePresenter.hpp b/src/presenter/CameraSwitchesPagePresenter.hpp new file mode 100644 index 0000000..a358446 --- /dev/null +++ b/src/presenter/CameraSwitchesPagePresenter.hpp @@ -0,0 +1,17 @@ +#ifndef CAMERA_SWITCHES_PAGE_PRESENTER_HPP +#define CAMERA_SWITCHES_PAGE_PRESENTER_HPP + +#include "CameraSwitchesPageModel.hpp" +#include "ListPresenter.hpp" + +class CameraSwitchesPagePresenter : public ListPresenter +{ + public: + CameraSwitchesPagePresenter(); + + private: + CameraSwitchesPageModel model_; + void createSelectActionPageForSwitch(const InfoType &aSwitch); +}; + +#endif -- 2.7.4