on xenial help sign in
implement saving the selected layout and add a test
commita3eda887e9edbea98332a5981daac410f143999f authorLukáš Tinkl <lukas.tinkl@canonical.com> dateWed 18 May 2016, 22:17 (10 years ago) parentcd077d5
5 files changed+66−6
plugins/AccountsService/AccountsService.cpp+17 plugins/AccountsService/AccountsService.h+2−3 qml/Wizard/Pages/20-keyboard.qml+13−2 tests/mocks/AccountsService/AccountsService.h+1−1 tests/qmltests/Wizard/tst_Wizard.qml+33
plugins/AccountsService/AccountsService.cpp+17
@@ -274,6 +274,23 @@ QStringList AccountsService::keymaps() const
274274 return {QStringLiteral("us")};
275275}
276276
277+void AccountsService::setKeymaps(const QStringList &keymaps)
278+{
279+ if (keymaps.isEmpty()) {
280+ return;
281+ }
282+
283+ StringMap map;
284+ StringMapList result;
285+ Q_FOREACH(const QString &keymap, keymaps) {
286+ map.insert(QStringLiteral("xkb"), keymap);
287+ }
288+
289+ result.append(map);
290+ setProperty(IFACE_ACCOUNTS_USER, PROP_INPUT_SOURCES, QVariant::fromValue(result));
291+ Q_EMIT keymapsChanged();
292+}
293+
277294uint AccountsService::failedLogins() const
278295{
279296 return getProperty(IFACE_UNITY_PRIVATE, PROP_FAILED_LOGINS).toUInt();
plugins/AccountsService/AccountsService.h+2−3
@@ -72,9 +72,7 @@ class AccountsService: public QObject
7272 NOTIFY hereLicensePathChanged)
7373 Q_PROPERTY(QString realName READ realName WRITE setRealName NOTIFY realNameChanged)
7474 Q_PROPERTY(QString email READ email WRITE setEmail NOTIFY emailChanged)
75− Q_PROPERTY(QStringList keymaps
76− READ keymaps
77− NOTIFY keymapsChanged)
75+ Q_PROPERTY(QStringList keymaps READ keymaps WRITE setKeymaps NOTIFY keymapsChanged)
7876
7977public:
8078 enum PasswordDisplayHint {
@@ -107,6 +105,7 @@ public:
107105 QString email() const;
108106 void setEmail(const QString &email);
109107 QStringList keymaps() const;
108+ void setKeymaps(const QStringList &keymaps);
110109
111110Q_SIGNALS:
112111 void userChanged();
qml/Wizard/Pages/20-keyboard.qml+13−2
@@ -20,6 +20,7 @@ import Ubuntu.Components 1.3
2020import Ubuntu.Components.ListItems 1.3
2121import Ubuntu.SystemSettings.LanguagePlugin 1.0
2222import Wizard 0.1
23+import AccountsService 0.1
2324import Unity.InputInfo 0.1
2425import ".." as LocalComponents
2526
@@ -55,6 +56,8 @@ LocalComponents.Page {
5556 print("Selected language:", selectedLanguage)
5657 }
5758
59+ property string selectedKeymap: ""
60+
5861 ColumnLayout {
5962 id: column
6063 spacing: units.gu(2)
@@ -69,13 +72,14 @@ LocalComponents.Page {
6972
7073 ItemSelector {
7174 id: langSelector
75+ objectName: "langSelector"
7276 anchors.left: parent.left
7377 anchors.right: parent.right
74− //text: i18n.tr("Keyboard Language")
7578 model: langPlugin.languageNames
7679 selectedIndex: langPlugin.languageCodes.indexOf(i18n.language)
7780 onSelectedIndexChanged: {
7881 keyboardListView.currentIndex = -1;
82+ selectedKeymap = "";
7983 tester.text = "";
8084 }
8185 }
@@ -117,6 +121,7 @@ LocalComponents.Page {
117121
118122 onClicked: {
119123 keyboardListView.currentIndex = index;
124+ selectedKeymap = layoutId;
120125 }
121126 }
122127 }
@@ -136,7 +141,13 @@ LocalComponents.Page {
136141 id: forwardButton
137142 LocalComponents.StackButton {
138143 text: keyboardListView.currentIndex != -1 ? i18n.tr("Next") : i18n.tr("Skip")
139− onClicked: pageStack.next();
144+ onClicked: {
145+ if (keyboardListView.currentIndex != -1) {
146+ print("Saving keymap:", selectedKeymap);
147+ AccountsService.keymaps = selectedKeymap;
148+ }
149+ pageStack.next();
150+ }
140151 }
141152 }
142153}
tests/mocks/AccountsService/AccountsService.h+1−1
@@ -76,7 +76,7 @@ class AccountsService: public QObject
7676 Q_PROPERTY(QString email READ email WRITE setEmail NOTIFY emailChanged)
7777 Q_PROPERTY(QStringList keymaps
7878 READ keymaps
79− WRITE setKeymaps // only in mock
79+ WRITE setKeymaps
8080 NOTIFY keymapsChanged)
8181
8282public:
tests/qmltests/Wizard/tst_Wizard.qml+33
@@ -80,6 +80,12 @@ Item {
8080 signalName: "timeZoneChangedCalled"
8181 }
8282
83+ SignalSpy {
84+ id: kbdLayoutSpy
85+ target: AccountsService
86+ signalName: "keymapsChanged"
87+ }
88+
8389 function setup() {
8490 AccountsService.hereEnabled = false;
8591 AccountsService.hereLicensePath = Qt.resolvedUrl("licenses");
@@ -94,6 +100,7 @@ Item {
94100 activateLocationSpy.clear();
95101 activateGPSSpy.clear();
96102 timezoneSpy.clear();
103+ kbdLayoutSpy.clear();
97104
98105 ActionData.data = {
99106 "location-detection-enabled": {
@@ -191,6 +198,10 @@ Item {
191198 tap(findChild(page, "forwardButton"));
192199 }
193200
201+ page = waitForPage("keyboardPage");
202+ if (name === page.objectName) return page;
203+ tap(findChild(page, "forwardButton"));
204+
194205 page = waitForPage("wifiPage");
195206 if (name === page.objectName) return page;
196207 tap(findChild(page, "forwardButton"));
@@ -494,5 +505,27 @@ Item {
494505 tap(findChild(page, "nameInput"));
495506 typeString("foobar");
496507 }
508+
509+ function test_keyboardPage() {
510+ var page = goToPage("keyboardPage");
511+ var forwardButton = findChild(page, "forwardButton");
512+
513+ // change language
514+ var langSelector = findChild(page, "langSelector");
515+ verify(langSelector);
516+ langSelector.selectedIndex = 1; // should be fr_FR
517+ print("Selected language:", page.selectedLanguage);
518+
519+ // pick some layout
520+ var kbdDelegate = findChild(page, "kbdDelegate1");
521+ verify(kbdDelegate);
522+ mouseClick(kbdDelegate);
523+ verify(kbdDelegate.isCurrent);
524+ print("Selected keymap:", page.selectedKeymap);
525+
526+ // verify the keymapsChanged signal got fired
527+ tap(findChild(page, "forwardButton"));
528+ tryCompare(kbdLayoutSpy, "count", 1);
529+ }
497530 }
498531}