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