Merge lp:~ken-vandine/ubuntu-system-settings/rtm-1378812 into lp:ubuntu-system-settings/rtm-14.09

Proposed by Ken VanDine
Status: Merged
Approved by: Ken VanDine
Approved revision: 940
Merged at revision: 948
Proposed branch: lp:~ken-vandine/ubuntu-system-settings/rtm-1378812
Merge into: lp:ubuntu-system-settings/rtm-14.09
Diff against target: 1909 lines (+582/-884)
15 files modified
plugins/cellular/Components/CMakeLists.txt (+5/-5)
plugins/cellular/Components/CellularSingleSim.qml (+0/-117)
plugins/cellular/Components/DataMultiSim.qml (+8/-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:~ken-vandine/ubuntu-system-settings/rtm-1378812
Reviewer Review Type Date Requested Status
Jonas G. Drange (community) Approve
Review via email: mp+242124@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

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

To post a comment you must log in.
Revision history for this message
Jonas G. Drange (jonas-drange) wrote :

WFM, thanks!

Ran through test plan as well as functional testing on desktop.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'plugins/cellular/Components/CMakeLists.txt'
--- plugins/cellular/Components/CMakeLists.txt 2014-08-29 14:32:28 +0000
+++ plugins/cellular/Components/CMakeLists.txt 2014-11-18 20:15:26 +0000
@@ -1,12 +1,12 @@
1set(QML_SOURCES1set(QML_SOURCES
2 DataMultiSim.qml
3 DefaultSim.qml
4 MultiSim.qml
2 NoSim.qml5 NoSim.qml
3 SingleSim.qml6 RadioSingleSim.qml
4 MultiSim.qml
5 CellularSingleSim.qml
6 CellularMultiSim.qml
7 DefaultSim.qml
8 Sim.qml7 Sim.qml
9 SimEditor.qml8 SimEditor.qml
9 SingleSim.qml
10)10)
11install(FILES ${QML_SOURCES} DESTINATION ${PLUGIN_QML_DIR}/cellular/Components)11install(FILES ${QML_SOURCES} DESTINATION ${PLUGIN_QML_DIR}/cellular/Components)
1212
1313
=== removed file 'plugins/cellular/Components/CellularSingleSim.qml'
--- plugins/cellular/Components/CellularSingleSim.qml 2014-11-12 16:17:17 +0000
+++ plugins/cellular/Components/CellularSingleSim.qml 1970-01-01 00:00:00 +0000
@@ -1,117 +0,0 @@
1/*
2 * Copyright (C) 2014 Canonical Ltd
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 3 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authors:
17 * Jonas G. Drange <jonas.drange@canonical.com>
18 *
19*/
20import QtQuick 2.0
21import Ubuntu.Components 0.1
22import Ubuntu.Components.ListItems 0.1 as ListItem
23
24Column {
25 height: childrenRect.height
26
27 property var selector: selector
28
29 ListItem.ItemSelector {
30 id: selector
31 objectName: "technologyPreferenceSelector"
32 text: i18n.tr("Cellular data:")
33 expanded: true
34
35 // an empty string is not a valid preference, which means
36 // we disregard the interace and disable the selector
37 enabled: sim.radioSettings.technologyPreference !== ""
38
39 // model for this selector is modemTechnologies, with
40 // 'off' prepended
41 model: {
42 var m = sim.radioSettings.modemTechnologies.slice(0);
43 m.unshift("off");
44 return m;
45 }
46
47 delegate: OptionSelectorDelegate {
48 text: {
49 return {
50 'off': i18n.tr("Off"),
51 'gsm': i18n.tr("2G only (saves battery)"),
52 'umts': i18n.tr("2G/3G (faster)"),
53 'lte': i18n.tr("2G/3G/4G (faster)")
54 }[modelData]
55 }
56 }
57 selectedIndex: {
58 if (sim.connMan.powered) {
59 // will return -1 if empty, which will select nothing.
60 // Makes sense, since the SIM is online, but the
61 // radioSettings interface is not ready yet (sim locked?)
62 return model.indexOf(sim.radioSettings.technologyPreference);
63 } else {
64 return 0;
65 }
66 }
67 }
68
69 ListItem.Standard {
70 id: dataRoamingItem
71 objectName: "dataRoamingSwitch"
72 text: i18n.tr("Data roaming")
73 enabled: sim.connMan.powered
74 control: Switch {
75 id: dataRoamingControl
76 property bool serverChecked: sim.connMan.roamingAllowed
77 onServerCheckedChanged: checked = serverChecked
78 Component.onCompleted: checked = serverChecked
79 onTriggered: sim.connMan.roamingAllowed = checked
80 }
81 }
82
83 Connections {
84 target: sim.connMan
85 onPoweredChanged: {
86 if (powered) {
87 // restore the tech preference
88 selector.selectedIndex = selector
89 .model.indexOf(sim.radioSettings.technologyPreference)
90 } else {
91 selector.selectedIndex = 0;
92 }
93 }
94 }
95
96 // binds the SIM online state to the UI
97 Binding {
98 target: sim.connMan
99 property: "powered"
100 value: selector.selectedIndex !== 0
101 }
102
103 // binds the tech preference to the UI
104 Binding {
105 target: sim.radioSettings
106 property: "technologyPreference"
107 value: {
108 var i = selector.selectedIndex;
109 if (i > 0) {
110 return selector.model[i]
111 } else {
112 // if the modem is off, disregard the selector
113 return sim.radioSettings.technologyPreference;
114 }
115 }
116 }
117}
1180
=== renamed file 'plugins/cellular/Components/CellularMultiSim.qml' => 'plugins/cellular/Components/DataMultiSim.qml'
--- plugins/cellular/Components/CellularMultiSim.qml 2014-11-12 16:17:17 +0000
+++ plugins/cellular/Components/DataMultiSim.qml 2014-11-18 20:15:26 +0000
@@ -22,8 +22,6 @@
22import Ubuntu.Components.ListItems 0.1 as ListItem22import Ubuntu.Components.ListItems 0.1 as ListItem
2323
24Column {24Column {
25 id: root
26 property var selector: selector
2725
28 function getNameFromIndex (index) {26 function getNameFromIndex (index) {
29 if (index === 0) {27 if (index === 0) {
@@ -33,49 +31,11 @@
33 }31 }
34 }32 }
3533
36 function getOnlineSim () {
37 if (state === "sim1Online") {
38 return sims[0];
39 } else if (state === "sim2Online") {
40 return sims[1];
41 } else {
42 return null;
43 }
44 }
45
46 height: childrenRect.height34 height: childrenRect.height
4735
48 states: [
49 State {
50 name: "sim1Online"
51 when: sims[0].connMan.powered && !sims[1].connMan.powered
52 StateChangeScript { script: {
53 selector.selectedIndex =
54 selector.model.indexOf(
55 sims[0].radioSettings.technologyPreference)
56 }}
57 },
58 State {
59 name: "sim2Online"
60 when: sims[1].connMan.powered && !sims[0].connMan.powered
61 StateChangeScript { script: {
62 selector.selectedIndex =
63 selector.model.indexOf(
64 sims[1].radioSettings.technologyPreference)
65 }}
66 },
67 State {
68 name: "bothOnline"
69 when: sims[0].connMan.powered && sims[1].connMan.powered
70 StateChangeScript { script: {
71 sims[1].connMan.powered = false;
72 }}
73 }
74 ]
75
76 ListItem.ItemSelector {36 ListItem.ItemSelector {
77 id: use37 id: use
78 objectName: "use"38 objectName: "data"
79 text: i18n.tr("Cellular data:")39 text: i18n.tr("Cellular data:")
80 expanded: true40 expanded: true
81 model: {41 model: {
@@ -92,6 +52,7 @@
92 }52 }
93 selectedIndex: [true, sims[0].connMan.powered, sims[1].connMan.powered]53 selectedIndex: [true, sims[0].connMan.powered, sims[1].connMan.powered]
94 .lastIndexOf(true)54 .lastIndexOf(true)
55
95 onDelegateClicked: {56 onDelegateClicked: {
96 // power all sims on or off57 // power all sims on or off
97 sims.forEach(function (sim) {58 sims.forEach(function (sim) {
@@ -100,95 +61,23 @@
100 }61 }
101 }62 }
10263
103 Connections {
104 target: sims[0].connMan
105 onPoweredChanged: {
106 if (powered) {
107 use.selectedIndex = 1;
108 }
109 }
110 }
111
112 Connections {
113 target: sims[1].connMan
114 onPoweredChanged: {
115 if (powered) {
116 use.selectedIndex = 2;
117 }
118 }
119 }
120
121 ListItem.ItemSelector {
122 id: selector
123 objectName: "technologyPreferenceSelector"
124 expanded: true
125 model: {
126 var sim = getOnlineSim();
127 if (sim) {
128 return sim.radioSettings.modemTechnologies;
129 } else {
130 return [];
131 }
132 }
133 delegate: OptionSelectorDelegate {
134 text: {
135 return {
136 'gsm': i18n.tr("2G only (saves battery)"),
137 'umts': i18n.tr("2G/3G (faster)"),
138 'lte': i18n.tr("2G/3G/4G (faster)")
139 }[modelData]
140 }
141 }
142 visible: use.selectedIndex !== 0
143 onDelegateClicked: {
144 var sim = getOnlineSim();
145 if (sim) {
146 sim.radioSettings.technologyPreference = model[index];
147 }
148 }
149 }
150
151 Binding {
152 target: selector
153 property: "enabled"
154 value: getOnlineSim() &&
155 (getOnlineSim().radioSettings.technologyPreference !== "")
156 when: getOnlineSim()
157 }
158
159 Connections {
160 target: sims[0].radioSettings
161 onTechnologyPreferenceChanged: {
162 if (sims[0].connMan.powered) {
163 selector.selectedIndex = selector.model.indexOf(preference);
164 }
165 }
166 }
167
168 Connections {
169 target: sims[1].radioSettings
170 onTechnologyPreferenceChanged: {
171 if (sims[1].connMan.powered) {
172 selector.selectedIndex = selector.model.indexOf(preference);
173 }
174 }
175 }
176
177 ListItem.Standard {64 ListItem.Standard {
178 id: dataRoamingItem65 id: dataRoamingItem
179 objectName: "dataRoamingSwitch"
180 text: i18n.tr("Data roaming")66 text: i18n.tr("Data roaming")
181 enabled: use.selectedIndex !== 067 enabled: use.selectedIndex !== 0
182 control: Switch {68 control: Switch {
183 id: dataRoamingControl69 id: dataRoamingControl
184 property bool serverChecked: getOnlineSim() && getOnlineSim().connMan.roamingAllowed70 objectName: "roaming"
71
72 property bool serverChecked: poweredSim && poweredSim.connMan.roamingAllowed
185 onServerCheckedChanged: checked = serverChecked73 onServerCheckedChanged: checked = serverChecked
186 Component.onCompleted: checked = serverChecked74 Component.onCompleted: checked = serverChecked
187 onTriggered: {75 onTriggered: {
188 if (getOnlineSim()) {76 if (poweredSim) {
189 getOnlineSim().connMan.roamingAllowed = checked;77 poweredSim.connMan.roamingAllowed = checked;
190 }78 }
191 }79 }
192 }80 }
81 showDivider: false
193 }82 }
194}83}
19584
=== modified file 'plugins/cellular/Components/MultiSim.qml'
--- plugins/cellular/Components/MultiSim.qml 2014-10-06 19:38:06 +0000
+++ plugins/cellular/Components/MultiSim.qml 2014-11-18 20:15:26 +0000
@@ -23,21 +23,26 @@
23import Ubuntu.Components.ListItems 0.1 as ListItem23import Ubuntu.Components.ListItems 0.1 as ListItem
2424
25Column {25Column {
26
27 objectName: "multiSim"26 objectName: "multiSim"
2827
29 property var sims28 property var sims
29 property var poweredSim: {
30 var s = null;
31 sims.forEach(function (sim) {
32 if (sim.connMan.powered === true) {
33 s = sim;
34 }
35 });
36 return s;
37 }
30 property var modems38 property var modems
31
32 // make settings available to all children of root39 // make settings available to all children of root
33 property var settings: phoneSettings40 property var settings: phoneSettings
3441
35 CellularMultiSim {42 DataMultiSim {
36 anchors { left: parent.left; right: parent.right }43 anchors { left: parent.left; right: parent.right }
37 }44 }
3845
39 ListItem.Divider {}
40
41 ListItem.SingleValue {46 ListItem.SingleValue {
42 text : i18n.tr("Hotspot disabled because Wi-Fi is off.")47 text : i18n.tr("Hotspot disabled because Wi-Fi is off.")
43 visible: showAllUI && !hotspotItem.visible48 visible: showAllUI && !hotspotItem.visible
@@ -60,15 +65,14 @@
60 visible: showAllUI65 visible: showAllUI
61 }66 }
6267
63 ListItem.Divider {68 ListItem.Divider {}
64 visible: hotspotItem.visible || dataUsage.visible
65 }
6669
67 ListItem.SingleValue {70 ListItem.SingleValue {
68 text: i18n.tr("Carriers")71 text: i18n.tr("Carriers")
69 id: chooseCarrier72 id: chooseCarrier
70 objectName: "chooseCarrier"73 objectName: "carriers"
71 progression: enabled74 progression: enabled
75 showDivider: false
72 onClicked: {76 onClicked: {
73 pageStack.push(Qt.resolvedUrl("../PageChooseCarriers.qml"), {77 pageStack.push(Qt.resolvedUrl("../PageChooseCarriers.qml"), {
74 sims: sims78 sims: sims
@@ -88,6 +92,44 @@
88 anchors { left: parent.left; right: parent.right }92 anchors { left: parent.left; right: parent.right }
89 }93 }
9094
95 ListItem.Divider {}
96
97 function techToString (tech) {
98 return {
99 'gsm': i18n.tr("2G only (saves battery)"),
100 'umts': i18n.tr("2G/3G (faster)"),
101 'lte': i18n.tr("2G/3G/4G (faster)")
102 }[tech]
103 }
104
105 ListItem.ItemSelector {
106 id: radio
107 expanded: true
108 text: i18n.tr("Connection type:")
109 model: poweredSim ? poweredSim.radioSettings.modemTechnologies : []
110 delegate: OptionSelectorDelegate {
111 objectName: poweredSim.path + "_radio_" + modelData
112 text: techToString(modelData)
113 }
114 enabled: poweredSim ?
115 (poweredSim.radioSettings.technologyPreference !== "") : false
116 visible: poweredSim
117 selectedIndex: poweredSim ?
118 model.indexOf(poweredSim.radioSettings.technologyPreference) : -1
119 onDelegateClicked: {
120 poweredSim.radioSettings.technologyPreference = model[index];
121 }
122 }
123
124 Connections {
125 target: poweredSim ? poweredSim.radioSettings : null
126 onTechnologyPreferenceChanged: {
127 radio.selectedIndex =
128 poweredSim.radioSettings.modemTechnologies.indexOf(preference)
129 }
130 ignoreUnknownSignals: true
131 }
132
91 GSettings {133 GSettings {
92 id: phoneSettings134 id: phoneSettings
93 schema.id: "com.ubuntu.phone"135 schema.id: "com.ubuntu.phone"
94136
=== modified file 'plugins/cellular/Components/NoSim.qml'
--- plugins/cellular/Components/NoSim.qml 2014-08-19 10:58:01 +0000
+++ plugins/cellular/Components/NoSim.qml 2014-11-18 20:15:26 +0000
@@ -25,27 +25,20 @@
2525
26 objectName: "noSim"26 objectName: "noSim"
2727
28 ListItem.ItemSelector {28 ListItem.Standard {
29 text: i18n.tr("Cellular data:")29 text: i18n.tr("Cellular data:")
30 expanded: true
31 enabled: false30 enabled: false
32 model: [i18n.tr("Off"), i18n.tr("2G only (saves battery)"), i18n.tr("2G/3G/4G (faster)")]31 control: Switch {
33 selectedIndex: -132 checked: false
33 }
34 }34 }
3535
36 ListItem.Standard {36 ListItem.Standard {
37 text: i18n.tr("Data roaming")37 text: i18n.tr("Data roaming")
38 enabled: false38 enabled: false
39 showDivider: false
39 control: Switch {40 control: Switch {
40 checked: false41 checked: false
41 }42 }
42 }43 }
43
44 ListItem.Divider {}
45
46 ListItem.SingleValue {
47 text: i18n.tr("Carrier");
48 value: i18n.tr("N/A")
49 enabled: false
50 }
51}44}
5245
=== added file 'plugins/cellular/Components/RadioSingleSim.qml'
--- plugins/cellular/Components/RadioSingleSim.qml 1970-01-01 00:00:00 +0000
+++ plugins/cellular/Components/RadioSingleSim.qml 2014-11-18 20:15:26 +0000
@@ -0,0 +1,57 @@
1/*
2 * Copyright (C) 2014 Canonical Ltd
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 3 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authors:
17 * Jonas G. Drange <jonas.drange@canonical.com>
18 *
19*/
20import QtQuick 2.0
21import Ubuntu.Components 0.1
22import Ubuntu.Components.ListItems 0.1 as ListItem
23
24Column {
25 height: childrenRect.height
26
27 property alias selector: selector
28
29 ListItem.ItemSelector {
30 id: selector
31 text: i18n.tr("Connection type:")
32 showDivider: false
33 expanded: true
34
35 // an empty string is not a valid preference, which means
36 // we disregard the interace and disable the selector
37 enabled: sim.radioSettings.technologyPreference !== ""
38 model: sim.radioSettings.modemTechnologies
39
40 delegate: OptionSelectorDelegate {
41 objectName: sim.path + "_radio_" + modelData
42 text: {
43 return {
44 'gsm': i18n.tr("2G only (saves battery)"),
45 'umts': i18n.tr("2G/3G (faster)"),
46 'lte': i18n.tr("2G/3G/4G (faster)")
47 }[modelData]
48 }
49 showDivider: false
50 }
51 selectedIndex: model.indexOf(sim.radioSettings.technologyPreference)
52 onDelegateClicked: {
53 sim.radioSettings.technologyPreference = model[index];
54 }
55 }
56
57}
058
=== modified file 'plugins/cellular/Components/SimEditor.qml'
--- plugins/cellular/Components/SimEditor.qml 2014-08-20 13:48:58 +0000
+++ plugins/cellular/Components/SimEditor.qml 2014-11-18 20:15:26 +0000
@@ -22,15 +22,9 @@
22import Ubuntu.Components.ListItems 0.1 as ListItem22import Ubuntu.Components.ListItems 0.1 as ListItem
2323
24Column {24Column {
25
26 id: simList25 id: simList
27 objectName: "simEditor"26 objectName: "simEditor"
2827
29 anchors {
30 left: parent.left
31 right: parent.right
32 }
33
34 states: [28 states: [
35 State {29 State {
36 name: "editing"30 name: "editing"
@@ -73,7 +67,25 @@
73 }67 }
74 ]68 ]
7569
70 NumberAnimation {
71 id: scrollerAnimation
72 duration: UbuntuAnimation.SnapDuration
73 easing: UbuntuAnimation.StandardEasing
74 target: root.flickable
75 property: "contentY"
76 }
77
78 function openedEditor () {
79 var flickable = scrollerAnimation.target;
80 var maxFlick = Math.max(0, flickable.contentHeight - root.height);
81 scrollerAnimation.from = flickable.contentY;
82 scrollerAnimation.to = Math.min(y, maxFlick) - units.gu(9); // header
83 scrollerAnimation.start();
84 nameField.forceActiveFocus();
85 }
86
76 ListItem.Standard {87 ListItem.Standard {
88 id: std
77 text: i18n.tr("Edit SIM Name")89 text: i18n.tr("Edit SIM Name")
78 }90 }
7991
@@ -83,12 +95,14 @@
83 right: parent.right95 right: parent.right
84 }96 }
85 height: expandedItem ?97 height: expandedItem ?
86 childrenRect.height + editor.height : childrenRect.height98 expandedItem.expandedHeight : childrenRect.height
99
100 boundsBehavior: Flickable.StopAtBounds
87101
88 ListItem.Expandable {102 ListItem.Expandable {
89 id: sim1Exp103 id: sim1Exp
90 expandedHeight: sim1Col.height104 expandedHeight: sim1Col.height
91 objectName: "editSim1"105 objectName: "edit_name_" + sims[0].path
92 Column {106 Column {
93 id: sim1Col107 id: sim1Col
94 anchors {108 anchors {
@@ -102,7 +116,7 @@
102 }116 }
103 height: sim1Exp.collapsedHeight117 height: sim1Exp.collapsedHeight
104 Label {118 Label {
105 objectName: "simLabel1"119 objectName: "label_" + sims[0].path
106 anchors {120 anchors {
107 left: parent.left121 left: parent.left
108 right: parent.right122 right: parent.right
@@ -117,14 +131,15 @@
117 }131 }
118 onClicked: {132 onClicked: {
119 simList.state = "editingSim1";133 simList.state = "editingSim1";
120 nameField.forceActiveFocus();134 simList.openedEditor();
121 }135 }
122 }136 }
123137
124 ListItem.Expandable {138 ListItem.Expandable {
125 id: sim2Exp139 id: sim2Exp
126 expandedHeight: sim2Col.height140 expandedHeight: sim2Col.height
127 objectName: "editSim2"141 objectName: "edit_name_" + sims[1].path
142 showDivider: false
128 Column {143 Column {
129 id: sim2Col144 id: sim2Col
130 anchors {145 anchors {
@@ -138,7 +153,7 @@
138 }153 }
139 height: sim2Exp.collapsedHeight154 height: sim2Exp.collapsedHeight
140 Label {155 Label {
141 objectName: "simLabel2"156 objectName: "label_" + sims[1].path
142 anchors {157 anchors {
143 left: parent.left158 left: parent.left
144 right: parent.right159 right: parent.right
@@ -153,7 +168,7 @@
153 }168 }
154 onClicked: {169 onClicked: {
155 simList.state = "editingSim2";170 simList.state = "editingSim2";
156 nameField.forceActiveFocus();171 simList.openedEditor();
157 }172 }
158 }173 }
159 }174 }
@@ -182,6 +197,8 @@
182197
183 spacing: units.gu(2)198 spacing: units.gu(2)
184199
200 height: cancel.height + rename.height
201
185 Button {202 Button {
186 id: cancel203 id: cancel
187 objectName: "cancelRename"204 objectName: "cancelRename"
@@ -204,7 +221,7 @@
204 }221 }
205222
206 Item {223 Item {
207 height: units.gu(1)224 height: units.gu(2)
208 width: parent.width225 width: parent.width
209 }226 }
210227
211228
=== modified file 'plugins/cellular/Components/SingleSim.qml'
--- plugins/cellular/Components/SingleSim.qml 2014-10-02 09:50:11 +0000
+++ plugins/cellular/Components/SingleSim.qml 2014-11-18 20:15:26 +0000
@@ -27,11 +27,29 @@
2727
28 property var sim28 property var sim
2929
30 CellularSingleSim {30 ListItem.Standard {
31 anchors { left: parent.left; right: parent.right }31 id: selector
32 text: i18n.tr("Cellular data:")
33 control: Switch {
34 id: dataControl
35 objectName: 'data'
36 checked: sim.connMan.powered
37 onClicked: sim.connMan.powered = checked
38 }
32 }39 }
3340
34 ListItem.Divider {}41 ListItem.Standard {
42 id: dataRoamingItem
43 text: i18n.tr("Data roaming")
44 enabled: sim.connMan.powered
45 showDivider: false
46 control: Switch {
47 id: dataRoamingControl
48 objectName: "roaming"
49 checked: sim.connMan.roamingAllowed
50 onClicked: sim.connMan.roamingAllowed = checked
51 }
52 }
3553
36 ListItem.SingleValue {54 ListItem.SingleValue {
37 text : i18n.tr("Hotspot disabled because Wi-Fi is off.")55 text : i18n.tr("Hotspot disabled because Wi-Fi is off.")
@@ -54,10 +72,22 @@
54 visible: showAllUI72 visible: showAllUI
55 }73 }
5674
75 ListItem.Divider {
76 visible: radio.selector.model.length
77 }
78
79 RadioSingleSim {
80 id: radio
81 anchors { left: parent.left; right: parent.right }
82 visible: radio.selector.model.length
83 }
84
85 ListItem.Divider {}
86
57 ListItem.SingleValue {87 ListItem.SingleValue {
58 text: i18n.tr("Carrier");88 text: i18n.tr("Carrier");
59 id: chooseCarrier89 id: chooseCarrier
60 objectName: "chooseCarrier"90 objectName: "carrier"
61 progression: enabled91 progression: enabled
62 value: sim.netReg.name || i18n.tr("N/A")92 value: sim.netReg.name || i18n.tr("N/A")
63 enabled: sim.netReg.status !== ""93 enabled: sim.netReg.status !== ""
6494
=== modified file 'plugins/cellular/PageChooseCarrier.qml'
--- plugins/cellular/PageChooseCarrier.qml 2014-10-06 12:56:18 +0000
+++ plugins/cellular/PageChooseCarrier.qml 2014-11-18 20:15:26 +0000
@@ -149,7 +149,7 @@
149149
150 ListItem.ItemSelector {150 ListItem.ItemSelector {
151 id: chooseCarrier151 id: chooseCarrier
152 objectName: "autoChooseCarrierSelector"152 objectName: "mode"
153 expanded: true153 expanded: true
154 enabled: sim.netReg.mode !== "auto-only"154 enabled: sim.netReg.mode !== "auto-only"
155 text: i18n.tr("Choose carrier:")155 text: i18n.tr("Choose carrier:")
@@ -171,6 +171,7 @@
171 }171 }
172 }172 }
173 }173 }
174
174 ListItem.SingleControl {175 ListItem.SingleControl {
175 enabled: chooseCarrier.selectedIndex === 1176 enabled: chooseCarrier.selectedIndex === 1
176 anchors {177 anchors {
@@ -198,7 +199,7 @@
198 }199 }
199 ListItem.ItemSelector {200 ListItem.ItemSelector {
200 id: carrierSelector201 id: carrierSelector
201 objectName: "carrierSelector"202 objectName: "carriers"
202 expanded: true203 expanded: true
203 enabled: sim.netReg.status !== "searching" && chooseCarrier.selectedIndex === 1204 enabled: sim.netReg.status !== "searching" && chooseCarrier.selectedIndex === 1
204 // work around ItemSelector not having a visual change depending on being disabled205 // work around ItemSelector not having a visual change depending on being disabled
205206
=== modified file 'plugins/cellular/PageChooseCarriers.qml'
--- plugins/cellular/PageChooseCarriers.qml 2014-10-06 19:38:06 +0000
+++ plugins/cellular/PageChooseCarriers.qml 2014-11-18 20:15:26 +0000
@@ -44,7 +44,7 @@
44 }44 }
4545
46 ListItem.SingleValue {46 ListItem.SingleValue {
47 objectName: "chooseCarrierSim1"47 objectName: sims[0].path + "_carriers"
48 value: sims[0].netReg.name ? sims[0].netReg.name : i18n.tr("N/A")48 value: sims[0].netReg.name ? sims[0].netReg.name : i18n.tr("N/A")
49 enabled: sims[0].netReg.status !== ""49 enabled: sims[0].netReg.status !== ""
50 progression: true50 progression: true
@@ -61,7 +61,7 @@
61 }61 }
6262
63 ListItem.SingleValue {63 ListItem.SingleValue {
64 objectName: "chooseCarrierSim2"64 objectName: sims[1].path + "_carriers"
65 value: sims[1].netReg.name ? sims[1].netReg.name : i18n.tr("N/A")65 value: sims[1].netReg.name ? sims[1].netReg.name : i18n.tr("N/A")
66 enabled: sims[1].netReg.status !== ""66 enabled: sims[1].netReg.status !== ""
67 progression: true67 progression: true
6868
=== modified file 'plugins/cellular/PageComponent.qml'
--- plugins/cellular/PageComponent.qml 2014-10-17 14:57:17 +0000
+++ plugins/cellular/PageComponent.qml 2014-11-18 20:15:26 +0000
@@ -94,15 +94,15 @@
94 start()94 start()
95 }95 }
96 }96 }
97
97 Flickable {98 Flickable {
99 id: flick
98 anchors.fill: parent100 anchors.fill: parent
99 contentWidth: parent.width101 contentWidth: parent.width
100 contentHeight: contentItem.childrenRect.height102 contentHeight: contentItem.childrenRect.height
101 boundsBehavior: (contentHeight > root.height) ? Flickable.DragAndOvershootBounds : Flickable.StopAtBounds103 boundsBehavior: (contentHeight > root.height) ? Flickable.DragAndOvershootBounds : Flickable.StopAtBounds
102
103 Column {104 Column {
104 anchors { left: parent.left; right: parent.right }105 anchors { left: parent.left; right: parent.right }
105
106 Loader {106 Loader {
107 id: loader107 id: loader
108 anchors { left: parent.left; right: parent.right }108 anchors { left: parent.left; right: parent.right }
109109
=== modified file 'plugins/cellular/sims.js'
--- plugins/cellular/sims.js 2014-10-03 14:08:08 +0000
+++ plugins/cellular/sims.js 2014-11-18 20:15:26 +0000
@@ -17,6 +17,16 @@
17 return getPresent()[0];17 return getPresent()[0];
18}18}
1919
20function getFirstOnline () {
21 var online = null;
22 getPresent().forEach(function (sim) {
23 if (sim.connMan.powered === true) {
24 online = sim;
25 }
26 });
27 return online;
28}
29
20function getCount () {30function getCount () {
21 return getAll().length;31 return getAll().length;
22}32}
2333
=== modified file 'tests/autopilot/ubuntu_system_settings/__init__.py'
--- tests/autopilot/ubuntu_system_settings/__init__.py 2014-09-26 12:52:31 +0000
+++ tests/autopilot/ubuntu_system_settings/__init__.py 2014-11-18 20:15:26 +0000
@@ -1,3 +1,4 @@
1
1# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-2# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
2#3#
3# Copyright (C) 2014 Canonical Ltd.4# Copyright (C) 2014 Canonical Ltd.
@@ -114,6 +115,10 @@
114 def go_to_wifi_page(self):115 def go_to_wifi_page(self):
115 return self._go_to_page('entryComponent-wifi', 'wifiPage')116 return self._go_to_page('entryComponent-wifi', 'wifiPage')
116117
118 @autopilot.logging.log_action(logger.debug)
119 def go_to_cellular_page(self):
120 return self._go_to_page('entryComponent-cellular', 'cellularPage')
121
117 def _go_to_page(self, item_object_name, page_object_name):122 def _go_to_page(self, item_object_name, page_object_name):
118 self.click_item(item_object_name)123 self.click_item(item_object_name)
119 page = self.wait_select_single(objectName=page_object_name)124 page = self.wait_select_single(objectName=page_object_name)
@@ -202,7 +207,7 @@
202 self._orientation_lock_switch.uncheck()207 self._orientation_lock_switch.uncheck()
203208
204209
205class CelullarPage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):210class CellularPage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
206211
207 """Autopilot helper for the Sound page."""212 """Autopilot helper for the Sound page."""
208213
@@ -214,6 +219,164 @@
214 return True219 return True
215 return False220 return False
216221
222 @autopilot.logging.log_action(logger.debug)
223 def enable_data(self):
224 self._set_data(True)
225
226 @autopilot.logging.log_action(logger.debug)
227 def disable_data(self):
228 self._set_data(False)
229
230 def disable_datas(self):
231 self.select_sim_for_data('off')
232
233 @autopilot.logging.log_action(logger.debug)
234 def _set_data(self, data):
235 chk = self.select_single(objectName='data')
236 if data:
237 chk.check()
238 else:
239 chk.uncheck()
240
241 @autopilot.logging.log_action(logger.debug)
242 def get_data(self):
243 return self.select_single(objectName='data').checked
244
245 @autopilot.logging.log_action(logger.debug)
246 def enable_roaming(self, timeout=10):
247 self._set_roaming(True, timeout=timeout)
248
249 @autopilot.logging.log_action(logger.debug)
250 def disable_roaming(self, timeout=10):
251 self._set_roaming(False, timeout=timeout)
252
253 @autopilot.logging.log_action(logger.debug)
254 def _set_roaming(self, roaming, timeout):
255 chk = self.select_single(objectName='roaming')
256 if roaming:
257 chk.check(timeout=timeout)
258 else:
259 chk.uncheck(timeout=timeout)
260
261 @autopilot.logging.log_action(logger.debug)
262 def set_connection_type(self, radio_type, sim='/ril_0',
263 scroll_to_and_click=None):
264 self._set_connection_type(radio_type, sim, scroll_to_and_click)
265
266 @autopilot.logging.log_action(logger.debug)
267 def _set_connection_type(self, radio_type, sim, scroll_to_and_click):
268 t = self.wait_select_single(
269 'OptionSelectorDelegate',
270 objectName='%s_radio_%s' % (sim, radio_type))
271 if scroll_to_and_click:
272 scroll_to_and_click(t)
273 else:
274 t.swipe_into_view()
275
276 self.pointing_device.click_object(t)
277
278 @autopilot.logging.log_action(logger.debug)
279 def change_carrier(self, carrier, sim=None):
280 if sim:
281 carriersPage = self._click_carriers()
282 carrierPage = carriersPage.select_sim(sim)
283 else:
284 carrierPage = self._click_carrier()
285
286 carrierPage.set_manual()
287 carrierPage.set_carrier(carrier)
288
289 @autopilot.logging.log_action(logger.debug)
290 def _click_carrier(self):
291 item = self.select_single(objectName='carrier')
292 self.pointing_device.click_object(item)
293 return self.get_root_instance().wait_select_single(
294 objectName='chooseCarrierPage')
295
296 @autopilot.logging.log_action(logger.debug)
297 def _click_carriers(self):
298 item = self.select_single(objectName='carriers')
299 self.pointing_device.click_object(item)
300 return self.get_root_instance().wait_select_single(
301 objectName='chooseCarriersPage')
302
303 @autopilot.logging.log_action(logger.debug)
304 def select_sim_for_data(self, sim):
305 self._select_sim_for_data(sim)
306
307 @autopilot.logging.log_action(logger.debug)
308 def _select_sim_for_data(self, sim):
309 item = self.select_single(objectName='use%s' % sim)
310 self.pointing_device.click_object(item)
311
312 @autopilot.logging.log_action(logger.debug)
313 def select_sim_for_calls(self, sim):
314 pass
315
316 @autopilot.logging.log_action(logger.debug)
317 def select_sim_for_messages(self):
318 pass
319
320 @autopilot.logging.log_action(logger.debug)
321 def set_name(self, sim, name):
322 self._set_name(sim, name)
323
324 def get_name(self, sim):
325 obj = self.select_single(
326 objectName="label_%s" % sim)
327 return obj.text
328
329 def _set_name(self, sim, name):
330 obj = self.select_single(
331 objectName="edit_name_%s" % sim)
332 self.pointing_device.click_object(obj)
333
334 # wait for animation
335 sleep(1)
336 ok = self.select_single('Button', objectName="doRename")
337
338 field = self.select_single('TextField', objectName="nameField")
339 field.write(name)
340 self.pointing_device.click_object(ok)
341
342
343class PageChooseCarriers(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
344
345 """Autopilot helper for carrier selection page (multisim)."""
346
347 @autopilot.logging.log_action(logger.debug)
348 def select_sim(self, sim):
349 return self._select_sim(sim)
350
351 @autopilot.logging.log_action(logger.debug)
352 def _select_sim(self, sim):
353 item = self.select_single(objectName='%s_carriers' % sim)
354 self.pointing_device.click_object(item)
355 return self.get_root_instance().wait_select_single(
356 objectName='chooseCarrierPage')
357
358
359class PageChooseCarrier(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
360
361 """Autopilot helper for carrier selection page (singlesim)."""
362
363 @autopilot.logging.log_action(logger.debug)
364 def set_manual(self):
365 item = self.select_single(text='Manually')
366 self.pointing_device.click_object(item)
367
368 @autopilot.logging.log_action(logger.debug)
369 def set_automatic(self):
370 item = self.select_single(text='Automatically')
371 self.pointing_device.click_object(item)
372
373 def set_carrier(self, carrier):
374 # wait for animation, since page.animationRunning.wait_for(False)
375 # does not work?
376 sleep(0.5)
377 item = self.select_single(text=carrier)
378 self.pointing_device.click_object(item)
379
217380
218class TimeAndDatePage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):381class TimeAndDatePage(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase):
219382
220383
=== modified file 'tests/autopilot/ubuntu_system_settings/tests/__init__.py'
--- tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-10-22 21:34:08 +0000
+++ tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-11-18 20:15:26 +0000
@@ -33,6 +33,7 @@
33RDO_IFACE = 'org.ofono.RadioSettings'33RDO_IFACE = 'org.ofono.RadioSettings'
34SIM_IFACE = 'org.ofono.SimManager'34SIM_IFACE = 'org.ofono.SimManager'
35NETREG_IFACE = 'org.ofono.NetworkRegistration'35NETREG_IFACE = 'org.ofono.NetworkRegistration'
36NETOP_IFACE = 'org.ofono.NetworkOperator'
36CALL_FWD_IFACE = 'org.ofono.CallForwarding'37CALL_FWD_IFACE = 'org.ofono.CallForwarding'
37CALL_SETTINGS_IFACE = 'org.ofono.CallSettings'38CALL_SETTINGS_IFACE = 'org.ofono.CallSettings'
38SYSTEM_IFACE = 'com.canonical.SystemImage'39SYSTEM_IFACE = 'com.canonical.SystemImage'
@@ -150,7 +151,7 @@
150 def mock_carriers(self, name):151 def mock_carriers(self, name):
151 self.dbusmock.AddObject(152 self.dbusmock.AddObject(
152 '/%s/operator/op2' % name,153 '/%s/operator/op2' % name,
153 'org.ofono.NetworkOperator',154 NETOP_IFACE,
154 {155 {
155 'Name': 'my.cool.telco',156 'Name': 'my.cool.telco',
156 'Status': 'available',157 'Status': 'available',
@@ -167,7 +168,7 @@
167 # Add a forbidden carrier168 # Add a forbidden carrier
168 self.dbusmock.AddObject(169 self.dbusmock.AddObject(
169 '/%s/operator/op3' % name,170 '/%s/operator/op3' % name,
170 'org.ofono.NetworkOperator',171 NETOP_IFACE,
171 {172 {
172 'Name': 'my.bad.telco',173 'Name': 'my.bad.telco',
173 'Status': 'forbidden',174 'Status': 'forbidden',
@@ -311,9 +312,12 @@
311312
312313
313class CellularBaseTestCase(UbuntuSystemSettingsOfonoTestCase):314class CellularBaseTestCase(UbuntuSystemSettingsOfonoTestCase):
315
314 def setUp(self):316 def setUp(self):
315 """ Go to Cellular page """317 """ Go to Cellular page """
316 super(CellularBaseTestCase, self).setUp('cellular')318 super(CellularBaseTestCase, self).setUp()
319 self.cellular_page = self.system_settings.\
320 main_view.go_to_cellular_page()
317321
318322
319class PhoneOfonoBaseTestCase(UbuntuSystemSettingsOfonoTestCase):323class PhoneOfonoBaseTestCase(UbuntuSystemSettingsOfonoTestCase):
320324
=== modified file 'tests/autopilot/ubuntu_system_settings/tests/test_cellular.py'
--- tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-10-09 14:09:38 +0000
+++ tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-11-18 20:15:26 +0000
@@ -5,537 +5,217 @@
5# under the terms of the GNU General Public License version 3, as published5# under the terms of the GNU General Public License version 3, as published
6# by the Free Software Foundation.6# by the Free Software Foundation.
77
8import dbus
9from gi.repository import Gio, GLib8from gi.repository import Gio, GLib
10from time import sleep9from time import sleep
1110
12from autopilot.introspection.dbus import StateNotFoundError11from autopilot.introspection.dbus import StateNotFoundError
13from autopilot.matchers import Eventually12from autopilot.matchers import Eventually
14from testtools.matchers import Equals, NotEquals, raises13from testtools.matchers import Equals, raises, StartsWith
15from unittest import skip
1614
17from ubuntu_system_settings.tests import (15from ubuntu_system_settings.tests import (
18 CellularBaseTestCase, CONNMAN_IFACE, RDO_IFACE, SIM_IFACE)16 CellularBaseTestCase, CONNMAN_IFACE, RDO_IFACE, NETREG_IFACE)
19from ubuntu_system_settings.utils.i18n import ugettext as _
20
21from ubuntuuitoolkit import emulators as toolkit_emulators
22
23
24PREFERENCE_2G = '2G only (saves battery)'
25PREFERENCE_UMTS = '2G/3G (faster)'
26PREFERENCE_LTE = '2G/3G/4G (faster)'
27PREFERENCE_OFF = 'Off'
28USE_OFF = "useoff"
29USE_SIM_1 = "use/ril_0"
30USE_SIM_2 = "use/ril_1"
3117
3218
33class CellularTestCase(CellularBaseTestCase):19class CellularTestCase(CellularBaseTestCase):
34 """ Tests for cellular Page """20
3521 def test_enable_data(self):
36 """Caches the technology preference selector"""22 self.cellular_page.enable_data()
37 _pref_selector = None23 self.assertThat(
3824 lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
39 @property25 Eventually(Equals(True))
40 def data_preference_selector(self):26 )
41 """Return data_preference_selector"""27
42 try:28 def test_disable_data(self):
43 self._pref_selector.get_properties()29 self.cellular_page.disable_data()
44 except:30 self.assertThat(
45 self._pref_selector = \31 lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
46 self.system_settings.main_view.cellular_page.select_single(32 Eventually(Equals(False))
47 toolkit_emulators.ItemSelector,33 )
48 objectName="technologyPreferenceSelector"34
49 )35 def test_remote_manipulation_of_data(self):
50 return self._pref_selector36 self.modem_0.EmitSignal(
5137 CONNMAN_IFACE,
52 def select_preference(self, label):38 'PropertyChanged',
53 """Helper method to click a preference which matches provided label"""39 'sv',
54 pref = self.data_preference_selector.select_single('Label', text=label)40 ['Powered', 'true'])
55 self.system_settings.main_view.pointing_device.click_object(pref)41
5642 self.assertThat(lambda: self.cellular_page.get_data(),
57 def assert_selected_preference(self, index):43 Eventually(Equals(True)))
58 """Helper method asserting that the selected data technology preference44
59 is that of index"""45 self.modem_0.EmitSignal(
60 self.assertThat(self.data_preference_selector.selectedIndex,46 CONNMAN_IFACE,
61 Eventually(Equals(index)))47 'PropertyChanged',
6248 'sv',
63 def navigate_to_carrier_page(self):49 ['Powered', 'false'])
64 selector = self.system_settings.main_view.cellular_page.select_single(50
65 objectName="chooseCarrier"51 self.assertThat(lambda: self.cellular_page.get_data(),
66 )52 Eventually(Equals(False)))
67 self.system_settings.main_view.scroll_to_and_click(selector)53
6854 def test_enable_roaming(self):
69 def navigate_to_manual(self):55 self.cellular_page.enable_roaming()
70 selector = self.choose_carrier_page.select_single(56 self.assertThat(
71 toolkit_emulators.ItemSelector,57 lambda: self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'),
72 objectName="autoChooseCarrierSelector"58 Eventually(Equals(True))
73 )59 )
74 manual = selector.select_single('Label', text=_("Manually"))60
75 self.system_settings.main_view.pointing_device.click_object(manual)61 def test_disable_roaming(self):
76 choosecarrier = self.system_settings.main_view.cellular_page.\62 self.cellular_page.disable_roaming()
77 select_single(objectName="chooseCarrier")63 self.assertThat(
78 self.system_settings.main_view.pointing_device.click_object(64 lambda: self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'),
79 choosecarrier)65 Eventually(Equals(False))
80 self.assertThat(66 )
81 self.system_settings.main_view.choose_page.title,67
82 Equals(_("Carrier"))68 def test_connection_type(self):
83 )69 get_pref = lambda: self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')
8470 for pref in ['lte', 'umts', 'gsm']:
85 def test_cellular_page(self):71 self.cellular_page.set_connection_type(pref)
86 """ Checks whether Cellular page is available """72 self.assertThat(get_pref, Eventually(Equals(pref)))
87 self.assertThat(73
88 self.system_settings.main_view.cellular_page,74 def test_current_carrier(self):
89 NotEquals(None)75 self.assertThat(lambda: self.modem_0.Get(NETREG_IFACE, 'Name'),
90 )76 Eventually(Equals('fake.tel')))
91 self.assertThat(77
92 self.system_settings.main_view.cellular_page.title,78 def test_change_carrier(self):
93 Equals(_('Cellular'))79 self.cellular_page.change_carrier('my.cool.telco')
94 )
95
96 def test_single_sim_layout(self):
97 self.system_settings.main_view.cellular_page.\
98 select_single(objectName="singleSim")
99 self.assertThat(lambda: self.system_settings.main_view.select_single(
100 objectName='multiSim'), raises(StateNotFoundError))
101 self.assertThat(lambda: self.system_settings.main_view.select_single(
102 objectName='noSim'), raises(StateNotFoundError))
103
104 def test_current_network(self):
105 """ Tests whether the current network is visible and selected """
106 self.navigate_to_carrier_page()
107 self.navigate_to_manual()
108 carriers = self.system_settings.main_view.choose_page.select_single(
109 toolkit_emulators.ItemSelector,
110 objectName="carrierSelector"
111 )
112 # TODO: Once there is a proper ItemSelector emulator, get the items
113 # from it and check 'fake.tel' is the selected one.
114 selected_delegate = carriers.select_single(
115 'OptionSelectorDelegate', selected=True)
116 selected_delegate.select_single('Label', text="fake.tel")
117
118 def test_alt_network(self):
119 """ Tests whether an alternative available network is displayed """
120 self.navigate_to_carrier_page()
121 self.navigate_to_manual()
122 carriers = self.system_settings.main_view.choose_page.select_single(
123 toolkit_emulators.ItemSelector,
124 objectName="carrierSelector"
125 )
126 manual = carriers.select_single('Label', text="my.cool.telco")
127 self.assertThat(manual, NotEquals(None))
12880
129 def test_no_forbidden_network(self):81 def test_no_forbidden_network(self):
130 """ Ensures that a forbidden network is not shown """82 """ Ensures that a forbidden network is not shown """
131 self.navigate_to_carrier_page()
132 self.navigate_to_manual()
133 carriers = self.system_settings.main_view.choose_page.select_single(
134 toolkit_emulators.ItemSelector,
135 objectName="carrierSelector"
136 )
137 self.assertThat(83 self.assertThat(
138 lambda: carriers.select_single('Label', text="my.bad.telco"),84 lambda: self.cellular_page.change_carrier('my.bad.telco'),
139 raises(StateNotFoundError)85 raises(StateNotFoundError)
140 )86 )
14187
142 def test_set_sim_offline(self):
143 self.select_preference(PREFERENCE_OFF)
144
145 sleep(0.7)
146
147 self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
148
149 def test_set_sim_online(self):
150 self.select_preference(PREFERENCE_OFF)
151 sleep(0.7)
152 self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
153
154 self.select_preference(PREFERENCE_UMTS)
155 sleep(0.7)
156 self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
157
158 def test_roaming_switch(self):
159 """Test that switching off cellular data disables roaming switch"""
160 roaming_switch = self.system_settings.main_view.select_single(
161 objectName="dataRoamingSwitch"
162 )
163 # select 2G only
164 self.select_preference(PREFERENCE_2G)
165
166 # assert that roaming_switch is enabled
167 self.assertThat(
168 roaming_switch.get_properties()['enabled'],
169 Eventually(Equals(True)))
170
171 # click off
172 self.select_preference(PREFERENCE_OFF)
173 # assert roaming_switch is disabled
174 self.assertThat(
175 roaming_switch.get_properties()['enabled'],
176 Eventually(Equals(False)))
177
178 def test_allow_roaming(self):
179 roaming_switch = self.system_settings.main_view.select_single(
180 objectName="dataRoamingSwitch"
181 )
182 self.system_settings.main_view.scroll_to_and_click(roaming_switch)
183 sleep(1.5)
184 self.assertEqual(
185 True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
186
187 def test_change_data_preference(self):
188 self.select_preference(PREFERENCE_2G)
189 sleep(0.7)
190 self.assertEqual('gsm', self.modem_0.Get(RDO_IFACE,
191 'TechnologyPreference'))
192 self.select_preference(PREFERENCE_UMTS)
193 sleep(0.7)
194 self.assertEqual('umts', self.modem_0.Get(RDO_IFACE,
195 'TechnologyPreference'))
196
197 def test_sim_online_status_insensitive_to_radio_preference(self):
198 # turn off cellular data
199 self.select_preference(PREFERENCE_OFF)
200
201 # fake dbus signal, changing to umts
202 self.modem_0.EmitSignal(
203 'org.ofono.RadioSettings',
204 'PropertyChanged',
205 'sv',
206 ['TechnologyPreference', dbus.String('umts', variant_level=1)])
207
208 # assert that "Off" has not changed
209 self.assert_selected_preference(0)
210
211 def test_ui_reacts_to_sim_set_coming_online(self):
212 self.select_preference(PREFERENCE_2G)
213 self.select_preference(PREFERENCE_OFF)
214
215 sleep(0.7)
216
217 self.modem_0.EmitSignal(
218 CONNMAN_IFACE,
219 'PropertyChanged',
220 'sv',
221 ['Powered', 'true'])
222
223 # assert that 2G is selected
224 self.assert_selected_preference(1)
225
226 def test_unlocking_sim(self):
227 '''Like it would if the sim was locked, e.g.'''
228 self.modem_0.Set(RDO_IFACE, 'TechnologyPreference',
229 dbus.String('', variant_level=1))
230
231 self.system_settings.main_view.go_back()
232
233 self.system_settings.main_view.pointing_device.click_object(
234 self.system_settings.main_view.select_single(
235 objectName='entryComponent-cellular'))
236
237 self.assert_selected_preference(-1)
238 self.assertFalse(self.data_preference_selector.enabled)
239
240 self.modem_0.EmitSignal(
241 'org.ofono.RadioSettings',
242 'PropertyChanged',
243 'sv',
244 ['TechnologyPreference', dbus.String('lte', variant_level=1)])
245
246 self.assert_selected_preference(3)
247
24888
249class DualSimCellularTestCase(CellularBaseTestCase):89class DualSimCellularTestCase(CellularBaseTestCase):
25090
251 use_sims = 291 use_sims = 2
25292
253 def navigate_to_carriers_page(self):93 def test_data_off(self):
254 selector = self.system_settings.main_view.cellular_page.select_single(94 self.cellular_page.disable_datas()
255 objectName="chooseCarrier"95 self.assertThat(
256 )96 lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
257 self.system_settings.main_view.scroll_to_and_click(selector)97 Eventually(Equals(False))
25898 )
259 def navigate_to_carrier_page_for_sim(self, n):99 self.assertThat(
260 selector = self.choose_carriers_page.select_single(100 lambda: self.modem_1.Get(CONNMAN_IFACE, 'Powered'),
261 objectName="chooseCarrierSim%d" % n101 Eventually(Equals(False))
262 )102 )
263 self.system_settings.main_view.scroll_to_and_click(selector)103
264104 def test_sim1_online(self):
265 def navigate_to_manual(self):105 self.cellular_page.select_sim_for_data('/ril_0')
266 selector = self.choose_carrier_page.select_single(106 self.assertThat(
267 toolkit_emulators.ItemSelector,107 lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
268 objectName="autoChooseCarrierSelector"108 Eventually(Equals(True))
269 )109 )
270 manual = selector.select_single('Label', text=_("Manually"))110 self.assertThat(
271 self.system_settings.main_view.scroll_to_and_click(manual)111 lambda: self.modem_1.Get(CONNMAN_IFACE, 'Powered'),
272 choosecarrier = self.system_settings.main_view.cellular_page.\112 Eventually(Equals(False))
273 select_single(objectName="chooseCarrier")113 )
274 self.system_settings.main_view.scroll_to_and_click(choosecarrier)114
275 self.assertThat(115 def test_sim2_online(self):
276 self.system_settings.main_view.choose_page.title,116 self.cellular_page.select_sim_for_data('/ril_1')
277 Equals(_("Carrier"))117 self.assertThat(
278 )118 lambda: self.modem_0.Get(CONNMAN_IFACE, 'Powered'),
279119 Eventually(Equals(False))
280 @property120 )
281 def data_preference_selector(self):121 self.assertThat(
282 """Return data_preference_selector"""122 lambda: self.modem_1.Get(CONNMAN_IFACE, 'Powered'),
123 Eventually(Equals(True))
124 )
125
126 def test_connection_type_on_sim1(self):
127 sim = '/ril_0'
128 stac = self.system_settings.main_view.scroll_to_and_click
129 self.cellular_page.select_sim_for_data(sim)
130 get_pref = lambda: self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')
131 for pref in ['lte', 'umts', 'gsm']:
132 self.cellular_page.set_connection_type(
133 pref, sim=sim, scroll_to_and_click=stac)
134 self.assertThat(get_pref, Eventually(Equals(pref)))
135
136 def test_connection_type_on_sim2(self):
137 sim = '/ril_1'
138 stac = self.system_settings.main_view.scroll_to_and_click
139 self.cellular_page.select_sim_for_data(sim)
140 get_pref = lambda: self.modem_1.Get(RDO_IFACE, 'TechnologyPreference')
141 for pref in ['gsm']:
142 self.cellular_page.set_connection_type(
143 pref, sim=sim, scroll_to_and_click=stac)
144 self.assertThat(get_pref, Eventually(Equals(pref)))
145
146 def test_current_carrier_sim1(self):
147 self.assertThat(lambda: self.modem_0.Get(NETREG_IFACE, 'Name'),
148 Eventually(Equals('fake.tel')))
149
150 def test_change_carrier_sim1(self):
151 sim = '/ril_0'
152 self.cellular_page.change_carrier('my.cool.telco', sim=sim)
153
154 def test_current_carrier_sim2(self):
155 self.assertThat(lambda: self.modem_1.Get(NETREG_IFACE, 'Name'),
156 Eventually(Equals('fake.tel')))
157
158 def test_change_carrier_sim2(self):
159 sim = '/ril_1'
160 self.cellular_page.change_carrier('my.cool.telco', sim=sim)
161
162 def test_change_sim1_name(self):
163 gsettings = Gio.Settings.new('com.ubuntu.phone')
164 sim = '/ril_0'
283 try:165 try:
284 self._pref_selector.get_properties()166 old_name = gsettings.get_value('sim-names')[sim]
285 except:167 except:
286 self._pref_selector = \168 old_name = 'SIM 1'
287 self.system_settings.main_view.cellular_page.select_single(
288 toolkit_emulators.ItemSelector,
289 objectName="technologyPreferenceSelector"
290 )
291 return self._pref_selector
292
293 def select_preference(self, label):
294 """Helper method that clicks a preference
295 that matches provided label"""
296 pref = self.data_preference_selector.select_single('Label', text=label)
297 self.system_settings.main_view.scroll_to_and_click(pref)
298
299 def assert_selected_preference(self, index):
300 """Helper method asserting that the selected
301 data technology preference is that of index"""
302 self.assertThat(
303 self.data_preference_selector.selectedIndex,
304 Eventually(Equals(index)))
305
306 def use_selector(self, label):
307 obj = self.system_settings.main_view.cellular_page.select_single(
308 objectName="use"
309 ).select_single(objectName=label)
310 self.system_settings.main_view.scroll_to_and_click(obj)
311
312 def assert_used(self, index):
313 obj = self.system_settings.main_view.cellular_page.select_single(
314 objectName="use"
315 )
316 self.assertThat(
317 obj.selectedIndex, Eventually(Equals(index)))
318
319 def get_sim_name(self, num):
320 obj = self.system_settings.main_view.cellular_page.select_single(
321 objectName="simLabel%d" % num)
322 return obj.get_properties()['text']
323
324 def rename_sim(self, num, new_name):
325 obj = self.system_settings.main_view.cellular_page.select_single(
326 objectName="simEditor"
327 ).select_single(objectName="editSim%d" % num)
328 self.system_settings.main_view.scroll_to_and_click(obj)
329 field = self.system_settings.main_view.cellular_page.select_single(
330 objectName="nameField"
331 )
332 self.system_settings.main_view.scroll_to_and_click(field)
333 self.system_settings.main_view.scroll_to_and_click(
334 field.select_single(objectName="clear_button"))
335 self.keyboard.type(new_name)
336 self.system_settings.main_view.scroll_to_and_click(
337 self.system_settings.main_view.cellular_page.select_single(
338 objectName="doRename"))
339
340 def test_use_sim_1(self):
341 self.use_selector(USE_OFF)
342 self.use_selector(USE_SIM_1)
343 sleep(0.7)
344 self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
345 self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
346
347 def test_use_sim_2(self):
348 self.use_selector(USE_OFF)
349 self.use_selector(USE_SIM_2)
350 sleep(0.7)
351 self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
352 self.assertEqual(True, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
353
354 def test_turn_off_both_sims(self):
355 self.use_selector(USE_OFF)
356 sleep(0.7)
357 self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
358 self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
359
360 def test_use_gsm_for_sim_1(self):
361 self.use_selector(USE_SIM_1)
362 self.select_preference(PREFERENCE_2G)
363 sleep(0.7)
364 self.assertEqual(
365 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
366
367 def test_use_umts_for_sim_1(self):
368 self.use_selector(USE_SIM_1)
369 self.select_preference(PREFERENCE_UMTS)
370 sleep(0.7)
371 self.assertEqual(
372 'umts', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
373
374 def test_use_gsm_for_sim_2(self):
375 self.use_selector(USE_SIM_1)
376 self.select_preference(PREFERENCE_2G)
377 sleep(0.7)
378 self.assertEqual(
379 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
380
381 def test_when_sim_1_comes_online_ui_is_correct(self):
382 self.use_selector(USE_SIM_1)
383 self.select_preference(PREFERENCE_UMTS)
384 self.use_selector(USE_OFF)
385 sleep(0.7)
386 self.modem_0.Set(CONNMAN_IFACE, 'Powered', True)
387 self.modem_0.EmitSignal(
388 CONNMAN_IFACE,
389 'PropertyChanged',
390 'sv',
391 ['Powered', 'true'])
392
393 self.assertEqual(
394 'umts', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
395 self.assert_used(1)
396 self.assert_selected_preference(1)
397
398 def test_when_sim_2_comes_online_ui_is_correct(self):
399 self.use_selector(USE_SIM_2)
400 self.select_preference(PREFERENCE_2G)
401 self.use_selector(USE_OFF)
402 sleep(2)
403 self.modem_1.Set(CONNMAN_IFACE, 'Powered', True)
404 self.modem_1.EmitSignal(
405 CONNMAN_IFACE,
406 'PropertyChanged',
407 'sv',
408 ['Powered', 'true'])
409
410 self.assertEqual(
411 'gsm', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference'))
412 self.assert_used(2)
413 self.assert_selected_preference(0)
414
415 def test_roaming_switch(self):
416 roaming_switch = self.system_settings.main_view.select_single(
417 objectName="dataRoamingSwitch"
418 )
419 # assert that roaming_switch is enabled
420 self.assertTrue(roaming_switch.get_properties()['enabled'])
421
422 # click off
423 self.use_selector(USE_OFF)
424
425 # assert roaming_switch is disabled
426 self.assertThat(
427 roaming_switch.get_properties()['enabled'],
428 Eventually(Equals(False)))
429
430 def test_allow_roaming(self):
431 self.use_selector(USE_SIM_1)
432 self.assertEqual(
433 False, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
434 roaming_switch = self.system_settings.main_view.select_single(
435 objectName="dataRoamingSwitch"
436 )
437 self.system_settings.main_view.scroll_to_and_click(roaming_switch)
438 sleep(1.5)
439 self.assertEqual(
440 True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
441
442 def test_no_radio_preference(self):
443 self.select_preference(PREFERENCE_UMTS)
444 self.use_selector(USE_OFF)
445
446 self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', '')
447 self.modem_0.EmitSignal(
448 CONNMAN_IFACE,
449 'PropertyChanged',
450 'sv',
451 ['TechnologyPreference', ''])
452
453 self.assertThat(
454 self.data_preference_selector.get_properties()['visible'],
455 Eventually(Equals(False)))
456
457 # see
458 # https://gitorious.org/python-dbusmock/python-dbusmock/merge_requests/3
459 @skip('skipped due to bug in dbusmock')
460 def test_change_op_sim_1(self):
461 self.navigate_to_carriers_page()
462 self.navigate_to_carrier_page_for_sim(1)
463 carriers = self.system_settings.main_view.choose_page.select_single(
464 toolkit_emulators.ItemSelector, objectName="carrierSelector")
465 manual = carriers.select_single('Label', text="my.cool.telco")
466 self.assertThat(manual, NotEquals(None))
467
468 # see
469 # https://gitorious.org/python-dbusmock/python-dbusmock/merge_requests/3
470 @skip('skipped due to bug in dbusmock')
471 def test_change_op_sim_2(self):
472 self.navigate_to_carriers_page()
473 self.navigate_to_carrier_page_for_sim(2)
474 carriers = self.system_settings.main_view.choose_page.select_single(
475 toolkit_emulators.ItemSelector, objectName="carrierSelector")
476 manual = carriers.select_single('Label', text="my.cool.telco")
477 self.assertThat(manual, NotEquals(None))
478
479 def test_radio_preference_changes(self):
480 self.use_selector(USE_SIM_1)
481
482 self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', 'umts')
483 self.modem_0.EmitSignal(
484 RDO_IFACE,
485 'PropertyChanged',
486 'sv',
487 ['TechnologyPreference', 'umts'])
488
489 self.assert_selected_preference(1)
490
491 def test_changing_sim1_name(self):
492 gsettings = Gio.Settings.new('com.ubuntu.phone')
493 old_name = gsettings.get_value('sim-names')['/ril_0']
494 new_name = 'FOO BAR'169 new_name = 'FOO BAR'
495 self.rename_sim(1, new_name)170 self.cellular_page.set_name(sim, new_name)
496171
497 # wait for gsettings
498 sleep(1)
499 try:172 try:
500 self.assertEqual(173 self.assertThat(
501 new_name, gsettings.get_value('sim-names')['/ril_0'])174 lambda: gsettings.get_value('sim-names')[sim],
175 Eventually(Equals(new_name)))
502 except Exception as e:176 except Exception as e:
503 raise e177 raise e
504 finally:178 finally:
505 self.rename_sim(1, old_name)179 self.cellular_page.set_name(sim, old_name)
180 # wait for gsettings
506 sleep(1)181 sleep(1)
507182
508 def test_changing_sim2_name(self):183 def test_change_sim2_name(self):
509 gsettings = Gio.Settings.new('com.ubuntu.phone')184 gsettings = Gio.Settings.new('com.ubuntu.phone')
510 old_name = gsettings.get_value('sim-names')['/ril_1']185 sim = '/ril_1'
186
187 try:
188 old_name = gsettings.get_value('sim-names')[sim]
189 except:
190 old_name = 'SIM 2'
191
511 new_name = 'BAR BAZ'192 new_name = 'BAR BAZ'
512 self.rename_sim(2, new_name)193 self.cellular_page.set_name(sim, new_name)
513194
514 # wait for gsettings
515 sleep(1)
516 try:195 try:
517 self.assertEqual(196 self.assertThat(
518 new_name, gsettings.get_value('sim-names')['/ril_1'])197 lambda: gsettings.get_value('sim-names')[sim],
198 Eventually(Equals(new_name)))
519 except Exception as e:199 except Exception as e:
520 raise e200 raise e
521 finally:201 finally:
522 self.rename_sim(2, old_name)202 self.cellular_page.set_name(sim, old_name)
523 # wait for gsettings203 # wait for gsettings
524 sleep(1)204 sleep(1)
525205
526 def test_changes_to_sim_names_in_gsettings_are_reflected_in_ui(self):206 def test_remote_manipulation_of_name(self):
527 gsettings = Gio.Settings.new('com.ubuntu.phone')207 gsettings = Gio.Settings.new('com.ubuntu.phone')
528 old_names = gsettings.get_value('sim-names')208 old_names = gsettings.get_value('sim-names')
529209 sim = '/ril_0'
210 name = 'BAS QUX'
530 new_names = old_names.unpack()211 new_names = old_names.unpack()
531 new_names['/ril_0'] = 'BAS QUX'212 new_names[sim] = name
532 new_names = GLib.Variant('a{ss}', new_names)213 new_names = GLib.Variant('a{ss}', new_names)
533 gsettings.set_value('sim-names', new_names)214 gsettings.set_value('sim-names', new_names)
534
535 # wait for gsettings
536 sleep(1)
537 try:215 try:
538 self.assertIn(new_names['/ril_0'], self.get_sim_name(1))216 self.assertThat(
217 lambda: self.cellular_page.get_name(sim),
218 Eventually(StartsWith(name)))
539 except Exception as e:219 except Exception as e:
540 raise e220 raise e
541 finally:221 finally:
@@ -543,6 +223,36 @@
543 # wait for gsettings223 # wait for gsettings
544 sleep(1)224 sleep(1)
545225
226 def test_roaming_switch(self):
227 self.cellular_page.disable_datas()
228 # assert roaming_switch is disabled
229 self.assertThat(
230 lambda: self.cellular_page.enable_roaming(timeout=1),
231 raises(AssertionError)
232 )
233
234 def test_allow_roaming_sim_1(self):
235 sim = '/ril_0'
236 self.cellular_page.select_sim_for_data(sim)
237
238 self.assertEqual(
239 False, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
240 self.cellular_page.enable_roaming()
241 self.assertThat(
242 lambda: self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'),
243 Eventually(Equals(True)))
244
245 def test_allow_roaming_sim_2(self):
246 sim = '/ril_1'
247 self.cellular_page.select_sim_for_data(sim)
248
249 self.assertEqual(
250 False, self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed'))
251 self.cellular_page.enable_roaming()
252 self.assertThat(
253 lambda: self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed'),
254 Eventually(Equals(True)))
255
546 def test_changing_default_sim_for_calls(self):256 def test_changing_default_sim_for_calls(self):
547 gsettings = Gio.Settings.new('com.ubuntu.phone')257 gsettings = Gio.Settings.new('com.ubuntu.phone')
548 default = gsettings.get_value('default-sim-for-calls')258 default = gsettings.get_value('default-sim-for-calls')
@@ -556,11 +266,10 @@
556 # click first sim266 # click first sim
557 self.system_settings.main_view.scroll_to_and_click(267 self.system_settings.main_view.scroll_to_and_click(
558 self.get_default_sim_for_calls_selector('/ril_0'))268 self.get_default_sim_for_calls_selector('/ril_0'))
559 # wait for gsettings269
560 sleep(1)270 self.assertThat(
561 self.assertEqual(271 lambda: gsettings.get_value('default-sim-for-calls').get_string(),
562 gsettings.get_value('default-sim-for-calls').get_string(),272 Eventually(Equals('/ril_0')))
563 '/ril_0')
564273
565 def test_changing_default_sim_for_messages(self):274 def test_changing_default_sim_for_messages(self):
566 gsettings = Gio.Settings.new('com.ubuntu.phone')275 gsettings = Gio.Settings.new('com.ubuntu.phone')
@@ -574,108 +283,8 @@
574 # click second sim283 # click second sim
575 self.system_settings.main_view.scroll_to_and_click(284 self.system_settings.main_view.scroll_to_and_click(
576 self.get_default_sim_for_messages_selector('/ril_1'))285 self.get_default_sim_for_messages_selector('/ril_1'))
577 # wait for gsettings286
578 sleep(1)287 self.assertThat(
579 self.assertEqual(288 lambda:
580 gsettings.get_value('default-sim-for-messages').get_string(),289 gsettings.get_value('default-sim-for-messages').get_string(),
581 '/ril_1')290 Eventually(Equals('/ril_1')))
582
583 def test_multi_sim_layout(self):
584 self.system_settings.main_view.cellular_page.\
585 select_single(objectName="multiSim")
586 self.assertThat(lambda: self.system_settings.main_view.select_single(
587 objectName='singleSim'), raises(StateNotFoundError))
588 self.assertThat(lambda: self.system_settings.main_view.select_single(
589 objectName='noSim'), raises(StateNotFoundError))
590
591 def test_remove_one_sim(self):
592 self.modem_0.EmitSignal(
593 SIM_IFACE,
594 'PropertyChanged',
595 'sv',
596 ['Present', 'False'])
597
598 self.system_settings.main_view.cellular_page.\
599 select_single(objectName="singleSim")
600 self.assertThat(lambda: self.system_settings.main_view.select_single(
601 objectName='multiSim'), raises(StateNotFoundError))
602 self.assertThat(lambda: self.system_settings.main_view.select_single(
603 objectName='noSim'), raises(StateNotFoundError))
604
605 def test_remove_two_sims(self):
606 self.modem_0.EmitSignal(
607 SIM_IFACE,
608 'PropertyChanged',
609 'sv',
610 ['Present', 'False'])
611
612 self.modem_1.EmitSignal(
613 SIM_IFACE,
614 'PropertyChanged',
615 'sv',
616 ['Present', 'False'])
617
618 self.system_settings.main_view.cellular_page.\
619 wait_select_single(objectName="noSim")
620 self.assertThat(
621 lambda: self.system_settings.main_view.select_single(
622 objectName='multiSim'), raises(StateNotFoundError))
623 self.assertThat(
624 lambda: self.system_settings.main_view.select_single(
625 objectName='singleSim'), raises(StateNotFoundError))
626
627 def test_remove_and_insert_sims(self):
628 self.modem_0.EmitSignal(
629 SIM_IFACE,
630 'PropertyChanged',
631 'sv',
632 ['Present', 'False'])
633
634 self.modem_1.EmitSignal(
635 SIM_IFACE,
636 'PropertyChanged',
637 'sv',
638 ['Present', 'False'])
639
640 self.system_settings.main_view.cellular_page.\
641 wait_select_single(objectName="noSim")
642 self.assertThat(
643 lambda: self.system_settings.main_view.select_single(
644 objectName='multiSim'), raises(StateNotFoundError))
645 self.assertThat(
646 lambda: self.system_settings.main_view.select_single(
647 objectName='singleSim'), raises(StateNotFoundError))
648
649 self.modem_0.EmitSignal(
650 SIM_IFACE,
651 'PropertyChanged',
652 'sv',
653 ['Present', 'True'])
654
655 self.modem_1.EmitSignal(
656 SIM_IFACE,
657 'PropertyChanged',
658 'sv',
659 ['Present', 'True'])
660
661 self.system_settings.main_view.cellular_page.\
662 wait_select_single(objectName="multiSim")
663 self.assertThat(
664 lambda: self.system_settings.main_view.select_single(
665 objectName='noSim'), raises(StateNotFoundError))
666 self.assertThat(
667 lambda: self.system_settings.main_view.select_single(
668 objectName='singleSim'), raises(StateNotFoundError))
669
670 # regression test for 1375832
671 # tests that the second slot only exposes gsm, which
672 # the testdata indicates
673 def test_slot_two(self):
674 self.modem_0.EmitSignal(
675 SIM_IFACE,
676 'PropertyChanged',
677 'sv',
678 ['Present', 'False'])
679 self.select_preference(PREFERENCE_2G)
680 self.assertRaises(StateNotFoundError,
681 self.select_preference, PREFERENCE_UMTS)

Subscribers

People subscribed via source and target branches