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