--- /dev/null
+#include "UniversalSwitchSettingsPageModel.hpp"
+
+#define VCONF_MEMORY_TYPE "db/"
+#define VCONF_PROJECT_NAME "setting/accessibility/universal-switch/"
+#define VCONF_PROJECT_PREFIX VCONF_MEMORY_TYPE VCONF_PROJECT_NAME
+
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED VCONF_PROJECT_PREFIX "AUTO_SCAN_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_INT VCONF_PROJECT_PREFIX "AUTO_SCAN_INTERVAL"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS VCONF_PROJECT_PREFIX "LOOP_LIMIT_TO_INACTION"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD VCONF_PROJECT_PREFIX "SCAN_METHOD"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR_VERTICAL VCONF_PROJECT_PREFIX "SCAN_DIRECTION_VERTICAL"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR_HORIZONTA VCONF_PROJECT_PREFIX "SCAN_DIRECTION_HORIZONTAL"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_PT_SPEED VCONF_PROJECT_PREFIX "SCAN_PT_SPEED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_STATE VCONF_PROJECT_PREFIX "PAUSE_ON_FIRST_ELEMENT_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_VALUE VCONF_PROJECT_PREFIX "PAUSE_ON_FIRST_ELEMENT_TIME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_STATE VCONF_PROJECT_PREFIX "TAP_DURATION_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_VALUE VCONF_PROJECT_PREFIX "TAP_DURATION_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_STATE VCONF_PROJECT_PREFIX "SGL_INACTION_INT_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_VALUE VCONF_PROJECT_PREFIX "SGL_INACTION_INT_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE VCONF_PROJECT_PREFIX "AUTO_TAP_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE VCONF_PROJECT_PREFIX "AUTO_TAP_WAITING_TIME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_STATE VCONF_PROJECT_PREFIX "AUTO_MOVE_INT_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_VALUE VCONF_PROJECT_PREFIX "AUTO_MOVE_INT_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_KBD_STATE VCONF_PROJECT_PREFIX "AUTO_TAP_KBD_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR VCONF_PROJECT_PREFIX "FEEDBACK_CURSOR_COLOR"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE VCONF_PROJECT_PREFIX "FEEDBACK_SOUND_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_VOLUME VCONF_PROJECT_PREFIX "FEEDBACK_SOUND_VOLUME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE VCONF_PROJECT_PREFIX "FEEDBACK_VOICE_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_RATE VCONF_PROJECT_PREFIX "FEEDBACK_VOICE_SPEECH_RATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_VOLUME VCONF_PROJECT_PREFIX "FEEDBACK_VOICE_SPEECH_VOLUME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCROLL_ENABLED VCONF_PROJECT_PREFIX "AUTO_SCROLL_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GRANULARITY_UNIT VCONF_PROJECT_PREFIX "GRANULARITY_UNIT"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_ACTIONS VCONF_PROJECT_PREFIX "SHOW_ACTIONS_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_SETTINGS VCONF_PROJECT_PREFIX "SHOW_SETTINGS_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_HOMESCREEN VCONF_PROJECT_PREFIX "SHOW_HOME_SCREEN_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_KEYS VCONF_PROJECT_PREFIX "SHOW_BUTTONS_AND_KEYS_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_CONTEXTUAL_MENU VCONF_PROJECT_PREFIX "SHOW_CONTEXTUAL_MENU"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_GESTURES VCONF_PROJECT_PREFIX "SHOW_GESTURES_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_RECENT_APPS VCONF_PROJECT_PREFIX "SHOW_RECENT_APPS_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_BACK VCONF_PROJECT_PREFIX "SHOW_BACK_MENU_ITEM"
+
+#define DEFAULT_AUTO_SCAN_STATE true
+#define DEFAULT_AUTO_SCAN_INTERVAL 2.0
+#define DEFAULT_AUTO_SCAN_NUMBER 5
+#define DEFAULT_SCAN_METHOD ScanMethod::POINT
+#define DEFAULT_SCAN_DIR ScanDirection::TO_BOTTOM
+#define DEFAULT_SCAN_PT_SPEED 10
+#define DEFAULT_PAUSE_ON_FIRST_STATE false
+#define DEFAULT_PAUSE_ON_FIRST_VALUE 1.0
+#define DEFAULT_TAP_DURATION_STATE false
+#define DEFAULT_TAP_DURATION_VALUE 0.5
+#define DEFAULT_SGL_IACTION_INT_STATE false
+#define DEFAULT_SGL_IACTION_INT_VALUE 0.5
+#define DEFAULT_AUTO_TAP_STATE false
+#define DEFAULT_AUTO_TAP_VALUE 1.0
+#define DEFAULT_AUTO_MOVE_INT_STATE false
+#define DEFAULT_AUTO_MOVE_INT_VALUE 1.0
+#define DEFAULT_AUTO_TAP_KEYBOARD_STATE false
+#define DEFAULT_FEEDBACK_CURSOR_COLOR 0xffff0000
+#define DEFAULT_FEEDBACK_SOUND_STATE true
+#define DEFAULT_FEEDBACK_SOUND_VOLUME 0.5
+#define DEFAULT_FEEDBACK_VOICE_STATE false
+#define DEFAULT_FEEDBACK_VOICE_SPEECH_RATE 0.5
+#define DEFAULT_FEEDBACK_VOICE_SPEECH_VOLUME 0.5
+
+#define BUS "org.tizen.UniversalSwitch"
+#define PATH "/org/tizen/UniversalSwitch"
+#define IFACE "org.tizen.UniversalSwitch"
+
+UniversalSwitchSettingsPageModel::UniversalSwitchSettingsPageModel()
+{
+ synchronizePropertyWithVConf(autoScanState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED, DEFAULT_AUTO_SCAN_STATE);
+ synchronizePropertyWithVConf(autoScanInterval_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_INT, DEFAULT_AUTO_SCAN_INTERVAL);
+ synchronizePropertyWithVConf(autoScanInterval_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_INT, DEFAULT_AUTO_SCAN_INTERVAL);
+ synchronizePropertyWithVConf(autoScanLoopsNumber_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS, DEFAULT_AUTO_SCAN_NUMBER);
+ synchronizePropertyWithVConf(scanMethod_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD, DEFAULT_SCAN_METHOD);
+ synchronizePropertyWithVConf(scanDirection_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR_VERTICAL, DEFAULT_SCAN_DIR);
+ synchronizePropertyWithVConf(pointScanSpeed_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_PT_SPEED, DEFAULT_SCAN_PT_SPEED);
+ synchronizePropertyWithVConf(pauseOnFirstState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_STATE, DEFAULT_PAUSE_ON_FIRST_STATE);
+ synchronizePropertyWithVConf(pauseOnFirstTime_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_VALUE, DEFAULT_PAUSE_ON_FIRST_VALUE);
+ synchronizePropertyWithVConf(tapDurationState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_STATE, DEFAULT_TAP_DURATION_STATE);
+ synchronizePropertyWithVConf(tapDurationValue_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_VALUE, DEFAULT_TAP_DURATION_VALUE);
+ synchronizePropertyWithVConf(singleInteractionIntervalState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_STATE, DEFAULT_SGL_IACTION_INT_STATE);
+ synchronizePropertyWithVConf(singleInteractionIntervalValue_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_VALUE, DEFAULT_SGL_IACTION_INT_VALUE);
+ synchronizePropertyWithVConf(autoTapState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE, DEFAULT_AUTO_TAP_STATE);
+ synchronizePropertyWithVConf(autoTapValue_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE, DEFAULT_AUTO_TAP_VALUE);
+ synchronizePropertyWithVConf(autoMoveState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_STATE, DEFAULT_AUTO_MOVE_INT_STATE);
+ synchronizePropertyWithVConf(autoMoveValue_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_VALUE, DEFAULT_AUTO_MOVE_INT_VALUE);
+ synchronizePropertyWithVConf(autoTapKeyboardState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_KBD_STATE, DEFAULT_AUTO_TAP_KEYBOARD_STATE);
+
+ vconfHandles_.push_back(Singleton<VConfInterface>::instance().registerAndGet<int>(
+ VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR,
+ DEFAULT_FEEDBACK_CURSOR_COLOR,
+ [this](auto value) {
+ cursorColor_ = Color::fromABGR(value);
+ }));
+
+ cursorColor_.attach([this](auto newValue) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR, newValue.toABGRInt());
+ });
+
+ synchronizePropertyWithVConf(feedbackSoundState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE, DEFAULT_FEEDBACK_SOUND_STATE);
+ synchronizePropertyWithVConf(feedbackVoiceState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE, DEFAULT_FEEDBACK_VOICE_STATE);
+
+ connectionPtr_ = DBus::getDBusConnectionByType(DBus::ConnectionType::SESSION);
+ dBusClient_ = DBus::DBusClient{BUS, PATH, IFACE, connectionPtr_};
+ auto reply = dBusClient_.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string, int32_t>>>()>("getAllSwitchConfigurationItems").call();
+ if (reply) {
+ configuredSwitchesCount_ = std::get<0>(reply).size();
+ } else {
+ ERROR("Error on function getAllSwitchConfigurationItems call");
+ ERROR("%s", reply.getError().message.c_str());
+ configuredSwitchesCount_ = 0;
+ }
+ dBusClient_.addSignal<void(int)>(std::string{"switchesCountChanged"}, [this](auto count) {
+ configuredSwitchesCount_ = count;
+ });
+}
\ No newline at end of file
--- /dev/null
+#include "UniversalSwitchSettingsPagePresenter.hpp"
+
+UniversalSwitchSettingsPagePresenter::UniversalSwitchSettingsPagePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS");
+ createSwitchesGroup();
+ createScanningGropu();
+ createAdditionalSettingsGroup();
+ createFeedbackGroup();
+}
+
+void UniversalSwitchSettingsPagePresenter::createSwitchesGroup()
+{
+ groups_.emplace_back("");
+ groups_.back().items_.push_back(std::make_unique<ListItem>(std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES"},
+ TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SWITCHES", model_.configuredSwitchesCount_.value()).str(),
+ [this](auto item) {
+ switchesPage_ = std::make_unique<SwitchesPage>();
+ DEBUG("Switches page");
+ }));
+ auto item = groups_.back().items_.back().get();
+ model_.configuredSwitchesCount_.attach([item](auto value) {
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SWITCHES", value).str();
+ });
+}
+
+void UniversalSwitchSettingsPagePresenter::createScanningGropu()
+{
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING");
+
+ auto &items = groups_.back().items_;
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN"},
+ std::string{},
+ [this](auto item) {
+ DEBUG("Auto scan");
+ },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.autoScanState_.value()));
+ auto item = items.back().get();
+ model_.autoScanState_.attach([item](auto value) {
+ item->widgetState_ = value;
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN_INT"},
+ TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.autoScanInterval_.value()).str(),
+ [this](auto item) {
+ DEBUG("Auto scan");
+ }));
+ item = items.back().get();
+ model_.autoScanInterval_.attach([item](auto value) {
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", value).str();
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_NUM_OF_SCANS"},
+ std::to_string(model_.autoScanLoopsNumber_.value()),
+ [this](auto item) {
+ DEBUG("Scan num");
+ }));
+ item = items.back().get();
+ model_.autoScanLoopsNumber_.attach([item](auto value) {
+ item->description_ = std::to_string(value);
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD"},
+ getScanMethodText(model_.scanMethod_.value()),
+ [this](auto item) {
+ DEBUG("Scan method");
+ }));
+ item = items.back().get();
+ model_.scanMethod_.attach([item, this](auto value) {
+ item->description_ = getScanMethodText(value);
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR"},
+ getScanDirectionText(model_.scanDirection_.value()),
+ [this](auto item) {
+ DEBUG("Scan dir");
+ }));
+ item = items.back().get();
+ model_.scanDirection_.attach([item, this](auto value) {
+ item->description_ = getScanDirectionText(value);
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_PT_SPEED"},
+ std::to_string(model_.pointScanSpeed_.value()),
+ [this](auto item) {
+ DEBUG("Scan point speed");
+ }));
+ item = items.back().get();
+ model_.pointScanSpeed_.attach([item](auto value) {
+ item->description_ = std::to_string(value);
+ });
+}
+
+void UniversalSwitchSettingsPagePresenter::createAdditionalSettingsGroup()
+{
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS");
+ auto &items = groups_.back().items_;
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_PAUSE_ON_FIRST"},
+ model_.pauseOnFirstState_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.pauseOnFirstTime_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ model_.pauseOnFirstState_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ model_.pauseOnFirstState_.value()));
+ auto item = items.back().get();
+ auto pauseOnFirstCb = [this, item](auto value) {
+ if (model_.pauseOnFirstState_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.pauseOnFirstTime_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ model_.pauseOnFirstState_.attach(pauseOnFirstCb);
+ model_.pauseOnFirstTime_.attach(pauseOnFirstCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_TAP_DURATION"},
+ model_.tapDurationState_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.tapDurationValue_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("tap duration widget");
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ DEBUG("tap duration");
+ model_.tapDurationState_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ model_.tapDurationState_.value()));
+ item = items.back().get();
+ auto tapDurationCb = [this, item](auto value) {
+ if (model_.tapDurationState_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.tapDurationValue_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ model_.tapDurationState_.attach(tapDurationCb);
+ model_.tapDurationValue_.attach(tapDurationCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_SGL_IACTION_INT"},
+ model_.singleInteractionIntervalState_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.singleInteractionIntervalValue_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("single interaction interval widget");
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ model_.singleInteractionIntervalState_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ model_.singleInteractionIntervalState_.value()));
+ item = items.back().get();
+ auto snglIntCb = [this, item](auto value) {
+ if (model_.singleInteractionIntervalState_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.singleInteractionIntervalValue_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ model_.singleInteractionIntervalState_.attach(snglIntCb);
+ model_.singleInteractionIntervalValue_.attach(snglIntCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP"},
+ model_.autoTapState_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.autoTapValue_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("auto tap widget");
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ model_.autoTapState_ = item->widgetState_.value();
+ DEBUG("auto tap");
+ },
+ std::function<void(ListItem * item)>{},
+ model_.autoTapState_.value()));
+ item = items.back().get();
+ auto autoTapCb = [this, item](auto value) {
+ if (model_.autoTapState_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.autoTapValue_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ model_.autoTapState_.attach(autoTapCb);
+ model_.autoTapValue_.attach(autoTapCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_MOVE_INT"},
+ model_.autoMoveState_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.autoMoveValue_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("auto move widget");
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ model_.autoMoveState_ = item->widgetState_.value();
+ DEBUG("auto move");
+ },
+ std::function<void(ListItem * item)>{},
+ model_.autoMoveState_.value()));
+ item = items.back().get();
+ auto autoMoveCb = [this, item](auto value) {
+ if (model_.autoMoveState_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", model_.autoMoveValue_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ model_.autoMoveState_.attach(autoMoveCb);
+ model_.autoMoveValue_.attach(autoMoveCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP_KBD"},
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP_KBD_SUB"},
+ [this](auto item) {
+ model_.autoTapKeyboardState_ = item->widgetState_.value();
+ },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.autoTapKeyboardState_.value()));
+ item = items.back().get();
+ model_.autoTapKeyboardState_.attach([item, this](auto value) {
+ item->widgetState_ = value;
+ });
+}
+
+void UniversalSwitchSettingsPagePresenter::createFeedbackGroup()
+{
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK");
+ auto &items = groups_.back().items_;
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL"},
+ getColorText(model_.cursorColor_.value()),
+ [this](auto item) {
+ DEBUG("cursor color widget");
+ }));
+ auto item = items.back().get();
+ model_.cursorColor_.attach([item, this](auto value) {
+ item->description_ = getColorText(value);
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND"},
+ model_.feedbackSoundState_.value() ? std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_ON"} : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("feedback sound widget");
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ DEBUG("feedback sound");
+ model_.feedbackSoundState_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ model_.feedbackSoundState_.value()));
+ item = items.back().get();
+ model_.feedbackSoundState_.attach([item, this](auto value) {
+ item->widgetState_ = value;
+ item->description_ = value ? "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_ON" : "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE"},
+ model_.feedbackVoiceState_.value() ? std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_ON"} : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("feedback sound widget");
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ DEBUG("auto move");
+ model_.feedbackVoiceState_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ model_.feedbackVoiceState_.value()));
+ item = items.back().get();
+ model_.feedbackVoiceState_.attach([item, this](auto value) {
+ item->widgetState_ = value;
+ item->description_ = value ? "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_ON" : "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE"},
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_SUB"},
+ [this](auto item) {
+ DEBUG("manage groups");
+ }));
+}
+
+std::string UniversalSwitchSettingsPagePresenter::getScanDirectionText(ScanDirection scanDirection)
+{
+ switch (scanDirection) {
+ case ScanDirection::TO_BOTTOM:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR_TB";
+ case ScanDirection::TO_TOP:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR_BT";
+ default:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_UNDEFINED";
+ }
+}
+
+std::string UniversalSwitchSettingsPagePresenter::getScanMethodText(ScanMethod scanMethod)
+{
+ switch (scanMethod) {
+ case ScanMethod::POINT:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD_POINT";
+ case ScanMethod::ROW:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD_ROW";
+ default:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_UNDEFINED";
+ }
+}
+
+std::string UniversalSwitchSettingsPagePresenter::getColorText(Color color)
+{
+ if (color == Color::RED)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_RED";
+ if (color == Color::ORANGE)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_ORANGE";
+ if (color == Color::YELLOW)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_YELLOW";
+ if (color == Color::GREEN)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_GREEN";
+ if (color == Color::BLUE)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_BLUE";
+ if (color == Color::GRAY)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_GRAY";
+
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_UNDEFINED";
+}
\ No newline at end of file