SelectActivity 63/135663/26
authorPawel Kurowski <p.kurowski2@samsung.com>
Thu, 20 Jul 2017 14:47:01 +0000 (16:47 +0200)
committerPawel Kurowski <p.kurowski2@samsung.com>
Mon, 7 Aug 2017 15:07:26 +0000 (17:07 +0200)
Change-Id: I81449851b7a9012ba4efbc894f9fb3f11de58b9f

17 files changed:
CMakeLists.txt
org.tizen.universal-switch.xml
packaging/org.tizen.universal-switch.spec
res/icons/back.png [new file with mode: 0644]
res/po/en_US.po
res/universal-switch.edc [new file with mode: 0644]
src/Activity.cpp
src/Activity.hpp
src/ActivityChangeRequest.cpp
src/ActivityChangeRequest.hpp
src/MenuBuilder.cpp
src/MenuBuilder.hpp
src/SelectActivity.cpp
src/SwitchManager.cpp
src/UIElement.cpp
src/UIElement.hpp
tests/MenuBuilderTests.cpp

index b5a2cd4..2cd95ae 100644 (file)
@@ -12,6 +12,7 @@ option(TESTS "enable/disable universal switch tests" ON)
 pkg_check_modules(pkgs REQUIRED
     capi-appfw-service-application
     capi-appfw-application
+    capi-telephony
     elementary
     ecore
     sqlite3
@@ -34,16 +35,23 @@ SET(LOCALE_DIR "${RES_DIR}/locale")
 ADD_DEFINITIONS("-DICONS_DIR=\"${ICONS_DIR}\"")
 ADD_DEFINITIONS("-DLOCALE_DIR=\"${LOCALE_DIR}\"")
 ADD_DEFINITIONS("-DPROJECT_NAME=\"${PROJECT_NAME}\"")
-
-INSTALL(DIRECTORY res/icons/ DESTINATION ${ICONS_DIR} FILES_MATCHING PATTERN "*.png")
+ADD_DEFINITIONS("-DUNIVERSAL_SWITCH_EDJ=\"${RES_DIR}/${PROJECT_NAME}.edj\"")
 
 ADD_DEFINITIONS("-DDEBUG_PRINTING_LEVEL=DEBUG_PRINTING_LEVEL_DEBUG")
 
-# Install Manifest File
-INSTALL(FILES org.tizen.universal-switch.xml DESTINATION ${TZ_SYS_RO_PACKAGES})
-
 ADD_SUBDIRECTORY(src)
 ADD_SUBDIRECTORY(res/po)
 if(TESTS)
  ADD_SUBDIRECTORY(tests)
-endif()
\ No newline at end of file
+endif()
+
+ADD_CUSTOM_TARGET(${PROJECT_NAME}.edj
+       COMMAND edje_cc -no-save res/${PROJECT_NAME}.edc ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.edj
+       DEPENDS res/${PROJECT_NAME}.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} ${PROJECT_NAME}.edj)
+
+# Install Manifest File
+INSTALL(DIRECTORY res/icons/ DESTINATION ${ICONS_DIR} FILES_MATCHING PATTERN "*.png")
+INSTALL(FILES org.tizen.universal-switch.xml DESTINATION ${TZ_SYS_RO_PACKAGES})
+INSTALL(FILES ${PROJECT_NAME}.edj DESTINATION ${RES_DIR})
index 354dece..66f2fa0 100644 (file)
@@ -11,6 +11,7 @@
     </ui-application>
     <privileges>
         <privilege>http://tizen.org/privilege/window.priority.set</privilege>
+        <privilege>http://tizen.org/privilege/telephony</privilege>
     </privileges>
 
 </manifest>
index 9a404ae..2998e15 100644 (file)
@@ -13,6 +13,7 @@ BuildRequires:  cmake
 BuildRequires:  gettext-tools
 BuildRequires:  pkgconfig(capi-appfw-service-application)
 BuildRequires:  pkgconfig(capi-appfw-application)
+BuildRequires:  pkgconfig(capi-telephony)
 BuildRequires:  pkgconfig(ecore)
 BuildRequires:  pkgconfig(elementary)
 BuildRequires:  pkgconfig(efl-extension)
diff --git a/res/icons/back.png b/res/icons/back.png
new file mode 100644 (file)
index 0000000..408188a
Binary files /dev/null and b/res/icons/back.png differ
index b158829..80f5b3e 100644 (file)
@@ -331,6 +331,46 @@ msgstr "Edit text"
 msgid "IDS_GRANULARITY_SETTINGS"
 msgstr "Granularity settings"
 
+
+msgid "IDS_MENU_MAIN"
+msgstr "Main menu"
+
+
+msgid "IDS_MENU_GESTURES"
+msgstr "Gestures menu"
+
+
+msgid "IDS_MENU_ACTIONS"
+msgstr "Actions menu"
+
+
+
+msgid "IDS_MENU_ROTATE_SCREEN"
+msgstr "Rotate screen menu"
+
+
+msgid "IDS_MENU_SETTINGS"
+msgstr "Settings menu"
+
+
+msgid "IDS_MENU_BUTTONS_KEYS"
+msgstr "Buttons and keys menu"
+
+msgid "IDS_MENU_EDIT_TEXT"
+msgstr "Edit text menu"
+
+
+msgid "IDS_MENU_AUTO_SCROLL"
+msgstr "Auto scroll menu"
+
+msgid "IDS_MENU_GRANULARITY"
+msgstr "Granularity menu"
+
+
+msgid "IDS_NAVIGATE_UP"
+msgstr "Navigate up"
+
+
 #ACTIVITIES
 
 msgid "IDS_ACTIVITY_NAME_AUTO_SCAN_ON"
diff --git a/res/universal-switch.edc b/res/universal-switch.edc
new file mode 100644 (file)
index 0000000..6c843e5
--- /dev/null
@@ -0,0 +1,232 @@
+#define ALPHA 150
+#define EDCDEBUG(PART_TEXT, R, G, B)   part { type: RECT; \
+         scale: 1; \
+         description { state: "default" 0.0; \
+             rel1.to: PART_TEXT; \
+            rel2.to: PART_TEXT; \
+            color: R G B ALPHA; \
+         } \
+}\
+
+
+collections {
+group { name: "elm/notify/block_events/popup/universalSwitchTransparent";
+   parts {
+      part { name: "base"; type: RECT;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+         description { state: "clicked" 0.0;
+            color: 0 0 0 192;
+         }
+      }
+      program {
+         signal: "mouse,down,1"; source: "base";
+         action: SIGNAL_EMIT "elm,action,click" "elm";
+         after: "click1";
+      }
+      program { name: "click1";
+         action: STATE_SET "clicked" 0.0;
+         target: "base";
+         transition: SINUSOIDAL 0.2;
+      }
+      program {
+         signal: "mouse,up,1"; source: "base";
+         action: STATE_SET "default" 0.0;
+         target: "base";
+         transition: DECELERATE 0.5;
+      }
+   }
+}
+
+group { name: "elm/popup/base/universalSwitchTransparent";
+   parts {
+      part { name: "base"; type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 240 0;
+            color: 255 255 255 ALPHA;
+         }
+      }
+      part { name: "elm.swallow.back"; type: SWALLOW;
+         scale: 0;
+         description { state: "default" 0.0;
+            fixed: 0 1;
+            visible: 0;
+         }
+         description { state: "back_visible" 0.0;
+            inherit: "default" 0.0;
+            align: 0.0 0.0;
+            min: 0 50;
+            max: -1 50;
+            visible: 1;
+         }
+      }
+      part { name: "elm.swallow.content"; type: SWALLOW;
+      scale: 0;
+         description { state: "default" 0.0;
+         }
+         description { state: "back_visible" 0.0;
+            inherit: "default" 0.0;
+            rel1.relative: 0.0 1.0;
+            rel1.to_y: "elm.swallow.back";
+            rel2.relative: 1.0 1.0;
+         }
+
+      }
+   }
+   programs {
+      program {
+         signal: "elm,state,back,visible"; source: "elm";
+         action: STATE_SET "back_visible" 0.0;
+         target: "elm.swallow.back";
+         target: "elm.swallow.content";
+      }
+      program {
+         signal: "elm,state,back,hidden"; source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.back";
+         target: "elm.swallow.content";
+      }
+   }
+}
+
+group { name: "universalSwitchTransparentLayout";
+   inherit: "elm/popup/base/universalSwitchTransparent";
+}
+
+group { name: "elm/notify/center/universalSwitchTransparent";
+   data.item: "hide_finished_signal" "on";
+   parts {
+      part { name: "clip"; type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 0;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part { name: "base"; type: RECT;
+         description { state: "default" 0.0;
+            rel1.offset: 10 10;
+            rel2.offset: -10 -10;
+            rel1.relative: 0.0 0.0;
+            rel2.relative: 1.0 1.0;
+            color: 0 0 0 0;
+         }
+      }
+      part { name: "elm.swallow.content"; type: SWALLOW;
+         clip_to: "clip";
+         description { state: "default" 0.0;
+            rel1.to: "base";
+            rel1.offset: 12 12;
+            rel2.to: "base";
+            rel2.offset: -13 -13;
+         }
+      }
+   }
+   programs {
+      program {
+         signal: "show"; source: "";
+         action: STATE_SET "visible" 0.0;
+         target: "clip";
+         target: "base";
+         transition: DECELERATE 0.5;
+      }
+      program {
+         signal: "hide"; source: "";
+         action: STATE_SET "default" 0.0;
+         target: "clip";
+         target: "base";
+      }
+      program {
+         signal: "elm,state,hide"; source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "clip";
+         target: "base";
+         transition: DECELERATE 0.5;
+      }
+   }
+}
+
+group { name: "elm/notify/center/popup/universalSwitchTransparent";
+   inherit: "elm/notify/center/universalSwitchTransparent";
+}
+
+group { name: "elm/button/base/universalSwitchTransparent";
+   parts {
+      spacer { "base";
+         desc { "default";
+            rel1.offset: 0 0;
+            rel2.offset: 0 0;
+         }
+      }
+      rect { "icon_clip";
+         desc { "default";
+         }
+      }
+      swallow { "elm.swallow.content"; nomouse;
+         clip_to: "icon_clip";
+         desc { "default";
+            fixed: 1 0;
+            align: 0.0 0.5;
+            rel1.to: "base";
+            rel2.relative: 0.0 1.0;
+
+            rel2.to: "base";
+            visible: 1;
+                        aspect: 1.0 1.0;
+         }
+         desc { "visible";
+            inherit: "default";
+            fixed: 1 0;
+            aspect: 1.0 1.0;
+            visible: 1;
+         }
+         desc { "icononly";
+            inherit: "default";
+            fixed: 0 0;
+            align: 0.5 0.5;
+            rel2.relative: 1.0 1.0;
+            rel2.offset: -1 -5;
+            visible: 1;
+         }
+      }
+      text { "elm.text"; nomouse;
+         scale: 1;
+         desc { "default";
+            rel1.relative: 0.1 0.0;
+            rel2.relative: 1.0 1.0;
+            color: 0 0 0 255;
+            color2: 0 0 0 0;
+            color3: 0 0 0 0;
+            text
+            {
+                font: "Tizen:style=Regular";
+                align: 0.0 0.5;
+                size: 12;
+                text_class: "tizen";
+            }
+            visible: 1;
+         }
+      }
+      rect { "event";
+         desc { "default";
+            color: 0 0 0 0;
+         }
+         desc { "disabled";
+            inherit: "default";
+            visible: 0;
+         }
+      }
+   }
+   programs {
+       program {
+            signal: "mouse,clicked,1"; source: "event";
+            action: SIGNAL_EMIT "elm,action,click" "elm";
+      }
+   }
+}
+
+}
index b0b2467..5d62ef2 100644 (file)
@@ -1,10 +1,15 @@
 #include "Activity.hpp"
 
 Activity::Activity(const std::string &activityType)
-       : type(activityType)
+       : completed(false), type(activityType)
 {}
 
 std::string Activity::getType()
 {
        return type;
 }
+
+bool Activity::isCompleted()
+{
+       return completed;
+}
index 3866f70..d9b52cc 100644 (file)
@@ -19,6 +19,11 @@ public:
 
        virtual bool process() = 0;
 
+       virtual bool isCompleted();
+
+protected:
+       bool completed;
+
 private:
        std::string type;
 };
index 337e647..77a0ed5 100644 (file)
@@ -13,3 +13,8 @@ std::shared_ptr<UIElement> ActivityChangeRequest::getUIElement()
 {
        return uiElement;
 }
+
+bool ActivityChangeRequest::hasUIElement()
+{
+       return uiElement != nullptr;
+}
index 080c883..6cb3994 100644 (file)
@@ -12,6 +12,7 @@ public:
        ActivityChangeRequest(const std::string &activityType, const std::shared_ptr<UIElement> &uiElement);
        std::string getActivityType();
        std::shared_ptr<UIElement> getUIElement();
+       bool hasUIElement();
 
 protected:
        std::string activityType;
index 9f7c60f..9f27551 100644 (file)
@@ -3,32 +3,38 @@
 #include "UniversalSwitchLog.hpp"
 
 
-MenuItem::MenuItem(std::vector<std::string> names, std::string imgPath, std::string activityType, std::string key)
-       : names(std::move(names)), imgPath(std::move(imgPath)), activityType(std::move(activityType)), key(std::move(key)) {}
+MenuItem::MenuItem(std::vector<std::string> names, std::string iconPath, std::string activityType, std::string key, std::string subMenuLabel)
+       : names(std::move(names)), iconPath(std::move(iconPath)), activityType(std::move(activityType)),
+         key(std::move(key)), subMenuLabel(std::move(subMenuLabel)) {}
 
-std::string MenuItem::getName()
+std::string MenuItem::getName() const
 {
        return gettext(names[key.empty() ? 0 : getMessageIndex()].c_str());
 }
 
-std::string MenuItem::getIcon()
+std::string MenuItem::getIconPath() const
 {
-       return imgPath;
+       return iconPath;
 }
 
-std::string MenuItem::getActivityType()
+std::string MenuItem::getActivityType() const
 {
        return activityType;
 }
 
-std::string MenuItem::getKey()
+std::string MenuItem::getVconfKey() const
 {
        return key;
 }
 
-int MenuItem::getMessageIndex()  //works for Universal Switch keys, TODO check system keys
+std::string MenuItem::getSubMenuLabel() const
 {
-       auto val = VConfSingleton::instance().get(key.c_str(), 0) - 1;
+       return subMenuLabel;
+}
+
+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*/
        if (val >= static_cast<int>(names.size()) || val < 0) {
                ERROR("Wrong message index from vconf, using default value");
                return 0;
@@ -42,16 +48,16 @@ MenuMap::MenuMap()
        std::string defaultImg = std::string(ICONS_DIR) + std::string("/tizen.png");
        auto tap                                        =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_TAP"},
-                                                                               defaultImg
-                                                                       );
+                                                                               defaultImg,
+                                                                               "TAP");
        auto homeScreen                         =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_HOME_SCREEN"},
                                                                                defaultImg
                                                                        );
        auto back                                       =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_BACK"},
-                                                                               defaultImg,
-                                                                               "SELECT");
+                                                                               defaultImg
+                                                                       );
        auto openCloseNotifications     =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_OPEN_NOTI_PANEL", "IDS_CLOSE_NOTI_PANEL"},
                                                                                defaultImg
@@ -297,79 +303,103 @@ MenuMap::MenuMap()
                                                                        );
        auto autoScroll                         =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_AUTO_SCROLL"},
-                                                                               defaultImg
+                                                                               defaultImg,
+                                                                               "SELECT",
+                                                                               "",
+                                                                               "IDS_MENU_AUTO_SCROLL"
                                                                        );
        auto ScreenRotation                     =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_SCREEN_ROTATION"},
-                                                                               defaultImg
+                                                                               defaultImg,
+                                                                               "SELECT",
+                                                                               "",
+                                                                               "IDS_MENU_ROTATE_SCREEN"
                                                                        );
        auto gestures                           =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_GESTURES"},
-                                                                               defaultImg
+                                                                               defaultImg,
+                                                                               "SELECT",
+                                                                               "",
+                                                                               "IDS_MENU_GESTURES"
                                                                        );
        auto actions                            =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_ACTIONS"},
-                                                                               defaultImg
+                                                                               defaultImg,
+                                                                               "SELECT",
+                                                                               "",
+                                                                               "IDS_MENU_ACTIONS"
                                                                        );
        auto settings                           =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_SETTINGS"},
-                                                                               defaultImg
+                                                                               defaultImg,
+                                                                               "SELECT",
+                                                                               "",
+                                                                               "IDS_MENU_SETTINGS"
                                                                        );
        auto buttonsAndKeys                     =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_BUTTONS_AND_KEYS"},
-                                                                               defaultImg
+                                                                               defaultImg,
+                                                                               "SELECT",
+                                                                               "",
+                                                                               "IDS_MENU_BUTTONS_KEYS"
                                                                        );
        auto editText                           =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_EDIT_TEXT"},
-                                                                               defaultImg
+                                                                               defaultImg,
+                                                                               "SELECT",
+                                                                               "",
+                                                                               "IDS_MENU_EDIT_TEXT"
                                                                        );
        auto granularitySettings        =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {"IDS_GRANULARITY_SETTINGS"},
-                                                                               defaultImg
+                                                                               defaultImg,
+                                                                               "SELECT",
+                                                                               "",
+                                                                               "IDS_MENU_GRANULARITY"
                                                                        );
        auto emptyItem                          =       std::make_shared<MenuItem>(
                                                                                std::vector<std::string> {""},
                                                                                "");
 
 
-       addToMap("menu-main-normal",                    {tap, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
-       addToMap("menu-main-home-apps",                 {tap, leftPage, rightPage, emptyItem, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
-       addToMap("menu-main-slider",                    {increase, decrease, emptyItem, emptyItem, tap, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
-       addToMap("menu-main-editable-text",             {tap, editText, emptyItem, emptyItem, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
-       addToMap("menu-main-sip",                               {tap, touchHold});
-       addToMap("menu-main-incoming-call",             {tap, accept, reject, emptyItem, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
-       addToMap("menu-main-during-call",               {tap, endCall, emptyItem, emptyItem, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
-       addToMap("menu-gestures",                               {swipeUp, swipeDown, swipeLeft, swipeRight, autoScroll, touchHold, drag, touchHoldThenDrag});
-       addToMap("menu-actions",                                {zoomIn, zoomOut, ScreenRotation, soundVibrationMute, lock, openCloseNotifications, captureScreenshot});
-       addToMap("menu-rotate-screen",                  {rotateLeft, rotateToPortrait, rotateRight});
-       addToMap("menu-settings-auto-scan-off", {pointRowScan, scanMethod, turnOnOffSound, turnOnOffVoice, moreSettings});
-       addToMap("menu-settings-auto-scan-on",  {speedUpScaning, slowDownScaning, pointRowScan, scanMethod, turnOnOffSound, turnOnOffVoice, moreSettings});
-       addToMap("menu-buttons-keys",                   {ringtoneVolIncrease, ringtoneVolDecrease, mediaVolumeIncrease, mediaVolumeDecrease,
-                        tapHomeButtonx2, tapHomeButtonx3, viewPowerKeyMenu
-                                                                       });
-       addToMap("menu-buttons-keys-wifi",              {notiVolumeIncrease, notiVolumeDecrease, mediaVolumeIncrease, mediaVolumeDecrease,
+       addToMap("IDS_MENU_MAIN_NORMAL",                        {tap, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
+       addToMap("IDS_MENU_MAIN_HOME_APPS",                     {tap, leftPage, rightPage, emptyItem, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
+       addToMap("IDS_MENU_MAIN_SLIDER",                        {increase, decrease, emptyItem, emptyItem, tap, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
+       addToMap("IDS_MENU_MAIN_EDITABLE_TEXT",         {tap, editText, emptyItem, emptyItem, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
+       addToMap("IDS_MENU_MAIN_SIP",                           {tap, touchHold});
+       addToMap("IDS_MENU_MAIN_INCOMING_CALL",         {tap, accept, reject, emptyItem, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
+       addToMap("IDS_MENU_MAIN_DURING_CALL",           {tap, endCall, emptyItem, emptyItem, gestures, actions, settings, recentApps, homeScreen, back, buttonsAndKeys});
+       addToMap("IDS_MENU_GESTURES",                           {swipeUp, swipeDown, swipeLeft, swipeRight, autoScroll, touchHold, drag, touchHoldThenDrag});
+       addToMap("IDS_MENU_ACTIONS",                            {zoomIn, zoomOut, ScreenRotation, soundVibrationMute, lock, openCloseNotifications, captureScreenshot});
+       addToMap("IDS_MENU_ROTATE_SCREEN",                      {rotateLeft, rotateToPortrait, rotateRight});
+       addToMap("IDS_MENU_SETTINGS_AUTO_SCAN_OFF",     {pointRowScan, scanMethod, turnOnOffSound, turnOnOffVoice, moreSettings});
+       addToMap("IDS_MENU_SETTINGS_AUTO_SCAN_ON",      {speedUpScaning, slowDownScaning, pointRowScan, scanMethod, turnOnOffSound, turnOnOffVoice, moreSettings});
+       addToMap("IDS_MENU_BUTTONS_KEYS",                       {ringtoneVolIncrease, ringtoneVolDecrease, mediaVolumeIncrease, mediaVolumeDecrease,
                         tapHomeButtonx2, tapHomeButtonx3, viewPowerKeyMenu
                                                                                });
-       addToMap("menu-edit-text",                              {selectionMode, selectAll, previous, next, copy, paste, cut, granularitySettings});
-       addToMap("menu-auto-scroll-off",                {turnOnOffAutoScroll, scrollUp, scrollDown, scrollTop});
-       addToMap("menu-auto-scroll-on",                 {turnOnOffAutoScroll, speedUpAutoScroll, slowDownAutoScroll});
-       addToMap("menu-granularity",                    {character, word, line, paragraph});
+       addToMap("IDS_MENU_BUTTONS_KEYS_WIFI",          {notiVolumeIncrease, notiVolumeDecrease, mediaVolumeIncrease, mediaVolumeDecrease,
+                        tapHomeButtonx2, tapHomeButtonx3, viewPowerKeyMenu
+                                                                                       });
+       addToMap("IDS_MENU_EDIT_TEXT",                          {selectionMode, selectAll, previous, next, copy, paste, cut, granularitySettings});
+       addToMap("IDS_MENU_AUTO_SCROLL_OFF",            {turnOnOffAutoScroll, scrollUp, scrollDown, scrollTop});
+       addToMap("IDS_MENU_AUTO_SCROLL_ON",                     {turnOnOffAutoScroll, speedUpAutoScroll, slowDownAutoScroll});
+       addToMap("IDS_MENU_GRANULARITY",                        {character, word, line, paragraph});
 }
 
-std::vector<std::shared_ptr<MenuItem>> MenuMap::find(const std::string &searchKey)
+std::vector<std::shared_ptr<MenuItem>> MenuMap::find(const std::string &menuLabel)
 {
-       std::vector<std::shared_ptr<MenuItem>> returnVector;
-       auto keyRange = map.equal_range(searchKey);
+       std::vector<std::shared_ptr<MenuItem>> foundMenuItems;
+       auto keyRange = map.equal_range(menuLabel);
        for (auto ii = keyRange.first; ii != keyRange.second; ++ii)
-               returnVector.push_back(ii->second);
+               foundMenuItems.push_back(ii->second);
 
-       return returnVector;
+       return foundMenuItems;
 }
 
-void MenuMap::addToMap(std::string menu, std::vector<std::shared_ptr<MenuItem>> menuVector)
+void MenuMap::addToMap(std::string menuLabel, std::vector<std::shared_ptr<MenuItem>> menuItems)
 {
-       while (!menuVector.empty()) {
-               map.insert(std::make_pair(menu, menuVector.back()));
-               menuVector.pop_back();
+       while (!menuItems.empty()) {
+               map.insert(std::make_pair(menuLabel, menuItems.back()));
+               menuItems.pop_back();
        }
 }
index c056ec1..699940b 100644 (file)
 class MenuItem
 {
 public:
-       MenuItem(std::vector<std::string> names, std::string imgPath, std::string activityType = "", std::string key = "");
+       MenuItem(std::vector<std::string> names, std::string iconPath, std::string activityType = "", std::string key = "", std::string subMenuLabel = "");
 
-       std::string getName();
-       std::string getIcon();
-       std::string getActivityType();
-       std::string getKey();
+       std::string getName() const;
+       std::string getIconPath() const;
+       std::string getActivityType() const;
+       std::string getVconfKey() const;
+       std::string getSubMenuLabel() const;
 
 private:
        std::vector<std::string> names;
-       std::string imgPath;
+       std::string iconPath;
        std::string activityType;
        std::string key;
+       std::string subMenuLabel;
 
-       int getMessageIndex();
+       int getMessageIndex() const;
 };
 
 class MenuMap
@@ -33,10 +35,10 @@ class MenuMap
 public:
        MenuMap();
 
-       std::vector<std::shared_ptr<MenuItem>> find(const std::string &searchKey);
+       std::vector<std::shared_ptr<MenuItem>> find(const std::string &);
 
 private:
-       void addToMap(std::string menu, std::vector<std::shared_ptr<MenuItem>> menuVector);
+       void addToMap(std::string, std::vector<std::shared_ptr<MenuItem>>);
 
        std::multimap<std::string, std::shared_ptr<MenuItem>> map;
 };
index 8efd256..b799b0f 100644 (file)
 #include "UIActivity.hpp"
 #include "ActivityFactory.hpp"
+#include "UniversalSwitchLog.hpp"
+#include "MenuBuilder.hpp"
+#include "Window.hpp"
+#include "VConf.hpp"
+#include "ScreenScannerManager.hpp"
+#include "Optional.hpp"
 
+#include <Elementary.h>
+#include <ui/efl_util.h>
+#include <efl_extension.h>
+#include <telephony.h>
+#include <memory>
+#include <vector>
+#include <stack>
+#include <string>
+
+static const double    GENGRID_ITEM_HEIGHT_WIDTH_PROPORTION = 1.2;
+static const int       ITEMS_IN_GENGRID_PER_ROW             = 4;
+static const int       POPUP_GENGRID_SIZE_FACTOR            = 50;
+static const int       AUTO_TAP_WAITING_PERIOD_DEFAULT_TIME = 3;
+
+static const std::string AUTO_SCAN_KEY                      = "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED";
+static const std::string AUTO_SCROLL_KEY                    = "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCROLL";
+static const std::string AUTO_TAP_KEY                       = "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE";
+static const std::string AUTO_TAP_WAITING_PERIOD_KEY        = "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE";
 
 
 class SelectActivity : public UIActivity, RegisterActivity<SelectActivity>
 {
 public:
        static constexpr const char *activityType = "SELECT";
-       SelectActivity(): UIActivity(activityType) {}
-       bool process() override
-       {
+       SelectActivity(): UIActivity(activityType), popup(nullptr, evas_object_del),
+               virtualBackButton(nullptr, evas_object_del), timer(nullptr), autoTapWaitingPeriod(AUTO_TAP_WAITING_PERIOD_DEFAULT_TIME) {}
+       ~SelectActivity();
+
+       bool process() override;
+       void update(const std::shared_ptr<UIElement> &elem) override;
+
+private:
+       typedef std::pair<SelectActivity *, std::shared_ptr<MenuItem>> GengridItemSelectedCbData;
+
+       void createMenu();
+       void removeMenu();
+       void createMenuContent();
+       void addBackButton(Evas_Object *);
+       void refreshMenu();
+       void getAutoTapWaitingPeriodCb(int);
+       void navigateThroughSubMenuOrCreateActivityChangeRequest(MenuItem *);
+       void navigateThroughSubMenu(const std::string &);
+       void navigateBack();
+       void sendTapActivityChangeRequest();
+       std::string getCompleteLabelOfMenu();
+       std::string getCompleteLabelOfMainMenu();
+       Optional<telephony_call_state_e> getPhoneCallState();
+       bool isUIElementSlider();
+       bool hasUIElementEditableTextIface();
+       std::string getCompleteLabelOfButtonsKeysMenu();
+       int addItemsToMenu(Evas_Object *, const std::string &);
+
+       static void popupDismissedCb(void *, Evas_Object *, void *);
+       static void popupBackCb(void *, Evas_Object *, void *);
+       static void gengridItemSelectedCb(void *, Evas_Object *, void *);
+       static char *gengridItemLabelGetCb(void *, Evas_Object *, const char *);
+       static Evas_Object *gengridItemContentGetCb(void *, Evas_Object *, const char *);
+       static Eina_Bool autoTapCb(void *);
+       static void deleteAndClearTimer(Ecore_Timer *&);
+       static int divideAndRoundOut(int, int);
+
+       std::vector<std::string> nestedMenusLabels;
+       std::stack<VConfInterface::CallbackHandle> callbackHandle;
+       std::stack<GengridItemSelectedCbData> gengridItemsSelectedCbData;
+       std::shared_ptr<UIElement> realUiElement;
+       std::unique_ptr<Evas_Object, void(*)(Evas_Object *)> popup;
+       std::unique_ptr<Evas_Object, void(*)(Evas_Object *)> virtualBackButton;
+       VConfInterface::CallbackHandle autoTapWaitingPeriodCallbackHandle;
+       Ecore_Timer *timer;
+       int autoTapWaitingPeriod;
+};
+
+SelectActivity::~SelectActivity()
+{
+       removeMenu();
+}
+
+bool SelectActivity::process()
+{
+       if (completed)
                return true;
+
+       if (timer) {
+               deleteAndClearTimer(timer);
+               nestedMenusLabels.push_back("IDS_MENU_MAIN");
+               createMenu();
        }
-};
+
+       ScreenScannerManager::instance().acceptAutoscanning();
+
+       return false;
+}
+
+void SelectActivity::update(const std::shared_ptr<UIElement> &elem)
+{
+       if (realUiElement) {
+               elem->activate(); /*elem is popup menu item*/
+               return;
+       }
+
+       realUiElement = elem;
+       if (VConfSingleton::instance().get(AUTO_TAP_KEY, 1) - 1) {
+               VConfSingleton::instance().registerAndGet<int>(AUTO_TAP_WAITING_PERIOD_KEY, AUTO_TAP_WAITING_PERIOD_DEFAULT_TIME,
+                               std::bind(&SelectActivity::getAutoTapWaitingPeriodCb, this, std::placeholders::_1));
+               timer = ecore_timer_add(autoTapWaitingPeriod, autoTapCb, this);
+               return;
+       }
+
+       nestedMenusLabels.push_back("IDS_MENU_MAIN");
+       createMenu();
+}
+
+void SelectActivity::createMenu()
+{
+       popup.reset(elm_popup_add(Window::getHandler().get()));
+       elm_atspi_accessible_name_set(popup.get(), "");
+       elm_popup_orient_set(popup.get(), ELM_POPUP_ORIENT_CENTER);
+       elm_theme_extension_add(NULL, UNIVERSAL_SWITCH_EDJ);
+       elm_object_style_set(popup.get(), "universalSwitchTransparent");
+       elm_atspi_accessible_attribute_append(popup.get(), "ScanningMethod", "RowScanner");
+       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);
+       eext_object_event_callback_add(popup.get(), EEXT_CALLBACK_BACK, popupBackCb, this);
+       evas_object_show(popup.get());
+}
+
+void SelectActivity::removeMenu()
+{
+       while (!callbackHandle.empty())
+               callbackHandle.pop();
+
+       while (!gengridItemsSelectedCbData.empty())
+               gengridItemsSelectedCbData.pop();
+
+       if (virtualBackButton) {
+               evas_object_smart_callback_del(virtualBackButton.get(), "clicked", popupBackCb);
+               virtualBackButton.reset();
+       }
+
+       if (popup) {
+               eext_object_event_callback_del(popup.get(), EEXT_CALLBACK_BACK, popupBackCb);
+               evas_object_smart_callback_del(popup.get(), "dismissed", popupDismissedCb);
+               popup.reset();
+       }
+
+       deleteAndClearTimer(timer);
+}
+
+void SelectActivity::createMenuContent()
+{
+       auto content = elm_layout_add(popup.get());
+       auto gengrid = elm_gengrid_add(popup.get());
+
+       elm_layout_file_set(content, UNIVERSAL_SWITCH_EDJ, "universalSwitchTransparentLayout");
+       elm_object_style_set(gengrid, "popup");
+       evas_object_size_hint_min_set(content, 1, 1);
+       elm_object_content_set(popup.get(), content);
+       elm_object_part_content_set(content, "elm.swallow.content", gengrid);
+
+       if (nestedMenusLabels.size() > 1)
+               addBackButton(content);
+
+       auto screenWidth = 0;
+       evas_object_geometry_get(content, nullptr, nullptr, &screenWidth, nullptr);
+
+       int itemWidth = screenWidth / ITEMS_IN_GENGRID_PER_ROW;
+       int itemHeight = itemWidth * GENGRID_ITEM_HEIGHT_WIDTH_PROPORTION;
+       elm_gengrid_item_size_set(gengrid, itemWidth, itemHeight);
+
+       auto completeLabelOfMenu = getCompleteLabelOfMenu();
+       auto numberOfItems = addItemsToMenu(gengrid, completeLabelOfMenu);
+       auto rows = divideAndRoundOut(numberOfItems, ITEMS_IN_GENGRID_PER_ROW);
+
+       evas_object_size_hint_min_set(gengrid, 1, itemHeight * rows + POPUP_GENGRID_SIZE_FACTOR);
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+}
+
+void SelectActivity::addBackButton(Evas_Object *content)
+{
+       virtualBackButton.reset(elm_button_add(content));
+       elm_atspi_accessible_name_set(virtualBackButton.get(), gettext("IDS_NAVIGATE_UP"));
+       elm_object_style_set(virtualBackButton.get(), "universalSwitchTransparent");
+       elm_object_part_content_set(content, "elm.swallow.back", virtualBackButton.get());
+       elm_layout_signal_emit(content, "elm,state,back,visible", "elm");
+       elm_object_part_text_set(virtualBackButton.get(), "default", gettext(nestedMenusLabels.end()[-2].c_str()));
+       auto backIcon = elm_icon_add(content);
+       auto iconPath = std::string(ICONS_DIR) + std::string("/back.png");
+       elm_image_file_set(backIcon, iconPath.c_str(), NULL);
+       elm_object_part_content_set(virtualBackButton.get(), "icon", backIcon);
+       evas_object_smart_callback_add(virtualBackButton.get(), "clicked", popupBackCb, this);
+}
+
+void SelectActivity::refreshMenu()
+{
+       removeMenu();
+       createMenu();
+}
+
+void SelectActivity::getAutoTapWaitingPeriodCb(int value)
+{
+       autoTapWaitingPeriod = value;
+}
+
+void SelectActivity::navigateThroughSubMenuOrCreateActivityChangeRequest(MenuItem *menuItem)
+{
+       if (menuItem->getName().empty())
+               return;
+
+       if (menuItem->getActivityType() == SelectActivity::activityType) {
+               navigateThroughSubMenu(menuItem->getSubMenuLabel());
+               return;
+       }
+
+       removeMenu();
+       completed = true;
+       notify(std::make_shared<ActivityChangeRequest>(menuItem->getActivityType(), realUiElement));
+}
+
+void SelectActivity::navigateThroughSubMenu(const std::string &subMenuLabel)
+{
+       nestedMenusLabels.push_back(subMenuLabel);
+       refreshMenu();
+}
+
+void SelectActivity::navigateBack()
+{
+       removeMenu();
+       nestedMenusLabels.pop_back();
+       if (nestedMenusLabels.empty())
+               completed = true;
+       else
+               refreshMenu();
+}
+
+void SelectActivity::sendTapActivityChangeRequest()
+{
+       timer = nullptr;
+       completed = true;
+       notify(std::make_shared<ActivityChangeRequest>("TAP", realUiElement));
+}
+
+std::string SelectActivity::getCompleteLabelOfMenu()
+{
+       if (nestedMenusLabels.back() == "IDS_MENU_MAIN")
+               return getCompleteLabelOfMainMenu();
+
+       if (nestedMenusLabels.back() == "IDS_MENU_SETTINGS") {
+               auto completeLabelOfSettingsMenu = VConfSingleton::instance().get(AUTO_SCAN_KEY, false) ?
+                                                                                  "IDS_MENU_SETTINGS_AUTO_SCAN_ON" : "IDS_MENU_SETTINGS_AUTO_SCAN_OFF";
+               callbackHandle.push(VConfSingleton::instance().registerKeyChangedCb<bool>(AUTO_SCAN_KEY,
+                                                       std::bind(&SelectActivity::refreshMenu, this)));
+               return completeLabelOfSettingsMenu;
+       }
+
+       if (nestedMenusLabels.back() == "IDS_MENU_AUTO_SCROLL")
+               return (VConfSingleton::instance().get(AUTO_SCROLL_KEY, 1) - 1) ?
+                          "IDS_MENU_AUTO_SCROLL_ON" : "IDS_MENU_AUTO_SCROLL_OFF";
+
+       if (nestedMenusLabels.back() == "IDS_MENU_BUTTONS_KEYS")
+               return getCompleteLabelOfButtonsKeysMenu();
+
+       return nestedMenusLabels.back();
+}
+
+std::string SelectActivity::getCompleteLabelOfMainMenu()
+{
+       //TODO sip, home-apps
+       auto phoneCallState = getPhoneCallState();
+
+       if (phoneCallState && *phoneCallState == TELEPHONY_CALL_STATE_CONNECTED)
+               return "IDS_MENU_MAIN_DURING_CALL";
+       if (phoneCallState && *phoneCallState == TELEPHONY_CALL_STATE_CONNECTING)
+               return "IDS_MENU_MAIN_INCOMING_CALL";
+
+       if (isUIElementSlider())
+               return "IDS_MENU_MAIN_SLIDER";
+
+       if (hasUIElementEditableTextIface())
+               return "IDS_MENU_MAIN_EDITABLE_TEXT";
+
+       return "IDS_MENU_MAIN_NORMAL";
+}
+
+Optional<telephony_call_state_e>  SelectActivity::getPhoneCallState()
+{
+       telephony_handle_list_s list;
+       auto error = telephony_init(&list);
+       if (error != TELEPHONY_ERROR_NONE) {
+               ERROR("Can't init telephony API. Error no. %d", error);
+               return {};
+       }
+
+       for (auto i = 0u; i < list.count; i++) {
+               telephony_call_state_e callState;
+               error = telephony_call_get_voice_call_state(list.handle[i], &callState);
+               if (error != TELEPHONY_ERROR_NONE) {
+                       ERROR("Can't get call state. Error no. %d", error);
+                       break;
+               }
+
+               if (callState != TELEPHONY_CALL_STATE_IDLE) {
+                       telephony_deinit(&list);
+                       return callState;
+               }
+       }
+
+       telephony_deinit(&list);
+       return TELEPHONY_CALL_STATE_IDLE;
+}
+
+bool SelectActivity::isUIElementSlider()
+{
+       return realUiElement && atspi_accessible_get_role(realUiElement->getObject().get(), nullptr) == ATSPI_ROLE_SLIDER;
+}
+
+bool SelectActivity::hasUIElementEditableTextIface()
+{
+       if (!realUiElement)
+               return false;
+
+       auto editableTextIface = atspi_accessible_get_editable_text_iface(realUiElement->getObject().get());
+       if (editableTextIface) {
+               g_object_unref(editableTextIface);
+               return true;
+       }
+
+       return false;
+}
+
+std::string SelectActivity::getCompleteLabelOfButtonsKeysMenu()
+{
+       telephony_handle_list_s list;
+       auto error = telephony_init(&list);
+       if (error != TELEPHONY_ERROR_NONE) {
+               ERROR("Can't init telephony API. Error no. %d", error);
+               return "IDS_MENU_BUTTONS_KEYS_WIFI";
+       }
+
+       for (auto i = 0u; i < list.count; i++) {
+               telephony_sim_state_e simState;
+               error = telephony_sim_get_state(list.handle[i], &simState);
+               if (error != TELEPHONY_ERROR_NONE) {
+                       ERROR("Can't get sim state. Error no. %d", error);
+                       break;
+               }
+
+               if (simState == TELEPHONY_SIM_STATE_AVAILABLE || simState == TELEPHONY_SIM_STATE_LOCKED) {
+                       telephony_deinit(&list);
+                       return "IDS_MENU_BUTTONS_KEYS";
+               }
+
+       }
+
+       telephony_deinit(&list);
+       return "IDS_MENU_BUTTONS_KEYS_WIFI";
+}
+
+int SelectActivity::addItemsToMenu(Evas_Object *gengrid, const std::string &completeLabelOfMenu)
+{
+       Elm_Gengrid_Item_Class *gic = elm_gengrid_item_class_new();
+       gic->item_style = "default";
+       gic->func.text_get = gengridItemLabelGetCb;
+       gic->func.content_get = gengridItemContentGetCb;
+
+       auto menuItems = Singleton<MenuMap>::instance().find(completeLabelOfMenu);
+       auto numberOfItems = menuItems.size();
+       while (!menuItems.empty()) {
+               gengridItemsSelectedCbData.push(std::make_pair(this, menuItems.back()));
+               auto object = elm_gengrid_item_append(gengrid, gic, menuItems.back().get(), gengridItemSelectedCb, &(gengridItemsSelectedCbData.top()));
+               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(),
+                                                               std::bind(&SelectActivity::refreshMenu, this)));
+               }
+               menuItems.pop_back();
+       }
+
+       elm_gengrid_item_class_free(gic);
+
+       return numberOfItems;
+}
+
+void SelectActivity::popupDismissedCb(void *data, Evas_Object *obj, void *event_info)
+{
+       static_cast<SelectActivity *>(data)->removeMenu();
+}
+
+void SelectActivity::popupBackCb(void *data, Evas_Object *obj, void *event_info)
+{
+       static_cast<SelectActivity *>(data)->navigateBack();
+}
+
+char *SelectActivity::gengridItemLabelGetCb(void *data, Evas_Object *obj, const char *part)
+{
+       auto menuItem = static_cast<MenuItem *>(data);
+       if (part && !strcmp(part, "elm.text") && menuItem)
+               return strdup(menuItem->getName().c_str());
+
+       return strdup("");
+}
+
+Evas_Object *SelectActivity::gengridItemContentGetCb(void *data, Evas_Object *obj, const char *part)
+{
+       auto menuItem = static_cast<MenuItem *>(data);
+       if (!part || strcmp(part, "elm.swallow.icon") || !menuItem || menuItem->getIconPath().empty())
+               return nullptr;
+
+       auto img = elm_image_add(obj);
+       elm_image_file_set(img, menuItem->getIconPath().c_str(), nullptr);
+       return img;
+}
+
+void SelectActivity::gengridItemSelectedCb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_gengrid_item_selected_set(static_cast<Elm_Gengrid_Item *>(event_info), EINA_FALSE);
+       auto pair = static_cast<GengridItemSelectedCbData *>(data);
+       pair->first->navigateThroughSubMenuOrCreateActivityChangeRequest(pair->second.get());
+}
+
+Eina_Bool SelectActivity::autoTapCb(void *data)
+{
+       static_cast<SelectActivity *>(data)->sendTapActivityChangeRequest();
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void SelectActivity::deleteAndClearTimer(Ecore_Timer *&timer)
+{
+       if (!timer)
+               return;
+
+       ecore_timer_del(timer);
+       timer = nullptr;
+}
+
+int SelectActivity::divideAndRoundOut(int dividend, int divisor)
+{
+       ASSERT(divisor, "Zero divisor");
+
+       return (dividend + divisor - 1) / divisor;
+}
\ No newline at end of file
index 8b19edc..75cccae 100644 (file)
@@ -96,6 +96,10 @@ void SwitchManager::setActivityFactory(const std::shared_ptr<ActivityFactory> &f
 void SwitchManager::changeActivity(const std::shared_ptr<ActivityChangeRequest> &request)
 {
        ASSERT(request, "request is not initialized");
+
+       while (!activities.empty() && activities.top()->isCompleted())
+               activities.pop();
+
        if (activities.empty() || (activities.top() && activities.top()->getType() != request->getActivityType())) {
                auto activity = activityFactory->createActivity(request->getActivityType());
                if (!activity) {
@@ -105,19 +109,19 @@ void SwitchManager::changeActivity(const std::shared_ptr<ActivityChangeRequest>
                auto cond = std::unique_ptr<Condition<ActivityChangeRequest>>(new ConditionAll<ActivityChangeRequest>);
                activity->attach(shared_from_this(), std::move(cond));
 
-               auto uiActivity = dynamic_cast<UIActivity *>(activity.get());
-
-               if (uiActivity)
+               auto uiActivity = std::dynamic_pointer_cast<UIActivity>(activity);
+               if (uiActivity && request->hasUIElement())
                        uiActivity->update(request->getUIElement());
 
                activities.push(activity);
        }
 
-       bool completed = false;
-       if (activities.empty())
+       if (activities.empty()) {
                ERROR("No activity provided.");
-       else
-               completed = activities.top()->process();
+               return;
+       }
+
+       bool completed = activities.top()->process();
 
        if (completed)
                activities.pop();
index b859bc3..786c804 100644 (file)
@@ -16,3 +16,8 @@ int UIElement::getY() const
 {
        return y;
 }
+
+void UIElement::activate()
+{
+       //TODO use at-spi action intrtface
+}
\ No newline at end of file
index eb69f8c..887bb05 100644 (file)
@@ -12,6 +12,7 @@ public:
        std::shared_ptr<AtspiAccessible> getObject() const;
        int getX() const;
        int getY() const;
+       void activate();
 
 private:
        std::shared_ptr<AtspiAccessible> obj;
index d1d60b1..43d7657 100644 (file)
@@ -36,14 +36,14 @@ public:
                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]->getKey(), expectedMenuItemsKeys[actualMenuItems.size() - 1 - ii]);
+                               EXPECT_EQ(actualMenuItems[ii]->getVconfKey(), expectedMenuItemsKeys[actualMenuItems.size() - 1 - ii]);
                }
        }
 };
 
 TEST_F(MenuBuilderTest, checkContentOfMenuMainNormal)
 {
-       testMenuContent("menu-main-normal", {
+       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"
        });
@@ -51,7 +51,7 @@ TEST_F(MenuBuilderTest, checkContentOfMenuMainNormal)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuMainHomeApps)
 {
-       testMenuContent("menu-main-home-apps", {
+       testMenuContent("IDS_MENU_MAIN_HOME_APPS", {
                "IDS_TAP", "IDS_LEFT_PAGE", "IDS_RIGHT_PAGE", "", "IDS_GESTURES", "IDS_ACTIONS", "IDS_SETTINGS",
                "IDS_RECENT_APPS", "IDS_HOME_SCREEN", "IDS_BACK", "IDS_BUTTONS_AND_KEYS"
        });
@@ -59,7 +59,7 @@ TEST_F(MenuBuilderTest, checkContentOfMenuMainHomeApps)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuMainSlider)
 {
-       testMenuContent("menu-main-slider", {
+       testMenuContent("IDS_MENU_MAIN_SLIDER", {
                "IDS_INCREASE", "IDS_DECREASE", "", "", "IDS_TAP", "IDS_GESTURES", "IDS_ACTIONS",
                "IDS_SETTINGS", "IDS_RECENT_APPS", "IDS_HOME_SCREEN", "IDS_BACK", "IDS_BUTTONS_AND_KEYS"
        });
@@ -67,7 +67,7 @@ TEST_F(MenuBuilderTest, checkContentOfMenuMainSlider)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuMainEditableText)
 {
-       testMenuContent("menu-main-editable-text", {
+       testMenuContent("IDS_MENU_MAIN_EDITABLE_TEXT", {
                "IDS_TAP", "IDS_EDIT_TEXT", "", "", "IDS_GESTURES", "IDS_ACTIONS",
                "IDS_SETTINGS", "IDS_RECENT_APPS", "IDS_HOME_SCREEN", "IDS_BACK", "IDS_BUTTONS_AND_KEYS"
        });
@@ -75,14 +75,14 @@ TEST_F(MenuBuilderTest, checkContentOfMenuMainEditableText)
 
 TEST_F(MenuBuilderTest, checkContentOfMainMenuSip)
 {
-       testMenuContent("menu-main-sip", {
+       testMenuContent("IDS_MENU_MAIN_SIP", {
                "IDS_TAP", "IDS_TOUCH_AND_HOLD"
        });
 }
 
 TEST_F(MenuBuilderTest, checkContentOfMenuMainIncomingCall)
 {
-       testMenuContent("menu-main-incoming-call", {
+       testMenuContent("IDS_MENU_MAIN_INCOMING_CALL", {
                "IDS_TAP", "IDS_ACCEPT", "IDS_REJECT", "", "IDS_GESTURES", "IDS_ACTIONS", "IDS_SETTINGS",
                "IDS_RECENT_APPS", "IDS_HOME_SCREEN", "IDS_BACK", "IDS_BUTTONS_AND_KEYS"
        });
@@ -90,7 +90,7 @@ TEST_F(MenuBuilderTest, checkContentOfMenuMainIncomingCall)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuMainDuringCall)
 {
-       testMenuContent("menu-main-during-call", {
+       testMenuContent("IDS_MENU_MAIN_DURING_CALL", {
                "IDS_TAP", "IDS_END_CALL", "", "", "IDS_GESTURES", "IDS_ACTIONS", "IDS_SETTINGS",
                "IDS_RECENT_APPS", "IDS_HOME_SCREEN", "IDS_BACK", "IDS_BUTTONS_AND_KEYS"
        });
@@ -98,7 +98,7 @@ TEST_F(MenuBuilderTest, checkContentOfMenuMainDuringCall)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuGestures)
 {
-       testMenuContent("menu-gestures", {
+       testMenuContent("IDS_MENU_GESTURES", {
                "IDS_SWIPE_UP", "IDS_SWIPE_DOWN", "IDS_SWIPE_LEFT", "IDS_SWIPE_RIGHT",
                "IDS_AUTO_SCROLL", "IDS_TOUCH_AND_HOLD", "IDS_DRAG", "IDS_TOUCH_HOLD_THEN_DRAG"
        });
@@ -106,7 +106,7 @@ TEST_F(MenuBuilderTest, checkContentOfMenuGestures)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuActions)
 {
-       testMenuContent("menu-actions", {
+       testMenuContent("IDS_MENU_ACTIONS", {
                "IDS_ZOOM_IN", "IDS_ZOOM_OUT", "IDS_SCREEN_ROTATION", "IDS_SOUND",
                "IDS_LOCK", "IDS_OPEN_NOTI_PANEL", "IDS_CAPTURE_SCREENSHOT"
        }/*TODO complete test when sound, and noti. panel activities will be ready*/);
@@ -114,14 +114,14 @@ TEST_F(MenuBuilderTest, checkContentOfMenuActions)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuRotateScreen)
 {
-       testMenuContent("menu-rotate-screen", {
+       testMenuContent("IDS_MENU_ROTATE_SCREEN", {
                "IDS_ROTATE_LEFT", "IDS_ROTATE_TO_PORTRAIT", "IDS_ROTATE_RIGHT"
        });
 }
 
 TEST_F(MenuBuilderTest, checkContentOfMenuSettings)
 {
-       testMenuContent("menu-settings-auto-scan-off", {
+       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_SCAN_METHOD",
@@ -131,7 +131,7 @@ TEST_F(MenuBuilderTest, checkContentOfMenuSettings)
                ""
        });
        setKeys(2);
-       testMenuContent("menu-settings-auto-scan-on", {
+       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"
        }, {
@@ -146,11 +146,11 @@ TEST_F(MenuBuilderTest, checkContentOfMenuSettings)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuButtonsKeys)
 {
-       testMenuContent("menu-buttons-keys", {
+       testMenuContent("IDS_MENU_BUTTONS_KEYS", {
                "IDS_RINGTONE_VOLUME_INC", "IDS_RINGTONE_VOLUME_DEC", "IDS_MEDIA_VOLUME_INC", "IDS_MEDIA_VOLUME_DEC",
                "IDS_TAP_HOME_BUTTON_X2", "IDS_TAP_HOME_BUTTON_X3", "IDS_VIEW_POWER_KEY_MENU"
        });
-       testMenuContent("menu-buttons-keys-wifi", {
+       testMenuContent("IDS_MENU_BUTTONS_KEYS_WIFI", {
                "IDS_NOTI_VOLUME_INC", "IDS_NOTI_VOLUME_DEC", "IDS_MEDIA_VOLUME_INC", "IDS_MEDIA_VOLUME_DEC",
                "IDS_TAP_HOME_BUTTON_X2", "IDS_TAP_HOME_BUTTON_X3", "IDS_VIEW_POWER_KEY_MENU"
        });
@@ -158,7 +158,7 @@ TEST_F(MenuBuilderTest, checkContentOfMenuButtonsKeys)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuEditText)
 {
-       testMenuContent("menu-edit-text", {
+       testMenuContent("IDS_MENU_EDIT_TEXT", {
                "IDS_SELECTION_MODE", "IDS_SELECT_ALL", "IDS_PREVIOUS_CHARACTER", "IDS_NEXT_CHARACTER",
                "IDS_COPY", "IDS_PASTE", "IDS_CUT", "IDS_GRANULARITY_SETTINGS"
        }, {
@@ -171,14 +171,14 @@ TEST_F(MenuBuilderTest, checkContentOfMenuEditText)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuAutoScroll)
 {
-       testMenuContent("menu-auto-scroll-off", {
+       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);
-       testMenuContent("menu-auto-scroll-on", {
+       testMenuContent("IDS_MENU_AUTO_SCROLL_ON", {
                "IDS_TURN_OFF_AUTO_SCROLL", "IDS_SPEED_UP_AUTO_SCROLL", "IDS_SLOW_DOWN_AUTO_SCROLL"
        }, {
                "__KEY_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCROLL",
@@ -188,14 +188,14 @@ TEST_F(MenuBuilderTest, checkContentOfMenuAutoScroll)
 
 TEST_F(MenuBuilderTest, checkContentOfMenuGranularity)
 {
-       testMenuContent("menu-granularity", {
+       testMenuContent("IDS_MENU_GRANULARITY", {
                "IDS_CHARACTER", "IDS_WORD", "IDS_LINE", "IDS_PARAGRAPH"
        });
 }
 
 TEST_F(MenuBuilderTest, checkAllGranularityOptions)
 {
-       auto actualMenuItems = Singleton<MenuMap>::instance().find("menu-edit-text");
+       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"};
@@ -212,7 +212,7 @@ TEST_F(MenuBuilderTest, checkAllGranularityOptions)
 
 TEST_F(MenuBuilderTest, checkTranslations)
 {
-       auto menuItem = Singleton<MenuMap>::instance().find("menu-main-normal").back();
+       auto menuItem = Singleton<MenuMap>::instance().find("IDS_MENU_MAIN_NORMAL").back();
        EXPECT_EQ(menuItem->getName(), "IDS_TAP");
        bindtextdomain(PROJECT_NAME, LOCALE_DIR);
        textdomain(PROJECT_NAME);