on xenial help sign in
When edge demo is running, don't show an initial lockscreen
1800423Michael Terry
qml/Shell.qml+15−6
@@ -53,7 +53,9 @@ Item {
53 property url background
53 property url background
54 readonly property real panelHeight: panel.panelHeight
54 readonly property real panelHeight: panel.panelHeight
55
55
56− readonly property bool locked: LightDM.Greeter.active && !LightDM.Greeter.authenticated
56+ readonly property bool locked: LightDM.Greeter.active && !LightDM.Greeter.authenticated && !forcedUnlock
57+ readonly property bool forcedUnlock: edgeDemo.running
58+ onForcedUnlockChanged: if (forcedUnlock) lockscreen.hide()
57
59
58 property bool sideStageEnabled: shell.width >= units.gu(100)
60 property bool sideStageEnabled: shell.width >= units.gu(100)
59 readonly property string focusedApplicationId: ApplicationManager.focusedApplicationId
61 readonly property string focusedApplicationId: ApplicationManager.focusedApplicationId
@@ -316,6 +318,12 @@ Item {
316
318
317 onShownChanged: if (shown) greeter.lockedApp = ""
319 onShownChanged: if (shown) greeter.lockedApp = ""
318
320
321+ function maybeShow() {
322+ if (!shell.forcedUnlock) {
323+ show()
324+ }
325+ }
326+
319 Timer {
327 Timer {
320 id: forcedDelayTimer
328 id: forcedDelayTimer
321 interval: 1000 * 60
329 interval: 1000 * 60
@@ -358,7 +366,7 @@ Item {
358 lockscreen.errorText = i18n.tr("Sorry, incorrect %1").arg(text.toLowerCase())
366 lockscreen.errorText = i18n.tr("Sorry, incorrect %1").arg(text.toLowerCase())
359 }
367 }
360
368
361− lockscreen.show();
369+ lockscreen.maybeShow();
362 }
370 }
363 }
371 }
364
372
@@ -368,7 +376,7 @@ Item {
368 lockscreen.hide()
376 lockscreen.hide()
369 } else {
377 } else {
370 lockscreen.reset();
378 lockscreen.reset();
371− lockscreen.show();
379+ lockscreen.maybeShow();
372 }
380 }
373 }
381 }
374 }
382 }
@@ -446,14 +454,14 @@ Item {
446 // Wait until the greeter is completely covering lockscreen before resetting it.
454 // Wait until the greeter is completely covering lockscreen before resetting it.
447 if (greeter.narrowMode && fullyShown && !LightDM.Greeter.authenticated) {
455 if (greeter.narrowMode && fullyShown && !LightDM.Greeter.authenticated) {
448 lockscreen.reset();
456 lockscreen.reset();
449− lockscreen.show();
457+ lockscreen.maybeShow();
450 }
458 }
451 }
459 }
452
460
453 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
461 readonly property real showProgress: MathUtils.clamp((1 - x/width) + greeter.showProgress - 1, 0, 1)
454 onShowProgressChanged: {
462 onShowProgressChanged: {
455 if (showProgress === 0) {
463 if (showProgress === 0) {
456− if (LightDM.Greeter.promptless && LightDM.Greeter.authenticated) {
464+ if ((LightDM.Greeter.promptless && LightDM.Greeter.authenticated) || shell.forcedUnlock) {
457 greeter.login()
465 greeter.login()
458 } else if (greeter.narrowMode) {
466 } else if (greeter.narrowMode) {
459 lockscreen.clear(false) // to reset focus if necessary
467 lockscreen.clear(false) // to reset focus if necessary
@@ -487,7 +495,7 @@ Item {
487 function startUnlock() {
495 function startUnlock() {
488 if (narrowMode) {
496 if (narrowMode) {
489 if (!LightDM.Greeter.authenticated) {
497 if (!LightDM.Greeter.authenticated) {
490− lockscreen.show()
498+ lockscreen.maybeShow()
491 }
499 }
492 hide()
500 hide()
493 } else {
501 } else {
@@ -710,6 +718,7 @@ Item {
710
718
711 EdgeDemo {
719 EdgeDemo {
712 id: edgeDemo
720 id: edgeDemo
721+ objectName: "edgeDemo"
713 z: alphaDisclaimerLabel.z + 10
722 z: alphaDisclaimerLabel.z + 10
714 paused: Powerd.status === Powerd.Off // Saves power
723 paused: Powerd.status === Powerd.Off // Saves power
715 greeter: greeter
724 greeter: greeter
tests/mocks/AccountsService/AccountsService.cpp+5−3
@@ -26,7 +26,8 @@ AccountsService::AccountsService(QObject* parent)
26 m_enableIndicatorsWhileLocked(true),
26 m_enableIndicatorsWhileLocked(true),
27 m_backgroundFile(qmlDirectory() + "graphics/phone_background.jpg"),
27 m_backgroundFile(qmlDirectory() + "graphics/phone_background.jpg"),
28 m_statsWelcomeScreen(true),
28 m_statsWelcomeScreen(true),
29− m_failedLogins(0)
29+ m_failedLogins(0),
30+ m_demoEdges(false)
30{
31{
31}
32}
32
33
@@ -44,12 +45,13 @@ void AccountsService::setUser(const QString &user)
44
45
45bool AccountsService::demoEdges() const
46bool AccountsService::demoEdges() const
46{
47{
47− return false;
48+ return m_demoEdges;
48}
49}
49
50
50void AccountsService::setDemoEdges(bool demoEdges)
51void AccountsService::setDemoEdges(bool demoEdges)
51{
52{
52− Q_UNUSED(demoEdges)
53+ m_demoEdges = demoEdges;
54+ Q_EMIT demoEdgesChanged();
53}
55}
54
56
55bool AccountsService::enableLauncherWhileLocked() const
57bool AccountsService::enableLauncherWhileLocked() const
tests/mocks/AccountsService/AccountsService.h+1
@@ -101,6 +101,7 @@ private:
101 QString m_user;
101 QString m_user;
102 bool m_statsWelcomeScreen;
102 bool m_statsWelcomeScreen;
103 uint m_failedLogins;
103 uint m_failedLogins;
104+ bool m_demoEdges;
104};
105};
105
106
106#endif
107#endif
tests/qmltests/tst_ShellWithPin.qml+25−3
@@ -119,10 +119,9 @@ Row {
119 function init() {
119 function init() {
120 sessionSpy.target = findChild(shell, "greeter")
120 sessionSpy.target = findChild(shell, "greeter")
121 swipeAwayGreeter()
121 swipeAwayGreeter()
122+ waitForLockscreen()
122 shell.failedLoginsDelayAttempts = -1
123 shell.failedLoginsDelayAttempts = -1
123 maxRetriesTextField.text = "-1"
124 maxRetriesTextField.text = "-1"
124− AccountsService.enableLauncherWhileLocked = true
125− AccountsService.enableIndicatorsWhileLocked = true
126 }
125 }
127
126
128 function cleanup() {
127 function cleanup() {
@@ -143,6 +142,10 @@ Row {
143 // kill all (fake) running apps
142 // kill all (fake) running apps
144 killApps()
143 killApps()
145
144
145+ AccountsService.enableLauncherWhileLocked = true
146+ AccountsService.enableIndicatorsWhileLocked = true
147+ AccountsService.demoEdges = false
148+
146 // reload our test subject to get it in a fresh state once again
149 // reload our test subject to get it in a fresh state once again
147 shellLoader.active = true
150 shellLoader.active = true
148
151
@@ -169,8 +172,9 @@ Row {
169
172
170 // wait until the animation has finished
173 // wait until the animation has finished
171 tryCompare(greeter, "showProgress", 0);
174 tryCompare(greeter, "showProgress", 0);
175+ }
172
176
173− // and for pin to be ready
177+ function waitForLockscreen() {
174 var lockscreen = findChild(shell, "lockscreen");
178 var lockscreen = findChild(shell, "lockscreen");
175 var pinPadLoader = findChild(lockscreen, "pinPadLoader");
179 var pinPadLoader = findChild(lockscreen, "pinPadLoader");
176 tryCompare(pinPadLoader, "status", Loader.Ready)
180 tryCompare(pinPadLoader, "status", Loader.Ready)
@@ -193,6 +197,24 @@ Row {
193 tryCompare(sessionSpy, "count", 1)
197 tryCompare(sessionSpy, "count", 1)
194 }
198 }
195
199
200+ function test_edgeDemoHidesLockscreen() {
201+ LightDM.Greeter.showGreeter()
202+ sessionSpy.clear()
203+ var lockscreen = findChild(shell, "lockscreen")
204+
205+ tryCompare(lockscreen, "shown", true)
206+ AccountsService.demoEdges = true
207+ tryCompare(lockscreen, "shown", false)
208+
209+ swipeAwayGreeter()
210+ tryCompare(sessionSpy, "count", 1)
211+
212+ // Lockscreen is only hidden by right edge demo, which we got rid
213+ // of above, so if we show greeter again, lockscreen should appear
214+ LightDM.Greeter.showGreeter()
215+ tryCompare(lockscreen, "shown", true)
216+ }
217+
196 function test_disabledEdges() {
218 function test_disabledEdges() {
197 var launcher = findChild(shell, "launcher")
219 var launcher = findChild(shell, "launcher")
198 tryCompare(launcher, "available", true)
220 tryCompare(launcher, "available", true)
tests/qmltests/tst_TabletShell.qml+10−2
@@ -16,6 +16,7 @@
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18import QtTest 1.0
18import QtTest 1.0
19+import AccountsService 0.1
19import GSettings 1.0
20import GSettings 1.0
20import LightDM 0.1 as LightDM
21import LightDM 0.1 as LightDM
21import Ubuntu.Components 1.1
22import Ubuntu.Components 1.1
@@ -142,6 +143,7 @@ Row {
142 killApps()
143 killApps()
143
144
144 unlockAllModemsSpy.clear()
145 unlockAllModemsSpy.clear()
146+ AccountsService.demoEdges = false
145
147
146 // reload our test subject to get it in a fresh state once again
148 // reload our test subject to get it in a fresh state once again
147 shellLoader.active = true
149 shellLoader.active = true
@@ -271,13 +273,19 @@ Row {
271
273
272 function test_leftEdgeDrag_data() {
274 function test_leftEdgeDrag_data() {
273 return [
275 return [
274− {tag: "without password", user: "no-password", loggedIn: true},
276+ {tag: "without password", user: "no-password", loggedIn: true, demo: false},
275− {tag: "with password", user: "has-password", loggedIn: false},
277+ {tag: "with password", user: "has-password", loggedIn: false, demo: false},
278+ {tag: "with demo", user: "has-password", loggedIn: true, demo: true},
276 ]
279 ]
277 }
280 }
278
281
279 function test_leftEdgeDrag(data) {
282 function test_leftEdgeDrag(data) {
280 selectUser(data.user)
283 selectUser(data.user)
284+
285+ AccountsService.demoEdges = data.demo
286+ var edgeDemo = findChild(shell, "edgeDemo")
287+ tryCompare(edgeDemo, "greeterDemoRunning", data.demo)
288+
281 swipeFromLeftEdge(shell.width * 0.75)
289 swipeFromLeftEdge(shell.width * 0.75)
282 confirmLoggedIn(data.loggedIn)
290 confirmLoggedIn(data.loggedIn)
283 }
291 }