#include "UniversalSwitchLog.hpp"
-MenuItem::MenuItem(std::vector<std::string> names, std::string iconPath, std::string activityType, std::string key, std::string subMenuLabel)
+MenuItem::MenuItem(std::vector<std::string> names, std::string iconPath, std::string activityType,
+ std::string menuItemStateVconfKey, std::string subMenuLabel, std::string showingStateVconfKey)
: names(std::move(names)), iconPath(std::move(iconPath)), activityType(std::move(activityType)),
- key(std::move(key)), subMenuLabel(std::move(subMenuLabel)) {}
+ menuItemStateVconfKey(std::move(menuItemStateVconfKey)), subMenuLabel(std::move(subMenuLabel)), showingStateVconfKey(std::move(showingStateVconfKey)) {}
std::string MenuItem::getName() const
{
- return gettext(names[key.empty() ? 0 : getMessageIndex()].c_str());
+ return gettext(names[menuItemStateVconfKey.empty() ? 0 : getMessageIndex()].c_str());
}
std::string MenuItem::getIconPath() const
return activityType;
}
-std::string MenuItem::getVconfKey() const
+std::string MenuItem::getMenuItemStateVconfKey() const
{
- return key;
+ return menuItemStateVconfKey;
}
std::string MenuItem::getSubMenuLabel() const
return subMenuLabel;
}
+std::string MenuItem::getShowingStateVconfKey() const
+{
+ return showingStateVconfKey;
+}
+
int MenuItem::getMessageIndex() const /*works for Vconf keynodes having integer value*/
{
- auto val = VConfSingleton::instance().get(key.c_str(), 0) - 1; /*correct index starts from 1, 0 means error*/
+ auto val = VConfSingleton::instance().get(menuItemStateVconfKey.c_str(), 0) - 1; /*Int type vconf key. Correct index starts from 1, 0 means error*/
if (val >= static_cast<int>(names.size()) || val < 0) {
ERROR("Wrong message index from vconf, using default value");
return 0;
"TAP");
auto homeScreen = std::make_shared<MenuItem>(
std::vector<std::string> {"IDS_HOME_SCREEN"},
- defaultImg
+ defaultImg,
+ "",
+ "",
+ "",
+ "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_HOME_SCREEN_MENU_ITEM"
);
auto back = std::make_shared<MenuItem>(
std::vector<std::string> {"IDS_BACK"},
- defaultImg
+ defaultImg,
+ "",
+ "",
+ "",
+ "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_BACK_MENU_ITEM"
);
auto openCloseNotifications = std::make_shared<MenuItem>(
std::vector<std::string> {"IDS_OPEN_NOTI_PANEL", "IDS_CLOSE_NOTI_PANEL"},
);//TODO add settings key, when activity will be ready;
auto recentApps = std::make_shared<MenuItem>(
std::vector<std::string> {"IDS_RECENT_APPS"},
- defaultImg
+ defaultImg,
+ "",
+ "",
+ "",
+ "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_RECENT_APPS_MENU_ITEM"
);
auto accept = std::make_shared<MenuItem>(
std::vector<std::string> {"IDS_ACCEPT"},
defaultImg,
"SELECT",
"",
- "IDS_MENU_GESTURES"
+ "IDS_MENU_GESTURES",
+ "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_GESTURES_MENU_ITEM"
);
auto actions = std::make_shared<MenuItem>(
std::vector<std::string> {"IDS_ACTIONS"},
defaultImg,
"SELECT",
"",
- "IDS_MENU_ACTIONS"
+ "IDS_MENU_ACTIONS",
+ "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_ACTIONS_MENU_ITEM"
);
auto settings = std::make_shared<MenuItem>(
std::vector<std::string> {"IDS_SETTINGS"},
defaultImg,
"SELECT",
"",
- "IDS_MENU_SETTINGS"
+ "IDS_MENU_SETTINGS",
+ "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_SETTINGS_MENU_ITEM"
);
auto buttonsAndKeys = std::make_shared<MenuItem>(
std::vector<std::string> {"IDS_BUTTONS_AND_KEYS"},
defaultImg,
"SELECT",
"",
- "IDS_MENU_BUTTONS_KEYS"
+ "IDS_MENU_BUTTONS_KEYS",
+ "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_BUTTONS_AND_KEYS_MENU_ITEM"
);
auto editText = std::make_shared<MenuItem>(
std::vector<std::string> {"IDS_EDIT_TEXT"},
addToMap("IDS_MENU_GRANULARITY", {character, word, line, paragraph});
}
-std::vector<std::shared_ptr<MenuItem>> MenuMap::find(const std::string &menuLabel)
+std::vector<std::shared_ptr<MenuItem>> MenuMap::find(std::string menuLabel)
{
+
+ if (menuLabel.find("IDS_MENU_MAIN") != std::string::npos &&
+ !VConfSingleton::instance().get("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_CONTEXTUAL_MENU", false))
+ menuLabel = "IDS_MENU_MAIN_NORMAL";
+
std::vector<std::shared_ptr<MenuItem>> foundMenuItems;
auto keyRange = map.equal_range(menuLabel);
- for (auto ii = keyRange.first; ii != keyRange.second; ++ii)
- foundMenuItems.push_back(ii->second);
+ for (auto ii = keyRange.first; ii != keyRange.second; ++ii) {
+ const auto &showingStateVconfKey = ii->second->getShowingStateVconfKey();
+ if (showingStateVconfKey.empty() || VConfSingleton::instance().get(showingStateVconfKey.c_str(), false))
+ foundMenuItems.push_back(ii->second);
+ }
return foundMenuItems;
}
{
public:
static constexpr const char *activityType = "SELECT";
- SelectActivity(): UIActivity(activityType), popup(nullptr, evas_object_del),
- virtualBackButton(nullptr, evas_object_del), timer(nullptr), autoTapWaitingPeriod(AUTO_TAP_WAITING_PERIOD_DEFAULT_TIME) {}
+ SelectActivity();
~SelectActivity();
bool process() override;
void createMenuContent();
void addBackButton(Evas_Object *);
void refreshMenu();
- void getAutoTapWaitingPeriodCb(int);
+ void setAutoTapWaitingPeriodCb(int);
void navigateThroughSubMenuOrCreateActivityChangeRequest(MenuItem *);
void navigateThroughSubMenu(const std::string &);
void navigateBack();
int autoTapWaitingPeriod;
};
+SelectActivity::SelectActivity(): UIActivity(activityType), popup(nullptr, evas_object_del),
+ virtualBackButton(nullptr, evas_object_del), timer(nullptr), autoTapWaitingPeriod(AUTO_TAP_WAITING_PERIOD_DEFAULT_TIME) {}
+
SelectActivity::~SelectActivity()
{
removeMenu();
}
realUiElement = elem;
- if (VConfSingleton::instance().get(AUTO_TAP_KEY, 1) - 1) {
+ if (VConfSingleton::instance().get(AUTO_TAP_KEY, 1) == 2) {
VConfSingleton::instance().registerAndGet<int>(AUTO_TAP_WAITING_PERIOD_KEY, AUTO_TAP_WAITING_PERIOD_DEFAULT_TIME,
- std::bind(&SelectActivity::getAutoTapWaitingPeriodCb, this, std::placeholders::_1));
+ std::bind(&SelectActivity::setAutoTapWaitingPeriodCb, this, std::placeholders::_1));
timer = ecore_timer_add(autoTapWaitingPeriod, autoTapCb, this);
return;
}
createMenu();
}
-void SelectActivity::getAutoTapWaitingPeriodCb(int value)
+void SelectActivity::setAutoTapWaitingPeriodCb(int value)
{
autoTapWaitingPeriod = value;
}
if (object && menuItems.back()->getName().empty())
elm_atspi_accessible_can_highlight_set(object, EINA_FALSE);
- if (!menuItems.back()->getVconfKey().empty()) {
- callbackHandle.push(VConfSingleton::instance().registerKeyChangedCb<int>(menuItems.back()->getVconfKey(),
+ if (!menuItems.back()->getMenuItemStateVconfKey().empty()) {
+ callbackHandle.push(VConfSingleton::instance().registerKeyChangedCb<int>(menuItems.back()->getMenuItemStateVconfKey(),
std::bind(&SelectActivity::refreshMenu, this)));
}
menuItems.pop_back();
class MenuBuilderTest : public ::testing::Test
{
public:
- void setKeys(int val)
+ void setIntKeys(int val)
{
VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCROLL", val);
VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD", val);
VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GRANULARITY_UNIT", val);
}
+ void setBoolKeys(bool val)
+ {
+ VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_CONTEXTUAL_MENU", val);
+ VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_GESTURES_MENU_ITEM", val);
+ VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_ACTIONS_MENU_ITEM", val);
+ VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_SETTINGS_MENU_ITEM", val);
+ VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_RECENT_APPS_MENU_ITEM", val);
+ VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_HOME_SCREEN_MENU_ITEM", val);
+ VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_BACK_MENU_ITEM", val);
+ VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_BUTTONS_AND_KEYS_MENU_ITEM", val);
+ }
+
void SetUp()
{
- setKeys(1);
+ setIntKeys(1);
+ setBoolKeys(true);
}
void TearDown()
{
- setKeys(1);
+ SetUp();
}
- void testMenuContent(std::string menuName, std::vector<std::string> expectedMenuItemsNames, std::vector<std::string> expectedMenuItemsKeys = {})
+ void testMenuContent(const std::string &menuName, std::vector<std::string> expectedMenuItemsNames, std::vector<std::string> expectedMenuItemsKeys = {})
{
auto actualMenuItems = Singleton<MenuMap>::instance().find(menuName);
ASSERT_EQ(actualMenuItems.size(), expectedMenuItemsNames.size());
for (auto ii = 0u; ii < actualMenuItems.size(); ++ii) {
EXPECT_EQ(actualMenuItems[ii]->getName(), expectedMenuItemsNames[actualMenuItems.size() - 1 - ii]);
if (!expectedMenuItemsKeys.empty())
- EXPECT_EQ(actualMenuItems[ii]->getVconfKey(), expectedMenuItemsKeys[actualMenuItems.size() - 1 - ii]);
+ EXPECT_EQ(actualMenuItems[ii]->getMenuItemStateVconfKey(), expectedMenuItemsKeys[actualMenuItems.size() - 1 - ii]);
}
}
+
+ void testIfMenuMainIsEqualToNormal(const std::string &menuName)
+ {
+ testMenuContent(menuName, {
+ "IDS_TAP", "IDS_GESTURES", "IDS_ACTIONS", "IDS_SETTINGS", "IDS_RECENT_APPS",
+ "IDS_HOME_SCREEN", "IDS_BACK", "IDS_BUTTONS_AND_KEYS"
+ });
+ }
};
-TEST_F(MenuBuilderTest, checkContentOfMenuMainNormal)
+TEST_F(MenuBuilderTest, testContentOfMenuMainNormal)
{
- testMenuContent("IDS_MENU_MAIN_NORMAL", {
- "IDS_TAP", "IDS_GESTURES", "IDS_ACTIONS", "IDS_SETTINGS", "IDS_RECENT_APPS",
- "IDS_HOME_SCREEN", "IDS_BACK", "IDS_BUTTONS_AND_KEYS"
- });
+ testIfMenuMainIsEqualToNormal("IDS_MENU_MAIN_NORMAL");
}
-TEST_F(MenuBuilderTest, checkContentOfMenuMainHomeApps)
+TEST_F(MenuBuilderTest, testImpactOfContextualMenuVconfValueOnMenuMain)
+{
+ VConfSingleton::instance().set("__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SHOW_CONTEXTUAL_MENU", false);
+ testIfMenuMainIsEqualToNormal("IDS_MENU_MAIN_HOME_APPS");
+ testIfMenuMainIsEqualToNormal("IDS_MENU_MAIN_SLIDER");
+ testIfMenuMainIsEqualToNormal("IDS_MENU_MAIN_EDITABLE_TEXT");
+ testIfMenuMainIsEqualToNormal("IDS_MENU_MAIN_SIP");
+ testIfMenuMainIsEqualToNormal("IDS_MENU_MAIN_INCOMING_CALL");
+ testIfMenuMainIsEqualToNormal("IDS_MENU_MAIN_DURING_CALL");
+}
+
+TEST_F(MenuBuilderTest, testHidingMenuItems)
+{
+ testIfMenuMainIsEqualToNormal("IDS_MENU_MAIN_NORMAL");
+ setBoolKeys(false);
+ testMenuContent("IDS_MENU_MAIN_NORMAL", {"IDS_TAP"});
+}
+
+TEST_F(MenuBuilderTest, testContentOfMenuMainHomeApps)
{
testMenuContent("IDS_MENU_MAIN_HOME_APPS", {
"IDS_TAP", "IDS_LEFT_PAGE", "IDS_RIGHT_PAGE", "", "IDS_GESTURES", "IDS_ACTIONS", "IDS_SETTINGS",
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuMainSlider)
+TEST_F(MenuBuilderTest, testContentOfMenuMainSlider)
{
testMenuContent("IDS_MENU_MAIN_SLIDER", {
"IDS_INCREASE", "IDS_DECREASE", "", "", "IDS_TAP", "IDS_GESTURES", "IDS_ACTIONS",
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuMainEditableText)
+TEST_F(MenuBuilderTest, testContentOfMenuMainEditableText)
{
testMenuContent("IDS_MENU_MAIN_EDITABLE_TEXT", {
"IDS_TAP", "IDS_EDIT_TEXT", "", "", "IDS_GESTURES", "IDS_ACTIONS",
});
}
-TEST_F(MenuBuilderTest, checkContentOfMainMenuSip)
+TEST_F(MenuBuilderTest, testContentOfMainMenuSip)
{
testMenuContent("IDS_MENU_MAIN_SIP", {
"IDS_TAP", "IDS_TOUCH_AND_HOLD"
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuMainIncomingCall)
+TEST_F(MenuBuilderTest, testContentOfMenuMainIncomingCall)
{
testMenuContent("IDS_MENU_MAIN_INCOMING_CALL", {
"IDS_TAP", "IDS_ACCEPT", "IDS_REJECT", "", "IDS_GESTURES", "IDS_ACTIONS", "IDS_SETTINGS",
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuMainDuringCall)
+TEST_F(MenuBuilderTest, testContentOfMenuMainDuringCall)
{
testMenuContent("IDS_MENU_MAIN_DURING_CALL", {
"IDS_TAP", "IDS_END_CALL", "", "", "IDS_GESTURES", "IDS_ACTIONS", "IDS_SETTINGS",
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuGestures)
+TEST_F(MenuBuilderTest, testContentOfMenuGestures)
{
testMenuContent("IDS_MENU_GESTURES", {
"IDS_SWIPE_UP", "IDS_SWIPE_DOWN", "IDS_SWIPE_LEFT", "IDS_SWIPE_RIGHT",
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuActions)
+TEST_F(MenuBuilderTest, testContentOfMenuActions)
{
testMenuContent("IDS_MENU_ACTIONS", {
"IDS_ZOOM_IN", "IDS_ZOOM_OUT", "IDS_SCREEN_ROTATION", "IDS_SOUND",
}/*TODO complete test when sound, and noti. panel activities will be ready*/);
}
-TEST_F(MenuBuilderTest, checkContentOfMenuRotateScreen)
+TEST_F(MenuBuilderTest, testContentOfMenuRotateScreen)
{
testMenuContent("IDS_MENU_ROTATE_SCREEN", {
"IDS_ROTATE_LEFT", "IDS_ROTATE_TO_PORTRAIT", "IDS_ROTATE_RIGHT"
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuSettings)
+TEST_F(MenuBuilderTest, testContentOfMenuSettings)
{
testMenuContent("IDS_MENU_SETTINGS_AUTO_SCAN_OFF", {
"IDS_ROW_SCAN", "IDS_BOTTOM_TO_TOP", "IDS_TURN_ON_SOUND", "IDS_TURN_ON_VOICE", "IDS_MORE_SETTINGS"
"__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE",
""
});
- setKeys(2);
+ setIntKeys(2);
testMenuContent("IDS_MENU_SETTINGS_AUTO_SCAN_ON", {
"IDS_SPEED_UP_SCANING", "IDS_SLOW_DOWN_SCANING", "IDS_POINT_SCAN", "IDS_TOP_TO_BOTTOM",
"IDS_TURN_OFF_SOUND", "IDS_TURN_OFF_VOICE", "IDS_MORE_SETTINGS"
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuButtonsKeys)
+TEST_F(MenuBuilderTest, testContentOfMenuButtonsKeys)
{
testMenuContent("IDS_MENU_BUTTONS_KEYS", {
"IDS_RINGTONE_VOLUME_INC", "IDS_RINGTONE_VOLUME_DEC", "IDS_MEDIA_VOLUME_INC", "IDS_MEDIA_VOLUME_DEC",
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuEditText)
+TEST_F(MenuBuilderTest, testContentOfMenuEditText)
{
testMenuContent("IDS_MENU_EDIT_TEXT", {
"IDS_SELECTION_MODE", "IDS_SELECT_ALL", "IDS_PREVIOUS_CHARACTER", "IDS_NEXT_CHARACTER",
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuAutoScroll)
+TEST_F(MenuBuilderTest, testContentOfMenuAutoScroll)
{
testMenuContent("IDS_MENU_AUTO_SCROLL_OFF", {
"IDS_TURN_ON_AUTO_SCROLL", "IDS_SCROLL_UP", "IDS_SCROLL_DOWN", "IDS_SCROLL_TOP"
"__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCROLL",
"", "", ""
});
- setKeys(2);
+ setIntKeys(2);
testMenuContent("IDS_MENU_AUTO_SCROLL_ON", {
"IDS_TURN_OFF_AUTO_SCROLL", "IDS_SPEED_UP_AUTO_SCROLL", "IDS_SLOW_DOWN_AUTO_SCROLL"
}, {
});
}
-TEST_F(MenuBuilderTest, checkContentOfMenuGranularity)
+TEST_F(MenuBuilderTest, testContentOfMenuGranularity)
{
testMenuContent("IDS_MENU_GRANULARITY", {
"IDS_CHARACTER", "IDS_WORD", "IDS_LINE", "IDS_PARAGRAPH"
});
}
-TEST_F(MenuBuilderTest, checkAllGranularityOptions)
+TEST_F(MenuBuilderTest, testAllGranularityOptions)
{
auto actualMenuItems = Singleton<MenuMap>::instance().find("IDS_MENU_EDIT_TEXT");
auto next = actualMenuItems[4];
auto prev = actualMenuItems[5];
auto requiredStates = std::vector<std::string> {"CHARACTER", "WORD", "LINE", "PARAGRAPH"};
for (auto ii = 0u; ii <= requiredStates.size(); ++ii) {
- setKeys(ii + 1);
+ setIntKeys(ii + 1);
EXPECT_EQ(prev->getName(), "IDS_PREVIOUS_" + requiredStates[ii % requiredStates.size()]);
EXPECT_EQ(next->getName(), "IDS_NEXT_" + requiredStates[ii % requiredStates.size()]);
}
- setKeys(0xdeadbeef);
+ setIntKeys(0xdeadbeef);
EXPECT_EQ(prev->getName(), "IDS_PREVIOUS_" + requiredStates[0]);
EXPECT_EQ(next->getName(), "IDS_NEXT_" + requiredStates[0]);
}
-TEST_F(MenuBuilderTest, checkTranslations)
+TEST_F(MenuBuilderTest, testTranslations)
{
auto menuItem = Singleton<MenuMap>::instance().find("IDS_MENU_MAIN_NORMAL").back();
EXPECT_EQ(menuItem->getName(), "IDS_TAP");
textdomain(PROJECT_NAME);
setlocale(LC_ALL, "en_US.UTF-8");
EXPECT_EQ(menuItem->getName(), "Tap");
-}
+}
\ No newline at end of file