Merge lp:~nick-dedekind/ubuntu-system-settings/lp1336715.check.sync into lp:ubuntu-system-settings/rtm-14.09

Proposed by kevin gunn
Status: Work in progress
Proposed branch: lp:~nick-dedekind/ubuntu-system-settings/lp1336715.check.sync
Merge into: lp:ubuntu-system-settings/rtm-14.09
Diff against target: 5170 lines (+1423/-1515) (has conflicts)
69 files modified
debian/changelog (+113/-0)
plugins/about/PageComponent.qml (+10/-3)
plugins/about/Storage.qml (+2/-2)
plugins/about/StorageItem.qml (+1/-1)
plugins/about/click.cpp (+11/-13)
plugins/about/click.h (+2/-1)
plugins/about/storageabout.cpp (+0/-11)
plugins/about/storageabout.h (+0/-1)
plugins/battery/PageComponent.qml (+15/-26)
plugins/battery/SleepValues.qml (+6/-1)
plugins/battery/battery.cpp (+5/-1)
plugins/battery/plugin/battery-plugin.cpp (+4/-1)
plugins/bluetooth/PageComponent.qml (+20/-19)
plugins/bluetooth/devicemodel.cpp (+2/-0)
plugins/brightness/BrightnessSlider.qml (+0/-103)
plugins/brightness/CMakeLists.txt (+0/-1)
plugins/brightness/PageComponent.qml (+39/-7)
plugins/cellular/Components/CMakeLists.txt (+5/-5)
plugins/cellular/Components/CellularSingleSim.qml (+0/-115)
plugins/cellular/Components/DataMultiSim.qml (+13/-124)
plugins/cellular/Components/MultiSim.qml (+52/-10)
plugins/cellular/Components/NoSim.qml (+5/-12)
plugins/cellular/Components/RadioSingleSim.qml (+57/-0)
plugins/cellular/Components/SimEditor.qml (+31/-14)
plugins/cellular/Components/SingleSim.qml (+42/-6)
plugins/cellular/CustomApnEditor.qml (+1/-1)
plugins/cellular/PageChooseCarrier.qml (+3/-2)
plugins/cellular/PageChooseCarriers.qml (+2/-2)
plugins/cellular/PageComponent.qml (+2/-2)
plugins/cellular/sims.js (+10/-0)
plugins/flight-mode/EntryComponent.qml (+3/-3)
plugins/language/DisplayLanguage.qml (+0/-2)
plugins/language/PageComponent.qml (+29/-21)
plugins/language/SpellChecking.qml (+12/-3)
plugins/notifications/PageComponent.qml (+1/-0)
plugins/orientation-lock/EntryComponent.qml (+6/-4)
plugins/phone/PageComponent.qml (+4/-2)
plugins/reset/ResetLauncherHome.qml (+0/-6)
plugins/security-privacy/Location.qml (+5/-4)
plugins/security-privacy/LockSecurity.qml (+1/-1)
plugins/security-privacy/PageComponent.qml (+10/-16)
plugins/security-privacy/PhoneLocking.qml (+11/-5)
plugins/sound/PageComponent.qml (+32/-19)
plugins/sound/sound.cpp (+3/-0)
plugins/system-update/PageComponent.qml (+5/-28)
plugins/time-date/PageComponent.qml (+5/-2)
plugins/wifi/MenuItemFactory.qml (+16/-9)
plugins/wifi/PageComponent.qml (+2/-1)
po/es.po (+3/-42)
po/hu.po (+35/-85)
po/pt.po (+10/-49)
po/ru.po (+96/-119)
src/CMakeLists.txt (+4/-1)
src/SystemSettings/CMakeLists.txt (+1/-0)
src/SystemSettings/SettingsItemTitle.qml (+38/-0)
src/SystemSettings/qmldir (+1/-0)
src/main.cpp (+1/-0)
src/utils.cpp (+17/-0)
src/utils.h (+8/-0)
tests/CMakeLists.txt (+2/-0)
tests/autopilot/ubuntu_system_settings/__init__.py (+198/-1)
tests/autopilot/ubuntu_system_settings/tests/__init__.py (+7/-3)
tests/autopilot/ubuntu_system_settings/tests/test_cellular.py (+202/-593)
tests/autopilot/ubuntu_system_settings/tests/test_wifi.py (+39/-2)
wizard/Utils/system.cpp (+7/-3)
wizard/qml/Components/CheckableSetting.qml (+8/-3)
wizard/qml/Pages/30-passwd-type.qml (+1/-1)
wizard/qml/Pages/50-location.qml (+95/-3)
wizard/qml/main.qml (+52/-0)
Text conflict in debian/changelog
Text conflict in plugins/about/PageComponent.qml
Text conflict in po/ru.po
Text conflict in wizard/qml/Pages/50-location.qml
To merge this branch: bzr merge lp:~nick-dedekind/ubuntu-system-settings/lp1336715.check.sync
Reviewer Review Type Date Requested Status
Ken VanDine Needs Fixing
Review via email: mp+241152@code.launchpad.net

Commit message

Fixed switches & check-boxes going out of sync with backends.

Description of the change

Fixed switches & check-boxes going out of sync with backends.

To post a comment you must log in.
Revision history for this message
Ken VanDine (ken-vandine) wrote :

Please create a new branch based on lp:ubuntu-system-settings/rtm-14.09 and merge just the commits from trunk into your new branch. Then propose that branch.

For example:

bzr branch lp:ubuntu-system-settings/rtm-14.09
cd rtm-14.09
bzr merge lp:ubuntu-system-settings -r 1187..1189

However that will still conflict slightly, you'll need to manually merge 2 files because they have diverged too much between trunk and rtm at this point.

review: Needs Fixing
Revision history for this message
Sebastien Bacher (seb128) wrote :

Unmerged revisions

1160. By Nick Dedekind

more fixes

1159. By Nick Dedekind

merged with trunk

1158. By Nick Dedekind

reverted unnecessary changes

1157. By Nick Dedekind

dont use USC.SyncSwitch

1156. By Nick Dedekind

removed unnecessary change

1155. By Nick Dedekind

bump usc requirement

1154. By Nick Dedekind

fixed out of sync switches

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2014-11-04 14:38:52 +0000
3+++ debian/changelog 2014-11-07 22:38:03 +0000
4@@ -1,3 +1,4 @@
5+<<<<<<< TREE
6 ubuntu-system-settings (0.3+14.10.20141104~rtm-0ubuntu1) 14.09; urgency=low
7
8 [ Ken VanDine ]
9@@ -55,6 +56,118 @@
10
11 -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 21 Oct 2014 15:24:55 +0000
12
13+=======
14+ubuntu-system-settings (0.3+15.04.20141103-0ubuntu1) vivid; urgency=low
15+
16+ [ Ken VanDine ]
17+ * Use the SliderMenu component instead of the Slider component, it
18+ matches the design and doesn't flicker while changing the
19+ brightness. (LP: #1289465)
20+ * Need to create UpClient regardless of upower version
21+
22+ [ Sebastien Bacher ]
23+ * [storage] build the correct ini name rather than guessing it (LP:
24+ #1387834)
25+ * [battery] don't use a colored icon (LP: #1351383)
26+
27+ [ Michael Terry ]
28+ * Redesign location page according to latest design visuals / text.
29+ Allows GPS-only, GPS+HERE, or nothing at all. (LP: #1384763)
30+
31+ [ Ubuntu daily release ]
32+ * New rebuild forced
33+
34+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Mon, 03 Nov 2014 17:30:03 +0000
35+
36+ubuntu-system-settings (0.3+15.04.20141031.2-0ubuntu1) vivid; urgency=low
37+
38+ [ Sebastien Bacher ]
39+ * Tweaks to try to make the section headers and titles closer to the
40+ design. Use a custom component, with tweaked margins and disabled
41+ tap effects, for that.
42+
43+ [ Iain Lane ]
44+ * Move formatSize into a new Utilities class in the qml context and
45+ call this from the updates panel to consistently display sizes (LP:
46+ #1385286)
47+ * Update to work with UPower >= 0.99 as well as current versions (LP:
48+ #1330037)
49+
50+ [ Albert Astals ]
51+ * i18n++ (LP: #1386730)
52+
53+ [ William Hua ]
54+ * Re-translate the UI when reboot is cancelled after language change.
55+ (LP: #1377984)
56+
57+ [ jonas-drange ]
58+ * [cellular] split "Cellular Data" and "Connection type" into two
59+ separate pieces in the UI for both single and multi SIM (LP:
60+ #1361226)
61+ * [wifi] use actiongroup to hide "connect to other networks" (LP:
62+ #1377076)
63+
64+ [ Michael Terry ]
65+ * When the power button is held down, show the shutdown dialog like we
66+ do in the unity8 shell. (LP: #1381731)
67+ * Add a Continue button when choosing a passphrase. And fix a few
68+ other design nits with choosing a password.
69+
70+ [ Michael Zanetti ]
71+ * Drop reboot notification label on launcher reset. (LP: #1376707)
72+
73+ [ Mathieu Trudel-Lapierre ]
74+ * [bluetooth] Show bluetooth address instead of name while it's not
75+ detected; to be updated once available. (LP: #1382767)
76+
77+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Fri, 31 Oct 2014 14:53:52 +0000
78+
79+ubuntu-system-settings (0.3+15.04.20141028.1-0ubuntu1) vivid; urgency=low
80+
81+ [ Ken VanDine ]
82+ * Refactored to use a singleton for UpdateManager shared in both QML
83+ and CPP. Don't load the dynamic visibility items while creating the
84+ item model, defer that to the loader. (LP: #1317007)
85+
86+ [ Florian Boucault ]
87+ * Added QML debugging.
88+
89+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 28 Oct 2014 20:44:34 +0000
90+
91+ubuntu-system-settings (0.3+15.04.20141028-0ubuntu1) vivid; urgency=low
92+
93+ [ Michael Terry ]
94+ * Fix a typo in the HERE terms link.
95+
96+ [ CI bot ]
97+ * Resync trunk
98+
99+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 28 Oct 2014 14:15:45 +0000
100+
101+ubuntu-system-settings (0.3+14.10.20141022-0ubuntu1) utopic; urgency=low
102+
103+ [ CI bot ]
104+ * Resync trunk
105+
106+ [ Michael Zanetti ]
107+ * update code to reset launcher after launcher backend implementation
108+ was reworked (LP: #1376707)
109+
110+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 22 Oct 2014 21:34:27 +0000
111+
112+ubuntu-system-settings (0.3+14.10.20141021.1-0ubuntu1) utopic; urgency=low
113+
114+ [ Sebastien Bacher ]
115+ * [storage] translator comment for the string "%1 free" (LP: #1377929)
116+ * [system-update] ellipsize labels if needed (LP: #1376286)
117+ * [sound] Use the correct low icon (LP: #1376286)
118+
119+ [ Lars Uebernickel ]
120+ * notification-manager: fix issues with GVariant API usage
121+
122+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Tue, 21 Oct 2014 15:24:55 +0000
123+
124+>>>>>>> MERGE-SOURCE
125 ubuntu-system-settings (0.3+14.10.20141021-0ubuntu1) utopic; urgency=low
126
127 [ jonas-drange ]
128
129=== modified file 'plugins/about/PageComponent.qml'
130--- plugins/about/PageComponent.qml 2014-10-07 14:07:02 +0000
131+++ plugins/about/PageComponent.qml 2014-11-07 22:38:03 +0000
132@@ -74,7 +74,7 @@
133 anchors.left: parent.left
134 anchors.right: parent.right
135
136- ListItem.Base {
137+ ListItem.Empty {
138 height: ubuntuLabel.height + deviceLabel.height + units.gu(6)
139
140 Column {
141@@ -95,6 +95,7 @@
142 text: deviceInfos.manufacturer() ? deviceInfos.manufacturer() + " " + deviceInfos.model() : backendInfos.vendorString
143 }
144 }
145+ highlightWhenPressed: false
146 }
147
148 Loader {
149@@ -141,13 +142,18 @@
150 id: storageItem
151 objectName: "storageItem"
152 text: i18n.tr("Storage")
153+<<<<<<< TREE
154 /* TRANSLATORS: that's the free disk space, indicated in the most appropriate storage unit */
155 value: i18n.tr("%1 free").arg(backendInfos.formatSize(storageInfo.availableDiskSpace("/home")))
156+=======
157+ /* TRANSLATORS: that's the free disk space, indicated in the most appropriate storage unit */
158+ value: i18n.tr("%1 free").arg(Utilities.formatSize(storageInfo.availableDiskSpace("/home")))
159+>>>>>>> MERGE-SOURCE
160 progression: true
161 onClicked: pageStack.push(Qt.resolvedUrl("Storage.qml"))
162 }
163
164- ListItem.Standard {
165+ SettingsItemTitle {
166 objectName: "softwareItem"
167 text: i18n.tr("Software:")
168 }
169@@ -176,9 +182,10 @@
170 onClicked:
171 pageStack.push(pluginManager.getByName("system-update").pageComponent)
172 }
173+ showDivider: false
174 }
175
176- ListItem.Standard {
177+ SettingsItemTitle {
178 objectName: "legalItem"
179 text: i18n.tr("Legal:")
180 }
181
182=== modified file 'plugins/about/Storage.qml'
183--- plugins/about/Storage.qml 2014-09-26 08:35:34 +0000
184+++ plugins/about/Storage.qml 2014-11-07 22:38:03 +0000
185@@ -138,7 +138,7 @@
186 id: diskItem
187 objectName: "diskItem"
188 text: i18n.tr("Total storage")
189- value: backendInfo.formatSize(diskSpace)
190+ value: Utilities.formatSize(diskSpace)
191 showDivider: false
192 }
193
194@@ -199,7 +199,7 @@
195 iconFrame: iconPath // no frame for invalid icons, since these aren't app icons
196 text: displayName
197 value: installedSize ?
198- backendInfo.formatSize(installedSize) :
199+ Utilities.formatSize(installedSize) :
200 i18n.tr("N/A")
201 }
202 }
203
204=== modified file 'plugins/about/StorageItem.qml'
205--- plugins/about/StorageItem.qml 2014-01-27 10:41:38 +0000
206+++ plugins/about/StorageItem.qml 2014-11-07 22:38:03 +0000
207@@ -25,7 +25,7 @@
208 id: sizelabel
209 objectName: "sizeLabel"
210 anchors.right: parent.right
211- text: backendInfo.formatSize(value)
212+ text: Utilities.formatSize(value)
213 visible: ready
214 }
215 ActivityIndicator {
216
217=== modified file 'plugins/about/click.cpp'
218--- plugins/about/click.cpp 2014-09-25 13:11:09 +0000
219+++ plugins/about/click.cpp 2014-11-07 22:38:03 +0000
220@@ -45,7 +45,8 @@
221 */
222 void ClickModel::populateFromDesktopOrIniFile (Click *newClick,
223 QVariantMap hooks,
224- QDir directory)
225+ QDir directory,
226+ QString name)
227 {
228 QVariantMap appHooks;
229 GKeyFile *appinfo = g_key_file_new();
230@@ -69,17 +70,13 @@
231 {
232 keyGroup = "ScopeConfig";
233 keyName = "DisplayName";
234-
235- QDir scopeDirectory(
236- directory.absoluteFilePath(appHooks.value("scope", "").toString()));
237- scopeDirectory.setNameFilters(QStringList()<<"*.ini");
238-
239- QStringList iniEntry(scopeDirectory.entryList());
240-
241- if (iniEntry.isEmpty())
242- goto out;
243-
244- QFile desktopOrIniFile(scopeDirectory.absoluteFilePath(iniEntry[0]));
245+ QString scope(appHooks.value("scope", "").toString());
246+
247+ QDir scopeDirectory(directory.absoluteFilePath(scope));
248+
249+ /* the config is 'name_scope.ini' */
250+ QFile desktopOrIniFile(scopeDirectory.absoluteFilePath(
251+ name + "_" + scope + ".ini"));
252 desktopOrIniFileName =
253 g_strdup(desktopOrIniFile.fileName().toLocal8Bit().constData());
254 if (!desktopOrIniFile.exists())
255@@ -193,7 +190,8 @@
256 if (hooks.isValid()) {
257 QVariantMap allHooks(hooks.toMap());
258 // The desktop or ini file contains an icon and the display name
259- populateFromDesktopOrIniFile(&newClick, allHooks, directory);
260+ populateFromDesktopOrIniFile(&newClick, allHooks, directory,
261+ manifest.value("name", "").toString());
262 }
263
264 newClick.installSize = manifest.value("installed-size",
265
266=== modified file 'plugins/about/click.h'
267--- plugins/about/click.h 2014-09-25 11:17:42 +0000
268+++ plugins/about/click.h 2014-11-07 22:38:03 +0000
269@@ -58,7 +58,8 @@
270 private:
271 void populateFromDesktopOrIniFile(Click *newClick,
272 QVariantMap hooks,
273- QDir directory);
274+ QDir directory,
275+ QString name);
276 Click buildClick(QVariantMap manifest);
277 QList<Click> buildClickList();
278
279
280=== modified file 'plugins/about/storageabout.cpp'
281--- plugins/about/storageabout.cpp 2014-10-02 16:35:40 +0000
282+++ plugins/about/storageabout.cpp 2014-11-07 22:38:03 +0000
283@@ -290,17 +290,6 @@
284 return m_homeSize;
285 }
286
287-QString StorageAbout::formatSize(quint64 size) const
288-{
289- guint64 g_size = size;
290-
291- gchar * formatted_size = g_format_size (g_size);
292- QString q_formatted_size = QString::fromLocal8Bit(formatted_size);
293- g_free (formatted_size);
294-
295- return q_formatted_size;
296-}
297-
298 void StorageAbout::populateSizes()
299 {
300 quint32 *running = new quint32(0);
301
302=== modified file 'plugins/about/storageabout.h'
303--- plugins/about/storageabout.h 2014-09-24 12:29:57 +0000
304+++ plugins/about/storageabout.h 2014-11-07 22:38:03 +0000
305@@ -109,7 +109,6 @@
306 quint64 getAudioSize();
307 quint64 getPicturesSize();
308 quint64 getHomeSize();
309- Q_INVOKABLE QString formatSize (quint64 size) const;
310 Q_INVOKABLE void populateSizes();
311 Q_INVOKABLE QString getDevicePath (const QString mount_point);
312 bool getDeveloperMode();
313
314=== modified file 'plugins/battery/PageComponent.qml'
315--- plugins/battery/PageComponent.qml 2014-08-29 09:11:11 +0000
316+++ plugins/battery/PageComponent.qml 2014-11-07 22:38:03 +0000
317@@ -288,7 +288,7 @@
318 showDivider: false
319 }
320
321- ListItem.Standard {
322+ SettingsItemTitle {
323 text: i18n.tr("Ways to reduce battery use:")
324 }
325
326@@ -333,17 +333,11 @@
327 text: i18n.tr("Wi-Fi")
328 control: Switch {
329 id: wifiSwitch
330- checked: batteryBackend.wifiEnabled
331- onClicked: batteryBackend.wifiEnabled = checked
332+ property bool serverChecked: batteryBackend.wifiEnabled
333+ onServerCheckedChanged: checked = serverChecked
334+ Component.onCompleted: checked = serverChecked
335+ onTriggered: batteryBackend.wifiEnabled = checked
336 }
337- Component.onCompleted:
338- clicked.connect(wifiSwitch.clicked)
339- }
340-
341- Binding {
342- target: wifiSwitch
343- property: "checked"
344- value: batteryBackend.wifiEnabled
345 }
346
347 QDBusActionGroup {
348@@ -365,17 +359,14 @@
349 active: bluetoothActionGroup.enabled.state != null
350 sourceComponent: Switch {
351 id: btSwitch
352- // Cannot use onCheckedChanged as this triggers a loop
353- onClicked: bluetoothActionGroup.enabled.activate()
354- checked: bluetoothActionGroup.enabled.state
355+ property bool serverChecked: bluetoothActionGroup.enabled.state
356+ onServerCheckedChanged: checked = serverChecked
357+ Component.onCompleted: checked = serverChecked
358+ onTriggered: bluetoothActionGroup.enabled.activate()
359 }
360-
361- // ListItem forwards the 'clicked' signal to its control.
362- // It needs to be forwarded again to the Loader's sourceComponent
363- signal clicked
364- onClicked: item.clicked()
365 }
366 visible: bluetoothActionGroup.visible
367+ Component.onCompleted: clicked.connect(btSwitch.clicked)
368 }
369
370 QDBusActionGroup {
371@@ -396,16 +387,14 @@
372 active: locationActionGroup.enabled.state != null
373 sourceComponent: Switch {
374 id: gpsSwitch
375- onClicked: locationActionGroup.enabled.activate()
376- checked: locationActionGroup.enabled.state
377+ property bool serverChecked: locationActionGroup.enabled.state
378+ onServerCheckedChanged: checked = serverChecked
379+ Component.onCompleted: checked = serverChecked
380+ onTriggered: locationActionGroup.enabled.activate()
381 }
382-
383- // ListItem forwards the 'clicked' signal to its control.
384- // It needs to be forwarded again to the Loader's sourceComponent
385- signal clicked
386- onClicked: item.clicked()
387 }
388 visible: locationActionGroup.enabled.state !== undefined
389+ Component.onCompleted: clicked.connect(gpsSwitch.clicked)
390 }
391
392 ListItem.Caption {
393
394=== modified file 'plugins/battery/SleepValues.qml'
395--- plugins/battery/SleepValues.qml 2014-08-26 01:54:11 +0000
396+++ plugins/battery/SleepValues.qml 2014-11-07 22:38:03 +0000
397@@ -71,10 +71,14 @@
398 anchors.left: parent.left
399 anchors.right: parent.right
400
401+ SettingsItemTitle {
402+ text: lockOnSuspend ? i18n.tr("Lock the phone when it's not in use:") :
403+ i18n.tr("Put the phone to sleep when it is not in use:")
404+ }
405+
406 ListItem.ItemSelector {
407 id: sleepSelector
408 objectName: "sleepSelector"
409- text: lockOnSuspend ? i18n.tr("Lock the phone when it's not in use:") : i18n.tr("Put the phone to sleep when it is not in use:")
410 delegate: OptionSelectorDelegate {
411 text: modelData
412 }
413@@ -111,6 +115,7 @@
414 else
415 powerSettings.idleDelay = (index == 6) ? 0 : idleValues[index]
416 }
417+ highlightWhenPressed: false
418 }
419
420 ListItem.Caption {
421
422=== modified file 'plugins/battery/battery.cpp'
423--- plugins/battery/battery.cpp 2014-08-28 07:22:28 +0000
424+++ plugins/battery/battery.cpp 2014-11-07 22:38:03 +0000
425@@ -63,15 +63,19 @@
426
427 void Battery::buildDeviceString() {
428 UpClient *client;
429- gboolean returnIsOk;
430 GPtrArray *devices;
431 UpDeviceKind kind;
432
433 client = up_client_new();
434+
435+#if !UP_CHECK_VERSION(0, 99, 0)
436+ gboolean returnIsOk;
437+
438 returnIsOk = up_client_enumerate_devices_sync(client, nullptr, nullptr);
439
440 if(!returnIsOk)
441 return;
442+#endif
443
444 devices = up_client_get_devices(client);
445
446
447=== modified file 'plugins/battery/plugin/battery-plugin.cpp'
448--- plugins/battery/plugin/battery-plugin.cpp 2014-07-23 13:37:06 +0000
449+++ plugins/battery/plugin/battery-plugin.cpp 2014-11-07 22:38:03 +0000
450@@ -49,10 +49,13 @@
451 {
452 BatteryItem *item (static_cast<BatteryItem *> (user_data));
453
454+#if !UP_CHECK_VERSION(0, 99, 0)
455 gboolean ret = up_client_enumerate_devices_sync (client, nullptr, nullptr);
456 if (!ret) {
457 item->setVisibility (false);
458- } else {
459+ } else
460+#endif
461+ {
462 GPtrArray *devices = up_client_get_devices (client);
463 item->setVisibility (devices->len > 0);
464 g_ptr_array_unref (devices);
465
466=== modified file 'plugins/bluetooth/PageComponent.qml'
467--- plugins/bluetooth/PageComponent.qml 2014-09-23 19:32:29 +0000
468+++ plugins/bluetooth/PageComponent.qml 2014-11-07 22:38:03 +0000
469@@ -147,17 +147,11 @@
470 text: i18n.tr("Bluetooth")
471 control: Switch {
472 id: btSwitch
473- // Cannot use onCheckedChanged as this triggers a loop
474- onClicked: bluetoothActionGroup.enabled.activate()
475- checked: backend.powered
476+ property bool serverChecked: bluetoothActionGroup.enabled.state
477+ onServerCheckedChanged: checked = serverChecked
478+ Component.onCompleted: checked = serverChecked
479+ onTriggered: bluetoothActionGroup.enabled.activate()
480 }
481- Component.onCompleted: clicked.connect(btSwitch.clicked)
482- }
483-
484- Binding {
485- target: btSwitch
486- property: "checked"
487- value: bluetoothActionGroup.enabled.state
488 }
489
490 // Discoverability
491@@ -246,7 +240,7 @@
492
493 // Disconnnected Headset(s)
494
495- ListItem.Standard {
496+ SettingsItemTitle {
497 id: disconnectedHeader
498 text: connectedList.visible ? i18n.tr("Connect another device:") : i18n.tr("Connect a device:")
499 enabled: bluetoothActionGroup.enabled
500@@ -288,7 +282,7 @@
501 }
502
503 // Devices that connect automatically
504- ListItem.Standard {
505+ SettingsItemTitle {
506 id: autoconnectHeader
507 text: i18n.tr("Connect automatically when detected:")
508 visible: autoconnectList.visible
509@@ -323,7 +317,11 @@
510
511 Page {
512 id: connectedDevicePage
513- title: backend.selectedDevice ? backend.selectedDevice.name : i18n.tr("None")
514+ title: backend.selectedDevice ?
515+ backend.selectedDevice.name.length > 0 ?
516+ backend.selectedDevice.name :
517+ backend.selectedDevice.address
518+ : i18n.tr("None")
519 visible: false
520
521 Flickable {
522@@ -344,7 +342,10 @@
523
524 ListItem.SingleValue {
525 text: i18n.tr("Name")
526- value: backend.selectedDevice ? backend.selectedDevice.name : i18n.tr("None")
527+ value: backend.selectedDevice &&
528+ backend.selectedDevice.name.length > 0 ?
529+ backend.selectedDevice.name :
530+ i18n.tr("None")
531 }
532 ListItem.Standard {
533 Rectangle {
534@@ -396,15 +397,15 @@
535 id: trustedCheck
536 text: i18n.tr("Connect automatically when detected:")
537 control: CheckBox {
538- onClicked: {
539+ property bool serverChecked: backend.selectedDevice ? backend.selectedDevice.trusted : false
540+ onServerCheckedChanged: checked = serverChecked
541+ Component.onCompleted: checked = serverChecked
542+ onTriggered: {
543 if (backend.selectedDevice) {
544- backend.selectedDevice.trusted = !backend.selectedDevice.trusted
545+ backend.selectedDevice.trusted = checked;
546 }
547 }
548- checked: backend.selectedDevice ? backend.selectedDevice.trusted : false
549 }
550- Component.onCompleted:
551- clicked.connect(trustedCheck.clicked)
552 }
553 ListItem.SingleControl {
554 control: Button {
555
556=== modified file 'plugins/bluetooth/devicemodel.cpp'
557--- plugins/bluetooth/devicemodel.cpp 2014-09-16 19:41:44 +0000
558+++ plugins/bluetooth/devicemodel.cpp 2014-11-07 22:38:03 +0000
559@@ -382,6 +382,8 @@
560 if (device->isValid()) {
561 addDevice(device);
562 }
563+ } else {
564+ device->setProperties(properties);
565 }
566 }
567
568
569=== removed file 'plugins/brightness/BrightnessSlider.qml'
570--- plugins/brightness/BrightnessSlider.qml 2014-08-11 16:13:17 +0000
571+++ plugins/brightness/BrightnessSlider.qml 1970-01-01 00:00:00 +0000
572@@ -1,103 +0,0 @@
573-/*
574- * This file is part of system-settings
575- *
576- * Copyright (C) 2013-14 Canonical Ltd.
577- *
578- * Contact: Iain Lane <iain.lane@canonical.com>
579- *
580- * This program is free software: you can redistribute it and/or modify it
581- * under the terms of the GNU General Public License version 3, as published
582- * by the Free Software Foundation.
583- *
584- * This program is distributed in the hope that it will be useful, but
585- * WITHOUT ANY WARRANTY; without even the implied warranties of
586- * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
587- * PURPOSE. See the GNU General Public License for more details.
588- *
589- * You should have received a copy of the GNU General Public License along
590- * with this program. If not, see <http://www.gnu.org/licenses/>.
591- */
592-
593-import Ubuntu.Components 0.1
594-import Ubuntu.Components.ListItems 0.1 as ListItem
595-import QtQuick 2.0
596-import QMenuModel 0.1
597-
598-Column {
599- signal pressed
600- readonly property bool pressed: sliderId.pressed
601-
602- anchors {
603- left: parent.left
604- right: parent.right
605- }
606-
607- QDBusActionGroup {
608- id: indicatorPower
609- busType: 1
610- busName: "com.canonical.indicator.power"
611- objectPath: "/com/canonical/indicator/power"
612-
613- property variant brightness: action("brightness").state
614- onBrightnessChanged: {
615- sliderId.enabled = brightness != null
616- sliderId.value = sliderId.enabled ? brightness * 100 : 0.0
617- }
618- }
619-
620- Component.onCompleted: indicatorPower.start()
621-
622- ListItem.Standard {
623- text: i18n.tr("Display brightness")
624- showDivider: false
625- }
626-
627- ListItem.Base {
628-
629- Icon {
630- id: iconLeft
631- anchors.verticalCenter: parent.verticalCenter
632- height: sliderId.height - units.gu(1)
633- name: "torch-off"
634- width: height
635-
636- MouseArea {
637- anchors.fill: parent
638- onClicked: sliderId.value = 0.0
639- }
640- }
641- Slider {
642- id: sliderId
643- function formatValue(v) {
644- return "%1%".arg(v.toFixed(0))
645- }
646-
647- anchors {
648- left: iconLeft.right
649- right: iconRight.left
650- leftMargin: units.gu(1)
651- rightMargin: units.gu(1)
652- verticalCenter: parent.verticalCenter
653- }
654- height: parent.height - units.gu(2)
655- minimumValue: 0.0
656- maximumValue: 100.0
657- live: true
658-
659- onValueChanged: indicatorPower.action('brightness').updateState(value / 100.0)
660- }
661- Icon {
662- id: iconRight
663- anchors.right: parent.right
664- anchors.verticalCenter: parent.verticalCenter
665- height: sliderId.height - units.gu(1)
666- name: "torch-on"
667- width: height
668-
669- MouseArea {
670- anchors.fill: parent
671- onClicked: sliderId.value = 100.0
672- }
673- }
674- }
675-}
676
677=== modified file 'plugins/brightness/CMakeLists.txt'
678--- plugins/brightness/CMakeLists.txt 2014-08-11 16:13:17 +0000
679+++ plugins/brightness/CMakeLists.txt 2014-11-07 22:38:03 +0000
680@@ -1,7 +1,6 @@
681 add_subdirectory(plugin)
682
683 set(QML_SOURCES
684- BrightnessSlider.qml
685 PageComponent.qml
686 )
687
688
689=== modified file 'plugins/brightness/PageComponent.qml'
690--- plugins/brightness/PageComponent.qml 2014-08-12 13:32:30 +0000
691+++ plugins/brightness/PageComponent.qml 2014-11-07 22:38:03 +0000
692@@ -24,6 +24,8 @@
693 import Ubuntu.Components 0.1
694 import Ubuntu.Components.ListItems 0.1 as ListItem
695 import Ubuntu.SystemSettings.Brightness 1.0
696+import Ubuntu.Settings.Menus 0.1 as Menus
697+import QMenuModel 0.1
698
699 ItemPage {
700 id: root
701@@ -39,12 +41,41 @@
702 anchors.left: parent.left
703 anchors.right: parent.right
704
705- BrightnessSlider {}
706+ QDBusActionGroup {
707+ id: indicatorPower
708+ busType: 1
709+ busName: "com.canonical.indicator.power"
710+ objectPath: "/com/canonical/indicator/power"
711+
712+ property variant brightness: action("brightness")
713+
714+ Component.onCompleted: start()
715+ }
716
717 Binding {
718- target: autoAdjustCheck
719- property: "checked"
720- value: adjust.visible && gsettings.autoBrightness
721+ target: sliderMenu
722+ property: "value"
723+ value: sliderMenu.enabled ? indicatorPower.action("brightness").state * 100 : 0.0
724+ }
725+
726+ ListItem.Standard {
727+ text: i18n.tr("Display brightness")
728+ showDivider: false
729+ }
730+
731+ /* Use the SliderMenu component instead of the Slider to avoid binding
732+ issues on valueChanged until LP: #1388094 is fixed.
733+ */
734+ Menus.SliderMenu {
735+ id: sliderMenu
736+ objectName: "sliderMenu"
737+ enabled: indicatorPower.action("brightness").state != null
738+ live: true
739+ minimumValue: 0.0
740+ maximumValue: 100.0
741+ minIcon: "image://theme/display-brightness-min"
742+ maxIcon: "image://theme/display-brightness-max"
743+ onUpdated: indicatorPower.action("brightness").updateState(value / 100.0)
744 }
745
746 ListItem.Standard {
747@@ -54,10 +85,11 @@
748 brightnessPanel.autoBrightnessAvailable
749 control: CheckBox {
750 id: autoAdjustCheck
751- checked: gsettings.autoBrightness
752- onClicked: gsettings.autoBrightness = checked
753+ property bool serverChecked: gsettings.autoBrightness
754+ onServerCheckedChanged: checked = serverChecked
755+ Component.onCompleted: checked = serverChecked
756+ onTriggered: gsettings.autoBrightness = checked
757 }
758- Component.onCompleted: clicked.connect(autoAdjustCheck.clicked)
759 showDivider: false
760 }
761 ListItem.Caption {
762
763=== modified file 'plugins/cellular/Components/CMakeLists.txt'
764--- plugins/cellular/Components/CMakeLists.txt 2014-08-29 14:32:28 +0000
765+++ plugins/cellular/Components/CMakeLists.txt 2014-11-07 22:38:03 +0000
766@@ -1,12 +1,12 @@
767 set(QML_SOURCES
768+ DataMultiSim.qml
769+ DefaultSim.qml
770+ MultiSim.qml
771 NoSim.qml
772- SingleSim.qml
773- MultiSim.qml
774- CellularSingleSim.qml
775- CellularMultiSim.qml
776- DefaultSim.qml
777+ RadioSingleSim.qml
778 Sim.qml
779 SimEditor.qml
780+ SingleSim.qml
781 )
782 install(FILES ${QML_SOURCES} DESTINATION ${PLUGIN_QML_DIR}/cellular/Components)
783
784
785=== removed file 'plugins/cellular/Components/CellularSingleSim.qml'
786--- plugins/cellular/Components/CellularSingleSim.qml 2014-08-21 20:25:08 +0000
787+++ plugins/cellular/Components/CellularSingleSim.qml 1970-01-01 00:00:00 +0000
788@@ -1,115 +0,0 @@
789-/*
790- * Copyright (C) 2014 Canonical Ltd
791- *
792- * This program is free software: you can redistribute it and/or modify
793- * it under the terms of the GNU General Public License version 3 as
794- * published by the Free Software Foundation.
795- *
796- * This program is distributed in the hope that it will be useful,
797- * but WITHOUT ANY WARRANTY; without even the implied warranty of
798- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
799- * GNU General Public License for more details.
800- *
801- * You should have received a copy of the GNU General Public License
802- * along with this program. If not, see <http://www.gnu.org/licenses/>.
803- *
804- * Authors:
805- * Jonas G. Drange <jonas.drange@canonical.com>
806- *
807-*/
808-import QtQuick 2.0
809-import Ubuntu.Components 0.1
810-import Ubuntu.Components.ListItems 0.1 as ListItem
811-
812-Column {
813- height: childrenRect.height
814-
815- property var selector: selector
816-
817- ListItem.ItemSelector {
818- id: selector
819- objectName: "technologyPreferenceSelector"
820- text: i18n.tr("Cellular data:")
821- expanded: true
822-
823- // an empty string is not a valid preference, which means
824- // we disregard the interace and disable the selector
825- enabled: sim.radioSettings.technologyPreference !== ""
826-
827- // model for this selector is modemTechnologies, with
828- // 'off' prepended
829- model: {
830- var m = sim.radioSettings.modemTechnologies.slice(0);
831- m.unshift("off");
832- return m;
833- }
834-
835- delegate: OptionSelectorDelegate {
836- text: {
837- return {
838- 'off': i18n.tr("Off"),
839- 'gsm': i18n.tr("2G only (saves battery)"),
840- 'umts': i18n.tr("2G/3G (faster)"),
841- 'lte': i18n.tr("2G/3G/4G (faster)")
842- }[modelData]
843- }
844- }
845- selectedIndex: {
846- if (sim.connMan.powered) {
847- // will return -1 if empty, which will select nothing.
848- // Makes sense, since the SIM is online, but the
849- // radioSettings interface is not ready yet (sim locked?)
850- return model.indexOf(sim.radioSettings.technologyPreference);
851- } else {
852- return 0;
853- }
854- }
855- }
856-
857- ListItem.Standard {
858- id: dataRoamingItem
859- objectName: "dataRoamingSwitch"
860- text: i18n.tr("Data roaming")
861- enabled: sim.connMan.powered
862- control: Switch {
863- id: dataRoamingControl
864- checked: sim.connMan.roamingAllowed
865- onClicked: sim.connMan.roamingAllowed = checked
866- }
867- }
868-
869- Connections {
870- target: sim.connMan
871- onPoweredChanged: {
872- if (powered) {
873- // restore the tech preference
874- selector.selectedIndex = selector
875- .model.indexOf(sim.radioSettings.technologyPreference)
876- } else {
877- selector.selectedIndex = 0;
878- }
879- }
880- }
881-
882- // binds the SIM online state to the UI
883- Binding {
884- target: sim.connMan
885- property: "powered"
886- value: selector.selectedIndex !== 0
887- }
888-
889- // binds the tech preference to the UI
890- Binding {
891- target: sim.radioSettings
892- property: "technologyPreference"
893- value: {
894- var i = selector.selectedIndex;
895- if (i > 0) {
896- return selector.model[i]
897- } else {
898- // if the modem is off, disregard the selector
899- return sim.radioSettings.technologyPreference;
900- }
901- }
902- }
903-}
904
905=== renamed file 'plugins/cellular/Components/CellularMultiSim.qml' => 'plugins/cellular/Components/DataMultiSim.qml'
906--- plugins/cellular/Components/CellularMultiSim.qml 2014-10-07 15:41:44 +0000
907+++ plugins/cellular/Components/DataMultiSim.qml 2014-11-07 22:38:03 +0000
908@@ -22,8 +22,6 @@
909 import Ubuntu.Components.ListItems 0.1 as ListItem
910
911 Column {
912- id: root
913- property var selector: selector
914
915 function getNameFromIndex (index) {
916 if (index === 0) {
917@@ -33,49 +31,11 @@
918 }
919 }
920
921- function getOnlineSim () {
922- if (state === "sim1Online") {
923- return sims[0];
924- } else if (state === "sim2Online") {
925- return sims[1];
926- } else {
927- return null;
928- }
929- }
930-
931 height: childrenRect.height
932
933- states: [
934- State {
935- name: "sim1Online"
936- when: sims[0].connMan.powered && !sims[1].connMan.powered
937- StateChangeScript { script: {
938- selector.selectedIndex =
939- selector.model.indexOf(
940- sims[0].radioSettings.technologyPreference)
941- }}
942- },
943- State {
944- name: "sim2Online"
945- when: sims[1].connMan.powered && !sims[0].connMan.powered
946- StateChangeScript { script: {
947- selector.selectedIndex =
948- selector.model.indexOf(
949- sims[1].radioSettings.technologyPreference)
950- }}
951- },
952- State {
953- name: "bothOnline"
954- when: sims[0].connMan.powered && sims[1].connMan.powered
955- StateChangeScript { script: {
956- sims[1].connMan.powered = false;
957- }}
958- }
959- ]
960-
961 ListItem.ItemSelector {
962 id: use
963- objectName: "use"
964+ objectName: "data"
965 text: i18n.tr("Cellular data:")
966 expanded: true
967 model: {
968@@ -92,6 +52,7 @@
969 }
970 selectedIndex: [true, sims[0].connMan.powered, sims[1].connMan.powered]
971 .lastIndexOf(true)
972+
973 onDelegateClicked: {
974 // power all sims on or off
975 sims.forEach(function (sim) {
976@@ -100,95 +61,23 @@
977 }
978 }
979
980- Connections {
981- target: sims[0].connMan
982- onPoweredChanged: {
983- if (powered) {
984- use.selectedIndex = 1;
985- }
986- }
987- }
988-
989- Connections {
990- target: sims[1].connMan
991- onPoweredChanged: {
992- if (powered) {
993- use.selectedIndex = 2;
994- }
995- }
996- }
997-
998- ListItem.ItemSelector {
999- id: selector
1000- objectName: "technologyPreferenceSelector"
1001- expanded: true
1002- model: {
1003- var sim = getOnlineSim();
1004- if (sim) {
1005- return sim.radioSettings.modemTechnologies;
1006- } else {
1007- return [];
1008- }
1009- }
1010- delegate: OptionSelectorDelegate {
1011- text: {
1012- return {
1013- 'gsm': i18n.tr("2G only (saves battery)"),
1014- 'umts': i18n.tr("2G/3G (faster)"),
1015- 'lte': i18n.tr("2G/3G/4G (faster)")
1016- }[modelData]
1017- }
1018- }
1019- visible: use.selectedIndex !== 0
1020- onDelegateClicked: {
1021- var sim = getOnlineSim();
1022- if (sim) {
1023- sim.radioSettings.technologyPreference = model[index];
1024- }
1025- }
1026- }
1027-
1028- Binding {
1029- target: selector
1030- property: "enabled"
1031- value: getOnlineSim() &&
1032- (getOnlineSim().radioSettings.technologyPreference !== "")
1033- when: getOnlineSim()
1034- }
1035-
1036- Connections {
1037- target: sims[0].radioSettings
1038- onTechnologyPreferenceChanged: {
1039- if (sims[0].connMan.powered) {
1040- selector.selectedIndex = selector.model.indexOf(preference);
1041- }
1042- }
1043- }
1044-
1045- Connections {
1046- target: sims[1].radioSettings
1047- onTechnologyPreferenceChanged: {
1048- if (sims[1].connMan.powered) {
1049- selector.selectedIndex = selector.model.indexOf(preference);
1050- }
1051- }
1052- }
1053-
1054 ListItem.Standard {
1055 id: dataRoamingItem
1056- objectName: "dataRoamingSwitch"
1057 text: i18n.tr("Data roaming")
1058 enabled: use.selectedIndex !== 0
1059 control: Switch {
1060 id: dataRoamingControl
1061- onClicked: getOnlineSim().connMan.roamingAllowed = checked
1062+ objectName: "roaming"
1063+
1064+ property bool serverChecked: poweredSim && poweredSim.connMan.roamingAllowed
1065+ onServerCheckedChanged: checked = serverChecked
1066+ Component.onCompleted: checked = serverChecked
1067+ onTriggered: {
1068+ if (poweredSim) {
1069+ poweredSim.connMan.roamingAllowed = checked;
1070+ }
1071+ }
1072 }
1073- }
1074-
1075- Binding {
1076- target: dataRoamingControl
1077- property: "checked"
1078- value: getOnlineSim() && getOnlineSim().connMan.roamingAllowed
1079- when: getOnlineSim()
1080+ showDivider: false
1081 }
1082 }
1083
1084=== modified file 'plugins/cellular/Components/MultiSim.qml'
1085--- plugins/cellular/Components/MultiSim.qml 2014-10-06 19:38:06 +0000
1086+++ plugins/cellular/Components/MultiSim.qml 2014-11-07 22:38:03 +0000
1087@@ -23,21 +23,26 @@
1088 import Ubuntu.Components.ListItems 0.1 as ListItem
1089
1090 Column {
1091-
1092 objectName: "multiSim"
1093
1094 property var sims
1095+ property var poweredSim: {
1096+ var s = null;
1097+ sims.forEach(function (sim) {
1098+ if (sim.connMan.powered === true) {
1099+ s = sim;
1100+ }
1101+ });
1102+ return s;
1103+ }
1104 property var modems
1105-
1106 // make settings available to all children of root
1107 property var settings: phoneSettings
1108
1109- CellularMultiSim {
1110- anchors { left: parent.left; right: parent.right }
1111+ DataMultiSim {
1112+ anchors { left: parent.left; right: parent.right }
1113 }
1114
1115- ListItem.Divider {}
1116-
1117 ListItem.SingleValue {
1118 text : i18n.tr("Hotspot disabled because Wi-Fi is off.")
1119 visible: showAllUI && !hotspotItem.visible
1120@@ -60,15 +65,14 @@
1121 visible: showAllUI
1122 }
1123
1124- ListItem.Divider {
1125- visible: hotspotItem.visible || dataUsage.visible
1126- }
1127+ ListItem.Divider {}
1128
1129 ListItem.SingleValue {
1130 text: i18n.tr("Carriers")
1131 id: chooseCarrier
1132- objectName: "chooseCarrier"
1133+ objectName: "carriers"
1134 progression: enabled
1135+ showDivider: false
1136 onClicked: {
1137 pageStack.push(Qt.resolvedUrl("../PageChooseCarriers.qml"), {
1138 sims: sims
1139@@ -88,6 +92,44 @@
1140 anchors { left: parent.left; right: parent.right }
1141 }
1142
1143+ ListItem.Divider {}
1144+
1145+ function techToString (tech) {
1146+ return {
1147+ 'gsm': i18n.tr("2G only (saves battery)"),
1148+ 'umts': i18n.tr("2G/3G (faster)"),
1149+ 'lte': i18n.tr("2G/3G/4G (faster)")
1150+ }[tech]
1151+ }
1152+
1153+ ListItem.ItemSelector {
1154+ id: radio
1155+ expanded: true
1156+ text: i18n.tr("Connection type:")
1157+ model: poweredSim ? poweredSim.radioSettings.modemTechnologies : []
1158+ delegate: OptionSelectorDelegate {
1159+ objectName: poweredSim.path + "_radio_" + modelData
1160+ text: techToString(modelData)
1161+ }
1162+ enabled: poweredSim ?
1163+ (poweredSim.radioSettings.technologyPreference !== "") : false
1164+ visible: poweredSim
1165+ selectedIndex: poweredSim ?
1166+ model.indexOf(poweredSim.radioSettings.technologyPreference) : -1
1167+ onDelegateClicked: {
1168+ poweredSim.radioSettings.technologyPreference = model[index];
1169+ }
1170+ }
1171+
1172+ Connections {
1173+ target: poweredSim ? poweredSim.radioSettings : null
1174+ onTechnologyPreferenceChanged: {
1175+ radio.selectedIndex =
1176+ poweredSim.radioSettings.modemTechnologies.indexOf(preference)
1177+ }
1178+ ignoreUnknownSignals: true
1179+ }
1180+
1181 GSettings {
1182 id: phoneSettings
1183 schema.id: "com.ubuntu.phone"
1184
1185=== modified file 'plugins/cellular/Components/NoSim.qml'
1186--- plugins/cellular/Components/NoSim.qml 2014-08-19 10:58:01 +0000
1187+++ plugins/cellular/Components/NoSim.qml 2014-11-07 22:38:03 +0000
1188@@ -25,27 +25,20 @@
1189
1190 objectName: "noSim"
1191
1192- ListItem.ItemSelector {
1193+ ListItem.Standard {
1194 text: i18n.tr("Cellular data:")
1195- expanded: true
1196 enabled: false
1197- model: [i18n.tr("Off"), i18n.tr("2G only (saves battery)"), i18n.tr("2G/3G/4G (faster)")]
1198- selectedIndex: -1
1199+ control: Switch {
1200+ checked: false
1201+ }
1202 }
1203
1204 ListItem.Standard {
1205 text: i18n.tr("Data roaming")
1206 enabled: false
1207+ showDivider: false
1208 control: Switch {
1209 checked: false
1210 }
1211 }
1212-
1213- ListItem.Divider {}
1214-
1215- ListItem.SingleValue {
1216- text: i18n.tr("Carrier");
1217- value: i18n.tr("N/A")
1218- enabled: false
1219- }
1220 }
1221
1222=== added file 'plugins/cellular/Components/RadioSingleSim.qml'
1223--- plugins/cellular/Components/RadioSingleSim.qml 1970-01-01 00:00:00 +0000
1224+++ plugins/cellular/Components/RadioSingleSim.qml 2014-11-07 22:38:03 +0000
1225@@ -0,0 +1,57 @@
1226+/*
1227+ * Copyright (C) 2014 Canonical Ltd
1228+ *
1229+ * This program is free software: you can redistribute it and/or modify
1230+ * it under the terms of the GNU General Public License version 3 as
1231+ * published by the Free Software Foundation.
1232+ *
1233+ * This program is distributed in the hope that it will be useful,
1234+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1235+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1236+ * GNU General Public License for more details.
1237+ *
1238+ * You should have received a copy of the GNU General Public License
1239+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
1240+ *
1241+ * Authors:
1242+ * Jonas G. Drange <jonas.drange@canonical.com>
1243+ *
1244+*/
1245+import QtQuick 2.0
1246+import Ubuntu.Components 0.1
1247+import Ubuntu.Components.ListItems 0.1 as ListItem
1248+
1249+Column {
1250+ height: childrenRect.height
1251+
1252+ property alias selector: selector
1253+
1254+ ListItem.ItemSelector {
1255+ id: selector
1256+ text: i18n.tr("Connection type:")
1257+ showDivider: false
1258+ expanded: true
1259+
1260+ // an empty string is not a valid preference, which means
1261+ // we disregard the interace and disable the selector
1262+ enabled: sim.radioSettings.technologyPreference !== ""
1263+ model: sim.radioSettings.modemTechnologies
1264+
1265+ delegate: OptionSelectorDelegate {
1266+ objectName: sim.path + "_radio_" + modelData
1267+ text: {
1268+ return {
1269+ 'gsm': i18n.tr("2G only (saves battery)"),
1270+ 'umts': i18n.tr("2G/3G (faster)"),
1271+ 'lte': i18n.tr("2G/3G/4G (faster)")
1272+ }[modelData]
1273+ }
1274+ showDivider: false
1275+ }
1276+ selectedIndex: model.indexOf(sim.radioSettings.technologyPreference)
1277+ onDelegateClicked: {
1278+ sim.radioSettings.technologyPreference = model[index];
1279+ }
1280+ }
1281+
1282+}
1283
1284=== modified file 'plugins/cellular/Components/SimEditor.qml'
1285--- plugins/cellular/Components/SimEditor.qml 2014-08-20 13:48:58 +0000
1286+++ plugins/cellular/Components/SimEditor.qml 2014-11-07 22:38:03 +0000
1287@@ -22,15 +22,9 @@
1288 import Ubuntu.Components.ListItems 0.1 as ListItem
1289
1290 Column {
1291-
1292 id: simList
1293 objectName: "simEditor"
1294
1295- anchors {
1296- left: parent.left
1297- right: parent.right
1298- }
1299-
1300 states: [
1301 State {
1302 name: "editing"
1303@@ -73,7 +67,25 @@
1304 }
1305 ]
1306
1307+ NumberAnimation {
1308+ id: scrollerAnimation
1309+ duration: UbuntuAnimation.SnapDuration
1310+ easing: UbuntuAnimation.StandardEasing
1311+ target: root.flickable
1312+ property: "contentY"
1313+ }
1314+
1315+ function openedEditor () {
1316+ var flickable = scrollerAnimation.target;
1317+ var maxFlick = Math.max(0, flickable.contentHeight - root.height);
1318+ scrollerAnimation.from = flickable.contentY;
1319+ scrollerAnimation.to = Math.min(y, maxFlick) - units.gu(9); // header
1320+ scrollerAnimation.start();
1321+ nameField.forceActiveFocus();
1322+ }
1323+
1324 ListItem.Standard {
1325+ id: std
1326 text: i18n.tr("Edit SIM Name")
1327 }
1328
1329@@ -83,12 +95,14 @@
1330 right: parent.right
1331 }
1332 height: expandedItem ?
1333- childrenRect.height + editor.height : childrenRect.height
1334+ expandedItem.expandedHeight : childrenRect.height
1335+
1336+ boundsBehavior: Flickable.StopAtBounds
1337
1338 ListItem.Expandable {
1339 id: sim1Exp
1340 expandedHeight: sim1Col.height
1341- objectName: "editSim1"
1342+ objectName: "edit_name_" + sims[0].path
1343 Column {
1344 id: sim1Col
1345 anchors {
1346@@ -102,7 +116,7 @@
1347 }
1348 height: sim1Exp.collapsedHeight
1349 Label {
1350- objectName: "simLabel1"
1351+ objectName: "label_" + sims[0].path
1352 anchors {
1353 left: parent.left
1354 right: parent.right
1355@@ -117,14 +131,15 @@
1356 }
1357 onClicked: {
1358 simList.state = "editingSim1";
1359- nameField.forceActiveFocus();
1360+ simList.openedEditor();
1361 }
1362 }
1363
1364 ListItem.Expandable {
1365 id: sim2Exp
1366 expandedHeight: sim2Col.height
1367- objectName: "editSim2"
1368+ objectName: "edit_name_" + sims[1].path
1369+ showDivider: false
1370 Column {
1371 id: sim2Col
1372 anchors {
1373@@ -138,7 +153,7 @@
1374 }
1375 height: sim2Exp.collapsedHeight
1376 Label {
1377- objectName: "simLabel2"
1378+ objectName: "label_" + sims[1].path
1379 anchors {
1380 left: parent.left
1381 right: parent.right
1382@@ -153,7 +168,7 @@
1383 }
1384 onClicked: {
1385 simList.state = "editingSim2";
1386- nameField.forceActiveFocus();
1387+ simList.openedEditor();
1388 }
1389 }
1390 }
1391@@ -182,6 +197,8 @@
1392
1393 spacing: units.gu(2)
1394
1395+ height: cancel.height + rename.height
1396+
1397 Button {
1398 id: cancel
1399 objectName: "cancelRename"
1400@@ -204,7 +221,7 @@
1401 }
1402
1403 Item {
1404- height: units.gu(1)
1405+ height: units.gu(2)
1406 width: parent.width
1407 }
1408
1409
1410=== modified file 'plugins/cellular/Components/SingleSim.qml'
1411--- plugins/cellular/Components/SingleSim.qml 2014-10-02 09:50:11 +0000
1412+++ plugins/cellular/Components/SingleSim.qml 2014-11-07 22:38:03 +0000
1413@@ -27,11 +27,35 @@
1414
1415 property var sim
1416
1417- CellularSingleSim {
1418- anchors { left: parent.left; right: parent.right }
1419- }
1420-
1421- ListItem.Divider {}
1422+ ListItem.Standard {
1423+ id: selector
1424+ text: i18n.tr("Cellular data:")
1425+ control: Switch {
1426+ id: dataControl
1427+ objectName: 'data'
1428+
1429+ property bool serverChecked: sim.connMan.powered
1430+ onServerCheckedChanged: checked = serverChecked
1431+ Component.onCompleted: checked = serverChecked
1432+ onTriggered: sim.connMan.powered = checked
1433+ }
1434+ }
1435+
1436+ ListItem.Standard {
1437+ id: dataRoamingItem
1438+ text: i18n.tr("Data roaming")
1439+ enabled: sim.connMan.powered
1440+ showDivider: false
1441+ control: Switch {
1442+ id: dataRoamingControl
1443+ objectName: "roaming"
1444+
1445+ property bool serverChecked: sim.connMan.roamingAllowed
1446+ onServerCheckedChanged: checked = serverChecked
1447+ Component.onCompleted: checked = serverChecked
1448+ onTriggered: sim.connMan.roamingAllowed = checked
1449+ }
1450+ }
1451
1452 ListItem.SingleValue {
1453 text : i18n.tr("Hotspot disabled because Wi-Fi is off.")
1454@@ -54,10 +78,22 @@
1455 visible: showAllUI
1456 }
1457
1458+ ListItem.Divider {
1459+ visible: radio.selector.model.length
1460+ }
1461+
1462+ RadioSingleSim {
1463+ id: radio
1464+ anchors { left: parent.left; right: parent.right }
1465+ visible: radio.selector.model.length
1466+ }
1467+
1468+ ListItem.Divider {}
1469+
1470 ListItem.SingleValue {
1471 text: i18n.tr("Carrier");
1472 id: chooseCarrier
1473- objectName: "chooseCarrier"
1474+ objectName: "carrier"
1475 progression: enabled
1476 value: sim.netReg.name || i18n.tr("N/A")
1477 enabled: sim.netReg.status !== ""
1478
1479=== modified file 'plugins/cellular/CustomApnEditor.qml'
1480--- plugins/cellular/CustomApnEditor.qml 2014-10-06 14:28:46 +0000
1481+++ plugins/cellular/CustomApnEditor.qml 2014-11-07 22:38:03 +0000
1482@@ -198,7 +198,7 @@
1483 inputMethodHints: Qt.ImhUrlCharactersOnly | Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText
1484 }
1485 Label {
1486- text: "Port"
1487+ text: i18n.tr("Port")
1488 visible: d.isMms
1489 }
1490 TextField {
1491
1492=== modified file 'plugins/cellular/PageChooseCarrier.qml'
1493--- plugins/cellular/PageChooseCarrier.qml 2014-10-06 12:56:18 +0000
1494+++ plugins/cellular/PageChooseCarrier.qml 2014-11-07 22:38:03 +0000
1495@@ -149,7 +149,7 @@
1496
1497 ListItem.ItemSelector {
1498 id: chooseCarrier
1499- objectName: "autoChooseCarrierSelector"
1500+ objectName: "mode"
1501 expanded: true
1502 enabled: sim.netReg.mode !== "auto-only"
1503 text: i18n.tr("Choose carrier:")
1504@@ -171,6 +171,7 @@
1505 }
1506 }
1507 }
1508+
1509 ListItem.SingleControl {
1510 enabled: chooseCarrier.selectedIndex === 1
1511 anchors {
1512@@ -198,7 +199,7 @@
1513 }
1514 ListItem.ItemSelector {
1515 id: carrierSelector
1516- objectName: "carrierSelector"
1517+ objectName: "carriers"
1518 expanded: true
1519 enabled: sim.netReg.status !== "searching" && chooseCarrier.selectedIndex === 1
1520 // work around ItemSelector not having a visual change depending on being disabled
1521
1522=== modified file 'plugins/cellular/PageChooseCarriers.qml'
1523--- plugins/cellular/PageChooseCarriers.qml 2014-10-06 19:38:06 +0000
1524+++ plugins/cellular/PageChooseCarriers.qml 2014-11-07 22:38:03 +0000
1525@@ -44,7 +44,7 @@
1526 }
1527
1528 ListItem.SingleValue {
1529- objectName: "chooseCarrierSim1"
1530+ objectName: sims[0].path + "_carriers"
1531 value: sims[0].netReg.name ? sims[0].netReg.name : i18n.tr("N/A")
1532 enabled: sims[0].netReg.status !== ""
1533 progression: true
1534@@ -61,7 +61,7 @@
1535 }
1536
1537 ListItem.SingleValue {
1538- objectName: "chooseCarrierSim2"
1539+ objectName: sims[1].path + "_carriers"
1540 value: sims[1].netReg.name ? sims[1].netReg.name : i18n.tr("N/A")
1541 enabled: sims[1].netReg.status !== ""
1542 progression: true
1543
1544=== modified file 'plugins/cellular/PageComponent.qml'
1545--- plugins/cellular/PageComponent.qml 2014-10-17 14:57:17 +0000
1546+++ plugins/cellular/PageComponent.qml 2014-11-07 22:38:03 +0000
1547@@ -94,15 +94,15 @@
1548 start()
1549 }
1550 }
1551+
1552 Flickable {
1553+ id: flick
1554 anchors.fill: parent
1555 contentWidth: parent.width
1556 contentHeight: contentItem.childrenRect.height
1557 boundsBehavior: (contentHeight > root.height) ? Flickable.DragAndOvershootBounds : Flickable.StopAtBounds
1558-
1559 Column {
1560 anchors { left: parent.left; right: parent.right }
1561-
1562 Loader {
1563 id: loader
1564 anchors { left: parent.left; right: parent.right }
1565
1566=== modified file 'plugins/cellular/sims.js'
1567--- plugins/cellular/sims.js 2014-10-03 14:08:08 +0000
1568+++ plugins/cellular/sims.js 2014-11-07 22:38:03 +0000
1569@@ -17,6 +17,16 @@
1570 return getPresent()[0];
1571 }
1572
1573+function getFirstOnline () {
1574+ var online = null;
1575+ getPresent().forEach(function (sim) {
1576+ if (sim.connMan.powered === true) {
1577+ online = sim;
1578+ }
1579+ });
1580+ return online;
1581+}
1582+
1583 function getCount () {
1584 return getAll().length;
1585 }
1586
1587=== modified file 'plugins/flight-mode/EntryComponent.qml'
1588--- plugins/flight-mode/EntryComponent.qml 2014-06-12 08:19:01 +0000
1589+++ plugins/flight-mode/EntryComponent.qml 2014-11-07 22:38:03 +0000
1590@@ -29,13 +29,13 @@
1591 iconFrame: false
1592 text: i18n.tr(model.displayName)
1593 control: Switch {
1594- id: control
1595- checked: helper.inFlightMode
1596+ property bool serverChecked: helper.inFlightMode
1597+ onServerCheckedChanged: checked = serverChecked
1598+ Component.onCompleted: checked = serverChecked
1599 onTriggered: helper.setFlightMode(checked)
1600 }
1601
1602 FlightMode.Helper {
1603 id: helper
1604- onInFlightModeChanged: control.checked = inFlightMode
1605 }
1606 }
1607
1608=== modified file 'plugins/language/DisplayLanguage.qml'
1609--- plugins/language/DisplayLanguage.qml 2014-09-03 22:01:57 +0000
1610+++ plugins/language/DisplayLanguage.qml 2014-11-07 22:38:03 +0000
1611@@ -73,7 +73,6 @@
1612
1613 onCurrentIndexChanged: {
1614 i18n.language = plugin.languageCodes[currentIndex]
1615- i18n.domain = i18n.domain
1616 }
1617 }
1618
1619@@ -107,7 +106,6 @@
1620
1621 onClicked: {
1622 i18n.language = initialLanguage
1623- i18n.domain = i18n.domain
1624 PopupUtils.close(root)
1625 }
1626 }
1627
1628=== modified file 'plugins/language/PageComponent.qml'
1629--- plugins/language/PageComponent.qml 2014-09-03 14:43:44 +0000
1630+++ plugins/language/PageComponent.qml 2014-11-07 22:38:03 +0000
1631@@ -71,6 +71,7 @@
1632 }
1633 onRevert: {
1634 plugin.currentLanguage = to;
1635+ i18n.language = plugin.languageCodes[to]
1636 }
1637 }
1638 }
1639@@ -142,9 +143,10 @@
1640 text: i18n.tr("Spell checking")
1641
1642 control: Switch {
1643- checked: settings.spellChecking
1644-
1645- onClicked: settings.spellChecking = checked
1646+ property bool serverChecked: settings.spellChecking
1647+ onServerCheckedChanged: checked = serverChecked
1648+ Component.onCompleted: checked = serverChecked
1649+ onTriggered: settings.spellChecking = checked
1650 }
1651 }
1652
1653@@ -152,9 +154,10 @@
1654 text: i18n.tr("Auto correction")
1655
1656 control: Switch {
1657- checked: settings.autoCompletion
1658-
1659- onClicked: settings.autoCompletion = checked
1660+ property bool serverChecked: settings.autoCompletion
1661+ onServerCheckedChanged: checked = serverChecked
1662+ Component.onCompleted: checked = serverChecked
1663+ onTriggered: settings.autoCompletion = checked
1664 }
1665 }
1666
1667@@ -162,9 +165,10 @@
1668 text: i18n.tr("Word suggestions")
1669
1670 control: Switch {
1671- checked: settings.predictiveText
1672-
1673- onClicked: settings.predictiveText = checked
1674+ property bool serverChecked: settings.predictiveText
1675+ onServerCheckedChanged: checked = serverChecked
1676+ Component.onCompleted: checked = serverChecked
1677+ onTriggered: settings.predictiveText = checked
1678 }
1679 }
1680
1681@@ -175,9 +179,10 @@
1682 text: i18n.tr("Auto capitalization")
1683
1684 control: Switch {
1685- checked: settings.autoCapitalization
1686-
1687- onClicked: settings.autoCapitalization = checked
1688+ property bool serverChecked: settings.autoCapitalization
1689+ onServerCheckedChanged: checked = serverChecked
1690+ Component.onCompleted: checked = serverChecked
1691+ onTriggered: settings.autoCapitalization = checked
1692 }
1693 }
1694
1695@@ -192,9 +197,10 @@
1696 text: i18n.tr("Auto punctuation")
1697
1698 control: Switch {
1699- checked: settings.doubleSpaceFullStop
1700-
1701- onClicked: settings.doubleSpaceFullStop = checked
1702+ property bool serverChecked: settings.doubleSpaceFullStop
1703+ onServerCheckedChanged: checked = serverChecked
1704+ Component.onCompleted: checked = serverChecked
1705+ onTriggered: settings.doubleSpaceFullStop = checked
1706 }
1707 }
1708
1709@@ -209,9 +215,10 @@
1710 text: i18n.tr("Keyboard sound")
1711
1712 control: Switch {
1713- checked: settings.keyPressFeedback
1714-
1715- onClicked: settings.keyPressFeedback = checked
1716+ property bool serverChecked: settings.keyPressFeedback
1717+ onServerCheckedChanged: checked = serverChecked
1718+ Component.onCompleted: checked = serverChecked
1719+ onTriggered: settings.keyPressFeedback = checked
1720 }
1721 }
1722
1723@@ -219,9 +226,10 @@
1724 text: i18n.tr("Keyboard vibration")
1725
1726 control: Switch {
1727- checked: settings.keyPressHapticFeedback
1728-
1729- onClicked: settings.keyPressHapticFeedback = checked
1730+ property bool serverChecked: settings.keyPressHapticFeedback
1731+ onServerCheckedChanged: checked = serverChecked
1732+ Component.onCompleted: checked = serverChecked
1733+ onTriggered: settings.keyPressHapticFeedback = checked
1734 }
1735 }
1736 }
1737
1738=== modified file 'plugins/language/SpellChecking.qml'
1739--- plugins/language/SpellChecking.qml 2014-01-30 11:32:47 +0000
1740+++ plugins/language/SpellChecking.qml 2014-11-07 22:38:03 +0000
1741@@ -18,6 +18,8 @@
1742 * with this program. If not, see <http://www.gnu.org/licenses/>.
1743 */
1744
1745+import QtQuick 2.0
1746+import GSettings 1.0
1747 import SystemSettings 1.0
1748 import Ubuntu.Components 0.1
1749 import Ubuntu.Components.ListItems 0.1 as ListItem
1750@@ -30,15 +32,22 @@
1751 id: plugin
1752 }
1753
1754+ GSettings {
1755+ id: settings
1756+
1757+ schema.id: "com.canonical.keyboard.maliit"
1758+ }
1759+
1760 ListItem.Standard {
1761 id: item
1762
1763 text: i18n.tr("Spell checking")
1764
1765 control: Switch {
1766- checked: plugin.spellChecking
1767-
1768- onClicked: plugin.spellChecking = checked
1769+ property bool serverChecked: settings.spellChecking
1770+ onServerCheckedChanged: checked = serverChecked
1771+ Component.onCompleted: checked = serverChecked
1772+ onTriggered: settings.spellChecking = checked
1773 }
1774 }
1775
1776
1777=== modified file 'plugins/notifications/PageComponent.qml'
1778--- plugins/notifications/PageComponent.qml 2014-08-29 09:17:39 +0000
1779+++ plugins/notifications/PageComponent.qml 2014-11-07 22:38:03 +0000
1780@@ -46,6 +46,7 @@
1781 margins: units.gu(1)
1782 }
1783 }
1784+ highlightWhenPressed: false
1785 }
1786
1787 ListView {
1788
1789=== modified file 'plugins/orientation-lock/EntryComponent.qml'
1790--- plugins/orientation-lock/EntryComponent.qml 2014-09-04 11:47:52 +0000
1791+++ plugins/orientation-lock/EntryComponent.qml 2014-11-07 22:38:03 +0000
1792@@ -33,10 +33,12 @@
1793 control: Switch {
1794 id: control
1795 objectName: "orientationLockSwitch"
1796- checked: systemSettings.rotationLock
1797- onClicked: {
1798- systemSettings.rotationLock = checked
1799- }
1800+
1801+ property bool serverChecked: systemSettings.rotationLock
1802+ onServerCheckedChanged: checked = serverChecked
1803+ Component.onCompleted: checked = serverChecked
1804+ onTriggered: systemSettings.rotationLock = checked
1805+
1806 GSettings {
1807 id: systemSettings
1808 schema.id: "com.ubuntu.touch.system"
1809
1810=== modified file 'plugins/phone/PageComponent.qml'
1811--- plugins/phone/PageComponent.qml 2014-10-03 14:08:08 +0000
1812+++ plugins/phone/PageComponent.qml 2014-11-07 22:38:03 +0000
1813@@ -104,8 +104,10 @@
1814 ListItem.Standard {
1815 control: Switch {
1816 objectName: "dialpadSounds"
1817- checked: soundPlugin.dialpadSoundsEnabled
1818- onCheckedChanged: soundPlugin.dialpadSoundsEnabled = checked
1819+ property bool serverChecked: soundPlugin.dialpadSoundsEnabled
1820+ onServerCheckedChanged: checked = serverChecked
1821+ Component.onCompleted: checked = serverChecked
1822+ onTriggered: soundPlugin.dialpadSoundsEnabled = checked
1823 }
1824 text: i18n.tr("Dialpad sounds")
1825 }
1826
1827=== modified file 'plugins/reset/ResetLauncherHome.qml'
1828--- plugins/reset/ResetLauncherHome.qml 2014-09-30 11:38:35 +0000
1829+++ plugins/reset/ResetLauncherHome.qml 2014-11-07 22:38:03 +0000
1830@@ -55,11 +55,5 @@
1831 text: i18n.tr("Cancel")
1832 onClicked: PopupUtils.close(dialog)
1833 }
1834- Label {
1835- text: i18n.tr("The phone needs to restart for changes to take effect.")
1836- width: parent.width
1837- wrapMode: Text.Wrap
1838- horizontalAlignment: Text.AlignHCenter
1839- }
1840 }
1841 }
1842
1843=== modified file 'plugins/security-privacy/Location.qml'
1844--- plugins/security-privacy/Location.qml 2014-10-21 13:17:01 +0000
1845+++ plugins/security-privacy/Location.qml 2014-11-07 22:38:03 +0000
1846@@ -90,6 +90,10 @@
1847 anchors.left: parent.left
1848 anchors.right: parent.right
1849
1850+ SettingsItemTitle {
1851+ text: i18n.tr("Let the phone detect your location:")
1852+ }
1853+
1854 ListItem.ItemSelector {
1855 id: detection
1856
1857@@ -112,7 +116,6 @@
1858 }
1859 property bool allow: selectedIndex !== (model.count - 1)
1860
1861- text: i18n.tr("Let the phone detect your location:")
1862 expanded: true
1863 model: optionsModel
1864 delegate: optionsDelegate
1865@@ -220,9 +223,7 @@
1866 visible: showAllUI /* hide until the information is real */
1867 }
1868
1869- ListItem.Divider {}
1870-
1871- ListItem.Standard {
1872+ SettingsItemTitle {
1873 text: i18n.tr("Allow access to location:")
1874 enabled: detection.allow
1875 }
1876
1877=== modified file 'plugins/security-privacy/LockSecurity.qml'
1878--- plugins/security-privacy/LockSecurity.qml 2014-09-22 15:21:10 +0000
1879+++ plugins/security-privacy/LockSecurity.qml 2014-11-07 22:38:03 +0000
1880@@ -340,7 +340,7 @@
1881 anchors.left: parent.left
1882 anchors.right: parent.right
1883
1884- ListItem.Standard {
1885+ SettingsItemTitle {
1886 text: i18n.tr("Unlock the phone using:")
1887 }
1888
1889
1890=== modified file 'plugins/security-privacy/PageComponent.qml'
1891--- plugins/security-privacy/PageComponent.qml 2014-10-16 13:43:16 +0000
1892+++ plugins/security-privacy/PageComponent.qml 2014-11-07 22:38:03 +0000
1893@@ -121,7 +121,7 @@
1894 anchors.left: parent.left
1895 anchors.right: parent.right
1896
1897- ListItem.Standard {
1898+ ListItem.Header {
1899 id: securityTitle
1900 text: i18n.tr("Security")
1901 }
1902@@ -181,35 +181,29 @@
1903 "Encryption protects against access to phone data when the phone is connected to a PC or other device.")
1904 visible: showAllUI
1905 }
1906- ListItem.Standard {
1907+ ListItem.Header {
1908 text: i18n.tr("Privacy")
1909 }
1910 ListItem.Standard {
1911 text: i18n.tr("Stats on welcome screen")
1912 control: Switch {
1913- id: welcomeStatsSwitch
1914- checked: securityPrivacy.statsWelcomeScreen
1915+ property bool serverChecked: securityPrivacy.statsWelcomeScreen
1916+ onServerCheckedChanged: checked = serverChecked
1917+ Component.onCompleted: checked = serverChecked
1918+ onTriggered: securityPrivacy.statsWelcomeScreen = checked
1919 }
1920 }
1921- Binding {
1922- target: securityPrivacy
1923- property: "statsWelcomeScreen"
1924- value: welcomeStatsSwitch.checked
1925- }
1926
1927 ListItem.Standard {
1928 text: i18n.tr("Messages on welcome screen")
1929 control: Switch {
1930- id: welcomeMessagesSwitch
1931- checked: securityPrivacy.messagesWelcomeScreen
1932+ property bool serverChecked: securityPrivacy.messagesWelcomeScreen
1933+ onServerCheckedChanged: checked = serverChecked
1934+ Component.onCompleted: checked = serverChecked
1935+ onTriggered: securityPrivacy.messagesWelcomeScreen = checked
1936 }
1937 visible: showAllUI
1938 }
1939- Binding {
1940- target: securityPrivacy
1941- property: "messagesWelcomeScreen"
1942- value: welcomeMessagesSwitch.checked
1943- }
1944
1945 ListItem.SingleValue {
1946 id: dashSearchId
1947
1948=== modified file 'plugins/security-privacy/PhoneLocking.qml'
1949--- plugins/security-privacy/PhoneLocking.qml 2014-09-22 15:21:10 +0000
1950+++ plugins/security-privacy/PhoneLocking.qml 2014-11-07 22:38:03 +0000
1951@@ -102,7 +102,7 @@
1952 visible: showAllUI
1953 }
1954
1955- ListItem.Standard {
1956+ SettingsItemTitle {
1957 text: i18n.tr("When locked, allow:")
1958 }
1959
1960@@ -111,8 +111,11 @@
1961 control: CheckBox {
1962 id: launcherCheck
1963 enabled: securityPrivacy.securityType !== UbuntuSecurityPrivacyPanel.Swipe
1964- checked: securityPrivacy.enableLauncherWhileLocked || !enabled
1965- onClicked: securityPrivacy.enableLauncherWhileLocked = checked
1966+
1967+ property bool serverChecked: securityPrivacy.enableLauncherWhileLocked || !enabled
1968+ onServerCheckedChanged: checked = serverChecked
1969+ Component.onCompleted: checked = serverChecked
1970+ onTriggered: securityPrivacy.enableLauncherWhileLocked = checked
1971 }
1972 }
1973
1974@@ -121,8 +124,11 @@
1975 control: CheckBox {
1976 id: indicatorsCheck
1977 enabled: securityPrivacy.securityType !== UbuntuSecurityPrivacyPanel.Swipe
1978- checked: securityPrivacy.enableIndicatorsWhileLocked || !enabled
1979- onClicked: securityPrivacy.enableIndicatorsWhileLocked = checked
1980+
1981+ property bool serverChecked: securityPrivacy.enableIndicatorsWhileLocked || !enabled
1982+ onServerCheckedChanged: checked = serverChecked
1983+ Component.onCompleted: checked = serverChecked
1984+ onTriggered: securityPrivacy.enableIndicatorsWhileLocked = checked
1985 }
1986 }
1987
1988
1989=== modified file 'plugins/sound/PageComponent.qml'
1990--- plugins/sound/PageComponent.qml 2014-10-17 15:02:18 +0000
1991+++ plugins/sound/PageComponent.qml 2014-11-07 22:38:03 +0000
1992@@ -70,13 +70,15 @@
1993 ListItem.Standard {
1994 control: Switch {
1995 objectName: "silentMode"
1996- checked: backendInfo.silentMode
1997- onCheckedChanged: backendInfo.silentMode = checked
1998+ property bool serverChecked: backendInfo.silentMode
1999+ onServerCheckedChanged: checked = serverChecked
2000+ Component.onCompleted: checked = serverChecked
2001+ onTriggered: backendInfo.silentMode = checked
2002 }
2003 text: i18n.tr("Silent Mode")
2004 }
2005
2006- ListItem.Standard {
2007+ SettingsItemTitle {
2008 text: i18n.tr("Ringer:")
2009 }
2010
2011@@ -108,7 +110,7 @@
2012 onUpdated: soundActionGroup.volume.updateState(value);
2013 }
2014
2015- ListItem.Standard {
2016+ SettingsItemTitle {
2017 text: i18n.tr("Phone calls:")
2018 }
2019
2020@@ -129,8 +131,10 @@
2021 ListItem.Standard {
2022 control: CheckBox {
2023 objectName: "callVibrate"
2024- checked: backendInfo.incomingCallVibrate
2025- onCheckedChanged: backendInfo.incomingCallVibrate = checked
2026+ property bool serverChecked: backendInfo.incomingCallVibrate
2027+ onServerCheckedChanged: checked = serverChecked
2028+ Component.onCompleted: checked = serverChecked
2029+ onTriggered: backendInfo.incomingCallVibrate = checked
2030 }
2031 text: i18n.tr("Vibrate when ringing")
2032 }
2033@@ -138,8 +142,10 @@
2034 ListItem.Standard {
2035 control: CheckBox {
2036 objectName: "callVibrateSilentMode"
2037- checked: backendInfo.incomingCallVibrateSilentMode
2038- onCheckedChanged: backendInfo.incomingCallVibrateSilentMode = checked
2039+ property bool serverChecked: backendInfo.incomingCallVibrateSilentMode
2040+ onServerCheckedChanged: checked = serverChecked
2041+ Component.onCompleted: checked = serverChecked
2042+ onTriggered: backendInfo.incomingCallVibrateSilentMode = checked
2043 }
2044 text: i18n.tr("Vibrate in Silent Mode")
2045 }
2046@@ -147,13 +153,15 @@
2047 ListItem.Standard {
2048 control: Switch {
2049 objectName: "dialpadSounds"
2050- checked: backendInfo.dialpadSoundsEnabled
2051- onCheckedChanged: backendInfo.dialpadSoundsEnabled = checked
2052+ property bool serverChecked: backendInfo.dialpadSoundsEnabled
2053+ onServerCheckedChanged: checked = serverChecked
2054+ Component.onCompleted: checked = serverChecked
2055+ onTriggered: backendInfo.dialpadSoundsEnabled = checked
2056 }
2057 text: i18n.tr("Dialpad sounds")
2058 }
2059
2060- ListItem.Standard {
2061+ SettingsItemTitle {
2062 text: i18n.tr("Messages:")
2063 }
2064
2065@@ -173,8 +181,10 @@
2066 ListItem.Standard {
2067 control: CheckBox {
2068 objectName: "messageVibrate"
2069- checked: backendInfo.incomingMessageVibrate
2070- onCheckedChanged: backendInfo.incomingMessageVibrate = checked
2071+ property bool serverChecked: backendInfo.incomingMessageVibrate
2072+ onServerCheckedChanged: checked = serverChecked
2073+ Component.onCompleted: checked = serverChecked
2074+ onTriggered: backendInfo.incomingMessageVibrate = checked
2075 }
2076 text: i18n.tr("Vibrate with message sound")
2077 }
2078@@ -182,13 +192,15 @@
2079 ListItem.Standard {
2080 control: CheckBox {
2081 objectName: "messageVibrateSilentMode"
2082- checked: backendInfo.incomingMessageVibrateSilentMode
2083- onCheckedChanged: backendInfo.incomingMessageVibrateSilentMode = checked
2084+ property bool serverChecked: backendInfo.incomingMessageVibrateSilentMode
2085+ onServerCheckedChanged: checked = serverChecked
2086+ Component.onCompleted: checked = serverChecked
2087+ onTriggered: backendInfo.incomingMessageVibrateSilentMode = checked
2088 }
2089 text: i18n.tr("Vibrate in Silent Mode")
2090 }
2091
2092- ListItem.Standard {
2093+ SettingsItemTitle {
2094 text: i18n.tr("Other sounds:")
2095 }
2096
2097@@ -197,9 +209,10 @@
2098
2099 control: Switch {
2100 objectName: "keyboardSoundSwitch"
2101- checked: keyboardSettings.keyPressFeedback
2102-
2103- onClicked: keyboardSettings.keyPressFeedback = checked
2104+ property bool serverChecked: keyboardSettings.keyPressFeedback
2105+ onServerCheckedChanged: checked = serverChecked
2106+ Component.onCompleted: checked = serverChecked
2107+ onTriggered: keyboardSettings.keyPressFeedback = checked
2108 }
2109 }
2110
2111
2112=== modified file 'plugins/sound/sound.cpp'
2113--- plugins/sound/sound.cpp 2014-10-17 14:57:35 +0000
2114+++ plugins/sound/sound.cpp 2014-11-07 22:38:03 +0000
2115@@ -59,6 +59,8 @@
2116 Q_EMIT incomingCallVibrateSilentModeChanged();
2117 } else if (property == "IncomingMessageVibrateSilentMode") {
2118 Q_EMIT incomingMessageVibrateSilentModeChanged();
2119+ } else if (property == "DialpadSoundsEnabled") {
2120+ Q_EMIT dialpadSoundsEnabledChanged();
2121 }
2122 }
2123
2124@@ -72,6 +74,7 @@
2125 Q_EMIT incomingMessageVibrateChanged();
2126 Q_EMIT incomingCallVibrateSilentModeChanged();
2127 Q_EMIT incomingMessageVibrateSilentModeChanged();
2128+ Q_EMIT dialpadSoundsEnabledChanged();
2129 }
2130
2131 QString Sound::getIncomingCallSound()
2132
2133=== modified file 'plugins/system-update/PageComponent.qml'
2134--- plugins/system-update/PageComponent.qml 2014-10-20 20:53:02 +0000
2135+++ plugins/system-update/PageComponent.qml 2014-11-07 22:38:03 +0000
2136@@ -535,11 +535,11 @@
2137 fontSize: "small"
2138 text: {
2139 if (!labelUpdateStatus.visible)
2140- return convert_bytes_to_size(modelData.binaryFilesize);
2141+ return Utilities.formatSize(modelData.binaryFilesize);
2142
2143 return i18n.tr("%1 of %2").arg(
2144- convert_bytes_to_size(modelData.binaryFilesize * (progress.value * 0.01))).arg(
2145- convert_bytes_to_size(modelData.binaryFilesize)
2146+ Utilities.formatSize(modelData.binaryFilesize * (progress.value * 0.01))).arg(
2147+ Utilities.formatSize(modelData.binaryFilesize)
2148 );
2149 }
2150 }
2151@@ -640,12 +640,12 @@
2152 elide: Text.ElideRight
2153 fontSize: "small"
2154 }
2155-
2156+
2157 Label {
2158 id: labelSize
2159 objectName: "labelSize"
2160 anchors.right: parent.right
2161- text: convert_bytes_to_size(modelData.binaryFilesize)
2162+ text: Utilities.formatSize(modelData.binaryFilesize)
2163 fontSize: "small"
2164 visible: !labelUpdateStatus.visible && !installing && !installed
2165 }
2166@@ -773,27 +773,4 @@
2167 onClicked: pageStack.push(Qt.resolvedUrl("Configuration.qml"))
2168 }
2169 }
2170-
2171- function convert_bytes_to_size(bytes) {
2172- var SIZE_IN_GIB = 1024.0 * 1024.0 * 1024.0;
2173- var SIZE_IN_MIB = 1024.0 * 1024.0;
2174- var SIZE_IN_KIB = 1024.0;
2175-
2176- var result = "";
2177- var size = 0;
2178- if (bytes < SIZE_IN_KIB) {
2179- result = bytes + i18n.tr(" bytes");
2180- } else if (bytes < SIZE_IN_MIB) {
2181- size = (bytes / SIZE_IN_KIB).toFixed(1);
2182- result = size + i18n.tr(" KiB");
2183- } else if (bytes < SIZE_IN_GIB) {
2184- size = (bytes / SIZE_IN_MIB).toFixed(1);
2185- result = size + i18n.tr(" MiB");
2186- } else {
2187- size = (bytes / SIZE_IN_GIB).toFixed(1);
2188- result = size + i18n.tr(" GiB");
2189- }
2190-
2191- return result;
2192- }
2193 }
2194
2195=== modified file 'plugins/time-date/PageComponent.qml'
2196--- plugins/time-date/PageComponent.qml 2014-01-29 13:34:37 +0000
2197+++ plugins/time-date/PageComponent.qml 2014-11-07 22:38:03 +0000
2198@@ -50,7 +50,7 @@
2199 Column {
2200 anchors.fill: parent
2201
2202- ListItem.Standard { text: i18n.tr ("Time zone:") }
2203+ SettingsItemTitle { text: i18n.tr ("Time zone:") }
2204
2205 ListItem.SingleValue {
2206 objectName: "timeZone"
2207@@ -62,10 +62,13 @@
2208 onClicked: pageStack.push(Qt.resolvedUrl("ChooseTimeZone.qml"))
2209 }
2210
2211+ SettingsItemTitle {
2212+ text: i18n.tr ("Set the time and date:")
2213+ }
2214+
2215 ListItem.ItemSelector {
2216 id: setTimeAutomatically
2217 objectName: "timeItemSelector"
2218- text: i18n.tr ("Set the time and date:")
2219 model: [ i18n.tr("Automatically") , i18n.tr("Manually")]
2220 expanded: true
2221 onSelectedIndexChanged: {
2222
2223=== modified file 'plugins/wifi/MenuItemFactory.qml'
2224--- plugins/wifi/MenuItemFactory.qml 2014-09-10 15:39:07 +0000
2225+++ plugins/wifi/MenuItemFactory.qml 2014-11-07 22:38:03 +0000
2226@@ -19,6 +19,7 @@
2227
2228 import QtQuick 2.0
2229 import QMenuModel 0.1 as QMenuModel
2230+import Ubuntu.Settings.Menus 0.1 as Menus
2231
2232 Item {
2233 id: menuFactory
2234@@ -66,15 +67,18 @@
2235
2236 Component {
2237 id: switchMenu;
2238- SwitchMenuItem {
2239+ Menus.SwitchMenu {
2240 property QtObject menu: null
2241-
2242- text: menu && menu.label ? menu.label : ""
2243- icon: menu ? menu.icon : ""
2244- checked: menu ? menu.isToggled : false
2245- enabled: menu ? menu.sensitive : false
2246-
2247- onActivate: model.activate(modelIndex);
2248+ property bool serverChecked: menu && menu.isToggled || false
2249+
2250+ text: menu && menu.label || ""
2251+ iconSource: menu && menu.icon || ""
2252+ checked: serverChecked
2253+ enabled: menu && menu.sensitive || false
2254+
2255+ onTriggered: model.activate(modelIndex);
2256+ // Fixes broken check state binding.
2257+ onServerCheckedChanged: checked = serverChecked;
2258 }
2259 }
2260
2261@@ -100,11 +104,12 @@
2262 model: menuFactory.model ? menuFactory.model : null
2263 name: menu ? menu.ext.xCanonicalWifiApStrengthAction : ""
2264 }
2265+ property bool serverChecked: menu && menu.isToggled || false
2266
2267 text: menu && menu.label ? menu.label : ""
2268 secure: menu ? menu.ext.xCanonicalWifiApIsSecure : false
2269 adHoc: menu ? menu.ext.xCanonicalWifiApIsAdhoc : false
2270- checked: menu ? menu.isToggled : false
2271+ checked: serverChecked
2272 signalStrength: strenthAction.valid ? strenthAction.state : 0
2273 enabled: menu ? menu.sensitive : false
2274
2275@@ -114,6 +119,8 @@
2276 'x-canonical-wifi-ap-strength-action': 'string'});
2277 }
2278 onActivate: model.activate(modelIndex);
2279+ // Fixes broken check state binding.
2280+ onServerCheckedChanged: checked = serverChecked;
2281 }
2282 }
2283
2284
2285=== modified file 'plugins/wifi/PageComponent.qml'
2286--- plugins/wifi/PageComponent.qml 2014-09-26 12:52:31 +0000
2287+++ plugins/wifi/PageComponent.qml 2014-11-07 22:38:03 +0000
2288@@ -138,6 +138,8 @@
2289 objectName: "connectToHiddenNetwork"
2290 text: i18n.tr("Connect to hidden network…")
2291 progression: true
2292+ visible : (actionGroup.actionObject.valid ?
2293+ actionGroup.actionObject.state : false)
2294 onClicked: {
2295 otherNetworLoader.source = "OtherNetwork.qml";
2296 PopupUtils.open(otherNetworLoader.item);
2297@@ -155,5 +157,4 @@
2298 Flickable.DragAndOvershootBounds :
2299 Flickable.StopAtBounds
2300 }
2301-
2302 }
2303
2304=== modified file 'po/es.po'
2305--- po/es.po 2014-10-21 07:26:04 +0000
2306+++ po/es.po 2014-11-07 22:38:03 +0000
2307@@ -8,14 +8,14 @@
2308 "Project-Id-Version: ubuntu-system-settings\n"
2309 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2310 "POT-Creation-Date: 2014-10-16 20:04-0600\n"
2311-"PO-Revision-Date: 2014-10-20 22:13+0000\n"
2312+"PO-Revision-Date: 2014-10-29 14:53+0000\n"
2313 "Last-Translator: Víctor R. Ruiz <Unknown>\n"
2314 "Language-Team: Spanish <es@li.org>\n"
2315 "MIME-Version: 1.0\n"
2316 "Content-Type: text/plain; charset=UTF-8\n"
2317 "Content-Transfer-Encoding: 8bit\n"
2318 "Plural-Forms: nplurals=2; plural=n != 1;\n"
2319-"X-Launchpad-Export-Date: 2014-10-21 07:26+0000\n"
2320+"X-Launchpad-Export-Date: 2014-10-30 06:36+0000\n"
2321 "X-Generator: Launchpad (build 17203)\n"
2322
2323 #: ubuntu-system-settings.desktop.in.in.h:1 ../src/qml/MainWindow.qml:112
2324@@ -2360,7 +2360,7 @@
2325 #. TRANSLATORS: This is a keyword or name for the notifications plugin which is used while searching
2326 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:58
2327 msgid "badges"
2328-msgstr ""
2329+msgstr "insignias"
2330
2331 #. TRANSLATORS: This is a keyword or name for the notifications plugin which is used while searching
2332 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:60
2333@@ -2968,42 +2968,3 @@
2334 #: ../push-helper/software_updates_helper.py:151
2335 msgid "Tap to open the system updater."
2336 msgstr "Presione para abrir el actualizador del sistema."
2337-
2338-#~ msgid "Searching"
2339-#~ msgstr "Buscando"
2340-
2341-#~ msgid "Refresh"
2342-#~ msgstr "Actualizar"
2343-
2344-#~ msgid "Remove"
2345-#~ msgstr "Quitar"
2346-
2347-#~ msgid "settings"
2348-#~ msgstr "opciones"
2349-
2350-#~ msgid "i18n"
2351-#~ msgstr "i18n"
2352-
2353-#~ msgid "lang"
2354-#~ msgstr "lengua"
2355-
2356-#~ msgid "Available networks"
2357-#~ msgstr "Redes disponibles"
2358-
2359-#~ msgid "Password visible"
2360-#~ msgstr "Contraseña visible"
2361-
2362-#~ msgid "Other network"
2363-#~ msgstr "Otra red"
2364-
2365-#~ msgid "Connect to Wi-Fi"
2366-#~ msgstr "Conectar a wifi"
2367-
2368-#~ msgid "Set lock security"
2369-#~ msgstr "Establecer la seguridad de bloqueo"
2370-
2371-#~ msgid "Those passphrases don't match."
2372-#~ msgstr "Las contraseñas no coinciden."
2373-
2374-#~ msgid "Passphrase must be at least four characters long."
2375-#~ msgstr "La contraseña debe tener al menos cuatro caracteres."
2376
2377=== modified file 'po/hu.po'
2378--- po/hu.po 2014-10-18 07:13:30 +0000
2379+++ po/hu.po 2014-11-07 22:38:03 +0000
2380@@ -8,15 +8,15 @@
2381 "Project-Id-Version: ubuntu-system-settings\n"
2382 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2383 "POT-Creation-Date: 2014-10-16 20:04-0600\n"
2384-"PO-Revision-Date: 2014-10-16 10:21+0000\n"
2385+"PO-Revision-Date: 2014-11-01 09:41+0000\n"
2386 "Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
2387 "Language-Team: Hungarian <hu@li.org>\n"
2388 "MIME-Version: 1.0\n"
2389 "Content-Type: text/plain; charset=UTF-8\n"
2390 "Content-Transfer-Encoding: 8bit\n"
2391 "Plural-Forms: nplurals=2; plural=n != 1;\n"
2392-"X-Launchpad-Export-Date: 2014-10-18 07:10+0000\n"
2393-"X-Generator: Launchpad (build 17196)\n"
2394+"X-Launchpad-Export-Date: 2014-11-02 06:14+0000\n"
2395+"X-Generator: Launchpad (build 17211)\n"
2396
2397 #: ubuntu-system-settings.desktop.in.in.h:1 ../src/qml/MainWindow.qml:112
2398 msgid "System Settings"
2399@@ -790,7 +790,7 @@
2400
2401 #: ../plugins/cellular//PageChooseCarrier.qml:196
2402 msgid "Searching for carriers…"
2403-msgstr ""
2404+msgstr "Szolgáltatók keresése…"
2405
2406 #: ../plugins/cellular//PageChooseCarrier.qml:229
2407 #: ../plugins/cellular//PageChooseApn.qml:31
2408@@ -800,36 +800,36 @@
2409
2410 #: ../plugins/cellular//PageChooseApn.qml:372
2411 msgid "Internet APN:"
2412-msgstr ""
2413+msgstr "Internet APN:"
2414
2415 #: ../plugins/cellular//PageChooseApn.qml:449
2416 msgid "Custom Internet APN…"
2417-msgstr ""
2418+msgstr "Egyéni internet APN…"
2419
2420 #: ../plugins/cellular//PageChooseApn.qml:460
2421 msgid "MMS APN:"
2422-msgstr ""
2423+msgstr "MMS APN:"
2424
2425 #: ../plugins/cellular//PageChooseApn.qml:485
2426 #: ../plugins/cellular//CustomApnEditor.qml:143
2427 msgid "Same APN as for Internet"
2428-msgstr ""
2429+msgstr "Az internet APN-nel megegyező"
2430
2431 #: ../plugins/cellular//PageChooseApn.qml:565
2432 msgid "Custom MMS APN…"
2433-msgstr ""
2434+msgstr "Egyéni MMS APN…"
2435
2436 #: ../plugins/cellular//PageChooseApn.qml:591
2437 msgid "Reset APN Settings"
2438-msgstr ""
2439+msgstr "APN beállítások visszaállítása"
2440
2441 #: ../plugins/cellular//PageChooseApn.qml:592
2442 msgid "Are you sure that you want to Reset APN Settings?"
2443-msgstr ""
2444+msgstr "Biztos benne, hogy visszaállítja az APN beállításait?"
2445
2446 #: ../plugins/cellular//PageChooseApn.qml:598
2447 msgid "Reset"
2448-msgstr ""
2449+msgstr "Visszaállítás"
2450
2451 #: ../plugins/cellular//PageChooseCarriers.qml:27
2452 #: ../plugins/cellular//Components//MultiSim.qml:68
2453@@ -838,43 +838,43 @@
2454
2455 #: ../plugins/cellular//CustomApnEditor.qml:42
2456 msgid "Internet"
2457-msgstr ""
2458+msgstr "Internet"
2459
2460 #: ../plugins/cellular//CustomApnEditor.qml:42
2461 msgid "MMS"
2462-msgstr ""
2463+msgstr "MMS"
2464
2465 #. TRANSLATORS: %1 is either i18n.tr("Internet") or i18n.tr("MMS")
2466 #: ../plugins/cellular//CustomApnEditor.qml:67
2467 #, qt-format
2468 msgid "Custom %1 APN"
2469-msgstr ""
2470+msgstr "Egyéni %1 APN"
2471
2472 #. TRANSLATORS: %1 is either i18n.tr("Internet") or i18n.tr("MMS")
2473 #: ../plugins/cellular//CustomApnEditor.qml:171
2474 #, qt-format
2475 msgid "%1 APN"
2476-msgstr ""
2477+msgstr "%1 APN"
2478
2479 #: ../plugins/cellular//CustomApnEditor.qml:181
2480 msgid "MMSC"
2481-msgstr ""
2482+msgstr "MMSC"
2483
2484 #: ../plugins/cellular//CustomApnEditor.qml:191
2485 msgid "Proxy"
2486-msgstr ""
2487+msgstr "Proxy"
2488
2489 #: ../plugins/cellular//CustomApnEditor.qml:213
2490 msgid "Username"
2491-msgstr ""
2492+msgstr "Felhasználónév"
2493
2494 #: ../plugins/cellular//CustomApnEditor.qml:264
2495 msgid "Save"
2496-msgstr ""
2497+msgstr "Mentés"
2498
2499 #: ../plugins/cellular//CustomApnEditor.qml:264
2500 msgid "Activate"
2501-msgstr ""
2502+msgstr "Aktiválás"
2503
2504 #. TRANSLATORS: This is a keyword or name for the cellular plugin which is used while searching
2505 #: ../plugins/cellular//PageComponent.qml:32
2506@@ -1773,7 +1773,7 @@
2507
2508 #: ../plugins/system-update//PageComponent.qml:152
2509 msgid "Installation failed"
2510-msgstr ""
2511+msgstr "A telepítés meghiúsult"
2512
2513 #: ../plugins/system-update//PageComponent.qml:156
2514 #: ../plugins/cellular//Components//SimEditor.qml:200
2515@@ -1787,7 +1787,7 @@
2516 #: ../plugins/system-update//PageComponent.qml:235
2517 #: ../plugins/system-update//PageComponent.qml:241
2518 msgid "Sorry, the system update failed."
2519-msgstr ""
2520+msgstr "Sajnáljuk, a rendszer frissítés meghiúsult."
2521
2522 #: ../plugins/system-update//PageComponent.qml:254
2523 msgid "Restarting…"
2524@@ -1799,7 +1799,7 @@
2525
2526 #: ../plugins/system-update//PageComponent.qml:298
2527 msgid "Connect to the Internet to check for updates"
2528-msgstr ""
2529+msgstr "Csatlakozás az internethez a frissítések ellenőrzéséhez"
2530
2531 #: ../plugins/system-update//PageComponent.qml:313
2532 #: ../plugins/system-update//PageComponent.qml:471
2533@@ -2116,7 +2116,7 @@
2534 #: ../wizard/qml/Pages//passwd-confirm.qml:51
2535 #: ../wizard/qml/Pages//passwd-confirm.qml:52
2536 msgid "Please try again."
2537-msgstr "Kérem próbálja újra."
2538+msgstr "Próbálja újra."
2539
2540 #: ../wizard/qml/Pages//passwd-confirm.qml:52
2541 msgid "Sorry, incorrect passcode."
2542@@ -2156,11 +2156,15 @@
2543 "Ubuntu includes location services provided by HERE, enabling apps to "
2544 "pinpoint your location."
2545 msgstr ""
2546+"Az Ubuntu tartalmazza a HERE helymeghatározó szolgáltatást, amely "
2547+"megállapítja az Ön pontos helyét az alkalmazások számára."
2548
2549 #: ../wizard/qml/Pages//50-location.qml:64
2550 msgid ""
2551 "Allow apps to use your mobile and Wi-Fi networks to determine your location."
2552 msgstr ""
2553+"A mobilinternet és Wi-Fi használatának engedélyezése az alkalmazások számára "
2554+"az Ön pontos helyzetének megállapításához."
2555
2556 #. TRANSLATORS: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
2557 #: ../wizard/qml/Pages//50-location.qml:74
2558@@ -2168,16 +2172,18 @@
2559 "Accept the HERE <a href='terms.qml'>terms and conditions</a> to enable these "
2560 "services."
2561 msgstr ""
2562+"A HERE <a href='terms.qml'>felhasználási feltételeinek</a> elfogadása a "
2563+"szolgáltatás engedélyezéséhez."
2564
2565 #: ../wizard/qml/Pages//50-location.qml:85
2566 msgid ""
2567 "This service can be disabled at any time from the <b>System Settings</b> "
2568 "menu."
2569-msgstr ""
2570+msgstr "Ez később bármikor kikapcsolható a <b>Rendszerbeállításokban</b>."
2571
2572 #: ../wizard/qml/Pages//60-reporting.qml:22
2573 msgid "Improving your experience"
2574-msgstr ""
2575+msgstr "Javítson az élményen"
2576
2577 #: ../wizard/qml/Pages//60-reporting.qml:34
2578 msgid ""
2579@@ -2192,6 +2198,8 @@
2580 "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
2581 "Privacy</b>"
2582 msgstr ""
2583+"Ezt kikapcsolhatja a <b>Rendszerbeállítások</b> alatt található <b>Biztonság "
2584+"és adatvédelem</b> alatt"
2585
2586 #: ../wizard/qml/Components//Page.qml:89
2587 msgid "Back"
2588@@ -2964,61 +2972,3 @@
2589 #: ../push-helper/software_updates_helper.py:151
2590 msgid "Tap to open the system updater."
2591 msgstr "Koppintson a rendszerfrissítő megnyitásához."
2592-
2593-#~ msgid "Refresh"
2594-#~ msgstr "Frissítés"
2595-
2596-#~ msgid "Searching"
2597-#~ msgstr "Keresés"
2598-
2599-#~ msgid "Remove"
2600-#~ msgstr "Eltávolítás"
2601-
2602-#~ msgid "settings"
2603-#~ msgstr "beállítások"
2604-
2605-#~ msgid "i18n"
2606-#~ msgstr "i18n"
2607-
2608-#~ msgid "lang"
2609-#~ msgstr "nyelv"
2610-
2611-#~ msgid "Password visible"
2612-#~ msgstr "A jelszó látható"
2613-
2614-#~ msgid "Available networks"
2615-#~ msgstr "Elérhető hálózatok"
2616-
2617-#~ msgid "Connect to Wi-Fi"
2618-#~ msgstr "Csatlakozás Wi-Fi hálózathoz"
2619-
2620-#~ msgid "Those passphrases don't match."
2621-#~ msgstr "A jelmondatok nem egyeznek."
2622-
2623-#~ msgid "Passphrase must be at least four characters long."
2624-#~ msgstr "A jelmondatnak legalább négy karakterből kell állnia."
2625-
2626-#~ msgid "Set lock security"
2627-#~ msgstr "Zárolás beállítása"
2628-
2629-#~ msgid "Other network"
2630-#~ msgstr "Egyéb hálózat"
2631-
2632-#~ msgid "Bug reporting"
2633-#~ msgstr "Hibajelentés"
2634-
2635-#~ msgid ""
2636-#~ "I have read and agreed to the HERE <a href='terms.qml'>Terms and "
2637-#~ "Conditions</a>"
2638-#~ msgstr ""
2639-#~ "Elolvastam és elfogadom a HERE <a href='terms.qml'>felhasználási "
2640-#~ "feltételeit</a>"
2641-
2642-#~ msgid "Use your mobile network and Wi-Fi to determine where you are"
2643-#~ msgstr "Mobilhálózat és Wi-Fi használata az Ön helyzetének megállapításához"
2644-
2645-#~ msgid "This can be disabled here:"
2646-#~ msgstr "Ez kikapcsolható itt:"
2647-
2648-#~ msgid "System Settings &gt; Security &amp; Privacy"
2649-#~ msgstr "Rendszerbeállítások &gt; Biztonság és adatvédelem"
2650
2651=== modified file 'po/pt.po'
2652--- po/pt.po 2014-10-19 07:05:24 +0000
2653+++ po/pt.po 2014-11-07 22:38:03 +0000
2654@@ -8,15 +8,15 @@
2655 "Project-Id-Version: ubuntu-system-settings\n"
2656 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2657 "POT-Creation-Date: 2014-10-16 20:04-0600\n"
2658-"PO-Revision-Date: 2014-10-18 13:31+0000\n"
2659+"PO-Revision-Date: 2014-11-01 09:36+0000\n"
2660 "Last-Translator: Ivo Xavier <ivofernandes12@gmail.com>\n"
2661 "Language-Team: Portuguese <pt@li.org>\n"
2662 "MIME-Version: 1.0\n"
2663 "Content-Type: text/plain; charset=UTF-8\n"
2664 "Content-Transfer-Encoding: 8bit\n"
2665 "Plural-Forms: nplurals=2; plural=n != 1;\n"
2666-"X-Launchpad-Export-Date: 2014-10-19 07:05+0000\n"
2667-"X-Generator: Launchpad (build 17196)\n"
2668+"X-Launchpad-Export-Date: 2014-11-02 06:14+0000\n"
2669+"X-Generator: Launchpad (build 17211)\n"
2670
2671 #: ubuntu-system-settings.desktop.in.in.h:1 ../src/qml/MainWindow.qml:112
2672 msgid "System Settings"
2673@@ -414,7 +414,7 @@
2674
2675 #: ../plugins/reset//PageComponent.qml:87
2676 msgid "Reset all system settings…"
2677-msgstr "Repor todas as definições de sistema..."
2678+msgstr "Repor todas as definições do sistema..."
2679
2680 #: ../plugins/reset//PageComponent.qml:101
2681 msgid "Erase & Reset Everything…"
2682@@ -430,7 +430,7 @@
2683
2684 #: ../plugins/reset//ResetAllSettings.qml:31
2685 msgid "Reset all system settings"
2686-msgstr "Repor todas as definições de sistema"
2687+msgstr "Repor todas as definições do sistema"
2688
2689 #: ../plugins/reset//ResetLauncherHome.qml:40
2690 msgid "The Launcher will be returned to its original contents."
2691@@ -1753,12 +1753,12 @@
2692 #: ../plugins/system-update//PageComponent.qml:118
2693 msgid "The phone needs to restart to install the system update."
2694 msgstr ""
2695-"O telefone tem de reiniciar para instalar as atualizações de sistema."
2696+"O telemóvel tem de reiniciar para instalar as atualizações do sistema."
2697
2698 #: ../plugins/system-update//PageComponent.qml:118
2699 msgid "Connect the phone to power before installing the system update."
2700 msgstr ""
2701-"Ligue o telemóvel à energia antes de instalar as atualizações de sistema."
2702+"Ligue o telemóvel à energia antes de instalar as atualizações do sistema."
2703
2704 #: ../plugins/system-update//PageComponent.qml:121
2705 msgid "Install & Restart"
2706@@ -1788,7 +1788,7 @@
2707 #: ../plugins/system-update//PageComponent.qml:235
2708 #: ../plugins/system-update//PageComponent.qml:241
2709 msgid "Sorry, the system update failed."
2710-msgstr "Desculpe, a atualização de sistema falhou."
2711+msgstr "Desculpe, a atualização do sistema falhou."
2712
2713 #: ../plugins/system-update//PageComponent.qml:254
2714 msgid "Restarting…"
2715@@ -2966,47 +2966,8 @@
2716
2717 #: ../push-helper/software_updates_helper.py:150
2718 msgid "There's an updated system image."
2719-msgstr "Há uma nova imagem de sistema."
2720+msgstr "Há uma nova imagem do sistema."
2721
2722 #: ../push-helper/software_updates_helper.py:151
2723 msgid "Tap to open the system updater."
2724-msgstr "Carregue para abrir o atualizador de sistema."
2725-
2726-#~ msgid "Other network"
2727-#~ msgstr "Outra rede"
2728-
2729-#~ msgid "Remove"
2730-#~ msgstr "Remover"
2731-
2732-#~ msgid "Searching"
2733-#~ msgstr "A procurar"
2734-
2735-#~ msgid "Available networks"
2736-#~ msgstr "Redes disponíveis"
2737-
2738-#~ msgid "Refresh"
2739-#~ msgstr "Atualizar"
2740-
2741-#~ msgid "settings"
2742-#~ msgstr "definições"
2743-
2744-#~ msgid "i18n"
2745-#~ msgstr "i18n"
2746-
2747-#~ msgid "lang"
2748-#~ msgstr "idioma"
2749-
2750-#~ msgid "Password visible"
2751-#~ msgstr "Palavra-passe visível"
2752-
2753-#~ msgid "Connect to Wi-Fi"
2754-#~ msgstr "Ligar a Wi-Fi"
2755-
2756-#~ msgid "Set lock security"
2757-#~ msgstr "Definir a segurança de bloqueio"
2758-
2759-#~ msgid "Those passphrases don't match."
2760-#~ msgstr "As frase-senha não correspondem."
2761-
2762-#~ msgid "Passphrase must be at least four characters long."
2763-#~ msgstr "A frase-senha deve ter pelo menos quatro caracteres."
2764+msgstr "Carregue para abrir o atualizador do sistema."
2765
2766=== modified file 'po/ru.po'
2767--- po/ru.po 2014-10-24 06:39:04 +0000
2768+++ po/ru.po 2014-11-07 22:38:03 +0000
2769@@ -8,16 +8,21 @@
2770 "Project-Id-Version: ubuntu-system-settings\n"
2771 "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2772 "POT-Creation-Date: 2014-10-16 20:04-0600\n"
2773-"PO-Revision-Date: 2014-10-22 05:38+0000\n"
2774-"Last-Translator: CSRedRat <Unknown>\n"
2775+"PO-Revision-Date: 2014-10-30 09:09+0000\n"
2776+"Last-Translator: ☠Jay ZDLin☠ <Unknown>\n"
2777 "Language-Team: Russian <ru@li.org>\n"
2778 "MIME-Version: 1.0\n"
2779 "Content-Type: text/plain; charset=UTF-8\n"
2780 "Content-Transfer-Encoding: 8bit\n"
2781 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
2782 "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
2783+<<<<<<< TREE
2784 "X-Launchpad-Export-Date: 2014-10-24 06:39+0000\n"
2785 "X-Generator: Launchpad (build 17203)\n"
2786+=======
2787+"X-Launchpad-Export-Date: 2014-10-31 06:43+0000\n"
2788+"X-Generator: Launchpad (build 17211)\n"
2789+>>>>>>> MERGE-SOURCE
2790
2791 #: ubuntu-system-settings.desktop.in.in.h:1 ../src/qml/MainWindow.qml:112
2792 msgid "System Settings"
2793@@ -137,7 +142,7 @@
2794
2795 #: ../plugins/wifi//Common.qml:50
2796 msgid "Your authentication details were incorrect"
2797-msgstr ""
2798+msgstr "Некорректные данные аутентификации"
2799
2800 #: ../plugins/wifi//Common.qml:52
2801 msgid "802.1X supplicant disconnected"
2802@@ -798,7 +803,7 @@
2803
2804 #: ../plugins/cellular//PageChooseCarrier.qml:196
2805 msgid "Searching for carriers…"
2806-msgstr ""
2807+msgstr "Поиск оператора..."
2808
2809 #: ../plugins/cellular//PageChooseCarrier.qml:229
2810 #: ../plugins/cellular//PageChooseApn.qml:31
2811@@ -808,7 +813,7 @@
2812
2813 #: ../plugins/cellular//PageChooseApn.qml:372
2814 msgid "Internet APN:"
2815-msgstr ""
2816+msgstr "Интернет APN:"
2817
2818 #: ../plugins/cellular//PageChooseApn.qml:449
2819 msgid "Custom Internet APN…"
2820@@ -816,7 +821,7 @@
2821
2822 #: ../plugins/cellular//PageChooseApn.qml:460
2823 msgid "MMS APN:"
2824-msgstr ""
2825+msgstr "MMS APN:"
2826
2827 #: ../plugins/cellular//PageChooseApn.qml:485
2828 #: ../plugins/cellular//CustomApnEditor.qml:143
2829@@ -829,15 +834,15 @@
2830
2831 #: ../plugins/cellular//PageChooseApn.qml:591
2832 msgid "Reset APN Settings"
2833-msgstr ""
2834+msgstr "Сброс настроек APN"
2835
2836 #: ../plugins/cellular//PageChooseApn.qml:592
2837 msgid "Are you sure that you want to Reset APN Settings?"
2838-msgstr ""
2839+msgstr "Сбросить настройки APN?"
2840
2841 #: ../plugins/cellular//PageChooseApn.qml:598
2842 msgid "Reset"
2843-msgstr ""
2844+msgstr "Сбросить"
2845
2846 #: ../plugins/cellular//PageChooseCarriers.qml:27
2847 #: ../plugins/cellular//Components//MultiSim.qml:68
2848@@ -846,11 +851,11 @@
2849
2850 #: ../plugins/cellular//CustomApnEditor.qml:42
2851 msgid "Internet"
2852-msgstr ""
2853+msgstr "Интернет"
2854
2855 #: ../plugins/cellular//CustomApnEditor.qml:42
2856 msgid "MMS"
2857-msgstr ""
2858+msgstr "MMS"
2859
2860 #. TRANSLATORS: %1 is either i18n.tr("Internet") or i18n.tr("MMS")
2861 #: ../plugins/cellular//CustomApnEditor.qml:67
2862@@ -862,7 +867,7 @@
2863 #: ../plugins/cellular//CustomApnEditor.qml:171
2864 #, qt-format
2865 msgid "%1 APN"
2866-msgstr ""
2867+msgstr "%1 APN"
2868
2869 #: ../plugins/cellular//CustomApnEditor.qml:181
2870 msgid "MMSC"
2871@@ -870,19 +875,19 @@
2872
2873 #: ../plugins/cellular//CustomApnEditor.qml:191
2874 msgid "Proxy"
2875-msgstr ""
2876+msgstr "Прокси"
2877
2878 #: ../plugins/cellular//CustomApnEditor.qml:213
2879 msgid "Username"
2880-msgstr ""
2881+msgstr "Имя пользователя"
2882
2883 #: ../plugins/cellular//CustomApnEditor.qml:264
2884 msgid "Save"
2885-msgstr ""
2886+msgstr "Сохранить"
2887
2888 #: ../plugins/cellular//CustomApnEditor.qml:264
2889 msgid "Activate"
2890-msgstr ""
2891+msgstr "Включить"
2892
2893 #. TRANSLATORS: This is a keyword or name for the cellular plugin which is used while searching
2894 #: ../plugins/cellular//PageComponent.qml:32
2895@@ -952,7 +957,7 @@
2896 #: ../plugins/security-privacy//LockSecurity.qml:96
2897 #: ../plugins/security-privacy//LockSecurity.qml:384
2898 msgid "Change passcode…"
2899-msgstr ""
2900+msgstr "Изменение секретного кода..."
2901
2902 #: ../plugins/security-privacy//LockSecurity.qml:98
2903 #: ../plugins/security-privacy//LockSecurity.qml:385
2904@@ -965,7 +970,7 @@
2905
2906 #: ../plugins/security-privacy//LockSecurity.qml:107
2907 msgid "Switch to passcode"
2908-msgstr ""
2909+msgstr "Перейти на код"
2910
2911 #: ../plugins/security-privacy//LockSecurity.qml:109
2912 msgid "Switch to passphrase"
2913@@ -973,7 +978,7 @@
2914
2915 #: ../plugins/security-privacy//LockSecurity.qml:118
2916 msgid "Existing passcode"
2917-msgstr ""
2918+msgstr "Существующий код"
2919
2920 #: ../plugins/security-privacy//LockSecurity.qml:120
2921 msgid "Existing passphrase"
2922@@ -981,7 +986,7 @@
2923
2924 #: ../plugins/security-privacy//LockSecurity.qml:174
2925 msgid "Choose passcode"
2926-msgstr ""
2927+msgstr "Выбрать код"
2928
2929 #: ../plugins/security-privacy//LockSecurity.qml:176
2930 msgid "Choose passphrase"
2931@@ -990,7 +995,7 @@
2932 #: ../plugins/security-privacy//LockSecurity.qml:220
2933 #: ../wizard/qml/Pages//passwd-confirm.qml:48
2934 msgid "Confirm passcode"
2935-msgstr ""
2936+msgstr "Подтвердить код"
2937
2938 #: ../plugins/security-privacy//LockSecurity.qml:222
2939 #: ../wizard/qml/Pages//passwd-confirm.qml:47
2940@@ -999,7 +1004,7 @@
2941
2942 #: ../plugins/security-privacy//LockSecurity.qml:265
2943 msgid "Those passcodes don't match. Try again."
2944-msgstr ""
2945+msgstr "Коды не совпадают. Попробуйте снова."
2946
2947 #: ../plugins/security-privacy//LockSecurity.qml:268
2948 msgid "Those passphrases don't match. Try again."
2949@@ -1019,7 +1024,7 @@
2950
2951 #: ../plugins/security-privacy//LockSecurity.qml:349
2952 msgid "4-digit passcode"
2953-msgstr ""
2954+msgstr "4-значный код"
2955
2956 #: ../plugins/security-privacy//LockSecurity.qml:350
2957 #: ../plugins/security-privacy//PhoneLocking.qml:47
2958@@ -1033,7 +1038,7 @@
2959
2960 #: ../plugins/security-privacy//LockSecurity.qml:352
2961 msgid "4-digit passcode…"
2962-msgstr ""
2963+msgstr "4-значный код..."
2964
2965 #: ../plugins/security-privacy//LockSecurity.qml:353
2966 msgid "Passphrase…"
2967@@ -1053,8 +1058,9 @@
2968 #, qt-format
2969 msgid "Incorrect PIN. %1 attempt remaining."
2970 msgid_plural "Incorrect PIN. %1 attempts remaining."
2971-msgstr[0] ""
2972-msgstr[1] ""
2973+msgstr[0] "Неверный ПИН. Осталась %1 попытка."
2974+msgstr[1] "Неверный ПИН. Осталось %1 попытки."
2975+msgstr[2] "Неверный ПИН. Осталось %1 попыток."
2976
2977 #: ../plugins/security-privacy//SimPin.qml:81
2978 msgid "Current PIN:"
2979@@ -1064,8 +1070,9 @@
2980 #, qt-format
2981 msgid "%1 attempt allowed."
2982 msgid_plural "%1 attempts allowed."
2983-msgstr[0] ""
2984-msgstr[1] ""
2985+msgstr[0] "Допускается %1 попытка."
2986+msgstr[1] "Допускается %1 попытки."
2987+msgstr[2] "Допускается %1 попыток."
2988
2989 #: ../plugins/security-privacy//SimPin.qml:107
2990 msgid "Choose new PIN:"
2991@@ -1135,7 +1142,7 @@
2992 #: ../plugins/security-privacy//PhoneLocking.qml:46
2993 #: ../wizard/qml/Pages//30-passwd-type.qml:95
2994 msgid "Passcode"
2995-msgstr ""
2996+msgstr "Секретный код"
2997
2998 #. TRANSLATORS: %1 is the number of minutes
2999 #: ../plugins/security-privacy//PhoneLocking.qml:75
3000@@ -1153,11 +1160,11 @@
3001
3002 #: ../plugins/security-privacy//PhoneLocking.qml:106
3003 msgid "When locked, allow:"
3004-msgstr ""
3005+msgstr "Разрешить на заблокированном:"
3006
3007 #: ../plugins/security-privacy//PhoneLocking.qml:110
3008 msgid "Launcher"
3009-msgstr ""
3010+msgstr "Панель запуска"
3011
3012 #: ../plugins/security-privacy//PhoneLocking.qml:120
3013 msgid "Notifications and quick settings"
3014@@ -1779,7 +1786,7 @@
3015
3016 #: ../plugins/system-update//PageComponent.qml:152
3017 msgid "Installation failed"
3018-msgstr ""
3019+msgstr "Сбой установки"
3020
3021 #: ../plugins/system-update//PageComponent.qml:156
3022 #: ../plugins/cellular//Components//SimEditor.qml:200
3023@@ -1793,7 +1800,7 @@
3024 #: ../plugins/system-update//PageComponent.qml:235
3025 #: ../plugins/system-update//PageComponent.qml:241
3026 msgid "Sorry, the system update failed."
3027-msgstr ""
3028+msgstr "К сожалению, не удалось обновить систему."
3029
3030 #: ../plugins/system-update//PageComponent.qml:254
3031 msgid "Restarting…"
3032@@ -1805,7 +1812,7 @@
3033
3034 #: ../plugins/system-update//PageComponent.qml:298
3035 msgid "Connect to the Internet to check for updates"
3036-msgstr ""
3037+msgstr "Подключитесь к интернету, чтобы проверить наличие обновлений"
3038
3039 #: ../plugins/system-update//PageComponent.qml:313
3040 #: ../plugins/system-update//PageComponent.qml:471
3041@@ -2030,7 +2037,7 @@
3042
3043 #: ../plugins/security-privacy//diagnostics//PageComponent.qml:90
3044 msgid "Includes info about what an app was doing when it failed."
3045-msgstr ""
3046+msgstr "Включает информацию о приложении на момент возникновения ошибки."
3047
3048 #: ../src/qml/MainWindow.qml:133
3049 msgid "Search"
3050@@ -2046,23 +2053,23 @@
3051
3052 #: ../wizard/qml/Pages//30-passwd-type.qml:72
3053 msgid "Please select how you’d like to unlock your phone."
3054-msgstr ""
3055+msgstr "Выберите способ разблокировки телефона."
3056
3057 #: ../wizard/qml/Pages//30-passwd-type.qml:92
3058 msgid "Swipe"
3059-msgstr ""
3060+msgstr "Смахивание"
3061
3062 #: ../wizard/qml/Pages//30-passwd-type.qml:93
3063 msgid "No security"
3064-msgstr ""
3065+msgstr "Без пароля"
3066
3067 #: ../wizard/qml/Pages//30-passwd-type.qml:96
3068 msgid "4 numbers"
3069-msgstr ""
3070+msgstr "4 цифры"
3071
3072 #: ../wizard/qml/Pages//30-passwd-type.qml:99
3073 msgid "Numbers and letters"
3074-msgstr ""
3075+msgstr "Цифры и буквы"
3076
3077 #: ../wizard/qml/Pages//30-passwd-type.qml:112
3078 #: ../wizard/qml/Pages//40-wifi.qml:196 ../wizard/qml/Pages//10-welcome.qml:85
3079@@ -2095,15 +2102,15 @@
3080
3081 #: ../wizard/qml/Pages//31-passwd-set.qml:48
3082 msgid "Enter passphrase"
3083-msgstr ""
3084+msgstr "Введите кодовую фразу"
3085
3086 #: ../wizard/qml/Pages//31-passwd-set.qml:49
3087 msgid "Choose your passcode"
3088-msgstr ""
3089+msgstr "Выберите секретный код"
3090
3091 #: ../wizard/qml/Pages//31-passwd-set.qml:56
3092 msgid "Passphrase must be 4 characters long"
3093-msgstr ""
3094+msgstr "Кодовая фраза должна состоять из 4 символов"
3095
3096 #: ../wizard/qml/Pages//20-sim.qml:23
3097 msgid "Add a SIM card and restart your device"
3098@@ -2116,7 +2123,7 @@
3099
3100 #: ../wizard/qml/Pages//passwd-confirm.qml:51
3101 msgid "Sorry, incorrect passphrase."
3102-msgstr ""
3103+msgstr "Неверная кодовая фраза."
3104
3105 #: ../wizard/qml/Pages//passwd-confirm.qml:51
3106 #: ../wizard/qml/Pages//passwd-confirm.qml:52
3107@@ -2125,7 +2132,7 @@
3108
3109 #: ../wizard/qml/Pages//passwd-confirm.qml:52
3110 msgid "Sorry, incorrect passcode."
3111-msgstr ""
3112+msgstr "Неверный секретный код."
3113
3114 #: ../wizard/qml/Pages//80-finished.qml:22
3115 msgid "All done"
3116@@ -2166,6 +2173,8 @@
3117 msgid ""
3118 "Allow apps to use your mobile and Wi-Fi networks to determine your location."
3119 msgstr ""
3120+"Разрешить приложениям использовать мобильные и Wi-Fi сети для определения "
3121+"вашего местонахождения."
3122
3123 #. TRANSLATORS: HERE is a trademark for Nokia's location service, you probably shouldn't translate it
3124 #: ../wizard/qml/Pages//50-location.qml:74
3125@@ -2189,12 +2198,16 @@
3126 "Your phone is set up to automatically report errors to Canonical and its "
3127 "partners, the makers of the operating system."
3128 msgstr ""
3129+"Ваш телефон настроен на автоматическую отправку отчётов об ошибках в "
3130+"компанию Canonical и её партнерам, производителям операционной системы."
3131
3132 #: ../wizard/qml/Pages//60-reporting.qml:41
3133 msgid ""
3134 "This can be disabled in <b>System Settings</b> under <b>Security &amp; "
3135 "Privacy</b>"
3136 msgstr ""
3137+"Данную функцию можно отключить, перейдя в <b>Параметры системы</b>, раздел "
3138+"<b>Защита и приватность</b>"
3139
3140 #: ../wizard/qml/Components//Page.qml:89
3141 msgid "Back"
3142@@ -2203,12 +2216,12 @@
3143 #: ../wizard/qml/Components//StackButton.qml:40
3144 #, qt-format
3145 msgid "〈 %1"
3146-msgstr ""
3147+msgstr "〈 %1"
3148
3149 #: ../wizard/qml/Components//StackButton.qml:43
3150 #, qt-format
3151 msgid "%1 〉"
3152-msgstr ""
3153+msgstr "%1 〉"
3154
3155 #. TRANSLATORS: This is a keyword or name for the background plugin which is used while searching
3156 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:4
3157@@ -2303,19 +2316,19 @@
3158 #. TRANSLATORS: This is a keyword or name for the wifi plugin which is used while searching
3159 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:38
3160 msgid "hidden"
3161-msgstr ""
3162+msgstr "скрытые"
3163
3164 #. TRANSLATORS: This is a keyword or name for the wifi plugin which is used while searching
3165 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:40
3166 msgid "ip"
3167-msgstr ""
3168+msgstr "ip"
3169
3170 #. TRANSLATORS: This is a keyword or name for the wifi plugin which is used while searching
3171 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3172 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:42
3173 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:294
3174 msgid "address"
3175-msgstr ""
3176+msgstr "адрес"
3177
3178 #. TRANSLATORS: This is a keyword or name for the notifications plugin which is used while searching
3179 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3180@@ -2363,22 +2376,22 @@
3181 #. TRANSLATORS: This is a keyword or name for the notifications plugin which is used while searching
3182 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:60
3183 msgid "facebook"
3184-msgstr ""
3185+msgstr "facebook"
3186
3187 #. TRANSLATORS: This is a keyword or name for the notifications plugin which is used while searching
3188 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:62
3189 msgid "twitter"
3190-msgstr ""
3191+msgstr "twitter"
3192
3193 #. TRANSLATORS: This is a keyword or name for the notifications plugin which is used while searching
3194 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:64
3195 msgid "flickr"
3196-msgstr ""
3197+msgstr "flickr"
3198
3199 #. TRANSLATORS: This is a keyword or name for the notifications plugin which is used while searching
3200 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:66
3201 msgid "gmail"
3202-msgstr ""
3203+msgstr "gmail"
3204
3205 #. TRANSLATORS: This is a keyword or name for the sound plugin which is used while searching
3206 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:70
3207@@ -2388,7 +2401,7 @@
3208 #. TRANSLATORS: This is a keyword or name for the sound plugin which is used while searching
3209 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:72
3210 msgid "silent"
3211-msgstr ""
3212+msgstr "в фоновом режиме"
3213
3214 #. TRANSLATORS: This is a keyword or name for the sound plugin which is used while searching
3215 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:74
3216@@ -2417,7 +2430,7 @@
3217 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:82
3218 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:118
3219 msgid "keyboard"
3220-msgstr ""
3221+msgstr "клавиатура"
3222
3223 #. TRANSLATORS: This is a keyword or name for the sound plugin which is used while searching
3224 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:84
3225@@ -2527,12 +2540,12 @@
3226 #. TRANSLATORS: This is a keyword or name for the language plugin which is used while searching
3227 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:130
3228 msgid "punctuation"
3229-msgstr ""
3230+msgstr "пунктуация"
3231
3232 #. TRANSLATORS: This is a keyword or name for the language plugin which is used while searching
3233 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:132
3234 msgid "layout"
3235-msgstr ""
3236+msgstr "раскладка"
3237
3238 #. TRANSLATORS: This is a keyword or name for the language plugin which is used while searching
3239 #. TRANSLATORS: This is a keyword or name for the brightness plugin which is used while searching
3240@@ -2544,12 +2557,12 @@
3241 #. TRANSLATORS: This is a keyword or name for the language plugin which is used while searching
3242 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:136
3243 msgid "words"
3244-msgstr ""
3245+msgstr "слова"
3246
3247 #. TRANSLATORS: This is a keyword or name for the language plugin which is used while searching
3248 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:138
3249 msgid "vibration"
3250-msgstr ""
3251+msgstr "вибро"
3252
3253 #. TRANSLATORS: This is a keyword or name for the phone plugin which is used while searching
3254 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3255@@ -2561,7 +2574,7 @@
3256 #. TRANSLATORS: This is a keyword or name for the phone plugin which is used while searching
3257 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:144
3258 msgid "services"
3259-msgstr ""
3260+msgstr "службы"
3261
3262 #. TRANSLATORS: This is a keyword or name for the phone plugin which is used while searching
3263 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:146
3264@@ -2571,7 +2584,7 @@
3265 #. TRANSLATORS: This is a keyword or name for the phone plugin which is used while searching
3266 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:148
3267 msgid "waiting"
3268-msgstr ""
3269+msgstr "ожидание"
3270
3271 #. TRANSLATORS: This is a keyword or name for the phone plugin which is used while searching
3272 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:150
3273@@ -2633,27 +2646,27 @@
3274 #. TRANSLATORS: This is a keyword or name for the cellular plugin which is used while searching
3275 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:184
3276 msgid "4g"
3277-msgstr ""
3278+msgstr "4g"
3279
3280 #. TRANSLATORS: This is a keyword or name for the cellular plugin which is used while searching
3281 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:186
3282 msgid "3g"
3283-msgstr ""
3284+msgstr "3g"
3285
3286 #. TRANSLATORS: This is a keyword or name for the cellular plugin which is used while searching
3287 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:188
3288 msgid "2g"
3289-msgstr ""
3290+msgstr "2g"
3291
3292 #. TRANSLATORS: This is a keyword or name for the cellular plugin which is used while searching
3293 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:190
3294 msgid "lte"
3295-msgstr ""
3296+msgstr "lte"
3297
3298 #. TRANSLATORS: This is a keyword or name for the cellular plugin which is used while searching
3299 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:192
3300 msgid "apn"
3301-msgstr ""
3302+msgstr "apn"
3303
3304 #. TRANSLATORS: This is a keyword or name for the cellular plugin which is used while searching
3305 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:194
3306@@ -2665,7 +2678,7 @@
3307 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:196
3308 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:226
3309 msgid "sim"
3310-msgstr ""
3311+msgstr "sim"
3312
3313 #. TRANSLATORS: This is a keyword or name for the example plugin which is used while searching
3314 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:198
3315@@ -2710,7 +2723,7 @@
3316 #. TRANSLATORS: This is a keyword or name for the flight-mode plugin which is used while searching
3317 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:214
3318 msgid "airplane"
3319-msgstr ""
3320+msgstr "автономно"
3321
3322 #. TRANSLATORS: This is a keyword or name for the security-privacy plugin which is used while searching
3323 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:220
3324@@ -2725,22 +2738,22 @@
3325 #. TRANSLATORS: This is a keyword or name for the security-privacy plugin which is used while searching
3326 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:228
3327 msgid "pin"
3328-msgstr ""
3329+msgstr "пин"
3330
3331 #. TRANSLATORS: This is a keyword or name for the security-privacy plugin which is used while searching
3332 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:230
3333 msgid "code"
3334-msgstr ""
3335+msgstr "код"
3336
3337 #. TRANSLATORS: This is a keyword or name for the security-privacy plugin which is used while searching
3338 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:232
3339 msgid "password"
3340-msgstr ""
3341+msgstr "пароль"
3342
3343 #. TRANSLATORS: This is a keyword or name for the security-privacy plugin which is used while searching
3344 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:234
3345 msgid "passphrase"
3346-msgstr ""
3347+msgstr "кодовая фраза"
3348
3349 #. TRANSLATORS: This is a keyword or name for the security-privacy plugin which is used while searching
3350 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:236
3351@@ -2750,7 +2763,7 @@
3352 #. TRANSLATORS: This is a keyword or name for the security-privacy plugin which is used while searching
3353 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:238
3354 msgid "allow"
3355-msgstr ""
3356+msgstr "разрешить"
3357
3358 #. TRANSLATORS: This is a keyword or name for the security-privacy plugin which is used while searching
3359 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:240
3360@@ -2812,7 +2825,7 @@
3361 #. TRANSLATORS: This is a keyword or name for the bluetooth plugin which is used while searching
3362 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:276
3363 msgid "stereo"
3364-msgstr ""
3365+msgstr "стерео"
3366
3367 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3368 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:280
3369@@ -2832,27 +2845,27 @@
3370 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3371 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:290
3372 msgid "imei"
3373-msgstr ""
3374+msgstr "imei"
3375
3376 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3377 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:292
3378 msgid "serial"
3379-msgstr ""
3380+msgstr "серийный номер"
3381
3382 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3383 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:296
3384 msgid "mac"
3385-msgstr ""
3386+msgstr "mac"
3387
3388 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3389 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:298
3390 msgid "licenses"
3391-msgstr ""
3392+msgstr "лицензии"
3393
3394 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3395 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:300
3396 msgid "developer"
3397-msgstr ""
3398+msgstr "разработчик"
3399
3400 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3401 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:304
3402@@ -2872,7 +2885,7 @@
3403 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3404 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:310
3405 msgid "version"
3406-msgstr ""
3407+msgstr "версия"
3408
3409 #. TRANSLATORS: This is a keyword or name for the about plugin which is used while searching
3410 #: /home/elopio/workspace/canonical/ubuntu-system-settings/experimental/update-pot/builddir/po/settings.js:312
3411@@ -2926,11 +2939,11 @@
3412
3413 #: ../plugins/security-privacy//securityprivacy.cpp:318
3414 msgid "Incorrect passcode. Try again."
3415-msgstr ""
3416+msgstr "Неправильный код. Попробуйте ещё раз."
3417
3418 #: ../plugins/security-privacy//securityprivacy.cpp:320
3419 msgid "Incorrect passphrase. Try again."
3420-msgstr ""
3421+msgstr "Неправильная кодовая фраза. Попробуйте ещё раз."
3422
3423 #: ../plugins/security-privacy//securityprivacy.cpp:323
3424 msgid "Could not set security mode"
3425@@ -2963,39 +2976,3 @@
3426 #: ../push-helper/software_updates_helper.py:151
3427 msgid "Tap to open the system updater."
3428 msgstr "Нажмите для открытия мастера обновления системы."
3429-
3430-#~ msgid "Searching"
3431-#~ msgstr "Поиск"
3432-
3433-#~ msgid "Refresh"
3434-#~ msgstr "Обновить"
3435-
3436-#~ msgid "Remove"
3437-#~ msgstr "Удалить"
3438-
3439-#~ msgid "settings"
3440-#~ msgstr "настройки"
3441-
3442-#~ msgid "i18n"
3443-#~ msgstr "i18n"
3444-
3445-#~ msgid "lang"
3446-#~ msgstr "язык"
3447-
3448-#~ msgid "Password visible"
3449-#~ msgstr "Отображать пароль"
3450-
3451-#~ msgid "Other network"
3452-#~ msgstr "Другая сеть"
3453-
3454-#~ msgid "Connect to Wi-Fi"
3455-#~ msgstr "Подключиться к Wi-Fi"
3456-
3457-#~ msgid "Available networks"
3458-#~ msgstr "Доступные сети"
3459-
3460-#~ msgid "Those passphrases don't match."
3461-#~ msgstr "Кодовые фразы не совпадают."
3462-
3463-#~ msgid "Passphrase must be at least four characters long."
3464-#~ msgstr "Кодовая фраза должна содержать не менее четырёх символов."
3465
3466=== modified file 'src/CMakeLists.txt'
3467--- src/CMakeLists.txt 2014-09-02 15:44:19 +0000
3468+++ src/CMakeLists.txt 2014-11-07 22:38:03 +0000
3469@@ -1,3 +1,5 @@
3470+include_directories(${GLIB_INCLUDE_DIRS})
3471+
3472 add_definitions(-DI18N_DIRECTORY="${CMAKE_INSTALL_PREFIX}/share/locale")
3473 add_definitions(-DI18N_DOMAIN="ubuntu-system-settings")
3474 add_definitions(-DPLUGIN_PRIVATE_MODULE_DIR="${PLUGIN_PRIVATE_MODULE_DIR}")
3475@@ -23,13 +25,14 @@
3476 qml/MainWindow.qml
3477 qml/UncategorizedItemsView.qml
3478 SystemSettings/ItemPage.qml
3479+ SystemSettings/SettingsItemTitle.qml
3480 )
3481
3482 QT5_ADD_RESOURCES(system-settings-resources ui.qrc)
3483
3484 add_executable(system-settings ${USS_SOURCES} ${QML_SOURCES} ${system-settings-resources})
3485 qt5_use_modules(system-settings Core Gui Quick Qml)
3486-target_link_libraries(system-settings SystemSettings)
3487+target_link_libraries(system-settings SystemSettings ${GLIB_LDFLAGS})
3488 install(TARGETS system-settings RUNTIME DESTINATION bin)
3489
3490 add_library(uss-accountsservice SHARED accountsservice.h accountsservice.cpp)
3491
3492=== modified file 'src/SystemSettings/CMakeLists.txt'
3493--- src/SystemSettings/CMakeLists.txt 2014-08-11 16:13:17 +0000
3494+++ src/SystemSettings/CMakeLists.txt 2014-11-07 22:38:03 +0000
3495@@ -1,5 +1,6 @@
3496 set(QML_SOURCES
3497 ItemPage.qml
3498+ SettingsItemTitle.qml
3499 )
3500
3501 set(PLUG_DIR ${PLUGIN_QML_DIR}/SystemSettings)
3502
3503=== added file 'src/SystemSettings/SettingsItemTitle.qml'
3504--- src/SystemSettings/SettingsItemTitle.qml 1970-01-01 00:00:00 +0000
3505+++ src/SystemSettings/SettingsItemTitle.qml 2014-11-07 22:38:03 +0000
3506@@ -0,0 +1,38 @@
3507+/*
3508+ * This file is part of system-settings
3509+ *
3510+ * Copyright (C) 2013 Canonical Ltd.
3511+ *
3512+ * This program is free software: you can redistribute it and/or modify it
3513+ * under the terms of the GNU General Public License version 3, as published
3514+ * by the Free Software Foundation.
3515+ *
3516+ * This program is distributed in the hope that it will be useful, but
3517+ * WITHOUT ANY WARRANTY; without even the implied warranties of
3518+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
3519+ * PURPOSE. See the GNU General Public License for more details.
3520+ *
3521+ * You should have received a copy of the GNU General Public License along
3522+ * with this program. If not, see <http://www.gnu.org/licenses/>.
3523+ */
3524+
3525+import QtQuick 2.0
3526+import Ubuntu.Components 0.1
3527+import Ubuntu.Components.ListItems 0.1 as ListItem
3528+
3529+ListItem.Standard {
3530+ id: itemEmpty
3531+ property string text
3532+ Label {
3533+ anchors {
3534+ left: parent.left
3535+ leftMargin: units.gu(2)
3536+ right: parent.right
3537+ rightMargin: units.gu(2)
3538+ top: parent.top
3539+ topMargin: units.gu(3)
3540+ }
3541+ text: itemEmpty.text
3542+ }
3543+ highlightWhenPressed: false
3544+}
3545
3546=== modified file 'src/SystemSettings/qmldir'
3547--- src/SystemSettings/qmldir 2014-08-11 16:13:17 +0000
3548+++ src/SystemSettings/qmldir 2014-11-07 22:38:03 +0000
3549@@ -1,2 +1,3 @@
3550 module SystemSettings
3551 ItemPage 1.0 ItemPage.qml
3552+SettingsItemTitle 1.0 SettingsItemTitle.qml
3553
3554=== modified file 'src/main.cpp'
3555--- src/main.cpp 2014-10-21 15:20:07 +0000
3556+++ src/main.cpp 2014-11-07 22:38:03 +0000
3557@@ -85,6 +85,7 @@
3558 Qt::QueuedConnection);
3559 qmlRegisterType<QAbstractItemModel>();
3560 qmlRegisterType<SystemSettings::PluginManager>("SystemSettings", 1, 0, "PluginManager");
3561+ view.engine()->rootContext()->setContextProperty("Utilities", new Utilities());
3562 view.setResizeMode(QQuickView::SizeRootObjectToView);
3563 view.engine()->addImportPath(PLUGIN_PRIVATE_MODULE_DIR);
3564 view.engine()->addImportPath(PLUGIN_QML_DIR);
3565
3566=== modified file 'src/utils.cpp'
3567--- src/utils.cpp 2014-07-23 13:29:15 +0000
3568+++ src/utils.cpp 2014-11-07 22:38:03 +0000
3569@@ -21,6 +21,7 @@
3570 #include "utils.h"
3571 #include "debug.h"
3572
3573+#include <glib.h>
3574 #include <QUrl>
3575 #include <QUrlQuery>
3576
3577@@ -59,4 +60,20 @@
3578 }
3579 }
3580
3581+Utilities::Utilities(QObject *parent) :
3582+ QObject(parent)
3583+{
3584+}
3585+
3586+QString Utilities::formatSize(quint64 size) const
3587+{
3588+ guint64 g_size = size;
3589+
3590+ gchar * formatted_size = g_format_size (g_size);
3591+ QString q_formatted_size = QString::fromLocal8Bit(formatted_size);
3592+ g_free (formatted_size);
3593+
3594+ return q_formatted_size;
3595+}
3596+
3597 } // namespace
3598
3599=== modified file 'src/utils.h'
3600--- src/utils.h 2013-09-30 09:29:34 +0000
3601+++ src/utils.h 2014-11-07 22:38:03 +0000
3602@@ -29,6 +29,14 @@
3603 void parsePluginOptions(const QStringList &arguments, QString &defaultPlugin,
3604 QVariantMap &pluginOptions);
3605
3606+class Utilities : public QObject {
3607+ Q_OBJECT
3608+
3609+public:
3610+ explicit Utilities(QObject *parent = 0);
3611+ Q_INVOKABLE QString formatSize(quint64) const;
3612+};
3613+
3614 } // namespace
3615
3616 #endif // SYSTEM_SETTINGS_UTILS_H
3617
3618=== modified file 'tests/CMakeLists.txt'
3619--- tests/CMakeLists.txt 2014-09-03 15:38:36 +0000
3620+++ tests/CMakeLists.txt 2014-11-07 22:38:03 +0000
3621@@ -1,4 +1,5 @@
3622 include_directories(${CMAKE_CURRENT_BINARY_DIR} ../src)
3623+include_directories(${GLIB_INCLUDE_DIRS})
3624 add_definitions(-DI18N_DOMAIN="ubuntu-system-settings")
3625 add_definitions(-DPLUGIN_PRIVATE_MODULE_DIR="${PLUGIN_PRIVATE_MODULE_DIR}")
3626 add_definitions(-DPLUGIN_MANIFEST_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data")
3627@@ -36,6 +37,7 @@
3628 set_tests_properties(tst-plugins PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=minimal")
3629
3630 qt5_use_modules(tst-arguments Core Test)
3631+target_link_libraries(tst-arguments ${GLIB_LDFLAGS})
3632 add_test(tst-arguments tst-arguments)
3633
3634 add_executable(tst-pagelist tst_pagelist.cpp ../wizard/PageList.cpp)
3635
3636=== modified file 'tests/autopilot/ubuntu_system_settings/__init__.py'
3637--- tests/autopilot/ubuntu_system_settings/__init__.py 2014-09-26 12:52:31 +0000
3638+++ tests/autopilot/ubuntu_system_settings/__init__.py 2014-11-07 22:38:03 +0000
3639@@ -1,3 +1,4 @@
3640+
3641 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3642 #
3643 # Copyright (C) 2014 Canonical Ltd.
3644@@ -114,6 +115,10 @@
3645 def go_to_wifi_page(self):
3646 return self._go_to_page('entryComponent-wifi', 'wifiPage')
3647
3648+ @autopilot.logging.log_action(logger.debug)
3649+ def go_to_cellular_page(self):
3650+ return self._go_to_page('entryComponent-cellular', 'cellularPage')
3651+
3652 def _go_to_page(self, item_object_name, page_object_name):
3653 self.click_item(item_object_name)
3654 page = self.wait_select_single(objectName=page_object_name)
3655@@ -202,7 +207,7 @@
3656 self._orientation_lock_switch.uncheck()
3657
3658
3659-class CelullarPage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
3660+class CellularPage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
3661
3662 """Autopilot helper for the Sound page."""
3663
3664@@ -214,6 +219,164 @@
3665 return True
3666 return False
3667
3668+ @autopilot.logging.log_action(logger.debug)
3669+ def enable_data(self):
3670+ self._set_data(True)
3671+
3672+ @autopilot.logging.log_action(logger.debug)
3673+ def disable_data(self):
3674+ self._set_data(False)
3675+
3676+ def disable_datas(self):
3677+ self.select_sim_for_data('off')
3678+
3679+ @autopilot.logging.log_action(logger.debug)
3680+ def _set_data(self, data):
3681+ chk = self.select_single(objectName='data')
3682+ if data:
3683+ chk.check()
3684+ else:
3685+ chk.uncheck()
3686+
3687+ @autopilot.logging.log_action(logger.debug)
3688+ def get_data(self):
3689+ return self.select_single(objectName='data').checked
3690+
3691+ @autopilot.logging.log_action(logger.debug)
3692+ def enable_roaming(self, timeout=10):
3693+ self._set_roaming(True, timeout=timeout)
3694+
3695+ @autopilot.logging.log_action(logger.debug)
3696+ def disable_roaming(self, timeout=10):
3697+ self._set_roaming(False, timeout=timeout)
3698+
3699+ @autopilot.logging.log_action(logger.debug)
3700+ def _set_roaming(self, roaming, timeout):
3701+ chk = self.select_single(objectName='roaming')
3702+ if roaming:
3703+ chk.check(timeout=timeout)
3704+ else:
3705+ chk.uncheck(timeout=timeout)
3706+
3707+ @autopilot.logging.log_action(logger.debug)
3708+ def set_connection_type(self, radio_type, sim='/ril_0',
3709+ scroll_to_and_click=None):
3710+ self._set_connection_type(radio_type, sim, scroll_to_and_click)
3711+
3712+ @autopilot.logging.log_action(logger.debug)
3713+ def _set_connection_type(self, radio_type, sim, scroll_to_and_click):
3714+ t = self.wait_select_single(
3715+ 'OptionSelectorDelegate',
3716+ objectName='%s_radio_%s' % (sim, radio_type))
3717+ if scroll_to_and_click:
3718+ scroll_to_and_click(t)
3719+ else:
3720+ t.swipe_into_view()
3721+
3722+ self.pointing_device.click_object(t)
3723+
3724+ @autopilot.logging.log_action(logger.debug)
3725+ def change_carrier(self, carrier, sim=None):
3726+ if sim:
3727+ carriersPage = self._click_carriers()
3728+ carrierPage = carriersPage.select_sim(sim)
3729+ else:
3730+ carrierPage = self._click_carrier()
3731+
3732+ carrierPage.set_manual()
3733+ carrierPage.set_carrier(carrier)
3734+
3735+ @autopilot.logging.log_action(logger.debug)
3736+ def _click_carrier(self):
3737+ item = self.select_single(objectName='carrier')
3738+ self.pointing_device.click_object(item)
3739+ return self.get_root_instance().wait_select_single(
3740+ objectName='chooseCarrierPage')
3741+
3742+ @autopilot.logging.log_action(logger.debug)
3743+ def _click_carriers(self):
3744+ item = self.select_single(objectName='carriers')
3745+ self.pointing_device.click_object(item)
3746+ return self.get_root_instance().wait_select_single(
3747+ objectName='chooseCarriersPage')
3748+
3749+ @autopilot.logging.log_action(logger.debug)
3750+ def select_sim_for_data(self, sim):
3751+ self._select_sim_for_data(sim)
3752+
3753+ @autopilot.logging.log_action(logger.debug)
3754+ def _select_sim_for_data(self, sim):
3755+ item = self.select_single(objectName='use%s' % sim)
3756+ self.pointing_device.click_object(item)
3757+
3758+ @autopilot.logging.log_action(logger.debug)
3759+ def select_sim_for_calls(self, sim):
3760+ pass
3761+
3762+ @autopilot.logging.log_action(logger.debug)
3763+ def select_sim_for_messages(self):
3764+ pass
3765+
3766+ @autopilot.logging.log_action(logger.debug)
3767+ def set_name(self, sim, name):
3768+ self._set_name(sim, name)
3769+
3770+ def get_name(self, sim):
3771+ obj = self.select_single(
3772+ objectName="label_%s" % sim)
3773+ return obj.text
3774+
3775+ def _set_name(self, sim, name):
3776+ obj = self.select_single(
3777+ objectName="edit_name_%s" % sim)
3778+ self.pointing_device.click_object(obj)
3779+
3780+ # wait for animation
3781+ sleep(1)
3782+ ok = self.select_single('Button', objectName="doRename")
3783+
3784+ field = self.select_single('TextField', objectName="nameField")
3785+ field.write(name)
3786+ self.pointing_device.click_object(ok)
3787+
3788+
3789+class PageChooseCarriers(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
3790+
3791+ """Autopilot helper for carrier selection page (multisim)."""
3792+
3793+ @autopilot.logging.log_action(logger.debug)
3794+ def select_sim(self, sim):
3795+ return self._select_sim(sim)
3796+
3797+ @autopilot.logging.log_action(logger.debug)
3798+ def _select_sim(self, sim):
3799+ item = self.select_single(objectName='%s_carriers' % sim)
3800+ self.pointing_device.click_object(item)
3801+ return self.get_root_instance().wait_select_single(
3802+ objectName='chooseCarrierPage')
3803+
3804+
3805+class PageChooseCarrier(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
3806+
3807+ """Autopilot helper for carrier selection page (singlesim)."""
3808+
3809+ @autopilot.logging.log_action(logger.debug)
3810+ def set_manual(self):
3811+ item = self.select_single(text='Manually')
3812+ self.pointing_device.click_object(item)
3813+
3814+ @autopilot.logging.log_action(logger.debug)
3815+ def set_automatic(self):
3816+ item = self.select_single(text='Automatically')
3817+ self.pointing_device.click_object(item)
3818+
3819+ def set_carrier(self, carrier):
3820+ # wait for animation, since page.animationRunning.wait_for(False)
3821+ # does not work?
3822+ sleep(0.5)
3823+ item = self.select_single(text=carrier)
3824+ self.pointing_device.click_object(item)
3825+
3826
3827 class TimeAndDatePage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
3828
3829@@ -678,6 +841,40 @@
3830 return True
3831 return False
3832
3833+ @autopilot.logging.log_action(logger.debug)
3834+ def enable_wireless(self):
3835+ self._set_wireless(True)
3836+
3837+ @autopilot.logging.log_action(logger.debug)
3838+ def disable_wireless(self):
3839+ self._set_wireless(False)
3840+
3841+ """
3842+ :returns: Whether or not WiFi can be used
3843+ """
3844+ @autopilot.logging.log_action(logger.debug)
3845+ def have_wireless(self):
3846+ try:
3847+ self.wait_select_single('SwitchMenuItem', text=_('Wi-Fi'))
3848+ except:
3849+ return False
3850+ return True
3851+
3852+ """Returns the current WiFi state
3853+
3854+ :returns: Whether or not WiFi is enabled
3855+ """
3856+ @autopilot.logging.log_action(logger.debug)
3857+ def get_wireless(self):
3858+ return self.wait_select_single(
3859+ 'SwitchMenuItem', text=_('Wi-Fi')).checked
3860+
3861+ @autopilot.logging.log_action(logger.debug)
3862+ def _set_wireless(self, state):
3863+ obj = self.wait_select_single('SwitchMenuItem', text=_('Wi-Fi'))
3864+ if obj.checked != state:
3865+ self.pointing_device.click_object(obj)
3866+
3867 """Connects to hidden network
3868
3869 :param name: Network name string (SSID)
3870
3871=== modified file 'tests/autopilot/ubuntu_system_settings/tests/__init__.py'
3872--- tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-10-22 21:34:08 +0000
3873+++ tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-11-07 22:38:03 +0000
3874@@ -33,6 +33,7 @@
3875 RDO_IFACE = 'org.ofono.RadioSettings'
3876 SIM_IFACE = 'org.ofono.SimManager'
3877 NETREG_IFACE = 'org.ofono.NetworkRegistration'
3878+NETOP_IFACE = 'org.ofono.NetworkOperator'
3879 CALL_FWD_IFACE = 'org.ofono.CallForwarding'
3880 CALL_SETTINGS_IFACE = 'org.ofono.CallSettings'
3881 SYSTEM_IFACE = 'com.canonical.SystemImage'
3882@@ -150,7 +151,7 @@
3883 def mock_carriers(self, name):
3884 self.dbusmock.AddObject(
3885 '/%s/operator/op2' % name,
3886- 'org.ofono.NetworkOperator',
3887+ NETOP_IFACE,
3888 {
3889 'Name': 'my.cool.telco',
3890 'Status': 'available',
3891@@ -167,7 +168,7 @@
3892 # Add a forbidden carrier
3893 self.dbusmock.AddObject(
3894 '/%s/operator/op3' % name,
3895- 'org.ofono.NetworkOperator',
3896+ NETOP_IFACE,
3897 {
3898 'Name': 'my.bad.telco',
3899 'Status': 'forbidden',
3900@@ -311,9 +312,12 @@
3901
3902
3903 class CellularBaseTestCase(UbuntuSystemSettingsOfonoTestCase):
3904+
3905 def setUp(self):
3906 """ Go to Cellular page """
3907- super(CellularBaseTestCase, self).setUp('cellular')
3908+ super(CellularBaseTestCase, self).setUp()
3909+ self.cellular_page = self.system_settings.\
3910+ main_view.go_to_cellular_page()
3911
3912
3913 class PhoneOfonoBaseTestCase(UbuntuSystemSettingsOfonoTestCase):
3914
3915=== modified file 'tests/autopilot/ubuntu_system_settings/tests/test_cellular.py'
3916--- tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-10-09 14:09:38 +0000
3917+++ tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-11-07 22:38:03 +0000
3918@@ -5,537 +5,217 @@
3919 # under the terms of the GNU General Public License version 3, as published
3920 # by the Free Software Foundation.
3921
3922-import dbus
3923 from gi.repository import Gio, GLib
3924 from time import sleep
3925
3926 from autopilot.introspection.dbus import StateNotFoundError
3927 from autopilot.matchers import Eventually
3928-from testtools.matchers import Equals, NotEquals, raises
3929-from unittest import skip
3930+from testtools.matchers import Equals, raises, StartsWith
3931
3932 from ubuntu_system_settings.tests import (
3933- CellularBaseTestCase, CONNMAN_IFACE, RDO_IFACE, SIM_IFACE)
3934-from ubuntu_system_settings.utils.i18n import ugettext as _
3935-
3936-from ubuntuuitoolkit import emulators as toolkit_emulators
3937-
3938-
3939-PREFERENCE_2G = '2G only (saves battery)'
3940-PREFERENCE_UMTS = '2G/3G (faster)'
3941-PREFERENCE_LTE = '2G/3G/4G (faster)'
3942-PREFERENCE_OFF = 'Off'
3943-USE_OFF = "useoff"
3944-USE_SIM_1 = "use/ril_0"
3945-USE_SIM_2 = "use/ril_1"
3946+ CellularBaseTestCase, CONNMAN_IFACE, RDO_IFACE, NETREG_IFACE)
3947
3948
3949 class CellularTestCase(CellularBaseTestCase):
3950- """ Tests for cellular Page """
3951-
3952- """Caches the technology preference selector"""
3953- _pref_selector = None
3954-
3955- @property
3956- def data_preference_selector(self):
3957- """Return data_preference_selector"""
3958- try:
3959- self._pref_selector.get_properties()
3960- except:
3961- self._pref_selector = \
3962- self.system_settings.main_view.cellular_page.select_single(
3963- toolkit_emulators.ItemSelector,
3964- objectName="technologyPreferenceSelector"
3965- )
3966- return self._pref_selector
3967-
3968- def select_preference(self, label):
3969- """Helper method to click a preference which matches provided label"""
3970- pref = self.data_preference_selector.select_single('Label', text=label)
3971- self.system_settings.main_view.pointing_device.click_object(pref)
3972-
3973- def assert_selected_preference(self, index):
3974- """Helper method asserting that the selected data technology preference
3975- is that of index"""
3976- self.assertThat(self.data_preference_selector.selectedIndex,
3977- Eventually(Equals(index)))
3978-
3979- def navigate_to_carrier_page(self):
3980- selector = self.system_settings.main_view.cellular_page.select_single(
3981- objectName="chooseCarrier"
3982- )
3983- self.system_settings.main_view.scroll_to_and_click(selector)
3984-
3985- def navigate_to_manual(self):
3986- selector = self.choose_carrier_page.select_single(
3987- toolkit_emulators.ItemSelector,
3988- objectName="autoChooseCarrierSelector"
3989- )
3990- manual = selector.select_single('Label', text=_("Manually"))
3991- self.system_settings.main_view.pointing_device.click_object(manual)
3992- choosecarrier = self.system_settings.main_view.cellular_page.\
3993- select_single(objectName="chooseCarrier")
3994- self.system_settings.main_view.pointing_device.click_object(
3995- choosecarrier)
3996- self.assertThat(
3997- self.system_settings.main_view.choose_page.title,
3998- Equals(_("Carrier"))
3999- )
4000-
4001- def test_cellular_page(self):
4002- """ Checks whether Cellular page is available """
4003- self.assertThat(
4004- self.system_settings.main_view.cellular_page,
4005- NotEquals(None)
4006- )
4007- self.assertThat(
4008- self.system_settings.main_view.cellular_page.title,
4009- Equals(_('Cellular'))
4010- )
4011-
4012- def test_single_sim_layout(self):
4013- self.system_settings.main_view.cellular_page.\
4014- select_single(objectName="singleSim")
4015- self.assertThat(lambda: self.system_settings.main_view.select_single(
4016- objectName='multiSim'), raises(StateNotFoundError))
4017- self.assertThat(lambda: self.system_settings.main_view.select_single(
4018- objectName='noSim'), raises(StateNotFoundError))
4019-
4020- def test_current_network(self):
4021- """ Tests whether the current network is visible and selected """
4022- self.navigate_to_carrier_page()
4023- self.navigate_to_manual()
4024- carriers = self.system_settings.main_view.choose_page.select_single(
4025- toolkit_emulators.ItemSelector,
4026- objectName="carrierSelector"
4027- )
4028- # TODO: Once there is a proper ItemSelector emulator, get the items
4029- # from it and check 'fake.tel' is the selected one.
4030- selected_delegate = carriers.select_single(
4031- 'OptionSelectorDelegate', selected=True)
4032- selected_delegate.select_single('Label', text="fake.tel")
4033-
4034- def test_alt_network(self):
4035- """ Tests whether an alternative available network is displayed """
4036- self.navigate_to_carrier_page()
4037- self.navigate_to_manual()
4038- carriers = self.system_settings.main_view.choose_page.select_single(
4039- toolkit_emulators.ItemSelector,
4040- objectName="carrierSelector"
4041- )
4042- manual = carriers.select_single('Label', text="my.cool.telco")
4043- self.assertThat(manual, NotEquals(None))
4044+
4045+ def test_enable_data(self):
4046+ self.cellular_page.enable_data()
4047+ self.assertThat(
4048+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
4049+ Eventually(Equals(True))
4050+ )
4051+
4052+ def test_disable_data(self):
4053+ self.cellular_page.disable_data()
4054+ self.assertThat(
4055+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
4056+ Eventually(Equals(False))
4057+ )
4058+
4059+ def test_remote_manipulation_of_data(self):
4060+ self.modem_0.EmitSignal(
4061+ CONNMAN_IFACE,
4062+ 'PropertyChanged',
4063+ 'sv',
4064+ ['Powered', 'true'])
4065+
4066+ self.assertThat(lambda: self.cellular_page.get_data(),
4067+ Eventually(Equals(True)))
4068+
4069+ self.modem_0.EmitSignal(
4070+ CONNMAN_IFACE,
4071+ 'PropertyChanged',
4072+ 'sv',
4073+ ['Powered', 'false'])
4074+
4075+ self.assertThat(lambda: self.cellular_page.get_data(),
4076+ Eventually(Equals(False)))
4077+
4078+ def test_enable_roaming(self):
4079+ self.cellular_page.enable_roaming()
4080+ self.assertThat(
4081+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'),
4082+ Eventually(Equals(True))
4083+ )
4084+
4085+ def test_disable_roaming(self):
4086+ self.cellular_page.disable_roaming()
4087+ self.assertThat(
4088+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'),
4089+ Eventually(Equals(False))
4090+ )
4091+
4092+ def test_connection_type(self):
4093+ get_pref = lambda: self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')
4094+ for pref in ['lte', 'umts', 'gsm']:
4095+ self.cellular_page.set_connection_type(pref)
4096+ self.assertThat(get_pref, Eventually(Equals(pref)))
4097+
4098+ def test_current_carrier(self):
4099+ self.assertThat(lambda: self.modem_0.Get(NETREG_IFACE, 'Name'),
4100+ Eventually(Equals('fake.tel')))
4101+
4102+ def test_change_carrier(self):
4103+ self.cellular_page.change_carrier('my.cool.telco')
4104
4105 def test_no_forbidden_network(self):
4106 """ Ensures that a forbidden network is not shown """
4107- self.navigate_to_carrier_page()
4108- self.navigate_to_manual()
4109- carriers = self.system_settings.main_view.choose_page.select_single(
4110- toolkit_emulators.ItemSelector,
4111- objectName="carrierSelector"
4112- )
4113 self.assertThat(
4114- lambda: carriers.select_single('Label', text="my.bad.telco"),
4115+ lambda: self.cellular_page.change_carrier('my.bad.telco'),
4116 raises(StateNotFoundError)
4117 )
4118
4119- def test_set_sim_offline(self):
4120- self.select_preference(PREFERENCE_OFF)
4121-
4122- sleep(0.7)
4123-
4124- self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
4125-
4126- def test_set_sim_online(self):
4127- self.select_preference(PREFERENCE_OFF)
4128- sleep(0.7)
4129- self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
4130-
4131- self.select_preference(PREFERENCE_UMTS)
4132- sleep(0.7)
4133- self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
4134-
4135- def test_roaming_switch(self):
4136- """Test that switching off cellular data disables roaming switch"""
4137- roaming_switch = self.system_settings.main_view.select_single(
4138- objectName="dataRoamingSwitch"
4139- )
4140- # select 2G only
4141- self.select_preference(PREFERENCE_2G)
4142-
4143- # assert that roaming_switch is enabled
4144- self.assertThat(
4145- roaming_switch.get_properties()['enabled'],
4146- Eventually(Equals(True)))
4147-
4148- # click off
4149- self.select_preference(PREFERENCE_OFF)
4150- # assert roaming_switch is disabled
4151- self.assertThat(
4152- roaming_switch.get_properties()['enabled'],
4153- Eventually(Equals(False)))
4154-
4155- def test_allow_roaming(self):
4156- roaming_switch = self.system_settings.main_view.select_single(
4157- objectName="dataRoamingSwitch"
4158- )
4159- self.system_settings.main_view.scroll_to_and_click(roaming_switch)
4160- sleep(1.5)
4161- self.assertEqual(
4162- True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
4163-
4164- def test_change_data_preference(self):
4165- self.select_preference(PREFERENCE_2G)
4166- sleep(0.7)
4167- self.assertEqual('gsm', self.modem_0.Get(RDO_IFACE,
4168- 'TechnologyPreference'))
4169- self.select_preference(PREFERENCE_UMTS)
4170- sleep(0.7)
4171- self.assertEqual('umts', self.modem_0.Get(RDO_IFACE,
4172- 'TechnologyPreference'))
4173-
4174- def test_sim_online_status_insensitive_to_radio_preference(self):
4175- # turn off cellular data
4176- self.select_preference(PREFERENCE_OFF)
4177-
4178- # fake dbus signal, changing to umts
4179- self.modem_0.EmitSignal(
4180- 'org.ofono.RadioSettings',
4181- 'PropertyChanged',
4182- 'sv',
4183- ['TechnologyPreference', dbus.String('umts', variant_level=1)])
4184-
4185- # assert that "Off" has not changed
4186- self.assert_selected_preference(0)
4187-
4188- def test_ui_reacts_to_sim_set_coming_online(self):
4189- self.select_preference(PREFERENCE_2G)
4190- self.select_preference(PREFERENCE_OFF)
4191-
4192- sleep(0.7)
4193-
4194- self.modem_0.EmitSignal(
4195- CONNMAN_IFACE,
4196- 'PropertyChanged',
4197- 'sv',
4198- ['Powered', 'true'])
4199-
4200- # assert that 2G is selected
4201- self.assert_selected_preference(1)
4202-
4203- def test_unlocking_sim(self):
4204- '''Like it would if the sim was locked, e.g.'''
4205- self.modem_0.Set(RDO_IFACE, 'TechnologyPreference',
4206- dbus.String('', variant_level=1))
4207-
4208- self.system_settings.main_view.go_back()
4209-
4210- self.system_settings.main_view.pointing_device.click_object(
4211- self.system_settings.main_view.select_single(
4212- objectName='entryComponent-cellular'))
4213-
4214- self.assert_selected_preference(-1)
4215- self.assertFalse(self.data_preference_selector.enabled)
4216-
4217- self.modem_0.EmitSignal(
4218- 'org.ofono.RadioSettings',
4219- 'PropertyChanged',
4220- 'sv',
4221- ['TechnologyPreference', dbus.String('lte', variant_level=1)])
4222-
4223- self.assert_selected_preference(3)
4224-
4225
4226 class DualSimCellularTestCase(CellularBaseTestCase):
4227
4228 use_sims = 2
4229
4230- def navigate_to_carriers_page(self):
4231- selector = self.system_settings.main_view.cellular_page.select_single(
4232- objectName="chooseCarrier"
4233- )
4234- self.system_settings.main_view.scroll_to_and_click(selector)
4235-
4236- def navigate_to_carrier_page_for_sim(self, n):
4237- selector = self.choose_carriers_page.select_single(
4238- objectName="chooseCarrierSim%d" % n
4239- )
4240- self.system_settings.main_view.scroll_to_and_click(selector)
4241-
4242- def navigate_to_manual(self):
4243- selector = self.choose_carrier_page.select_single(
4244- toolkit_emulators.ItemSelector,
4245- objectName="autoChooseCarrierSelector"
4246- )
4247- manual = selector.select_single('Label', text=_("Manually"))
4248- self.system_settings.main_view.scroll_to_and_click(manual)
4249- choosecarrier = self.system_settings.main_view.cellular_page.\
4250- select_single(objectName="chooseCarrier")
4251- self.system_settings.main_view.scroll_to_and_click(choosecarrier)
4252- self.assertThat(
4253- self.system_settings.main_view.choose_page.title,
4254- Equals(_("Carrier"))
4255- )
4256-
4257- @property
4258- def data_preference_selector(self):
4259- """Return data_preference_selector"""
4260+ def test_data_off(self):
4261+ self.cellular_page.disable_datas()
4262+ self.assertThat(
4263+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
4264+ Eventually(Equals(False))
4265+ )
4266+ self.assertThat(
4267+ lambda: self.modem_1.Get(CONNMAN_IFACE, 'Powered'),
4268+ Eventually(Equals(False))
4269+ )
4270+
4271+ def test_sim1_online(self):
4272+ self.cellular_page.select_sim_for_data('/ril_0')
4273+ self.assertThat(
4274+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
4275+ Eventually(Equals(True))
4276+ )
4277+ self.assertThat(
4278+ lambda: self.modem_1.Get(CONNMAN_IFACE, 'Powered'),
4279+ Eventually(Equals(False))
4280+ )
4281+
4282+ def test_sim2_online(self):
4283+ self.cellular_page.select_sim_for_data('/ril_1')
4284+ self.assertThat(
4285+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
4286+ Eventually(Equals(False))
4287+ )
4288+ self.assertThat(
4289+ lambda: self.modem_1.Get(CONNMAN_IFACE, 'Powered'),
4290+ Eventually(Equals(True))
4291+ )
4292+
4293+ def test_connection_type_on_sim1(self):
4294+ sim = '/ril_0'
4295+ stac = self.system_settings.main_view.scroll_to_and_click
4296+ self.cellular_page.select_sim_for_data(sim)
4297+ get_pref = lambda: self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')
4298+ for pref in ['lte', 'umts', 'gsm']:
4299+ self.cellular_page.set_connection_type(
4300+ pref, sim=sim, scroll_to_and_click=stac)
4301+ self.assertThat(get_pref, Eventually(Equals(pref)))
4302+
4303+ def test_connection_type_on_sim2(self):
4304+ sim = '/ril_1'
4305+ stac = self.system_settings.main_view.scroll_to_and_click
4306+ self.cellular_page.select_sim_for_data(sim)
4307+ get_pref = lambda: self.modem_1.Get(RDO_IFACE, 'TechnologyPreference')
4308+ for pref in ['gsm']:
4309+ self.cellular_page.set_connection_type(
4310+ pref, sim=sim, scroll_to_and_click=stac)
4311+ self.assertThat(get_pref, Eventually(Equals(pref)))
4312+
4313+ def test_current_carrier_sim1(self):
4314+ self.assertThat(lambda: self.modem_0.Get(NETREG_IFACE, 'Name'),
4315+ Eventually(Equals('fake.tel')))
4316+
4317+ def test_change_carrier_sim1(self):
4318+ sim = '/ril_0'
4319+ self.cellular_page.change_carrier('my.cool.telco', sim=sim)
4320+
4321+ def test_current_carrier_sim2(self):
4322+ self.assertThat(lambda: self.modem_1.Get(NETREG_IFACE, 'Name'),
4323+ Eventually(Equals('fake.tel')))
4324+
4325+ def test_change_carrier_sim2(self):
4326+ sim = '/ril_1'
4327+ self.cellular_page.change_carrier('my.cool.telco', sim=sim)
4328+
4329+ def test_change_sim1_name(self):
4330+ gsettings = Gio.Settings.new('com.ubuntu.phone')
4331+ sim = '/ril_0'
4332 try:
4333- self._pref_selector.get_properties()
4334+ old_name = gsettings.get_value('sim-names')[sim]
4335 except:
4336- self._pref_selector = \
4337- self.system_settings.main_view.cellular_page.select_single(
4338- toolkit_emulators.ItemSelector,
4339- objectName="technologyPreferenceSelector"
4340- )
4341- return self._pref_selector
4342-
4343- def select_preference(self, label):
4344- """Helper method that clicks a preference
4345- that matches provided label"""
4346- pref = self.data_preference_selector.select_single('Label', text=label)
4347- self.system_settings.main_view.scroll_to_and_click(pref)
4348-
4349- def assert_selected_preference(self, index):
4350- """Helper method asserting that the selected
4351- data technology preference is that of index"""
4352- self.assertThat(
4353- self.data_preference_selector.selectedIndex,
4354- Eventually(Equals(index)))
4355-
4356- def use_selector(self, label):
4357- obj = self.system_settings.main_view.cellular_page.select_single(
4358- objectName="use"
4359- ).select_single(objectName=label)
4360- self.system_settings.main_view.scroll_to_and_click(obj)
4361-
4362- def assert_used(self, index):
4363- obj = self.system_settings.main_view.cellular_page.select_single(
4364- objectName="use"
4365- )
4366- self.assertThat(
4367- obj.selectedIndex, Eventually(Equals(index)))
4368-
4369- def get_sim_name(self, num):
4370- obj = self.system_settings.main_view.cellular_page.select_single(
4371- objectName="simLabel%d" % num)
4372- return obj.get_properties()['text']
4373-
4374- def rename_sim(self, num, new_name):
4375- obj = self.system_settings.main_view.cellular_page.select_single(
4376- objectName="simEditor"
4377- ).select_single(objectName="editSim%d" % num)
4378- self.system_settings.main_view.scroll_to_and_click(obj)
4379- field = self.system_settings.main_view.cellular_page.select_single(
4380- objectName="nameField"
4381- )
4382- self.system_settings.main_view.scroll_to_and_click(field)
4383- self.system_settings.main_view.scroll_to_and_click(
4384- field.select_single(objectName="clear_button"))
4385- self.keyboard.type(new_name)
4386- self.system_settings.main_view.scroll_to_and_click(
4387- self.system_settings.main_view.cellular_page.select_single(
4388- objectName="doRename"))
4389-
4390- def test_use_sim_1(self):
4391- self.use_selector(USE_OFF)
4392- self.use_selector(USE_SIM_1)
4393- sleep(0.7)
4394- self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
4395- self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
4396-
4397- def test_use_sim_2(self):
4398- self.use_selector(USE_OFF)
4399- self.use_selector(USE_SIM_2)
4400- sleep(0.7)
4401- self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
4402- self.assertEqual(True, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
4403-
4404- def test_turn_off_both_sims(self):
4405- self.use_selector(USE_OFF)
4406- sleep(0.7)
4407- self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
4408- self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
4409-
4410- def test_use_gsm_for_sim_1(self):
4411- self.use_selector(USE_SIM_1)
4412- self.select_preference(PREFERENCE_2G)
4413- sleep(0.7)
4414- self.assertEqual(
4415- 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
4416-
4417- def test_use_umts_for_sim_1(self):
4418- self.use_selector(USE_SIM_1)
4419- self.select_preference(PREFERENCE_UMTS)
4420- sleep(0.7)
4421- self.assertEqual(
4422- 'umts', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
4423-
4424- def test_use_gsm_for_sim_2(self):
4425- self.use_selector(USE_SIM_1)
4426- self.select_preference(PREFERENCE_2G)
4427- sleep(0.7)
4428- self.assertEqual(
4429- 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
4430-
4431- def test_when_sim_1_comes_online_ui_is_correct(self):
4432- self.use_selector(USE_SIM_1)
4433- self.select_preference(PREFERENCE_UMTS)
4434- self.use_selector(USE_OFF)
4435- sleep(0.7)
4436- self.modem_0.Set(CONNMAN_IFACE, 'Powered', True)
4437- self.modem_0.EmitSignal(
4438- CONNMAN_IFACE,
4439- 'PropertyChanged',
4440- 'sv',
4441- ['Powered', 'true'])
4442-
4443- self.assertEqual(
4444- 'umts', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
4445- self.assert_used(1)
4446- self.assert_selected_preference(1)
4447-
4448- def test_when_sim_2_comes_online_ui_is_correct(self):
4449- self.use_selector(USE_SIM_2)
4450- self.select_preference(PREFERENCE_2G)
4451- self.use_selector(USE_OFF)
4452- sleep(2)
4453- self.modem_1.Set(CONNMAN_IFACE, 'Powered', True)
4454- self.modem_1.EmitSignal(
4455- CONNMAN_IFACE,
4456- 'PropertyChanged',
4457- 'sv',
4458- ['Powered', 'true'])
4459-
4460- self.assertEqual(
4461- 'gsm', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference'))
4462- self.assert_used(2)
4463- self.assert_selected_preference(0)
4464-
4465- def test_roaming_switch(self):
4466- roaming_switch = self.system_settings.main_view.select_single(
4467- objectName="dataRoamingSwitch"
4468- )
4469- # assert that roaming_switch is enabled
4470- self.assertTrue(roaming_switch.get_properties()['enabled'])
4471-
4472- # click off
4473- self.use_selector(USE_OFF)
4474-
4475- # assert roaming_switch is disabled
4476- self.assertThat(
4477- roaming_switch.get_properties()['enabled'],
4478- Eventually(Equals(False)))
4479-
4480- def test_allow_roaming(self):
4481- self.use_selector(USE_SIM_1)
4482- self.assertEqual(
4483- False, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
4484- roaming_switch = self.system_settings.main_view.select_single(
4485- objectName="dataRoamingSwitch"
4486- )
4487- self.system_settings.main_view.scroll_to_and_click(roaming_switch)
4488- sleep(1.5)
4489- self.assertEqual(
4490- True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
4491-
4492- def test_no_radio_preference(self):
4493- self.select_preference(PREFERENCE_UMTS)
4494- self.use_selector(USE_OFF)
4495-
4496- self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', '')
4497- self.modem_0.EmitSignal(
4498- CONNMAN_IFACE,
4499- 'PropertyChanged',
4500- 'sv',
4501- ['TechnologyPreference', ''])
4502-
4503- self.assertThat(
4504- self.data_preference_selector.get_properties()['visible'],
4505- Eventually(Equals(False)))
4506-
4507- # see
4508- # https://gitorious.org/python-dbusmock/python-dbusmock/merge_requests/3
4509- @skip('skipped due to bug in dbusmock')
4510- def test_change_op_sim_1(self):
4511- self.navigate_to_carriers_page()
4512- self.navigate_to_carrier_page_for_sim(1)
4513- carriers = self.system_settings.main_view.choose_page.select_single(
4514- toolkit_emulators.ItemSelector, objectName="carrierSelector")
4515- manual = carriers.select_single('Label', text="my.cool.telco")
4516- self.assertThat(manual, NotEquals(None))
4517-
4518- # see
4519- # https://gitorious.org/python-dbusmock/python-dbusmock/merge_requests/3
4520- @skip('skipped due to bug in dbusmock')
4521- def test_change_op_sim_2(self):
4522- self.navigate_to_carriers_page()
4523- self.navigate_to_carrier_page_for_sim(2)
4524- carriers = self.system_settings.main_view.choose_page.select_single(
4525- toolkit_emulators.ItemSelector, objectName="carrierSelector")
4526- manual = carriers.select_single('Label', text="my.cool.telco")
4527- self.assertThat(manual, NotEquals(None))
4528-
4529- def test_radio_preference_changes(self):
4530- self.use_selector(USE_SIM_1)
4531-
4532- self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', 'umts')
4533- self.modem_0.EmitSignal(
4534- RDO_IFACE,
4535- 'PropertyChanged',
4536- 'sv',
4537- ['TechnologyPreference', 'umts'])
4538-
4539- self.assert_selected_preference(1)
4540-
4541- def test_changing_sim1_name(self):
4542- gsettings = Gio.Settings.new('com.ubuntu.phone')
4543- old_name = gsettings.get_value('sim-names')['/ril_0']
4544+ old_name = 'SIM 1'
4545 new_name = 'FOO BAR'
4546- self.rename_sim(1, new_name)
4547+ self.cellular_page.set_name(sim, new_name)
4548
4549- # wait for gsettings
4550- sleep(1)
4551 try:
4552- self.assertEqual(
4553- new_name, gsettings.get_value('sim-names')['/ril_0'])
4554+ self.assertThat(
4555+ lambda: gsettings.get_value('sim-names')[sim],
4556+ Eventually(Equals(new_name)))
4557 except Exception as e:
4558 raise e
4559 finally:
4560- self.rename_sim(1, old_name)
4561+ self.cellular_page.set_name(sim, old_name)
4562+ # wait for gsettings
4563 sleep(1)
4564
4565- def test_changing_sim2_name(self):
4566+ def test_change_sim2_name(self):
4567 gsettings = Gio.Settings.new('com.ubuntu.phone')
4568- old_name = gsettings.get_value('sim-names')['/ril_1']
4569+ sim = '/ril_1'
4570+
4571+ try:
4572+ old_name = gsettings.get_value('sim-names')[sim]
4573+ except:
4574+ old_name = 'SIM 2'
4575+
4576 new_name = 'BAR BAZ'
4577- self.rename_sim(2, new_name)
4578+ self.cellular_page.set_name(sim, new_name)
4579
4580- # wait for gsettings
4581- sleep(1)
4582 try:
4583- self.assertEqual(
4584- new_name, gsettings.get_value('sim-names')['/ril_1'])
4585+ self.assertThat(
4586+ lambda: gsettings.get_value('sim-names')[sim],
4587+ Eventually(Equals(new_name)))
4588 except Exception as e:
4589 raise e
4590 finally:
4591- self.rename_sim(2, old_name)
4592+ self.cellular_page.set_name(sim, old_name)
4593 # wait for gsettings
4594 sleep(1)
4595
4596- def test_changes_to_sim_names_in_gsettings_are_reflected_in_ui(self):
4597+ def test_remote_manipulation_of_name(self):
4598 gsettings = Gio.Settings.new('com.ubuntu.phone')
4599 old_names = gsettings.get_value('sim-names')
4600-
4601+ sim = '/ril_0'
4602+ name = 'BAS QUX'
4603 new_names = old_names.unpack()
4604- new_names['/ril_0'] = 'BAS QUX'
4605+ new_names[sim] = name
4606 new_names = GLib.Variant('a{ss}', new_names)
4607 gsettings.set_value('sim-names', new_names)
4608-
4609- # wait for gsettings
4610- sleep(1)
4611 try:
4612- self.assertIn(new_names['/ril_0'], self.get_sim_name(1))
4613+ self.assertThat(
4614+ lambda: self.cellular_page.get_name(sim),
4615+ Eventually(StartsWith(name)))
4616 except Exception as e:
4617 raise e
4618 finally:
4619@@ -543,6 +223,36 @@
4620 # wait for gsettings
4621 sleep(1)
4622
4623+ def test_roaming_switch(self):
4624+ self.cellular_page.disable_datas()
4625+ # assert roaming_switch is disabled
4626+ self.assertThat(
4627+ lambda: self.cellular_page.enable_roaming(timeout=1),
4628+ raises(AssertionError)
4629+ )
4630+
4631+ def test_allow_roaming_sim_1(self):
4632+ sim = '/ril_0'
4633+ self.cellular_page.select_sim_for_data(sim)
4634+
4635+ self.assertEqual(
4636+ False, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
4637+ self.cellular_page.enable_roaming()
4638+ self.assertThat(
4639+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'),
4640+ Eventually(Equals(True)))
4641+
4642+ def test_allow_roaming_sim_2(self):
4643+ sim = '/ril_1'
4644+ self.cellular_page.select_sim_for_data(sim)
4645+
4646+ self.assertEqual(
4647+ False, self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed'))
4648+ self.cellular_page.enable_roaming()
4649+ self.assertThat(
4650+ lambda: self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed'),
4651+ Eventually(Equals(True)))
4652+
4653 def test_changing_default_sim_for_calls(self):
4654 gsettings = Gio.Settings.new('com.ubuntu.phone')
4655 default = gsettings.get_value('default-sim-for-calls')
4656@@ -556,11 +266,10 @@
4657 # click first sim
4658 self.system_settings.main_view.scroll_to_and_click(
4659 self.get_default_sim_for_calls_selector('/ril_0'))
4660- # wait for gsettings
4661- sleep(1)
4662- self.assertEqual(
4663- gsettings.get_value('default-sim-for-calls').get_string(),
4664- '/ril_0')
4665+
4666+ self.assertThat(
4667+ lambda: gsettings.get_value('default-sim-for-calls').get_string(),
4668+ Eventually(Equals('/ril_0')))
4669
4670 def test_changing_default_sim_for_messages(self):
4671 gsettings = Gio.Settings.new('com.ubuntu.phone')
4672@@ -574,108 +283,8 @@
4673 # click second sim
4674 self.system_settings.main_view.scroll_to_and_click(
4675 self.get_default_sim_for_messages_selector('/ril_1'))
4676- # wait for gsettings
4677- sleep(1)
4678- self.assertEqual(
4679- gsettings.get_value('default-sim-for-messages').get_string(),
4680- '/ril_1')
4681-
4682- def test_multi_sim_layout(self):
4683- self.system_settings.main_view.cellular_page.\
4684- select_single(objectName="multiSim")
4685- self.assertThat(lambda: self.system_settings.main_view.select_single(
4686- objectName='singleSim'), raises(StateNotFoundError))
4687- self.assertThat(lambda: self.system_settings.main_view.select_single(
4688- objectName='noSim'), raises(StateNotFoundError))
4689-
4690- def test_remove_one_sim(self):
4691- self.modem_0.EmitSignal(
4692- SIM_IFACE,
4693- 'PropertyChanged',
4694- 'sv',
4695- ['Present', 'False'])
4696-
4697- self.system_settings.main_view.cellular_page.\
4698- select_single(objectName="singleSim")
4699- self.assertThat(lambda: self.system_settings.main_view.select_single(
4700- objectName='multiSim'), raises(StateNotFoundError))
4701- self.assertThat(lambda: self.system_settings.main_view.select_single(
4702- objectName='noSim'), raises(StateNotFoundError))
4703-
4704- def test_remove_two_sims(self):
4705- self.modem_0.EmitSignal(
4706- SIM_IFACE,
4707- 'PropertyChanged',
4708- 'sv',
4709- ['Present', 'False'])
4710-
4711- self.modem_1.EmitSignal(
4712- SIM_IFACE,
4713- 'PropertyChanged',
4714- 'sv',
4715- ['Present', 'False'])
4716-
4717- self.system_settings.main_view.cellular_page.\
4718- wait_select_single(objectName="noSim")
4719- self.assertThat(
4720- lambda: self.system_settings.main_view.select_single(
4721- objectName='multiSim'), raises(StateNotFoundError))
4722- self.assertThat(
4723- lambda: self.system_settings.main_view.select_single(
4724- objectName='singleSim'), raises(StateNotFoundError))
4725-
4726- def test_remove_and_insert_sims(self):
4727- self.modem_0.EmitSignal(
4728- SIM_IFACE,
4729- 'PropertyChanged',
4730- 'sv',
4731- ['Present', 'False'])
4732-
4733- self.modem_1.EmitSignal(
4734- SIM_IFACE,
4735- 'PropertyChanged',
4736- 'sv',
4737- ['Present', 'False'])
4738-
4739- self.system_settings.main_view.cellular_page.\
4740- wait_select_single(objectName="noSim")
4741- self.assertThat(
4742- lambda: self.system_settings.main_view.select_single(
4743- objectName='multiSim'), raises(StateNotFoundError))
4744- self.assertThat(
4745- lambda: self.system_settings.main_view.select_single(
4746- objectName='singleSim'), raises(StateNotFoundError))
4747-
4748- self.modem_0.EmitSignal(
4749- SIM_IFACE,
4750- 'PropertyChanged',
4751- 'sv',
4752- ['Present', 'True'])
4753-
4754- self.modem_1.EmitSignal(
4755- SIM_IFACE,
4756- 'PropertyChanged',
4757- 'sv',
4758- ['Present', 'True'])
4759-
4760- self.system_settings.main_view.cellular_page.\
4761- wait_select_single(objectName="multiSim")
4762- self.assertThat(
4763- lambda: self.system_settings.main_view.select_single(
4764- objectName='noSim'), raises(StateNotFoundError))
4765- self.assertThat(
4766- lambda: self.system_settings.main_view.select_single(
4767- objectName='singleSim'), raises(StateNotFoundError))
4768-
4769- # regression test for 1375832
4770- # tests that the second slot only exposes gsm, which
4771- # the testdata indicates
4772- def test_slot_two(self):
4773- self.modem_0.EmitSignal(
4774- SIM_IFACE,
4775- 'PropertyChanged',
4776- 'sv',
4777- ['Present', 'False'])
4778- self.select_preference(PREFERENCE_2G)
4779- self.assertRaises(StateNotFoundError,
4780- self.select_preference, PREFERENCE_UMTS)
4781+
4782+ self.assertThat(
4783+ lambda:
4784+ gsettings.get_value('default-sim-for-messages').get_string(),
4785+ Eventually(Equals('/ril_1')))
4786
4787=== modified file 'tests/autopilot/ubuntu_system_settings/tests/test_wifi.py'
4788--- tests/autopilot/ubuntu_system_settings/tests/test_wifi.py 2014-09-26 12:52:31 +0000
4789+++ tests/autopilot/ubuntu_system_settings/tests/test_wifi.py 2014-11-07 22:38:03 +0000
4790@@ -25,6 +25,11 @@
4791 Equals(_('Wi-Fi')))
4792
4793 def test_connect_to_hidden_network(self):
4794+ if not self.wifi_page.have_wireless():
4795+ self.skipTest('Cannot test wireless since it cannot be enabled')
4796+ self.addCleanup(
4797+ self.wifi_page._set_wireless, self.wifi_page.get_wireless())
4798+ self.wifi_page.enable_wireless()
4799 dialog = self.wifi_page.connect_to_hidden_network(
4800 'yeah',
4801 scroll_to_and_click=self.system_settings.main_view
4802@@ -47,7 +52,11 @@
4803 dialog.wait_until_destroyed()
4804
4805 def test_connect_to_nonexistant_hidden_network(self):
4806-
4807+ if not self.wifi_page.have_wireless():
4808+ self.skipTest('Cannot test wireless since it cannot be enabled')
4809+ self.addCleanup(
4810+ self.wifi_page._set_wireless, self.wifi_page.get_wireless())
4811+ self.wifi_page.enable_wireless()
4812 dialog = self.wifi_page.connect_to_hidden_network(
4813 'yeah',
4814 scroll_to_and_click=self.system_settings.main_view
4815@@ -72,6 +81,11 @@
4816
4817 @skip('skipped due to bug 1337556')
4818 def test_connect_to_hidden_network_using_secrets(self):
4819+ if not self.wifi_page.have_wireless():
4820+ self.skipTest('Cannot test wireless since it cannot be enabled')
4821+ self.addCleanup(
4822+ self.wifi_page._set_wireless, self.wifi_page.get_wireless())
4823+ self.wifi_page.enable_wireless()
4824 dialog = self.wifi_page.connect_to_hidden_network(
4825 'yeah', security='wpa', password='abcdefgh',
4826 scroll_to_and_click=self.system_settings.main_view
4827@@ -95,6 +109,11 @@
4828
4829 @skip('skipped due to bug 1337556')
4830 def test_connect_to_hidden_network_using_incorrect_secrets(self):
4831+ if not self.wifi_page.have_wireless():
4832+ self.skipTest('Cannot test wireless since it cannot be enabled')
4833+ self.addCleanup(
4834+ self.wifi_page._set_wireless, self.wifi_page.get_wireless())
4835+ self.wifi_page.enable_wireless()
4836 dialog = self.wifi_page.connect_to_hidden_network(
4837 'yeah', security='wpa', password='abcdefgh',
4838 scroll_to_and_click=self.system_settings.main_view
4839@@ -117,7 +136,11 @@
4840 _('Your authentication details were incorrect'))))
4841
4842 def test_connect_to_hidden_network_then_cancel(self):
4843-
4844+ if not self.wifi_page.have_wireless():
4845+ self.skipTest('Cannot test wireless since it cannot be enabled')
4846+ self.addCleanup(
4847+ self.wifi_page._set_wireless, self.wifi_page.get_wireless())
4848+ self.wifi_page.enable_wireless()
4849 dialog = self.wifi_page.connect_to_hidden_network(
4850 'foo',
4851 scroll_to_and_click=self.system_settings.main_view
4852@@ -134,6 +157,18 @@
4853 len(self.device_mock.GetMethodCalls('Disconnect')),
4854 Eventually(Equals(1)))
4855
4856+ def test_connect_to_hidden_network_dialog_visibility(self):
4857+ if not self.wifi_page.have_wireless():
4858+ self.skipTest('Cannot test wireless since it cannot be enabled')
4859+ self.addCleanup(
4860+ self.wifi_page._set_wireless, self.wifi_page.get_wireless())
4861+ self.wifi_page.disable_wireless()
4862+ self.assertThat(
4863+ lambda: bool(self.wifi_page.select_single(
4864+ '*',
4865+ objectName='connectToHiddenNetwork').visible),
4866+ Eventually(Equals(False)), 'other net dialog not hidden')
4867+
4868 """Note: this test does not actually remove previous networks from the UI.
4869 The NetworkManager dbusmock template does not currently support deletion
4870 of connections."""
4871@@ -157,5 +192,7 @@
4872
4873 self.system_settings.main_view.go_back()
4874
4875+ # wait for ui to update
4876+ sleep(2)
4877 self.wifi_page.remove_previous_network(
4878 previous_networks[2]['ssid'], scroll_to_and_click=click_method)
4879
4880=== modified file 'wizard/Utils/system.cpp'
4881--- wizard/Utils/system.cpp 2014-09-22 15:21:10 +0000
4882+++ wizard/Utils/system.cpp 2014-11-07 22:38:03 +0000
4883@@ -20,6 +20,7 @@
4884 #include <QDBusInterface>
4885 #include <QDBusPendingCall>
4886 #include <QDBusPendingReply>
4887+#include <QFile>
4888 #include <QProcess>
4889 #include <unistd.h>
4890
4891@@ -81,11 +82,14 @@
4892 void System::getHereLicensePathFinished(QDBusPendingCallWatcher *watcher)
4893 {
4894 QDBusPendingReply<QVariant> reply = *watcher;
4895+
4896+ m_hereLicensePath = "";
4897+
4898 if (!reply.isError()) {
4899 QVariant value = reply.argumentAt<0>();
4900- m_hereLicensePath = value.toString();
4901- } else {
4902- m_hereLicensePath = "";
4903+ if (QFile::exists(value.toString())) {
4904+ m_hereLicensePath = value.toString();
4905+ }
4906 }
4907
4908 Q_EMIT hereLicensePathChanged();
4909
4910=== modified file 'wizard/qml/Components/CheckableSetting.qml'
4911--- wizard/qml/Components/CheckableSetting.qml 2014-08-21 14:50:29 +0000
4912+++ wizard/qml/Components/CheckableSetting.qml 2014-11-07 22:38:03 +0000
4913@@ -27,9 +27,11 @@
4914 property real leftMargin
4915 property real rightMargin
4916
4917+ readonly property real labelOffset: label.x
4918+
4919 signal linkActivated(string link)
4920
4921- implicitHeight: label.height + units.gu(2)
4922+ implicitHeight: Math.max(label.height, checkBox.height)
4923
4924 Item {
4925 anchors.fill: parent
4926@@ -39,7 +41,7 @@
4927
4928 anchors {
4929 left: parent.left
4930- verticalCenter: parent.verticalCenter
4931+ top: parent.top
4932 leftMargin: listItem.leftMargin
4933 }
4934
4935@@ -59,7 +61,10 @@
4936
4937 Connections {
4938 target: listItem.__mouseArea
4939- onClicked: listItem.checked = !listItem.checked
4940+ onClicked: {
4941+ listItem.checked = !listItem.checked
4942+ listItem.triggered(listItem.checked)
4943+ }
4944 }
4945 }
4946
4947
4948=== modified file 'wizard/qml/Pages/30-passwd-type.qml'
4949--- wizard/qml/Pages/30-passwd-type.qml 2014-10-31 15:48:14 +0000
4950+++ wizard/qml/Pages/30-passwd-type.qml 2014-11-07 22:38:03 +0000
4951@@ -93,7 +93,7 @@
4952 desc = i18n.tr("No security")
4953 } else if (method === UbuntuSecurityPrivacyPanel.Passcode) {
4954 name = i18n.tr("Passcode")
4955- desc = i18n.tr("4 numbers")
4956+ desc = i18n.tr("4 digits only")
4957 } else {
4958 name = i18n.tr("Passphrase")
4959 desc = i18n.tr("Numbers and letters")
4960
4961=== modified file 'wizard/qml/Pages/50-location.qml'
4962--- wizard/qml/Pages/50-location.qml 2014-10-22 15:35:00 +0000
4963+++ wizard/qml/Pages/50-location.qml 2014-11-07 22:38:03 +0000
4964@@ -25,7 +25,15 @@
4965 title: i18n.tr("Location")
4966 forwardButtonSourceComponent: forwardButton
4967
4968- property bool hereInstalled: System.hereLicensePath !== "" && termsModel.count > 0
4969+ property bool pathSet: System.hereLicensePath !== " " // single space means it's unassigned
4970+ property bool countSet: false
4971+ skipValid: pathSet && (System.hereLicensePath === "" || countSet)
4972+ skip: skipValid && (System.hereLicensePath === "" || termsModel.count === 0)
4973+
4974+ Connections {
4975+ target: termsModel
4976+ onCountChanged: if (pathSet) countSet = true
4977+ }
4978
4979 FolderListModel {
4980 id: termsModel
4981@@ -40,13 +48,15 @@
4982 busType: QMenuModel.DBus.SessionBus
4983 busName: "com.canonical.indicator.location"
4984 objectPath: "/com/canonical/indicator/location"
4985- property variant enabled: action("location-detection-enabled")
4986+ property variant location: action("location-detection-enabled")
4987+ property variant gps: action("gps-detection-enabled")
4988 Component.onCompleted: start()
4989 }
4990
4991 Column {
4992 id: column
4993 anchors.fill: content
4994+<<<<<<< TREE
4995 spacing: units.gu(2)
4996
4997 Label {
4998@@ -83,6 +93,73 @@
4999 visible: hereInstalled
5000 wrapMode: Text.Wrap
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches