Merge lp:~jonas-drange/ubuntu-system-settings/sim-name-editor into lp:ubuntu-system-settings

Proposed by Jonas G. Drange
Status: Superseded
Proposed branch: lp:~jonas-drange/ubuntu-system-settings/sim-name-editor
Merge into: lp:ubuntu-system-settings
Diff against target: 756 lines (+375/-112)
9 files modified
.bzrignore (+1/-0)
plugins/cellular/Components/CMakeLists.txt (+1/-0)
plugins/cellular/Components/CellularDualSim.qml (+13/-10)
plugins/cellular/Components/Sim.qml (+1/-1)
plugins/cellular/Components/SimEditor.qml (+167/-0)
plugins/cellular/PageComponent.qml (+51/-13)
src/qml/MainWindow.qml (+1/-0)
tests/autopilot/ubuntu_system_settings/tests/__init__.py (+0/-9)
tests/autopilot/ubuntu_system_settings/tests/test_cellular.py (+140/-79)
To merge this branch: bzr merge lp:~jonas-drange/ubuntu-system-settings/sim-name-editor
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Needs Fixing
Ken VanDine Needs Fixing
Review via email: mp+229053@code.launchpad.net

This proposal supersedes a proposal from 2014-07-27.

This proposal has been superseded by a proposal from 2014-07-31.

Commit message

[cellular] add sim name editor for dual sim scenario

Description of the change

Hi,

this adds a component that allows for editing of sim names, as well as autopilot tests for this.

I also added pycache to the ignore list, since autopilot3 is creating this and it should be ignored.

A nasty bug caused by tests trying to edit a readonly dbus property was removed as well.

Refactored tests to work with new, dynamic sim names.

Thanks

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:801
http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-ci/1072/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-utopic-touch/2539
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-utopic/2047
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-utopic-amd64-ci/264
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-utopic-armhf-ci/264
        deb: http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-utopic-armhf-ci/264/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-utopic-i386-ci/264
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-mako/2686
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/3782
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/3782/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/10482
    SUCCESS: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-utopic/1715
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/2300
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/2300/artifact/work/output/*zip*/output.zip

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/ubuntu-system-settings-ci/1072/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Ken VanDine (ken-vandine) wrote :

Please remove debugging output, and see my inline comment

review: Needs Fixing
807. By Jonas G. Drange

remove logstatements

808. By Jonas G. Drange

merge prereq

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

FAILED: Continuous integration, rev:806
http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-ci/1112/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-utopic-touch/2838
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-utopic/2258
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-utopic-amd64-ci/304
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-utopic-armhf-ci/304
        deb: http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-utopic-armhf-ci/304/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/ubuntu-system-settings-utopic-i386-ci/304
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-mako/2917
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/4081
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-armhf/4081/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/10786
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/autopilot-testrunner-otto-utopic/1870
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/2521
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-utopic-amd64/2521/artifact/work/output/*zip*/output.zip

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/ubuntu-system-settings-ci/1112/rebuild

review: Needs Fixing (continuous-integration)

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2014-07-08 16:17:02 +0000
3+++ .bzrignore 2014-07-31 14:22:27 +0000
4@@ -19,3 +19,4 @@
5 .cproject
6 .project
7 .settings
8+__pycache__
9
10=== modified file 'plugins/cellular/Components/CMakeLists.txt'
11--- plugins/cellular/Components/CMakeLists.txt 2014-07-21 14:29:00 +0000
12+++ plugins/cellular/Components/CMakeLists.txt 2014-07-31 14:22:27 +0000
13@@ -3,5 +3,6 @@
14 data-helpers.js
15 CellularDualSim.qml
16 Sim.qml
17+ SimEditor.qml
18 )
19 install(FILES ${QML_SOURCES} DESTINATION ${PLUGIN_QML_DIR}/cellular/Components)
20
21=== modified file 'plugins/cellular/Components/CellularDualSim.qml'
22--- plugins/cellular/Components/CellularDualSim.qml 2014-07-24 19:00:45 +0000
23+++ plugins/cellular/Components/CellularDualSim.qml 2014-07-31 14:22:27 +0000
24@@ -64,17 +64,20 @@
25 text: i18n.tr("Cellular data:")
26 expanded: true
27 model: ["Off", "sim1", "sim2"]
28- delegate: OptionSelectorDelegate { text: {
29- var t;
30- if (modelData === "sim1") {
31- t = sim1.title
32- } else if (modelData === "sim2") {
33- t = sim2.title
34- } else {
35- t = i18n.tr(modelData);
36+ delegate: OptionSelectorDelegate {
37+ objectName: "use" + modelData
38+ text: {
39+ var t;
40+ if (modelData === "sim1") {
41+ t = sim1.title
42+ } else if (modelData === "sim2") {
43+ t = sim2.title
44+ } else {
45+ t = i18n.tr(modelData);
46+ }
47+ return t;
48 }
49- return t;
50- }}
51+ }
52 selectedIndex: [true, sim1.connMan.powered, sim2.connMan.powered].lastIndexOf(true)
53 onDelegateClicked: {
54 sim1.connMan.powered = (index === 1)
55
56=== modified file 'plugins/cellular/Components/Sim.qml'
57--- plugins/cellular/Components/Sim.qml 2014-07-24 19:00:45 +0000
58+++ plugins/cellular/Components/Sim.qml 2014-07-31 14:22:27 +0000
59@@ -27,12 +27,12 @@
60 property alias simMng: simMng
61 property alias connMan: connMan
62
63+ property string path
64 property string name
65 property string title: {
66 var number = simMng.subscriberNumbers[0] || simMng.subscriberIdentity;
67 return name + (number ? " (" + number + ")" : "");
68 }
69- property string path
70
71 OfonoModem {
72 id: modem
73
74=== added file 'plugins/cellular/Components/SimEditor.qml'
75--- plugins/cellular/Components/SimEditor.qml 1970-01-01 00:00:00 +0000
76+++ plugins/cellular/Components/SimEditor.qml 2014-07-31 14:22:27 +0000
77@@ -0,0 +1,167 @@
78+/*
79+ * Copyright (C) 2014 Canonical Ltd
80+ *
81+ * This program is free software: you can redistribute it and/or modify
82+ * it under the terms of the GNU General Public License version 3 as
83+ * published by the Free Software Foundation.
84+ *
85+ * This program is distributed in the hope that it will be useful,
86+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
87+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
88+ * GNU General Public License for more details.
89+ *
90+ * You should have received a copy of the GNU General Public License
91+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
92+ *
93+ * Authors:
94+ * Jonas G. Drange <jonas.drange@canonical.com>
95+ *
96+*/
97+import QtQuick 2.0
98+import Ubuntu.Components 1.1
99+import Ubuntu.Components.ListItems 0.1 as ListItem
100+
101+Column {
102+
103+ id: simList
104+
105+ anchors.left: parent.left
106+ anchors.right: parent.right
107+
108+ states: [
109+ State {
110+ name: "editing"
111+ PropertyChanges {
112+ target: editor
113+ visible: true
114+ }
115+ },
116+ State {
117+ extend: "editing"
118+ name: "editingSim1"
119+ PropertyChanges {
120+ target: nameField
121+ text: sim1.name
122+ }
123+ ParentChange {
124+ target: editor
125+ parent: sim1Placeholder
126+ }
127+ },
128+ State {
129+ extend: "editing"
130+ name: "editingSim2"
131+ PropertyChanges {
132+ target: nameField
133+ text: sim2.name
134+ }
135+ ParentChange {
136+ target: editor
137+ parent: sim2Placeholder
138+ }
139+ }
140+ ]
141+
142+ ListItem.Standard {
143+ text: i18n.tr("Edit SIM Name")
144+ }
145+
146+
147+ ListItem.Standard {
148+ id: sim1Item
149+ text: sim1.title
150+ objectName: "editSim1"
151+ progression: true
152+ onClicked: {
153+ simList.state = "editingSim1";
154+ nameField.forceActiveFocus();
155+ }
156+ }
157+
158+ Column {
159+ id: sim1Placeholder
160+ }
161+
162+ ListItem.Standard {
163+ id: sim2Item
164+ text: sim2.title
165+ objectName: "editSim2"
166+ progression: true
167+ onClicked: {
168+ simList.state = "editingSim2";
169+ nameField.forceActiveFocus();
170+ }
171+ }
172+
173+ Column {
174+ id: sim2Placeholder
175+ }
176+
177+ Column {
178+ id: editor
179+ visible: false
180+
181+ width: simList.width - units.gu(4)
182+ spacing: units.gu(2)
183+ anchors {
184+ horizontalCenter: simList.horizontalCenter
185+ }
186+
187+ Item {
188+ height: units.gu(0.1)
189+ width: parent.width
190+ }
191+
192+ TextField {
193+ id: nameField
194+ objectName: "nameField"
195+ maximumLength: 30
196+ width: simList.width - units.gu(4)
197+ onTriggered: renameAction
198+ }
199+
200+ Row {
201+
202+ spacing: units.gu(2)
203+
204+ Button {
205+ id: cancel
206+ objectName: "cancelRename"
207+ gradient: UbuntuColors.greyGradient
208+ text: i18n.tr("Cancel")
209+ width: (editor.width / 2) - units.gu(1)
210+ onClicked: {
211+ simList.state = "";
212+ }
213+ }
214+
215+ Button {
216+ id: rename
217+ objectName: "doRename"
218+ enabled: nameField.text
219+ text: i18n.tr("OK")
220+ width: (editor.width / 2) - units.gu(1)
221+ action: renameAction
222+ }
223+ }
224+
225+ Action {
226+ id: renameAction
227+ onTriggered: {
228+ var tmpSimNames = {};
229+ if (simList.state === "editingSim1") {
230+ tmpSimNames[sim1.path] = nameField.text;
231+ tmpSimNames[sim2.path] = sim2.name;
232+ console.warn('sat simName for', sim1.path, 'to', nameField.text)
233+ } else if (simList.state === "editingSim2") {
234+ console.warn('sat simName for', sim2.path, 'to', nameField.text)
235+ tmpSimNames[sim1.path] = sim1.name;
236+ tmpSimNames[sim2.path] = nameField.text;
237+ }
238+ phoneSettings.simNames = tmpSimNames;
239+ simList.state = "";
240+ }
241+ }
242+ }
243+}
244+
245
246=== modified file 'plugins/cellular/PageComponent.qml'
247--- plugins/cellular/PageComponent.qml 2014-07-24 19:00:45 +0000
248+++ plugins/cellular/PageComponent.qml 2014-07-31 14:22:27 +0000
249@@ -19,6 +19,7 @@
250 */
251
252 import QtQuick 2.0
253+import GSettings 1.0
254 import SystemSettings 1.0
255 import Ubuntu.Components 0.1
256 import Ubuntu.Components.ListItems 0.1 as ListItem
257@@ -34,32 +35,31 @@
258 // pointers to sim 1 and 2, lazy loaded
259 property alias sim1: simOneLoader.item
260 property alias sim2: simTwoLoader.item
261+ property var modemsSorted: manager.modems.slice(0).sort()
262
263 states: [
264 State {
265 name: "singleSim"
266 StateChangeScript {
267 name: "loadSim"
268- script: simOneLoader.setSource("Components/Sim.qml", {
269- path: manager.modems[0],
270- name: "SIM 1"
271- })
272+ script: {
273+ console.warn('modems sorted', modemsSorted);
274+ var p = modemsSorted[0];
275+ simOneLoader.setSource("Components/Sim.qml", {
276+ path: p
277+ });
278+ }
279 }
280 },
281 State {
282 name: "dualSim"
283+ extend: "singleSim"
284 StateChangeScript {
285 name: "loadSecondSim"
286 script: {
287- // the ordering is completely depending on manager
288- // TODO: proper sim names (from gsettings?)
289- simOneLoader.setSource("Components/Sim.qml", {
290- path: manager.modems[0],
291- name: "SIM 1"
292- });
293+ var p = modemsSorted[1];
294 simTwoLoader.setSource("Components/Sim.qml", {
295- path: manager.modems[1],
296- name: "SIM 2"
297+ path: p
298 });
299 }
300 }
301@@ -83,6 +83,9 @@
302 id: manager
303 Component.onCompleted: {
304 console.warn('Manager complete with', modems.length, 'sims.');
305+ for (var i=0, j=modems.length; i<j; i++) {
306+ console.warn('manager: sim', i, 'has path', modems[i]);
307+ }
308 if (modems.length === 1) {
309 root.state = "singleSim";
310 } else if (modems.length === 2) {
311@@ -185,6 +188,41 @@
312 progression: true
313 visible: showAllUI
314 }
315- }
316+
317+ SimEditor {
318+ visible: root.state === "dualSim"
319+ objectName: "simEditor"
320+ }
321+ }
322+ }
323+
324+ GSettings {
325+ id: phoneSettings
326+ schema.id: "com.ubuntu.phone"
327+ Component.onCompleted: {
328+ // set default names
329+ var simNames = phoneSettings.simNames;
330+ var m0 = modemsSorted[0];
331+ var m1 = modemsSorted[1];
332+ if (!simNames[m0]) {
333+ simNames[m0] = "SIM 1";
334+ }
335+ if (!simNames[m1]) {
336+ simNames[m1] = "SIM 2";
337+ }
338+ phoneSettings.simNames = simNames;
339+ }
340+ }
341+
342+ Binding {
343+ target: sim1
344+ property: "name"
345+ value: phoneSettings.simNames[modemsSorted[0]]
346+ }
347+
348+ Binding {
349+ target: sim2
350+ property: "name"
351+ value: phoneSettings.simNames[modemsSorted[1]]
352 }
353 }
354
355=== modified file 'src/qml/MainWindow.qml'
356--- src/qml/MainWindow.qml 2014-05-28 18:26:08 +0000
357+++ src/qml/MainWindow.qml 2014-07-31 14:22:27 +0000
358@@ -31,6 +31,7 @@
359 objectName: "mainView"
360 automaticOrientation: true
361 useDeprecatedToolbar: false
362+ anchorToKeyboard: true
363
364 function loadPluginByName(pluginName, pluginOptions) {
365 var plugin = pluginManager.getByName(pluginName)
366
367=== modified file 'tests/autopilot/ubuntu_system_settings/tests/__init__.py'
368--- tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-07-25 18:12:58 +0000
369+++ tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-07-31 14:22:27 +0000
370@@ -167,11 +167,8 @@
371 )
372
373 def mock_radio_settings(self, modem):
374- modem_interfaces = modem.GetProperties()['Interfaces']
375- modem_interfaces.append(RDO_IFACE)
376 modem.AddProperty(
377 RDO_IFACE, 'TechnologyPreference', self.technology_preference)
378- modem.SetProperty('Interfaces', modem_interfaces)
379 modem.AddMethods(
380 RDO_IFACE,
381 [('GetProperties', '', 'a{sv}',
382@@ -264,12 +261,6 @@
383
384 super(UbuntuSystemSettingsOfonoTestCase, self).setUp(panel)
385
386- @classmethod
387- def tearDownClass(cls):
388- cls.p_mock.terminate()
389- cls.p_mock.wait()
390- super(UbuntuSystemSettingsOfonoTestCase, cls).tearDownClass()
391-
392
393 class CellularBaseTestCase(UbuntuSystemSettingsOfonoTestCase):
394 def setUp(self):
395
396=== modified file 'tests/autopilot/ubuntu_system_settings/tests/test_cellular.py'
397--- tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-07-24 20:30:20 +0000
398+++ tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-07-31 14:22:27 +0000
399@@ -6,6 +6,7 @@
400 # by the Free Software Foundation.
401
402 import dbus
403+from gi.repository import Gio, GLib
404 from time import sleep
405
406 from autopilot.introspection.dbus import StateNotFoundError
407@@ -23,9 +24,9 @@
408 PREFERENCE_2G = '2G only (saves battery)'
409 PREFERENCE_ANY = '2G/3G/4G (faster)'
410 PREFERENCE_OFF = 'Off'
411-LABEL_SIM_1 = 'SIM 1 (08123)'
412-LABEL_SIM_2 = 'SIM 2 (123456)'
413-LABEL_OFF = 'Off'
414+USE_OFF = "useOff"
415+USE_SIM_1 = "usesim1"
416+USE_SIM_2 = "usesim2"
417
418
419 class CellularTestCase(CellularBaseTestCase):
420@@ -170,7 +171,7 @@
421 objectName="dataRoamingSwitch"
422 )
423 self.system_settings.main_view.scroll_to_and_click(roaming_switch)
424- sleep(2)
425+ sleep(1.5)
426 self.assertEqual(
427 True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
428
429@@ -250,6 +251,12 @@
430
431 self.assert_selected_preference(2)
432
433+ def test_that_sim_editor_is_hidden(self):
434+ editor = self.system_settings.main_view.cellular_page.select_single(
435+ objectName="simEditor"
436+ )
437+ self.assertFalse(editor.get_properties()['visible'])
438+
439
440 class DualSimCellularTestCase(CellularBaseTestCase):
441
442@@ -311,7 +318,7 @@
443 def use_selector(self, label):
444 obj = self.system_settings.main_view.cellular_page.select_single(
445 objectName="use"
446- ).select_single('Label', text=label)
447+ ).select_single(objectName=label)
448 self.system_settings.main_view.scroll_to_and_click(obj)
449
450 def assert_used(self, index):
451@@ -321,107 +328,110 @@
452 self.assertThat(
453 obj.selectedIndex, Eventually(Equals(index)))
454
455+ def get_sim_name(self, num):
456+ obj = self.system_settings.main_view.cellular_page.select_single(
457+ objectName="simEditor"
458+ ).select_single(objectName="editSim%d" % num)
459+ return obj.get_properties()['text']
460+
461+ def rename_sim(self, num, new_name):
462+ obj = self.system_settings.main_view.cellular_page.select_single(
463+ objectName="simEditor"
464+ ).select_single(objectName="editSim%d" % num)
465+ self.system_settings.main_view.scroll_to_and_click(obj)
466+ field = self.system_settings.main_view.cellular_page.select_single(
467+ objectName="nameField"
468+ )
469+ self.system_settings.main_view.scroll_to_and_click(field)
470+ self.system_settings.main_view.scroll_to_and_click(
471+ field.select_single(objectName="clear_button"))
472+ self.keyboard.type(new_name)
473+ self.system_settings.main_view.scroll_to_and_click(
474+ self.system_settings.main_view.cellular_page.select_single(
475+ objectName="doRename"))
476+
477 def test_use_sim_1(self):
478- self.use_selector(LABEL_OFF)
479- self.use_selector(LABEL_SIM_1)
480- sleep(0.7)
481+ self.use_selector(USE_OFF)
482+ self.use_selector(USE_SIM_1)
483+ sleep(0.7)
484+ self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
485+ self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
486+
487+ def test_use_sim_2(self):
488+ self.use_selector(USE_OFF)
489+ self.use_selector(USE_SIM_2)
490+ sleep(0.7)
491+ self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
492 self.assertEqual(True, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
493- self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
494-
495- def test_use_sim_2(self):
496- self.use_selector(LABEL_OFF)
497- self.use_selector(LABEL_SIM_2)
498- sleep(0.7)
499- self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
500- self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
501
502 def test_turn_off_both_sims(self):
503- self.use_selector(LABEL_OFF)
504+ self.use_selector(USE_OFF)
505 sleep(0.7)
506 self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered'))
507 self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered'))
508
509 def test_use_gsm_for_sim_1(self):
510- self.use_selector(LABEL_SIM_1)
511+ self.use_selector(USE_SIM_1)
512 self.select_preference(PREFERENCE_2G)
513 sleep(0.7)
514 self.assertEqual(
515- 'gsm', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference'))
516+ 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
517
518 def test_use_any_for_sim_1(self):
519- self.use_selector(LABEL_SIM_1)
520+ self.use_selector(USE_SIM_1)
521 self.select_preference(PREFERENCE_ANY)
522 sleep(0.7)
523 self.assertEqual(
524- 'any', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference'))
525+ 'any', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
526
527 def test_use_gsm_for_sim_2(self):
528- self.use_selector(LABEL_SIM_1)
529+ self.use_selector(USE_SIM_1)
530 self.select_preference(PREFERENCE_2G)
531 sleep(0.7)
532 self.assertEqual(
533- 'gsm', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference'))
534+ 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
535
536 def test_use_any_for_sim_2(self):
537- self.use_selector(LABEL_SIM_1)
538+ self.use_selector(USE_SIM_2)
539 self.select_preference(PREFERENCE_ANY)
540 sleep(1)
541 self.assertEqual(
542 'any', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference'))
543
544 def test_when_sim_1_comes_online_ui_is_correct(self):
545- self.use_selector(LABEL_SIM_1)
546+ self.use_selector(USE_SIM_1)
547 self.select_preference(PREFERENCE_ANY)
548- self.use_selector(LABEL_OFF)
549+ self.use_selector(USE_OFF)
550 sleep(0.7)
551- self.modem_1.Set(CONNMAN_IFACE, 'Powered', True)
552- self.modem_1.EmitSignal(
553+ self.modem_0.Set(CONNMAN_IFACE, 'Powered', True)
554+ self.modem_0.EmitSignal(
555 CONNMAN_IFACE,
556 'PropertyChanged',
557 'sv',
558 ['Powered', 'true'])
559
560 self.assertEqual(
561- 'any', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference'))
562+ 'any', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
563 self.assert_used(1)
564 self.assert_selected_preference(1)
565
566 def test_when_sim_2_comes_online_ui_is_correct(self):
567- self.use_selector(LABEL_SIM_2)
568+ self.use_selector(USE_SIM_2)
569 self.select_preference(PREFERENCE_ANY)
570- self.use_selector(LABEL_OFF)
571+ self.use_selector(USE_OFF)
572 sleep(0.7)
573- self.modem_0.Set(CONNMAN_IFACE, 'Powered', True)
574- self.modem_0.EmitSignal(
575+ self.modem_1.Set(CONNMAN_IFACE, 'Powered', True)
576+ self.modem_1.EmitSignal(
577 CONNMAN_IFACE,
578 'PropertyChanged',
579 'sv',
580 ['Powered', 'true'])
581
582 self.assertEqual(
583- 'any', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference'))
584+ 'any', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference'))
585 self.assert_used(2)
586 self.assert_selected_preference(1)
587
588- def test_both_sims_comes_online(self):
589- self.use_selector(LABEL_OFF)
590- sleep(2)
591- self.modem_0.Set(CONNMAN_IFACE, 'Powered', True)
592- self.modem_0.EmitSignal(
593- CONNMAN_IFACE,
594- 'PropertyChanged',
595- 'sv',
596- ['Powered', 'true'])
597-
598- self.modem_1.Set(CONNMAN_IFACE, 'Powered', True)
599- self.modem_1.EmitSignal(
600- CONNMAN_IFACE,
601- 'PropertyChanged',
602- 'sv',
603- ['Powered', 'true'])
604- self.assert_used(1)
605- self.assert_selected_preference(0)
606-
607 def test_roaming_switch(self):
608 roaming_switch = self.system_settings.main_view.select_single(
609 objectName="dataRoamingSwitch"
610@@ -430,7 +440,7 @@
611 self.assertTrue(roaming_switch.get_properties()['enabled'])
612
613 # click off
614- self.use_selector(LABEL_OFF)
615+ self.use_selector(USE_OFF)
616
617 # assert roaming_switch is disabled
618 self.assertThat(
619@@ -438,23 +448,23 @@
620 Eventually(Equals(False)))
621
622 def test_allow_roaming(self):
623- self.use_selector(LABEL_SIM_1)
624+ self.use_selector(USE_SIM_1)
625 self.assertEqual(
626- False, self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed'))
627+ False, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
628 roaming_switch = self.system_settings.main_view.select_single(
629 objectName="dataRoamingSwitch"
630 )
631 self.system_settings.main_view.scroll_to_and_click(roaming_switch)
632- sleep(2)
633+ sleep(1.5)
634 self.assertEqual(
635- True, self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed'))
636+ True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed'))
637
638 def test_no_radio_preference(self):
639 self.select_preference(PREFERENCE_ANY)
640- self.use_selector(LABEL_OFF)
641+ self.use_selector(USE_OFF)
642
643- self.modem_1.Set(RDO_IFACE, 'TechnologyPreference', '')
644- self.modem_1.EmitSignal(
645+ self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', '')
646+ self.modem_0.EmitSignal(
647 CONNMAN_IFACE,
648 'PropertyChanged',
649 'sv',
650@@ -464,18 +474,6 @@
651 self.data_preference_selector.get_properties()['enabled'],
652 Eventually(Equals(False)))
653
654- def test_radio_preference_changes(self):
655- self.use_selector(LABEL_SIM_1)
656-
657- self.modem_1.Set(RDO_IFACE, 'TechnologyPreference', 'any')
658- self.modem_1.EmitSignal(
659- RDO_IFACE,
660- 'PropertyChanged',
661- 'sv',
662- ['TechnologyPreference', 'any'])
663-
664- self.assert_selected_preference(1)
665-
666 # see
667 # https://gitorious.org/python-dbusmock/python-dbusmock/merge_requests/3
668 @skip('skipped due to bug in dbusmock')
669@@ -483,9 +481,7 @@
670 self.navigate_to_carriers_page()
671 self.navigate_to_carrier_page_for_sim(1)
672 carriers = self.system_settings.main_view.choose_page.select_single(
673- toolkit_emulators.ItemSelector,
674- objectName="carrierSelector"
675- )
676+ toolkit_emulators.ItemSelector, objectName="carrierSelector")
677 manual = carriers.select_single('Label', text="my.cool.telco")
678 self.assertThat(manual, NotEquals(None))
679
680@@ -496,8 +492,73 @@
681 self.navigate_to_carriers_page()
682 self.navigate_to_carrier_page_for_sim(2)
683 carriers = self.system_settings.main_view.choose_page.select_single(
684- toolkit_emulators.ItemSelector,
685- objectName="carrierSelector"
686- )
687+ toolkit_emulators.ItemSelector, objectName="carrierSelector")
688 manual = carriers.select_single('Label', text="my.cool.telco")
689 self.assertThat(manual, NotEquals(None))
690+
691+ def test_radio_preference_changes(self):
692+ self.use_selector(USE_SIM_1)
693+
694+ self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', 'any')
695+ self.modem_0.EmitSignal(
696+ RDO_IFACE,
697+ 'PropertyChanged',
698+ 'sv',
699+ ['TechnologyPreference', 'any'])
700+
701+ self.assert_selected_preference(1)
702+
703+ def test_changing_sim1_name(self):
704+ gsettings = Gio.Settings.new('com.ubuntu.phone')
705+ old_name = gsettings.get_value('sim-names')['/ril_0']
706+ new_name = 'FOO BAR'
707+ self.rename_sim(1, new_name)
708+
709+ # wait for gsettings
710+ sleep(1)
711+ try:
712+ self.assertEqual(
713+ new_name, gsettings.get_value('sim-names')['/ril_0'])
714+ except Exception as e:
715+ raise e
716+ finally:
717+ self.rename_sim(1, old_name)
718+ sleep(1)
719+
720+ def test_changing_sim2_name(self):
721+ gsettings = Gio.Settings.new('com.ubuntu.phone')
722+ old_name = gsettings.get_value('sim-names')['/ril_1']
723+ new_name = 'BAR BAZ'
724+ self.rename_sim(2, new_name)
725+
726+ # wait for gsettings
727+ sleep(1)
728+ try:
729+ self.assertEqual(
730+ new_name, gsettings.get_value('sim-names')['/ril_1'])
731+ except Exception as e:
732+ raise e
733+ finally:
734+ self.rename_sim(2, old_name)
735+ # wait for gsettings
736+ sleep(1)
737+
738+ def test_changes_to_sim_names_in_gsettings_are_reflected_in_ui(self):
739+ gsettings = Gio.Settings.new('com.ubuntu.phone')
740+ old_names = gsettings.get_value('sim-names')
741+
742+ new_names = old_names.unpack()
743+ new_names['/ril_0'] = 'BAS QUX'
744+ new_names = GLib.Variant('a{ss}', new_names)
745+ gsettings.set_value('sim-names', new_names)
746+
747+ # wait for gsettings
748+ sleep(1)
749+ try:
750+ self.assertIn(new_names['/ril_0'], self.get_sim_name(1))
751+ except Exception as e:
752+ raise e
753+ finally:
754+ gsettings.set_value('sim-names', old_names)
755+ # wait for gsettings
756+ sleep(1)

Subscribers

People subscribed via source and target branches