Merge lp:~jonas-drange/ubuntu-system-settings/cellular-split-radio-pref-and-data-fix-1378812 into lp:ubuntu-system-settings

Proposed by Jonas G. Drange
Status: Merged
Approved by: Ken VanDine
Approved revision: 1133
Merged at revision: 1166
Proposed branch: lp:~jonas-drange/ubuntu-system-settings/cellular-split-radio-pref-and-data-fix-1378812
Merge into: lp:ubuntu-system-settings
Prerequisite: lp:~jonas-drange/ubuntu-system-settings/cellular-data-not-preserved-after-fm-fixes-1376957
Diff against target: 1905 lines (+580/-882)
15 files modified
plugins/cellular/Components/CMakeLists.txt (+5/-5)
plugins/cellular/Components/CellularSingleSim.qml (+0/-115)
plugins/cellular/Components/DataMultiSim.qml (+6/-119)
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 (+34/-4)
plugins/cellular/PageChooseCarrier.qml (+3/-2)
plugins/cellular/PageChooseCarriers.qml (+2/-2)
plugins/cellular/PageComponent.qml (+2/-2)
plugins/cellular/sims.js (+10/-0)
tests/autopilot/ubuntu_system_settings/__init__.py (+164/-1)
tests/autopilot/ubuntu_system_settings/tests/__init__.py (+7/-3)
tests/autopilot/ubuntu_system_settings/tests/test_cellular.py (+202/-593)
To merge this branch: bzr merge lp:~jonas-drange/ubuntu-system-settings/cellular-split-radio-pref-and-data-fix-1378812
Reviewer Review Type Date Requested Status
Ken VanDine Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+238304@code.launchpad.net

Commit message

[cellular] split "Cellular Data" and "Connection type" into two separate pieces in the UI for both single and multi SIM

Description of the change

This split is mainly about making the Radio Technology (2g, 3g, etc.) preference selector it's own selector, not tied to whether or not cellular data is used. This is due to the setting having an impact on both voice calls as well as cellular data.

Note that for multi SIM users, the selector will be hidden when cellular data is off. See bug 1383368.

Testplans here: http://pastebin.ubuntu.com/8734645/ and http://pastebin.ubuntu.com/8734648/

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
1129. By Jonas G. Drange

merge trunk

1130. By Jonas G. Drange

selectedIndex needs to be set

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
1131. By Jonas G. Drange

merge trunK

1132. By Jonas G. Drange

up to spec

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Jonas G. Drange (jonas-drange) wrote :
1133. By Jonas G. Drange

don't except any value in that setting

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Ken VanDine (ken-vandine) wrote :

Lots of good stuff here, love to see the test fixes!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'plugins/cellular/Components/CMakeLists.txt'
2--- plugins/cellular/Components/CMakeLists.txt 2014-08-29 14:32:28 +0000
3+++ plugins/cellular/Components/CMakeLists.txt 2014-10-29 15:51:43 +0000
4@@ -1,12 +1,12 @@
5 set(QML_SOURCES
6+ DataMultiSim.qml
7+ DefaultSim.qml
8+ MultiSim.qml
9 NoSim.qml
10- SingleSim.qml
11- MultiSim.qml
12- CellularSingleSim.qml
13- CellularMultiSim.qml
14- DefaultSim.qml
15+ RadioSingleSim.qml
16 Sim.qml
17 SimEditor.qml
18+ SingleSim.qml
19 )
20 install(FILES ${QML_SOURCES} DESTINATION ${PLUGIN_QML_DIR}/cellular/Components)
21
22
23=== removed file 'plugins/cellular/Components/CellularSingleSim.qml'
24--- plugins/cellular/Components/CellularSingleSim.qml 2014-08-21 20:25:08 +0000
25+++ plugins/cellular/Components/CellularSingleSim.qml 1970-01-01 00:00:00 +0000
26@@ -1,115 +0,0 @@
27-/*
28- * Copyright (C) 2014 Canonical Ltd
29- *
30- * This program is free software: you can redistribute it and/or modify
31- * it under the terms of the GNU General Public License version 3 as
32- * published by the Free Software Foundation.
33- *
34- * This program is distributed in the hope that it will be useful,
35- * but WITHOUT ANY WARRANTY; without even the implied warranty of
36- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
37- * GNU General Public License for more details.
38- *
39- * You should have received a copy of the GNU General Public License
40- * along with this program. If not, see <http://www.gnu.org/licenses/>.
41- *
42- * Authors:
43- * Jonas G. Drange <jonas.drange@canonical.com>
44- *
45-*/
46-import QtQuick 2.0
47-import Ubuntu.Components 0.1
48-import Ubuntu.Components.ListItems 0.1 as ListItem
49-
50-Column {
51- height: childrenRect.height
52-
53- property var selector: selector
54-
55- ListItem.ItemSelector {
56- id: selector
57- objectName: "technologyPreferenceSelector"
58- text: i18n.tr("Cellular data:")
59- expanded: true
60-
61- // an empty string is not a valid preference, which means
62- // we disregard the interace and disable the selector
63- enabled: sim.radioSettings.technologyPreference !== ""
64-
65- // model for this selector is modemTechnologies, with
66- // 'off' prepended
67- model: {
68- var m = sim.radioSettings.modemTechnologies.slice(0);
69- m.unshift("off");
70- return m;
71- }
72-
73- delegate: OptionSelectorDelegate {
74- text: {
75- return {
76- 'off': i18n.tr("Off"),
77- 'gsm': i18n.tr("2G only (saves battery)"),
78- 'umts': i18n.tr("2G/3G (faster)"),
79- 'lte': i18n.tr("2G/3G/4G (faster)")
80- }[modelData]
81- }
82- }
83- selectedIndex: {
84- if (sim.connMan.powered) {
85- // will return -1 if empty, which will select nothing.
86- // Makes sense, since the SIM is online, but the
87- // radioSettings interface is not ready yet (sim locked?)
88- return model.indexOf(sim.radioSettings.technologyPreference);
89- } else {
90- return 0;
91- }
92- }
93- }
94-
95- ListItem.Standard {
96- id: dataRoamingItem
97- objectName: "dataRoamingSwitch"
98- text: i18n.tr("Data roaming")
99- enabled: sim.connMan.powered
100- control: Switch {
101- id: dataRoamingControl
102- checked: sim.connMan.roamingAllowed
103- onClicked: sim.connMan.roamingAllowed = checked
104- }
105- }
106-
107- Connections {
108- target: sim.connMan
109- onPoweredChanged: {
110- if (powered) {
111- // restore the tech preference
112- selector.selectedIndex = selector
113- .model.indexOf(sim.radioSettings.technologyPreference)
114- } else {
115- selector.selectedIndex = 0;
116- }
117- }
118- }
119-
120- // binds the SIM online state to the UI
121- Binding {
122- target: sim.connMan
123- property: "powered"
124- value: selector.selectedIndex !== 0
125- }
126-
127- // binds the tech preference to the UI
128- Binding {
129- target: sim.radioSettings
130- property: "technologyPreference"
131- value: {
132- var i = selector.selectedIndex;
133- if (i > 0) {
134- return selector.model[i]
135- } else {
136- // if the modem is off, disregard the selector
137- return sim.radioSettings.technologyPreference;
138- }
139- }
140- }
141-}
142
143=== renamed file 'plugins/cellular/Components/CellularMultiSim.qml' => 'plugins/cellular/Components/DataMultiSim.qml'
144--- plugins/cellular/Components/CellularMultiSim.qml 2014-10-07 15:41:44 +0000
145+++ plugins/cellular/Components/DataMultiSim.qml 2014-10-29 15:51:43 +0000
146@@ -22,8 +22,6 @@
147 import Ubuntu.Components.ListItems 0.1 as ListItem
148
149 Column {
150- id: root
151- property var selector: selector
152
153 function getNameFromIndex (index) {
154 if (index === 0) {
155@@ -33,49 +31,11 @@
156 }
157 }
158
159- function getOnlineSim () {
160- if (state === "sim1Online") {
161- return sims[0];
162- } else if (state === "sim2Online") {
163- return sims[1];
164- } else {
165- return null;
166- }
167- }
168-
169 height: childrenRect.height
170
171- states: [
172- State {
173- name: "sim1Online"
174- when: sims[0].connMan.powered && !sims[1].connMan.powered
175- StateChangeScript { script: {
176- selector.selectedIndex =
177- selector.model.indexOf(
178- sims[0].radioSettings.technologyPreference)
179- }}
180- },
181- State {
182- name: "sim2Online"
183- when: sims[1].connMan.powered && !sims[0].connMan.powered
184- StateChangeScript { script: {
185- selector.selectedIndex =
186- selector.model.indexOf(
187- sims[1].radioSettings.technologyPreference)
188- }}
189- },
190- State {
191- name: "bothOnline"
192- when: sims[0].connMan.powered && sims[1].connMan.powered
193- StateChangeScript { script: {
194- sims[1].connMan.powered = false;
195- }}
196- }
197- ]
198-
199 ListItem.ItemSelector {
200 id: use
201- objectName: "use"
202+ objectName: "data"
203 text: i18n.tr("Cellular data:")
204 expanded: true
205 model: {
206@@ -92,6 +52,7 @@
207 }
208 selectedIndex: [true, sims[0].connMan.powered, sims[1].connMan.powered]
209 .lastIndexOf(true)
210+
211 onDelegateClicked: {
212 // power all sims on or off
213 sims.forEach(function (sim) {
214@@ -100,95 +61,21 @@
215 }
216 }
217
218- Connections {
219- target: sims[0].connMan
220- onPoweredChanged: {
221- if (powered) {
222- use.selectedIndex = 1;
223- }
224- }
225- }
226-
227- Connections {
228- target: sims[1].connMan
229- onPoweredChanged: {
230- if (powered) {
231- use.selectedIndex = 2;
232- }
233- }
234- }
235-
236- ListItem.ItemSelector {
237- id: selector
238- objectName: "technologyPreferenceSelector"
239- expanded: true
240- model: {
241- var sim = getOnlineSim();
242- if (sim) {
243- return sim.radioSettings.modemTechnologies;
244- } else {
245- return [];
246- }
247- }
248- delegate: OptionSelectorDelegate {
249- text: {
250- return {
251- 'gsm': i18n.tr("2G only (saves battery)"),
252- 'umts': i18n.tr("2G/3G (faster)"),
253- 'lte': i18n.tr("2G/3G/4G (faster)")
254- }[modelData]
255- }
256- }
257- visible: use.selectedIndex !== 0
258- onDelegateClicked: {
259- var sim = getOnlineSim();
260- if (sim) {
261- sim.radioSettings.technologyPreference = model[index];
262- }
263- }
264- }
265-
266- Binding {
267- target: selector
268- property: "enabled"
269- value: getOnlineSim() &&
270- (getOnlineSim().radioSettings.technologyPreference !== "")
271- when: getOnlineSim()
272- }
273-
274- Connections {
275- target: sims[0].radioSettings
276- onTechnologyPreferenceChanged: {
277- if (sims[0].connMan.powered) {
278- selector.selectedIndex = selector.model.indexOf(preference);
279- }
280- }
281- }
282-
283- Connections {
284- target: sims[1].radioSettings
285- onTechnologyPreferenceChanged: {
286- if (sims[1].connMan.powered) {
287- selector.selectedIndex = selector.model.indexOf(preference);
288- }
289- }
290- }
291-
292 ListItem.Standard {
293 id: dataRoamingItem
294- objectName: "dataRoamingSwitch"
295 text: i18n.tr("Data roaming")
296 enabled: use.selectedIndex !== 0
297 control: Switch {
298 id: dataRoamingControl
299- onClicked: getOnlineSim().connMan.roamingAllowed = checked
300+ objectName: "roaming"
301+ onClicked: poweredSim.connMan.roamingAllowed = checked
302 }
303+ showDivider: false
304 }
305
306 Binding {
307 target: dataRoamingControl
308 property: "checked"
309- value: getOnlineSim() && getOnlineSim().connMan.roamingAllowed
310- when: getOnlineSim()
311+ value: poweredSim && poweredSim.connMan.roamingAllowed
312 }
313 }
314
315=== modified file 'plugins/cellular/Components/MultiSim.qml'
316--- plugins/cellular/Components/MultiSim.qml 2014-10-06 19:38:06 +0000
317+++ plugins/cellular/Components/MultiSim.qml 2014-10-29 15:51:43 +0000
318@@ -23,21 +23,26 @@
319 import Ubuntu.Components.ListItems 0.1 as ListItem
320
321 Column {
322-
323 objectName: "multiSim"
324
325 property var sims
326+ property var poweredSim: {
327+ var s = null;
328+ sims.forEach(function (sim) {
329+ if (sim.connMan.powered === true) {
330+ s = sim;
331+ }
332+ });
333+ return s;
334+ }
335 property var modems
336-
337 // make settings available to all children of root
338 property var settings: phoneSettings
339
340- CellularMultiSim {
341- anchors { left: parent.left; right: parent.right }
342+ DataMultiSim {
343+ anchors { left: parent.left; right: parent.right }
344 }
345
346- ListItem.Divider {}
347-
348 ListItem.SingleValue {
349 text : i18n.tr("Hotspot disabled because Wi-Fi is off.")
350 visible: showAllUI && !hotspotItem.visible
351@@ -60,15 +65,14 @@
352 visible: showAllUI
353 }
354
355- ListItem.Divider {
356- visible: hotspotItem.visible || dataUsage.visible
357- }
358+ ListItem.Divider {}
359
360 ListItem.SingleValue {
361 text: i18n.tr("Carriers")
362 id: chooseCarrier
363- objectName: "chooseCarrier"
364+ objectName: "carriers"
365 progression: enabled
366+ showDivider: false
367 onClicked: {
368 pageStack.push(Qt.resolvedUrl("../PageChooseCarriers.qml"), {
369 sims: sims
370@@ -88,6 +92,44 @@
371 anchors { left: parent.left; right: parent.right }
372 }
373
374+ ListItem.Divider {}
375+
376+ function techToString (tech) {
377+ return {
378+ 'gsm': i18n.tr("2G only (saves battery)"),
379+ 'umts': i18n.tr("2G/3G (faster)"),
380+ 'lte': i18n.tr("2G/3G/4G (faster)")
381+ }[tech]
382+ }
383+
384+ ListItem.ItemSelector {
385+ id: radio
386+ expanded: true
387+ text: i18n.tr("Connection type:")
388+ model: poweredSim ? poweredSim.radioSettings.modemTechnologies : []
389+ delegate: OptionSelectorDelegate {
390+ objectName: poweredSim.path + "_radio_" + modelData
391+ text: techToString(modelData)
392+ }
393+ enabled: poweredSim ?
394+ (poweredSim.radioSettings.technologyPreference !== "") : false
395+ visible: poweredSim
396+ selectedIndex: poweredSim ?
397+ model.indexOf(poweredSim.radioSettings.technologyPreference) : -1
398+ onDelegateClicked: {
399+ poweredSim.radioSettings.technologyPreference = model[index];
400+ }
401+ }
402+
403+ Connections {
404+ target: poweredSim ? poweredSim.radioSettings : null
405+ onTechnologyPreferenceChanged: {
406+ radio.selectedIndex =
407+ poweredSim.radioSettings.modemTechnologies.indexOf(preference)
408+ }
409+ ignoreUnknownSignals: true
410+ }
411+
412 GSettings {
413 id: phoneSettings
414 schema.id: "com.ubuntu.phone"
415
416=== modified file 'plugins/cellular/Components/NoSim.qml'
417--- plugins/cellular/Components/NoSim.qml 2014-08-19 10:58:01 +0000
418+++ plugins/cellular/Components/NoSim.qml 2014-10-29 15:51:43 +0000
419@@ -25,27 +25,20 @@
420
421 objectName: "noSim"
422
423- ListItem.ItemSelector {
424+ ListItem.Standard {
425 text: i18n.tr("Cellular data:")
426- expanded: true
427 enabled: false
428- model: [i18n.tr("Off"), i18n.tr("2G only (saves battery)"), i18n.tr("2G/3G/4G (faster)")]
429- selectedIndex: -1
430+ control: Switch {
431+ checked: false
432+ }
433 }
434
435 ListItem.Standard {
436 text: i18n.tr("Data roaming")
437 enabled: false
438+ showDivider: false
439 control: Switch {
440 checked: false
441 }
442 }
443-
444- ListItem.Divider {}
445-
446- ListItem.SingleValue {
447- text: i18n.tr("Carrier");
448- value: i18n.tr("N/A")
449- enabled: false
450- }
451 }
452
453=== added file 'plugins/cellular/Components/RadioSingleSim.qml'
454--- plugins/cellular/Components/RadioSingleSim.qml 1970-01-01 00:00:00 +0000
455+++ plugins/cellular/Components/RadioSingleSim.qml 2014-10-29 15:51:43 +0000
456@@ -0,0 +1,57 @@
457+/*
458+ * Copyright (C) 2014 Canonical Ltd
459+ *
460+ * This program is free software: you can redistribute it and/or modify
461+ * it under the terms of the GNU General Public License version 3 as
462+ * published by the Free Software Foundation.
463+ *
464+ * This program is distributed in the hope that it will be useful,
465+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
466+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
467+ * GNU General Public License for more details.
468+ *
469+ * You should have received a copy of the GNU General Public License
470+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
471+ *
472+ * Authors:
473+ * Jonas G. Drange <jonas.drange@canonical.com>
474+ *
475+*/
476+import QtQuick 2.0
477+import Ubuntu.Components 0.1
478+import Ubuntu.Components.ListItems 0.1 as ListItem
479+
480+Column {
481+ height: childrenRect.height
482+
483+ property alias selector: selector
484+
485+ ListItem.ItemSelector {
486+ id: selector
487+ text: i18n.tr("Connection type:")
488+ showDivider: false
489+ expanded: true
490+
491+ // an empty string is not a valid preference, which means
492+ // we disregard the interace and disable the selector
493+ enabled: sim.radioSettings.technologyPreference !== ""
494+ model: sim.radioSettings.modemTechnologies
495+
496+ delegate: OptionSelectorDelegate {
497+ objectName: sim.path + "_radio_" + modelData
498+ text: {
499+ return {
500+ 'gsm': i18n.tr("2G only (saves battery)"),
501+ 'umts': i18n.tr("2G/3G (faster)"),
502+ 'lte': i18n.tr("2G/3G/4G (faster)")
503+ }[modelData]
504+ }
505+ showDivider: false
506+ }
507+ selectedIndex: model.indexOf(sim.radioSettings.technologyPreference)
508+ onDelegateClicked: {
509+ sim.radioSettings.technologyPreference = model[index];
510+ }
511+ }
512+
513+}
514
515=== modified file 'plugins/cellular/Components/SimEditor.qml'
516--- plugins/cellular/Components/SimEditor.qml 2014-08-20 13:48:58 +0000
517+++ plugins/cellular/Components/SimEditor.qml 2014-10-29 15:51:43 +0000
518@@ -22,15 +22,9 @@
519 import Ubuntu.Components.ListItems 0.1 as ListItem
520
521 Column {
522-
523 id: simList
524 objectName: "simEditor"
525
526- anchors {
527- left: parent.left
528- right: parent.right
529- }
530-
531 states: [
532 State {
533 name: "editing"
534@@ -73,7 +67,25 @@
535 }
536 ]
537
538+ NumberAnimation {
539+ id: scrollerAnimation
540+ duration: UbuntuAnimation.SnapDuration
541+ easing: UbuntuAnimation.StandardEasing
542+ target: root.flickable
543+ property: "contentY"
544+ }
545+
546+ function openedEditor () {
547+ var flickable = scrollerAnimation.target;
548+ var maxFlick = Math.max(0, flickable.contentHeight - root.height);
549+ scrollerAnimation.from = flickable.contentY;
550+ scrollerAnimation.to = Math.min(y, maxFlick) - units.gu(9); // header
551+ scrollerAnimation.start();
552+ nameField.forceActiveFocus();
553+ }
554+
555 ListItem.Standard {
556+ id: std
557 text: i18n.tr("Edit SIM Name")
558 }
559
560@@ -83,12 +95,14 @@
561 right: parent.right
562 }
563 height: expandedItem ?
564- childrenRect.height + editor.height : childrenRect.height
565+ expandedItem.expandedHeight : childrenRect.height
566+
567+ boundsBehavior: Flickable.StopAtBounds
568
569 ListItem.Expandable {
570 id: sim1Exp
571 expandedHeight: sim1Col.height
572- objectName: "editSim1"
573+ objectName: "edit_name_" + sims[0].path
574 Column {
575 id: sim1Col
576 anchors {
577@@ -102,7 +116,7 @@
578 }
579 height: sim1Exp.collapsedHeight
580 Label {
581- objectName: "simLabel1"
582+ objectName: "label_" + sims[0].path
583 anchors {
584 left: parent.left
585 right: parent.right
586@@ -117,14 +131,15 @@
587 }
588 onClicked: {
589 simList.state = "editingSim1";
590- nameField.forceActiveFocus();
591+ simList.openedEditor();
592 }
593 }
594
595 ListItem.Expandable {
596 id: sim2Exp
597 expandedHeight: sim2Col.height
598- objectName: "editSim2"
599+ objectName: "edit_name_" + sims[1].path
600+ showDivider: false
601 Column {
602 id: sim2Col
603 anchors {
604@@ -138,7 +153,7 @@
605 }
606 height: sim2Exp.collapsedHeight
607 Label {
608- objectName: "simLabel2"
609+ objectName: "label_" + sims[1].path
610 anchors {
611 left: parent.left
612 right: parent.right
613@@ -153,7 +168,7 @@
614 }
615 onClicked: {
616 simList.state = "editingSim2";
617- nameField.forceActiveFocus();
618+ simList.openedEditor();
619 }
620 }
621 }
622@@ -182,6 +197,8 @@
623
624 spacing: units.gu(2)
625
626+ height: cancel.height + rename.height
627+
628 Button {
629 id: cancel
630 objectName: "cancelRename"
631@@ -204,7 +221,7 @@
632 }
633
634 Item {
635- height: units.gu(1)
636+ height: units.gu(2)
637 width: parent.width
638 }
639
640
641=== modified file 'plugins/cellular/Components/SingleSim.qml'
642--- plugins/cellular/Components/SingleSim.qml 2014-10-02 09:50:11 +0000
643+++ plugins/cellular/Components/SingleSim.qml 2014-10-29 15:51:43 +0000
644@@ -27,11 +27,29 @@
645
646 property var sim
647
648- CellularSingleSim {
649- anchors { left: parent.left; right: parent.right }
650+ ListItem.Standard {
651+ id: selector
652+ text: i18n.tr("Cellular data:")
653+ control: Switch {
654+ id: dataControl
655+ objectName: 'data'
656+ checked: sim.connMan.powered
657+ onClicked: sim.connMan.powered = checked
658+ }
659 }
660
661- ListItem.Divider {}
662+ ListItem.Standard {
663+ id: dataRoamingItem
664+ text: i18n.tr("Data roaming")
665+ enabled: sim.connMan.powered
666+ showDivider: false
667+ control: Switch {
668+ id: dataRoamingControl
669+ objectName: "roaming"
670+ checked: sim.connMan.roamingAllowed
671+ onClicked: sim.connMan.roamingAllowed = checked
672+ }
673+ }
674
675 ListItem.SingleValue {
676 text : i18n.tr("Hotspot disabled because Wi-Fi is off.")
677@@ -54,10 +72,22 @@
678 visible: showAllUI
679 }
680
681+ ListItem.Divider {
682+ visible: radio.selector.model.length
683+ }
684+
685+ RadioSingleSim {
686+ id: radio
687+ anchors { left: parent.left; right: parent.right }
688+ visible: radio.selector.model.length
689+ }
690+
691+ ListItem.Divider {}
692+
693 ListItem.SingleValue {
694 text: i18n.tr("Carrier");
695 id: chooseCarrier
696- objectName: "chooseCarrier"
697+ objectName: "carrier"
698 progression: enabled
699 value: sim.netReg.name || i18n.tr("N/A")
700 enabled: sim.netReg.status !== ""
701
702=== modified file 'plugins/cellular/PageChooseCarrier.qml'
703--- plugins/cellular/PageChooseCarrier.qml 2014-10-06 12:56:18 +0000
704+++ plugins/cellular/PageChooseCarrier.qml 2014-10-29 15:51:43 +0000
705@@ -149,7 +149,7 @@
706
707 ListItem.ItemSelector {
708 id: chooseCarrier
709- objectName: "autoChooseCarrierSelector"
710+ objectName: "mode"
711 expanded: true
712 enabled: sim.netReg.mode !== "auto-only"
713 text: i18n.tr("Choose carrier:")
714@@ -171,6 +171,7 @@
715 }
716 }
717 }
718+
719 ListItem.SingleControl {
720 enabled: chooseCarrier.selectedIndex === 1
721 anchors {
722@@ -198,7 +199,7 @@
723 }
724 ListItem.ItemSelector {
725 id: carrierSelector
726- objectName: "carrierSelector"
727+ objectName: "carriers"
728 expanded: true
729 enabled: sim.netReg.status !== "searching" && chooseCarrier.selectedIndex === 1
730 // work around ItemSelector not having a visual change depending on being disabled
731
732=== modified file 'plugins/cellular/PageChooseCarriers.qml'
733--- plugins/cellular/PageChooseCarriers.qml 2014-10-06 19:38:06 +0000
734+++ plugins/cellular/PageChooseCarriers.qml 2014-10-29 15:51:43 +0000
735@@ -44,7 +44,7 @@
736 }
737
738 ListItem.SingleValue {
739- objectName: "chooseCarrierSim1"
740+ objectName: sims[0].path + "_carriers"
741 value: sims[0].netReg.name ? sims[0].netReg.name : i18n.tr("N/A")
742 enabled: sims[0].netReg.status !== ""
743 progression: true
744@@ -61,7 +61,7 @@
745 }
746
747 ListItem.SingleValue {
748- objectName: "chooseCarrierSim2"
749+ objectName: sims[1].path + "_carriers"
750 value: sims[1].netReg.name ? sims[1].netReg.name : i18n.tr("N/A")
751 enabled: sims[1].netReg.status !== ""
752 progression: true
753
754=== modified file 'plugins/cellular/PageComponent.qml'
755--- plugins/cellular/PageComponent.qml 2014-10-17 14:57:17 +0000
756+++ plugins/cellular/PageComponent.qml 2014-10-29 15:51:43 +0000
757@@ -94,15 +94,15 @@
758 start()
759 }
760 }
761+
762 Flickable {
763+ id: flick
764 anchors.fill: parent
765 contentWidth: parent.width
766 contentHeight: contentItem.childrenRect.height
767 boundsBehavior: (contentHeight > root.height) ? Flickable.DragAndOvershootBounds : Flickable.StopAtBounds
768-
769 Column {
770 anchors { left: parent.left; right: parent.right }
771-
772 Loader {
773 id: loader
774 anchors { left: parent.left; right: parent.right }
775
776=== modified file 'plugins/cellular/sims.js'
777--- plugins/cellular/sims.js 2014-10-03 14:08:08 +0000
778+++ plugins/cellular/sims.js 2014-10-29 15:51:43 +0000
779@@ -17,6 +17,16 @@
780 return getPresent()[0];
781 }
782
783+function getFirstOnline () {
784+ var online = null;
785+ getPresent().forEach(function (sim) {
786+ if (sim.connMan.powered === true) {
787+ online = sim;
788+ }
789+ });
790+ return online;
791+}
792+
793 function getCount () {
794 return getAll().length;
795 }
796
797=== modified file 'tests/autopilot/ubuntu_system_settings/__init__.py'
798--- tests/autopilot/ubuntu_system_settings/__init__.py 2014-09-26 12:52:31 +0000
799+++ tests/autopilot/ubuntu_system_settings/__init__.py 2014-10-29 15:51:43 +0000
800@@ -1,3 +1,4 @@
801+
802 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
803 #
804 # Copyright (C) 2014 Canonical Ltd.
805@@ -114,6 +115,10 @@
806 def go_to_wifi_page(self):
807 return self._go_to_page('entryComponent-wifi', 'wifiPage')
808
809+ @autopilot.logging.log_action(logger.debug)
810+ def go_to_cellular_page(self):
811+ return self._go_to_page('entryComponent-cellular', 'cellularPage')
812+
813 def _go_to_page(self, item_object_name, page_object_name):
814 self.click_item(item_object_name)
815 page = self.wait_select_single(objectName=page_object_name)
816@@ -202,7 +207,7 @@
817 self._orientation_lock_switch.uncheck()
818
819
820-class CelullarPage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
821+class CellularPage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
822
823 """Autopilot helper for the Sound page."""
824
825@@ -214,6 +219,164 @@
826 return True
827 return False
828
829+ @autopilot.logging.log_action(logger.debug)
830+ def enable_data(self):
831+ self._set_data(True)
832+
833+ @autopilot.logging.log_action(logger.debug)
834+ def disable_data(self):
835+ self._set_data(False)
836+
837+ def disable_datas(self):
838+ self.select_sim_for_data('off')
839+
840+ @autopilot.logging.log_action(logger.debug)
841+ def _set_data(self, data):
842+ chk = self.select_single(objectName='data')
843+ if data:
844+ chk.check()
845+ else:
846+ chk.uncheck()
847+
848+ @autopilot.logging.log_action(logger.debug)
849+ def get_data(self):
850+ return self.select_single(objectName='data').checked
851+
852+ @autopilot.logging.log_action(logger.debug)
853+ def enable_roaming(self, timeout=10):
854+ self._set_roaming(True, timeout=timeout)
855+
856+ @autopilot.logging.log_action(logger.debug)
857+ def disable_roaming(self, timeout=10):
858+ self._set_roaming(False, timeout=timeout)
859+
860+ @autopilot.logging.log_action(logger.debug)
861+ def _set_roaming(self, roaming, timeout):
862+ chk = self.select_single(objectName='roaming')
863+ if roaming:
864+ chk.check(timeout=timeout)
865+ else:
866+ chk.uncheck(timeout=timeout)
867+
868+ @autopilot.logging.log_action(logger.debug)
869+ def set_connection_type(self, radio_type, sim='/ril_0',
870+ scroll_to_and_click=None):
871+ self._set_connection_type(radio_type, sim, scroll_to_and_click)
872+
873+ @autopilot.logging.log_action(logger.debug)
874+ def _set_connection_type(self, radio_type, sim, scroll_to_and_click):
875+ t = self.wait_select_single(
876+ 'OptionSelectorDelegate',
877+ objectName='%s_radio_%s' % (sim, radio_type))
878+ if scroll_to_and_click:
879+ scroll_to_and_click(t)
880+ else:
881+ t.swipe_into_view()
882+
883+ self.pointing_device.click_object(t)
884+
885+ @autopilot.logging.log_action(logger.debug)
886+ def change_carrier(self, carrier, sim=None):
887+ if sim:
888+ carriersPage = self._click_carriers()
889+ carrierPage = carriersPage.select_sim(sim)
890+ else:
891+ carrierPage = self._click_carrier()
892+
893+ carrierPage.set_manual()
894+ carrierPage.set_carrier(carrier)
895+
896+ @autopilot.logging.log_action(logger.debug)
897+ def _click_carrier(self):
898+ item = self.select_single(objectName='carrier')
899+ self.pointing_device.click_object(item)
900+ return self.get_root_instance().wait_select_single(
901+ objectName='chooseCarrierPage')
902+
903+ @autopilot.logging.log_action(logger.debug)
904+ def _click_carriers(self):
905+ item = self.select_single(objectName='carriers')
906+ self.pointing_device.click_object(item)
907+ return self.get_root_instance().wait_select_single(
908+ objectName='chooseCarriersPage')
909+
910+ @autopilot.logging.log_action(logger.debug)
911+ def select_sim_for_data(self, sim):
912+ self._select_sim_for_data(sim)
913+
914+ @autopilot.logging.log_action(logger.debug)
915+ def _select_sim_for_data(self, sim):
916+ item = self.select_single(objectName='use%s' % sim)
917+ self.pointing_device.click_object(item)
918+
919+ @autopilot.logging.log_action(logger.debug)
920+ def select_sim_for_calls(self, sim):
921+ pass
922+
923+ @autopilot.logging.log_action(logger.debug)
924+ def select_sim_for_messages(self):
925+ pass
926+
927+ @autopilot.logging.log_action(logger.debug)
928+ def set_name(self, sim, name):
929+ self._set_name(sim, name)
930+
931+ def get_name(self, sim):
932+ obj = self.select_single(
933+ objectName="label_%s" % sim)
934+ return obj.text
935+
936+ def _set_name(self, sim, name):
937+ obj = self.select_single(
938+ objectName="edit_name_%s" % sim)
939+ self.pointing_device.click_object(obj)
940+
941+ # wait for animation
942+ sleep(1)
943+ ok = self.select_single('Button', objectName="doRename")
944+
945+ field = self.select_single('TextField', objectName="nameField")
946+ field.write(name)
947+ self.pointing_device.click_object(ok)
948+
949+
950+class PageChooseCarriers(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
951+
952+ """Autopilot helper for carrier selection page (multisim)."""
953+
954+ @autopilot.logging.log_action(logger.debug)
955+ def select_sim(self, sim):
956+ return self._select_sim(sim)
957+
958+ @autopilot.logging.log_action(logger.debug)
959+ def _select_sim(self, sim):
960+ item = self.select_single(objectName='%s_carriers' % sim)
961+ self.pointing_device.click_object(item)
962+ return self.get_root_instance().wait_select_single(
963+ objectName='chooseCarrierPage')
964+
965+
966+class PageChooseCarrier(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
967+
968+ """Autopilot helper for carrier selection page (singlesim)."""
969+
970+ @autopilot.logging.log_action(logger.debug)
971+ def set_manual(self):
972+ item = self.select_single(text='Manually')
973+ self.pointing_device.click_object(item)
974+
975+ @autopilot.logging.log_action(logger.debug)
976+ def set_automatic(self):
977+ item = self.select_single(text='Automatically')
978+ self.pointing_device.click_object(item)
979+
980+ def set_carrier(self, carrier):
981+ # wait for animation, since page.animationRunning.wait_for(False)
982+ # does not work?
983+ sleep(0.5)
984+ item = self.select_single(text=carrier)
985+ self.pointing_device.click_object(item)
986+
987
988 class TimeAndDatePage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
989
990
991=== modified file 'tests/autopilot/ubuntu_system_settings/tests/__init__.py'
992--- tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-10-22 21:34:08 +0000
993+++ tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-10-29 15:51:43 +0000
994@@ -33,6 +33,7 @@
995 RDO_IFACE = 'org.ofono.RadioSettings'
996 SIM_IFACE = 'org.ofono.SimManager'
997 NETREG_IFACE = 'org.ofono.NetworkRegistration'
998+NETOP_IFACE = 'org.ofono.NetworkOperator'
999 CALL_FWD_IFACE = 'org.ofono.CallForwarding'
1000 CALL_SETTINGS_IFACE = 'org.ofono.CallSettings'
1001 SYSTEM_IFACE = 'com.canonical.SystemImage'
1002@@ -150,7 +151,7 @@
1003 def mock_carriers(self, name):
1004 self.dbusmock.AddObject(
1005 '/%s/operator/op2' % name,
1006- 'org.ofono.NetworkOperator',
1007+ NETOP_IFACE,
1008 {
1009 'Name': 'my.cool.telco',
1010 'Status': 'available',
1011@@ -167,7 +168,7 @@
1012 # Add a forbidden carrier
1013 self.dbusmock.AddObject(
1014 '/%s/operator/op3' % name,
1015- 'org.ofono.NetworkOperator',
1016+ NETOP_IFACE,
1017 {
1018 'Name': 'my.bad.telco',
1019 'Status': 'forbidden',
1020@@ -311,9 +312,12 @@
1021
1022
1023 class CellularBaseTestCase(UbuntuSystemSettingsOfonoTestCase):
1024+
1025 def setUp(self):
1026 """ Go to Cellular page """
1027- super(CellularBaseTestCase, self).setUp('cellular')
1028+ super(CellularBaseTestCase, self).setUp()
1029+ self.cellular_page = self.system_settings.\
1030+ main_view.go_to_cellular_page()
1031
1032
1033 class PhoneOfonoBaseTestCase(UbuntuSystemSettingsOfonoTestCase):
1034
1035=== modified file 'tests/autopilot/ubuntu_system_settings/tests/test_cellular.py'
1036--- tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-10-09 14:09:38 +0000
1037+++ tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-10-29 15:51:43 +0000
1038@@ -5,537 +5,217 @@
1039 # under the terms of the GNU General Public License version 3, as published
1040 # by the Free Software Foundation.
1041
1042-import dbus
1043 from gi.repository import Gio, GLib
1044 from time import sleep
1045
1046 from autopilot.introspection.dbus import StateNotFoundError
1047 from autopilot.matchers import Eventually
1048-from testtools.matchers import Equals, NotEquals, raises
1049-from unittest import skip
1050+from testtools.matchers import Equals, raises, StartsWith
1051
1052 from ubuntu_system_settings.tests import (
1053- CellularBaseTestCase, CONNMAN_IFACE, RDO_IFACE, SIM_IFACE)
1054-from ubuntu_system_settings.utils.i18n import ugettext as _
1055-
1056-from ubuntuuitoolkit import emulators as toolkit_emulators
1057-
1058-
1059-PREFERENCE_2G = '2G only (saves battery)'
1060-PREFERENCE_UMTS = '2G/3G (faster)'
1061-PREFERENCE_LTE = '2G/3G/4G (faster)'
1062-PREFERENCE_OFF = 'Off'
1063-USE_OFF = "useoff"
1064-USE_SIM_1 = "use/ril_0"
1065-USE_SIM_2 = "use/ril_1"
1066+ CellularBaseTestCase, CONNMAN_IFACE, RDO_IFACE, NETREG_IFACE)
1067
1068
1069 class CellularTestCase(CellularBaseTestCase):
1070- """ Tests for cellular Page """
1071-
1072- """Caches the technology preference selector"""
1073- _pref_selector = None
1074-
1075- @property
1076- def data_preference_selector(self):
1077- """Return data_preference_selector"""
1078- try:
1079- self._pref_selector.get_properties()
1080- except:
1081- self._pref_selector = \
1082- self.system_settings.main_view.cellular_page.select_single(
1083- toolkit_emulators.ItemSelector,
1084- objectName="technologyPreferenceSelector"
1085- )
1086- return self._pref_selector
1087-
1088- def select_preference(self, label):
1089- """Helper method to click a preference which matches provided label"""
1090- pref = self.data_preference_selector.select_single('Label', text=label)
1091- self.system_settings.main_view.pointing_device.click_object(pref)
1092-
1093- def assert_selected_preference(self, index):
1094- """Helper method asserting that the selected data technology preference
1095- is that of index"""
1096- self.assertThat(self.data_preference_selector.selectedIndex,
1097- Eventually(Equals(index)))
1098-
1099- def navigate_to_carrier_page(self):
1100- selector = self.system_settings.main_view.cellular_page.select_single(
1101- objectName="chooseCarrier"
1102- )
1103- self.system_settings.main_view.scroll_to_and_click(selector)
1104-
1105- def navigate_to_manual(self):
1106- selector = self.choose_carrier_page.select_single(
1107- toolkit_emulators.ItemSelector,
1108- objectName="autoChooseCarrierSelector"
1109- )
1110- manual = selector.select_single('Label', text=_("Manually"))
1111- self.system_settings.main_view.pointing_device.click_object(manual)
1112- choosecarrier = self.system_settings.main_view.cellular_page.\
1113- select_single(objectName="chooseCarrier")
1114- self.system_settings.main_view.pointing_device.click_object(
1115- choosecarrier)
1116- self.assertThat(
1117- self.system_settings.main_view.choose_page.title,
1118- Equals(_("Carrier"))
1119- )
1120-
1121- def test_cellular_page(self):
1122- """ Checks whether Cellular page is available """
1123- self.assertThat(
1124- self.system_settings.main_view.cellular_page,
1125- NotEquals(None)
1126- )
1127- self.assertThat(
1128- self.system_settings.main_view.cellular_page.title,
1129- Equals(_('Cellular'))
1130- )
1131-
1132- def test_single_sim_layout(self):
1133- self.system_settings.main_view.cellular_page.\
1134- select_single(objectName="singleSim")
1135- self.assertThat(lambda: self.system_settings.main_view.select_single(
1136- objectName='multiSim'), raises(StateNotFoundError))
1137- self.assertThat(lambda: self.system_settings.main_view.select_single(
1138- objectName='noSim'), raises(StateNotFoundError))
1139-
1140- def test_current_network(self):
1141- """ Tests whether the current network is visible and selected """
1142- self.navigate_to_carrier_page()
1143- self.navigate_to_manual()
1144- carriers = self.system_settings.main_view.choose_page.select_single(
1145- toolkit_emulators.ItemSelector,
1146- objectName="carrierSelector"
1147- )
1148- # TODO: Once there is a proper ItemSelector emulator, get the items
1149- # from it and check 'fake.tel' is the selected one.
1150- selected_delegate = carriers.select_single(
1151- 'OptionSelectorDelegate', selected=True)
1152- selected_delegate.select_single('Label', text="fake.tel")
1153-
1154- def test_alt_network(self):
1155- """ Tests whether an alternative available network is displayed """
1156- self.navigate_to_carrier_page()
1157- self.navigate_to_manual()
1158- carriers = self.system_settings.main_view.choose_page.select_single(
1159- toolkit_emulators.ItemSelector,
1160- objectName="carrierSelector"
1161- )
1162- manual = carriers.select_single('Label', text="my.cool.telco")
1163- self.assertThat(manual, NotEquals(None))
1164+
1165+ def test_enable_data(self):
1166+ self.cellular_page.enable_data()
1167+ self.assertThat(
1168+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
1169+ Eventually(Equals(True))
1170+ )
1171+
1172+ def test_disable_data(self):
1173+ self.cellular_page.disable_data()
1174+ self.assertThat(
1175+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
1176+ Eventually(Equals(False))
1177+ )
1178+
1179+ def test_remote_manipulation_of_data(self):
1180+ self.modem_0.EmitSignal(
1181+ CONNMAN_IFACE,
1182+ 'PropertyChanged',
1183+ 'sv',
1184+ ['Powered', 'true'])
1185+
1186+ self.assertThat(lambda: self.cellular_page.get_data(),
1187+ Eventually(Equals(True)))
1188+
1189+ self.modem_0.EmitSignal(
1190+ CONNMAN_IFACE,
1191+ 'PropertyChanged',
1192+ 'sv',
1193+ ['Powered', 'false'])
1194+
1195+ self.assertThat(lambda: self.cellular_page.get_data(),
1196+ Eventually(Equals(False)))
1197+
1198+ def test_enable_roaming(self):
1199+ self.cellular_page.enable_roaming()
1200+ self.assertThat(
1201+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'),
1202+ Eventually(Equals(True))
1203+ )
1204+
1205+ def test_disable_roaming(self):
1206+ self.cellular_page.disable_roaming()
1207+ self.assertThat(
1208+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'),
1209+ Eventually(Equals(False))
1210+ )
1211+
1212+ def test_connection_type(self):
1213+ get_pref = lambda: self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')
1214+ for pref in ['lte', 'umts', 'gsm']:
1215+ self.cellular_page.set_connection_type(pref)
1216+ self.assertThat(get_pref, Eventually(Equals(pref)))
1217+
1218+ def test_current_carrier(self):
1219+ self.assertThat(lambda: self.modem_0.Get(NETREG_IFACE, 'Name'),
1220+ Eventually(Equals('fake.tel')))
1221+
1222+ def test_change_carrier(self):
1223+ self.cellular_page.change_carrier('my.cool.telco')
1224
1225 def test_no_forbidden_network(self):
1226 """ Ensures that a forbidden network is not shown """
1227- self.navigate_to_carrier_page()
1228- self.navigate_to_manual()
1229- carriers = self.system_settings.main_view.choose_page.select_single(
1230- toolkit_emulators.ItemSelector,
1231- objectName="carrierSelector"
1232- )
1233 self.assertThat(
1234- lambda: carriers.select_single('Label', text="my.bad.telco"),
1235+ lambda: self.cellular_page.change_carrier('my.bad.telco'),
1236 raises(StateNotFoundError)
1237 )
1238
1239- def test_set_sim_offline(self):
1240- self.select_preference(PREFERENCE_OFF)
1241-
1242- sleep(0.7)
1243-
1244- self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
1245-
1246- def test_set_sim_online(self):
1247- self.select_preference(PREFERENCE_OFF)
1248- sleep(0.7)
1249- self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
1250-
1251- self.select_preference(PREFERENCE_UMTS)
1252- sleep(0.7)
1253- self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
1254-
1255- def test_roaming_switch(self):
1256- """Test that switching off cellular data disables roaming switch"""
1257- roaming_switch = self.system_settings.main_view.select_single(
1258- objectName="dataRoamingSwitch"
1259- )
1260- # select 2G only
1261- self.select_preference(PREFERENCE_2G)
1262-
1263- # assert that roaming_switch is enabled
1264- self.assertThat(
1265- roaming_switch.get_properties()['enabled'],
1266- Eventually(Equals(True)))
1267-
1268- # click off
1269- self.select_preference(PREFERENCE_OFF)
1270- # assert roaming_switch is disabled
1271- self.assertThat(
1272- roaming_switch.get_properties()['enabled'],
1273- Eventually(Equals(False)))
1274-
1275- def test_allow_roaming(self):
1276- roaming_switch = self.system_settings.main_view.select_single(
1277- objectName="dataRoamingSwitch"
1278- )
1279- self.system_settings.main_view.scroll_to_and_click(roaming_switch)
1280- sleep(1.5)
1281- self.assertEqual(
1282- True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
1283-
1284- def test_change_data_preference(self):
1285- self.select_preference(PREFERENCE_2G)
1286- sleep(0.7)
1287- self.assertEqual('gsm', self.modem_0.Get(RDO_IFACE,
1288- 'TechnologyPreference'))
1289- self.select_preference(PREFERENCE_UMTS)
1290- sleep(0.7)
1291- self.assertEqual('umts', self.modem_0.Get(RDO_IFACE,
1292- 'TechnologyPreference'))
1293-
1294- def test_sim_online_status_insensitive_to_radio_preference(self):
1295- # turn off cellular data
1296- self.select_preference(PREFERENCE_OFF)
1297-
1298- # fake dbus signal, changing to umts
1299- self.modem_0.EmitSignal(
1300- 'org.ofono.RadioSettings',
1301- 'PropertyChanged',
1302- 'sv',
1303- ['TechnologyPreference', dbus.String('umts', variant_level=1)])
1304-
1305- # assert that "Off" has not changed
1306- self.assert_selected_preference(0)
1307-
1308- def test_ui_reacts_to_sim_set_coming_online(self):
1309- self.select_preference(PREFERENCE_2G)
1310- self.select_preference(PREFERENCE_OFF)
1311-
1312- sleep(0.7)
1313-
1314- self.modem_0.EmitSignal(
1315- CONNMAN_IFACE,
1316- 'PropertyChanged',
1317- 'sv',
1318- ['Powered', 'true'])
1319-
1320- # assert that 2G is selected
1321- self.assert_selected_preference(1)
1322-
1323- def test_unlocking_sim(self):
1324- '''Like it would if the sim was locked, e.g.'''
1325- self.modem_0.Set(RDO_IFACE, 'TechnologyPreference',
1326- dbus.String('', variant_level=1))
1327-
1328- self.system_settings.main_view.go_back()
1329-
1330- self.system_settings.main_view.pointing_device.click_object(
1331- self.system_settings.main_view.select_single(
1332- objectName='entryComponent-cellular'))
1333-
1334- self.assert_selected_preference(-1)
1335- self.assertFalse(self.data_preference_selector.enabled)
1336-
1337- self.modem_0.EmitSignal(
1338- 'org.ofono.RadioSettings',
1339- 'PropertyChanged',
1340- 'sv',
1341- ['TechnologyPreference', dbus.String('lte', variant_level=1)])
1342-
1343- self.assert_selected_preference(3)
1344-
1345
1346 class DualSimCellularTestCase(CellularBaseTestCase):
1347
1348 use_sims = 2
1349
1350- def navigate_to_carriers_page(self):
1351- selector = self.system_settings.main_view.cellular_page.select_single(
1352- objectName="chooseCarrier"
1353- )
1354- self.system_settings.main_view.scroll_to_and_click(selector)
1355-
1356- def navigate_to_carrier_page_for_sim(self, n):
1357- selector = self.choose_carriers_page.select_single(
1358- objectName="chooseCarrierSim%d" % n
1359- )
1360- self.system_settings.main_view.scroll_to_and_click(selector)
1361-
1362- def navigate_to_manual(self):
1363- selector = self.choose_carrier_page.select_single(
1364- toolkit_emulators.ItemSelector,
1365- objectName="autoChooseCarrierSelector"
1366- )
1367- manual = selector.select_single('Label', text=_("Manually"))
1368- self.system_settings.main_view.scroll_to_and_click(manual)
1369- choosecarrier = self.system_settings.main_view.cellular_page.\
1370- select_single(objectName="chooseCarrier")
1371- self.system_settings.main_view.scroll_to_and_click(choosecarrier)
1372- self.assertThat(
1373- self.system_settings.main_view.choose_page.title,
1374- Equals(_("Carrier"))
1375- )
1376-
1377- @property
1378- def data_preference_selector(self):
1379- """Return data_preference_selector"""
1380+ def test_data_off(self):
1381+ self.cellular_page.disable_datas()
1382+ self.assertThat(
1383+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
1384+ Eventually(Equals(False))
1385+ )
1386+ self.assertThat(
1387+ lambda: self.modem_1.Get(CONNMAN_IFACE, 'Powered'),
1388+ Eventually(Equals(False))
1389+ )
1390+
1391+ def test_sim1_online(self):
1392+ self.cellular_page.select_sim_for_data('/ril_0')
1393+ self.assertThat(
1394+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
1395+ Eventually(Equals(True))
1396+ )
1397+ self.assertThat(
1398+ lambda: self.modem_1.Get(CONNMAN_IFACE, 'Powered'),
1399+ Eventually(Equals(False))
1400+ )
1401+
1402+ def test_sim2_online(self):
1403+ self.cellular_page.select_sim_for_data('/ril_1')
1404+ self.assertThat(
1405+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
1406+ Eventually(Equals(False))
1407+ )
1408+ self.assertThat(
1409+ lambda: self.modem_1.Get(CONNMAN_IFACE, 'Powered'),
1410+ Eventually(Equals(True))
1411+ )
1412+
1413+ def test_connection_type_on_sim1(self):
1414+ sim = '/ril_0'
1415+ stac = self.system_settings.main_view.scroll_to_and_click
1416+ self.cellular_page.select_sim_for_data(sim)
1417+ get_pref = lambda: self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')
1418+ for pref in ['lte', 'umts', 'gsm']:
1419+ self.cellular_page.set_connection_type(
1420+ pref, sim=sim, scroll_to_and_click=stac)
1421+ self.assertThat(get_pref, Eventually(Equals(pref)))
1422+
1423+ def test_connection_type_on_sim2(self):
1424+ sim = '/ril_1'
1425+ stac = self.system_settings.main_view.scroll_to_and_click
1426+ self.cellular_page.select_sim_for_data(sim)
1427+ get_pref = lambda: self.modem_1.Get(RDO_IFACE, 'TechnologyPreference')
1428+ for pref in ['gsm']:
1429+ self.cellular_page.set_connection_type(
1430+ pref, sim=sim, scroll_to_and_click=stac)
1431+ self.assertThat(get_pref, Eventually(Equals(pref)))
1432+
1433+ def test_current_carrier_sim1(self):
1434+ self.assertThat(lambda: self.modem_0.Get(NETREG_IFACE, 'Name'),
1435+ Eventually(Equals('fake.tel')))
1436+
1437+ def test_change_carrier_sim1(self):
1438+ sim = '/ril_0'
1439+ self.cellular_page.change_carrier('my.cool.telco', sim=sim)
1440+
1441+ def test_current_carrier_sim2(self):
1442+ self.assertThat(lambda: self.modem_1.Get(NETREG_IFACE, 'Name'),
1443+ Eventually(Equals('fake.tel')))
1444+
1445+ def test_change_carrier_sim2(self):
1446+ sim = '/ril_1'
1447+ self.cellular_page.change_carrier('my.cool.telco', sim=sim)
1448+
1449+ def test_change_sim1_name(self):
1450+ gsettings = Gio.Settings.new('com.ubuntu.phone')
1451+ sim = '/ril_0'
1452 try:
1453- self._pref_selector.get_properties()
1454+ old_name = gsettings.get_value('sim-names')[sim]
1455 except:
1456- self._pref_selector = \
1457- self.system_settings.main_view.cellular_page.select_single(
1458- toolkit_emulators.ItemSelector,
1459- objectName="technologyPreferenceSelector"
1460- )
1461- return self._pref_selector
1462-
1463- def select_preference(self, label):
1464- """Helper method that clicks a preference
1465- that matches provided label"""
1466- pref = self.data_preference_selector.select_single('Label', text=label)
1467- self.system_settings.main_view.scroll_to_and_click(pref)
1468-
1469- def assert_selected_preference(self, index):
1470- """Helper method asserting that the selected
1471- data technology preference is that of index"""
1472- self.assertThat(
1473- self.data_preference_selector.selectedIndex,
1474- Eventually(Equals(index)))
1475-
1476- def use_selector(self, label):
1477- obj = self.system_settings.main_view.cellular_page.select_single(
1478- objectName="use"
1479- ).select_single(objectName=label)
1480- self.system_settings.main_view.scroll_to_and_click(obj)
1481-
1482- def assert_used(self, index):
1483- obj = self.system_settings.main_view.cellular_page.select_single(
1484- objectName="use"
1485- )
1486- self.assertThat(
1487- obj.selectedIndex, Eventually(Equals(index)))
1488-
1489- def get_sim_name(self, num):
1490- obj = self.system_settings.main_view.cellular_page.select_single(
1491- objectName="simLabel%d" % num)
1492- return obj.get_properties()['text']
1493-
1494- def rename_sim(self, num, new_name):
1495- obj = self.system_settings.main_view.cellular_page.select_single(
1496- objectName="simEditor"
1497- ).select_single(objectName="editSim%d" % num)
1498- self.system_settings.main_view.scroll_to_and_click(obj)
1499- field = self.system_settings.main_view.cellular_page.select_single(
1500- objectName="nameField"
1501- )
1502- self.system_settings.main_view.scroll_to_and_click(field)
1503- self.system_settings.main_view.scroll_to_and_click(
1504- field.select_single(objectName="clear_button"))
1505- self.keyboard.type(new_name)
1506- self.system_settings.main_view.scroll_to_and_click(
1507- self.system_settings.main_view.cellular_page.select_single(
1508- objectName="doRename"))
1509-
1510- def test_use_sim_1(self):
1511- self.use_selector(USE_OFF)
1512- self.use_selector(USE_SIM_1)
1513- sleep(0.7)
1514- self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
1515- self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
1516-
1517- def test_use_sim_2(self):
1518- self.use_selector(USE_OFF)
1519- self.use_selector(USE_SIM_2)
1520- sleep(0.7)
1521- self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
1522- self.assertEqual(True, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
1523-
1524- def test_turn_off_both_sims(self):
1525- self.use_selector(USE_OFF)
1526- sleep(0.7)
1527- self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
1528- self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
1529-
1530- def test_use_gsm_for_sim_1(self):
1531- self.use_selector(USE_SIM_1)
1532- self.select_preference(PREFERENCE_2G)
1533- sleep(0.7)
1534- self.assertEqual(
1535- 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
1536-
1537- def test_use_umts_for_sim_1(self):
1538- self.use_selector(USE_SIM_1)
1539- self.select_preference(PREFERENCE_UMTS)
1540- sleep(0.7)
1541- self.assertEqual(
1542- 'umts', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
1543-
1544- def test_use_gsm_for_sim_2(self):
1545- self.use_selector(USE_SIM_1)
1546- self.select_preference(PREFERENCE_2G)
1547- sleep(0.7)
1548- self.assertEqual(
1549- 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
1550-
1551- def test_when_sim_1_comes_online_ui_is_correct(self):
1552- self.use_selector(USE_SIM_1)
1553- self.select_preference(PREFERENCE_UMTS)
1554- self.use_selector(USE_OFF)
1555- sleep(0.7)
1556- self.modem_0.Set(CONNMAN_IFACE, 'Powered', True)
1557- self.modem_0.EmitSignal(
1558- CONNMAN_IFACE,
1559- 'PropertyChanged',
1560- 'sv',
1561- ['Powered', 'true'])
1562-
1563- self.assertEqual(
1564- 'umts', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
1565- self.assert_used(1)
1566- self.assert_selected_preference(1)
1567-
1568- def test_when_sim_2_comes_online_ui_is_correct(self):
1569- self.use_selector(USE_SIM_2)
1570- self.select_preference(PREFERENCE_2G)
1571- self.use_selector(USE_OFF)
1572- sleep(2)
1573- self.modem_1.Set(CONNMAN_IFACE, 'Powered', True)
1574- self.modem_1.EmitSignal(
1575- CONNMAN_IFACE,
1576- 'PropertyChanged',
1577- 'sv',
1578- ['Powered', 'true'])
1579-
1580- self.assertEqual(
1581- 'gsm', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference'))
1582- self.assert_used(2)
1583- self.assert_selected_preference(0)
1584-
1585- def test_roaming_switch(self):
1586- roaming_switch = self.system_settings.main_view.select_single(
1587- objectName="dataRoamingSwitch"
1588- )
1589- # assert that roaming_switch is enabled
1590- self.assertTrue(roaming_switch.get_properties()['enabled'])
1591-
1592- # click off
1593- self.use_selector(USE_OFF)
1594-
1595- # assert roaming_switch is disabled
1596- self.assertThat(
1597- roaming_switch.get_properties()['enabled'],
1598- Eventually(Equals(False)))
1599-
1600- def test_allow_roaming(self):
1601- self.use_selector(USE_SIM_1)
1602- self.assertEqual(
1603- False, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
1604- roaming_switch = self.system_settings.main_view.select_single(
1605- objectName="dataRoamingSwitch"
1606- )
1607- self.system_settings.main_view.scroll_to_and_click(roaming_switch)
1608- sleep(1.5)
1609- self.assertEqual(
1610- True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
1611-
1612- def test_no_radio_preference(self):
1613- self.select_preference(PREFERENCE_UMTS)
1614- self.use_selector(USE_OFF)
1615-
1616- self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', '')
1617- self.modem_0.EmitSignal(
1618- CONNMAN_IFACE,
1619- 'PropertyChanged',
1620- 'sv',
1621- ['TechnologyPreference', ''])
1622-
1623- self.assertThat(
1624- self.data_preference_selector.get_properties()['visible'],
1625- Eventually(Equals(False)))
1626-
1627- # see
1628- # https://gitorious.org/python-dbusmock/python-dbusmock/merge_requests/3
1629- @skip('skipped due to bug in dbusmock')
1630- def test_change_op_sim_1(self):
1631- self.navigate_to_carriers_page()
1632- self.navigate_to_carrier_page_for_sim(1)
1633- carriers = self.system_settings.main_view.choose_page.select_single(
1634- toolkit_emulators.ItemSelector, objectName="carrierSelector")
1635- manual = carriers.select_single('Label', text="my.cool.telco")
1636- self.assertThat(manual, NotEquals(None))
1637-
1638- # see
1639- # https://gitorious.org/python-dbusmock/python-dbusmock/merge_requests/3
1640- @skip('skipped due to bug in dbusmock')
1641- def test_change_op_sim_2(self):
1642- self.navigate_to_carriers_page()
1643- self.navigate_to_carrier_page_for_sim(2)
1644- carriers = self.system_settings.main_view.choose_page.select_single(
1645- toolkit_emulators.ItemSelector, objectName="carrierSelector")
1646- manual = carriers.select_single('Label', text="my.cool.telco")
1647- self.assertThat(manual, NotEquals(None))
1648-
1649- def test_radio_preference_changes(self):
1650- self.use_selector(USE_SIM_1)
1651-
1652- self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', 'umts')
1653- self.modem_0.EmitSignal(
1654- RDO_IFACE,
1655- 'PropertyChanged',
1656- 'sv',
1657- ['TechnologyPreference', 'umts'])
1658-
1659- self.assert_selected_preference(1)
1660-
1661- def test_changing_sim1_name(self):
1662- gsettings = Gio.Settings.new('com.ubuntu.phone')
1663- old_name = gsettings.get_value('sim-names')['/ril_0']
1664+ old_name = 'SIM 1'
1665 new_name = 'FOO BAR'
1666- self.rename_sim(1, new_name)
1667+ self.cellular_page.set_name(sim, new_name)
1668
1669- # wait for gsettings
1670- sleep(1)
1671 try:
1672- self.assertEqual(
1673- new_name, gsettings.get_value('sim-names')['/ril_0'])
1674+ self.assertThat(
1675+ lambda: gsettings.get_value('sim-names')[sim],
1676+ Eventually(Equals(new_name)))
1677 except Exception as e:
1678 raise e
1679 finally:
1680- self.rename_sim(1, old_name)
1681+ self.cellular_page.set_name(sim, old_name)
1682+ # wait for gsettings
1683 sleep(1)
1684
1685- def test_changing_sim2_name(self):
1686+ def test_change_sim2_name(self):
1687 gsettings = Gio.Settings.new('com.ubuntu.phone')
1688- old_name = gsettings.get_value('sim-names')['/ril_1']
1689+ sim = '/ril_1'
1690+
1691+ try:
1692+ old_name = gsettings.get_value('sim-names')[sim]
1693+ except:
1694+ old_name = 'SIM 2'
1695+
1696 new_name = 'BAR BAZ'
1697- self.rename_sim(2, new_name)
1698+ self.cellular_page.set_name(sim, new_name)
1699
1700- # wait for gsettings
1701- sleep(1)
1702 try:
1703- self.assertEqual(
1704- new_name, gsettings.get_value('sim-names')['/ril_1'])
1705+ self.assertThat(
1706+ lambda: gsettings.get_value('sim-names')[sim],
1707+ Eventually(Equals(new_name)))
1708 except Exception as e:
1709 raise e
1710 finally:
1711- self.rename_sim(2, old_name)
1712+ self.cellular_page.set_name(sim, old_name)
1713 # wait for gsettings
1714 sleep(1)
1715
1716- def test_changes_to_sim_names_in_gsettings_are_reflected_in_ui(self):
1717+ def test_remote_manipulation_of_name(self):
1718 gsettings = Gio.Settings.new('com.ubuntu.phone')
1719 old_names = gsettings.get_value('sim-names')
1720-
1721+ sim = '/ril_0'
1722+ name = 'BAS QUX'
1723 new_names = old_names.unpack()
1724- new_names['/ril_0'] = 'BAS QUX'
1725+ new_names[sim] = name
1726 new_names = GLib.Variant('a{ss}', new_names)
1727 gsettings.set_value('sim-names', new_names)
1728-
1729- # wait for gsettings
1730- sleep(1)
1731 try:
1732- self.assertIn(new_names['/ril_0'], self.get_sim_name(1))
1733+ self.assertThat(
1734+ lambda: self.cellular_page.get_name(sim),
1735+ Eventually(StartsWith(name)))
1736 except Exception as e:
1737 raise e
1738 finally:
1739@@ -543,6 +223,36 @@
1740 # wait for gsettings
1741 sleep(1)
1742
1743+ def test_roaming_switch(self):
1744+ self.cellular_page.disable_datas()
1745+ # assert roaming_switch is disabled
1746+ self.assertThat(
1747+ lambda: self.cellular_page.enable_roaming(timeout=1),
1748+ raises(AssertionError)
1749+ )
1750+
1751+ def test_allow_roaming_sim_1(self):
1752+ sim = '/ril_0'
1753+ self.cellular_page.select_sim_for_data(sim)
1754+
1755+ self.assertEqual(
1756+ False, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
1757+ self.cellular_page.enable_roaming()
1758+ self.assertThat(
1759+ lambda: self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'),
1760+ Eventually(Equals(True)))
1761+
1762+ def test_allow_roaming_sim_2(self):
1763+ sim = '/ril_1'
1764+ self.cellular_page.select_sim_for_data(sim)
1765+
1766+ self.assertEqual(
1767+ False, self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed'))
1768+ self.cellular_page.enable_roaming()
1769+ self.assertThat(
1770+ lambda: self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed'),
1771+ Eventually(Equals(True)))
1772+
1773 def test_changing_default_sim_for_calls(self):
1774 gsettings = Gio.Settings.new('com.ubuntu.phone')
1775 default = gsettings.get_value('default-sim-for-calls')
1776@@ -556,11 +266,10 @@
1777 # click first sim
1778 self.system_settings.main_view.scroll_to_and_click(
1779 self.get_default_sim_for_calls_selector('/ril_0'))
1780- # wait for gsettings
1781- sleep(1)
1782- self.assertEqual(
1783- gsettings.get_value('default-sim-for-calls').get_string(),
1784- '/ril_0')
1785+
1786+ self.assertThat(
1787+ lambda: gsettings.get_value('default-sim-for-calls').get_string(),
1788+ Eventually(Equals('/ril_0')))
1789
1790 def test_changing_default_sim_for_messages(self):
1791 gsettings = Gio.Settings.new('com.ubuntu.phone')
1792@@ -574,108 +283,8 @@
1793 # click second sim
1794 self.system_settings.main_view.scroll_to_and_click(
1795 self.get_default_sim_for_messages_selector('/ril_1'))
1796- # wait for gsettings
1797- sleep(1)
1798- self.assertEqual(
1799- gsettings.get_value('default-sim-for-messages').get_string(),
1800- '/ril_1')
1801-
1802- def test_multi_sim_layout(self):
1803- self.system_settings.main_view.cellular_page.\
1804- select_single(objectName="multiSim")
1805- self.assertThat(lambda: self.system_settings.main_view.select_single(
1806- objectName='singleSim'), raises(StateNotFoundError))
1807- self.assertThat(lambda: self.system_settings.main_view.select_single(
1808- objectName='noSim'), raises(StateNotFoundError))
1809-
1810- def test_remove_one_sim(self):
1811- self.modem_0.EmitSignal(
1812- SIM_IFACE,
1813- 'PropertyChanged',
1814- 'sv',
1815- ['Present', 'False'])
1816-
1817- self.system_settings.main_view.cellular_page.\
1818- select_single(objectName="singleSim")
1819- self.assertThat(lambda: self.system_settings.main_view.select_single(
1820- objectName='multiSim'), raises(StateNotFoundError))
1821- self.assertThat(lambda: self.system_settings.main_view.select_single(
1822- objectName='noSim'), raises(StateNotFoundError))
1823-
1824- def test_remove_two_sims(self):
1825- self.modem_0.EmitSignal(
1826- SIM_IFACE,
1827- 'PropertyChanged',
1828- 'sv',
1829- ['Present', 'False'])
1830-
1831- self.modem_1.EmitSignal(
1832- SIM_IFACE,
1833- 'PropertyChanged',
1834- 'sv',
1835- ['Present', 'False'])
1836-
1837- self.system_settings.main_view.cellular_page.\
1838- wait_select_single(objectName="noSim")
1839- self.assertThat(
1840- lambda: self.system_settings.main_view.select_single(
1841- objectName='multiSim'), raises(StateNotFoundError))
1842- self.assertThat(
1843- lambda: self.system_settings.main_view.select_single(
1844- objectName='singleSim'), raises(StateNotFoundError))
1845-
1846- def test_remove_and_insert_sims(self):
1847- self.modem_0.EmitSignal(
1848- SIM_IFACE,
1849- 'PropertyChanged',
1850- 'sv',
1851- ['Present', 'False'])
1852-
1853- self.modem_1.EmitSignal(
1854- SIM_IFACE,
1855- 'PropertyChanged',
1856- 'sv',
1857- ['Present', 'False'])
1858-
1859- self.system_settings.main_view.cellular_page.\
1860- wait_select_single(objectName="noSim")
1861- self.assertThat(
1862- lambda: self.system_settings.main_view.select_single(
1863- objectName='multiSim'), raises(StateNotFoundError))
1864- self.assertThat(
1865- lambda: self.system_settings.main_view.select_single(
1866- objectName='singleSim'), raises(StateNotFoundError))
1867-
1868- self.modem_0.EmitSignal(
1869- SIM_IFACE,
1870- 'PropertyChanged',
1871- 'sv',
1872- ['Present', 'True'])
1873-
1874- self.modem_1.EmitSignal(
1875- SIM_IFACE,
1876- 'PropertyChanged',
1877- 'sv',
1878- ['Present', 'True'])
1879-
1880- self.system_settings.main_view.cellular_page.\
1881- wait_select_single(objectName="multiSim")
1882- self.assertThat(
1883- lambda: self.system_settings.main_view.select_single(
1884- objectName='noSim'), raises(StateNotFoundError))
1885- self.assertThat(
1886- lambda: self.system_settings.main_view.select_single(
1887- objectName='singleSim'), raises(StateNotFoundError))
1888-
1889- # regression test for 1375832
1890- # tests that the second slot only exposes gsm, which
1891- # the testdata indicates
1892- def test_slot_two(self):
1893- self.modem_0.EmitSignal(
1894- SIM_IFACE,
1895- 'PropertyChanged',
1896- 'sv',
1897- ['Present', 'False'])
1898- self.select_preference(PREFERENCE_2G)
1899- self.assertRaises(StateNotFoundError,
1900- self.select_preference, PREFERENCE_UMTS)
1901+
1902+ self.assertThat(
1903+ lambda:
1904+ gsettings.get_value('default-sim-for-messages').get_string(),
1905+ Eventually(Equals('/ril_1')))

Subscribers

People subscribed via source and target branches