on xenial help sign in
Reverse default for the user option "allow launcher/panel in greeter when locked." And allow that property to be controlled by an AccountsService property. (LP: #1358340) Fixes: 1358340
bb8999cMichael Terry
debian/control+1−1
@@ -168,7 +168,7 @@ Package: unity8-private
168Architecture: any
168Architecture: any
169Multi-Arch: same
169Multi-Arch: same
170Pre-Depends: ${misc:Pre-Depends},
170Pre-Depends: ${misc:Pre-Depends},
171−Depends: accountsservice-ubuntu-schemas,
171+Depends: accountsservice-ubuntu-schemas (>= 0.0.3),
172 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
172 gsettings-ubuntu-schemas (>= 0.0.2+14.10.20140815),
173 libhardware2,
173 libhardware2,
174 libunity-core-6.0-9,
174 libunity-core-6.0-9,
plugins/AccountsService/AccountsService.cpp+38
@@ -26,6 +26,8 @@ AccountsService::AccountsService(QObject* parent)
26 m_service(new AccountsServiceDBusAdaptor(this)),
26 m_service(new AccountsServiceDBusAdaptor(this)),
27 m_user(qgetenv("USER")),
27 m_user(qgetenv("USER")),
28 m_demoEdges(false),
28 m_demoEdges(false),
29+ m_enableLauncherWhileLocked(false),
30+ m_enableIndicatorsWhileLocked(false),
29 m_statsWelcomeScreen(false),
31 m_statsWelcomeScreen(false),
30 m_passwordDisplayHint(Keyboard),
32 m_passwordDisplayHint(Keyboard),
31 m_failedLogins(0)
33 m_failedLogins(0)
@@ -47,6 +49,8 @@ void AccountsService::setUser(const QString &user)
47 Q_EMIT userChanged();
49 Q_EMIT userChanged();
48
50
49 updateDemoEdges();
51 updateDemoEdges();
52+ updateEnableLauncherWhileLocked();
53+ updateEnableIndicatorsWhileLocked();
50 updateBackgroundFile();
54 updateBackgroundFile();
51 updateStatsWelcomeScreen();
55 updateStatsWelcomeScreen();
52 updatePasswordDisplayHint();
56 updatePasswordDisplayHint();
@@ -64,6 +68,16 @@ void AccountsService::setDemoEdges(bool demoEdges)
64 m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges", demoEdges);
68 m_service->setUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges", demoEdges);
65}
69}
66
70
71+bool AccountsService::enableLauncherWhileLocked() const
72+{
73+ return m_enableLauncherWhileLocked;
74+}
75+
76+bool AccountsService::enableIndicatorsWhileLocked() const
77+{
78+ return m_enableIndicatorsWhileLocked;
79+}
80+
67QString AccountsService::backgroundFile() const
81QString AccountsService::backgroundFile() const
68{
82{
69 return m_backgroundFile;
83 return m_backgroundFile;
@@ -88,6 +102,24 @@ void AccountsService::updateDemoEdges()
88 }
102 }
89}
103}
90
104
105+void AccountsService::updateEnableLauncherWhileLocked()
106+{
107+ auto enableLauncherWhileLocked = m_service->getUserProperty(m_user, "com.ubuntu.AccountsService.SecurityPrivacy", "EnableLauncherWhileLocked").toBool();
108+ if (m_enableLauncherWhileLocked != enableLauncherWhileLocked) {
109+ m_enableLauncherWhileLocked = enableLauncherWhileLocked;
110+ Q_EMIT enableLauncherWhileLockedChanged();
111+ }
112+}
113+
114+void AccountsService::updateEnableIndicatorsWhileLocked()
115+{
116+ auto enableIndicatorsWhileLocked = m_service->getUserProperty(m_user, "com.ubuntu.AccountsService.SecurityPrivacy", "EnableIndicatorsWhileLocked").toBool();
117+ if (m_enableIndicatorsWhileLocked != enableIndicatorsWhileLocked) {
118+ m_enableIndicatorsWhileLocked = enableIndicatorsWhileLocked;
119+ Q_EMIT enableIndicatorsWhileLockedChanged();
120+ }
121+}
122+
91void AccountsService::updateBackgroundFile()
123void AccountsService::updateBackgroundFile()
92{
124{
93 auto backgroundFile = m_service->getUserProperty(m_user, "org.freedesktop.Accounts.User", "BackgroundFile").toString();
125 auto backgroundFile = m_service->getUserProperty(m_user, "org.freedesktop.Accounts.User", "BackgroundFile").toString();
@@ -157,6 +189,12 @@ void AccountsService::propertiesChanged(const QString &user, const QString &inte
157 if (changed.contains("PasswordDisplayHint")) {
189 if (changed.contains("PasswordDisplayHint")) {
158 updatePasswordDisplayHint();
190 updatePasswordDisplayHint();
159 }
191 }
192+ if (changed.contains("EnableLauncherWhileLocked")) {
193+ updateEnableLauncherWhileLocked();
194+ }
195+ if (changed.contains("EnableIndicatorsWhileLocked")) {
196+ updateEnableIndicatorsWhileLocked();
197+ }
160 }
198 }
161}
199}
162
200
plugins/AccountsService/AccountsService.h+14
@@ -36,6 +36,12 @@ class AccountsService: public QObject
36 READ demoEdges
36 READ demoEdges
37 WRITE setDemoEdges
37 WRITE setDemoEdges
38 NOTIFY demoEdgesChanged)
38 NOTIFY demoEdgesChanged)
39+ Q_PROPERTY (bool enableLauncherWhileLocked
40+ READ enableLauncherWhileLocked
41+ NOTIFY enableLauncherWhileLockedChanged)
42+ Q_PROPERTY (bool enableIndicatorsWhileLocked
43+ READ enableIndicatorsWhileLocked
44+ NOTIFY enableIndicatorsWhileLockedChanged)
39 Q_PROPERTY (QString backgroundFile
45 Q_PROPERTY (QString backgroundFile
40 READ backgroundFile
46 READ backgroundFile
41 NOTIFY backgroundFileChanged)
47 NOTIFY backgroundFileChanged)
@@ -62,6 +68,8 @@ public:
62 void setUser(const QString &user);
68 void setUser(const QString &user);
63 bool demoEdges() const;
69 bool demoEdges() const;
64 void setDemoEdges(bool demoEdges);
70 void setDemoEdges(bool demoEdges);
71+ bool enableLauncherWhileLocked() const;
72+ bool enableIndicatorsWhileLocked() const;
65 QString backgroundFile() const;
73 QString backgroundFile() const;
66 bool statsWelcomeScreen() const;
74 bool statsWelcomeScreen() const;
67 PasswordDisplayHint passwordDisplayHint() const;
75 PasswordDisplayHint passwordDisplayHint() const;
@@ -71,6 +79,8 @@ public:
71Q_SIGNALS:
79Q_SIGNALS:
72 void userChanged();
80 void userChanged();
73 void demoEdgesChanged();
81 void demoEdgesChanged();
82+ void enableLauncherWhileLockedChanged();
83+ void enableIndicatorsWhileLockedChanged();
74 void backgroundFileChanged();
84 void backgroundFileChanged();
75 void statsWelcomeScreenChanged();
85 void statsWelcomeScreenChanged();
76 void passwordDisplayHintChanged();
86 void passwordDisplayHintChanged();
@@ -82,6 +92,8 @@ private Q_SLOTS:
82
92
83private:
93private:
84 void updateDemoEdges();
94 void updateDemoEdges();
95+ void updateEnableLauncherWhileLocked();
96+ void updateEnableIndicatorsWhileLocked();
85 void updateBackgroundFile();
97 void updateBackgroundFile();
86 void updateStatsWelcomeScreen();
98 void updateStatsWelcomeScreen();
87 void updatePasswordDisplayHint();
99 void updatePasswordDisplayHint();
@@ -90,6 +102,8 @@ private:
90 AccountsServiceDBusAdaptor *m_service;
102 AccountsServiceDBusAdaptor *m_service;
91 QString m_user;
103 QString m_user;
92 bool m_demoEdges;
104 bool m_demoEdges;
105+ bool m_enableLauncherWhileLocked;
106+ bool m_enableIndicatorsWhileLocked;
93 QString m_backgroundFile;
107 QString m_backgroundFile;
94 bool m_statsWelcomeScreen;
108 bool m_statsWelcomeScreen;
95 PasswordDisplayHint m_passwordDisplayHint;
109 PasswordDisplayHint m_passwordDisplayHint;
qml/Shell.qml+2−2
@@ -506,7 +506,7 @@ Item {
506 anchors.fill: parent //because this draws indicator menus
506 anchors.fill: parent //because this draws indicator menus
507 indicators {
507 indicators {
508 hides: [launcher]
508 hides: [launcher]
509− available: edgeDemo.panelEnabled && !shell.locked
509+ available: edgeDemo.panelEnabled && (!shell.locked || AccountsService.enableIndicatorsWhileLocked) && greeter.fakeActiveForApp === ""
510 contentEnabled: edgeDemo.panelContentEnabled
510 contentEnabled: edgeDemo.panelContentEnabled
511 width: parent.width > units.gu(60) ? units.gu(40) : parent.width
511 width: parent.width > units.gu(60) ? units.gu(40) : parent.width
512 panelHeight: units.gu(3)
512 panelHeight: units.gu(3)
@@ -530,7 +530,7 @@ Item {
530 anchors.bottom: parent.bottom
530 anchors.bottom: parent.bottom
531 width: parent.width
531 width: parent.width
532 dragAreaWidth: shell.edgeSize
532 dragAreaWidth: shell.edgeSize
533− available: edgeDemo.launcherEnabled && !shell.locked
533+ available: edgeDemo.launcherEnabled && (!shell.locked || AccountsService.enableLauncherWhileLocked) && greeter.fakeActiveForApp === ""
534
534
535 onShowDashHome: showHome()
535 onShowDashHome: showHome()
536 onDash: showDash()
536 onDash: showDash()
tests/mocks/AccountsService/AccountsService.cpp+24
@@ -22,6 +22,8 @@
22
22
23AccountsService::AccountsService(QObject* parent)
23AccountsService::AccountsService(QObject* parent)
24 : QObject(parent),
24 : QObject(parent),
25+ m_enableLauncherWhileLocked(true),
26+ m_enableIndicatorsWhileLocked(true),
25 m_backgroundFile(qmlDirectory() + "graphics/phone_background.jpg"),
27 m_backgroundFile(qmlDirectory() + "graphics/phone_background.jpg"),
26 m_statsWelcomeScreen(true),
28 m_statsWelcomeScreen(true),
27 m_failedLogins(0)
29 m_failedLogins(0)
@@ -50,6 +52,28 @@ void AccountsService::setDemoEdges(bool demoEdges)
50 Q_UNUSED(demoEdges)
52 Q_UNUSED(demoEdges)
51}
53}
52
54
55+bool AccountsService::enableLauncherWhileLocked() const
56+{
57+ return m_enableLauncherWhileLocked;
58+}
59+
60+void AccountsService::setEnableLauncherWhileLocked(bool enableLauncherWhileLocked)
61+{
62+ m_enableLauncherWhileLocked = enableLauncherWhileLocked;
63+ Q_EMIT enableLauncherWhileLockedChanged();
64+}
65+
66+bool AccountsService::enableIndicatorsWhileLocked() const
67+{
68+ return m_enableIndicatorsWhileLocked;
69+}
70+
71+void AccountsService::setEnableIndicatorsWhileLocked(bool enableIndicatorsWhileLocked)
72+{
73+ m_enableIndicatorsWhileLocked = enableIndicatorsWhileLocked;
74+ Q_EMIT enableIndicatorsWhileLockedChanged();
75+}
76+
53QString AccountsService::backgroundFile() const
77QString AccountsService::backgroundFile() const
54{
78{
55 return m_backgroundFile;
79 return m_backgroundFile;
tests/mocks/AccountsService/AccountsService.h+16
@@ -36,6 +36,14 @@ class AccountsService: public QObject
36 READ demoEdges
36 READ demoEdges
37 WRITE setDemoEdges
37 WRITE setDemoEdges
38 NOTIFY demoEdgesChanged)
38 NOTIFY demoEdgesChanged)
39+ Q_PROPERTY (bool enableLauncherWhileLocked
40+ READ enableLauncherWhileLocked
41+ WRITE setEnableLauncherWhileLocked // only available in mock
42+ NOTIFY enableLauncherWhileLockedChanged)
43+ Q_PROPERTY (bool enableIndicatorsWhileLocked
44+ READ enableIndicatorsWhileLocked
45+ WRITE setEnableIndicatorsWhileLocked // only available in mock
46+ NOTIFY enableIndicatorsWhileLockedChanged)
39 Q_PROPERTY (QString backgroundFile
47 Q_PROPERTY (QString backgroundFile
40 READ backgroundFile
48 READ backgroundFile
41 WRITE setBackgroundFile // only available in mock
49 WRITE setBackgroundFile // only available in mock
@@ -64,6 +72,10 @@ public:
64 void setUser(const QString &user);
72 void setUser(const QString &user);
65 bool demoEdges() const;
73 bool demoEdges() const;
66 void setDemoEdges(bool demoEdges);
74 void setDemoEdges(bool demoEdges);
75+ bool enableLauncherWhileLocked() const;
76+ void setEnableLauncherWhileLocked(bool enableLauncherWhileLocked);
77+ bool enableIndicatorsWhileLocked() const;
78+ void setEnableIndicatorsWhileLocked(bool enableIndicatorsWhileLocked);
67 QString backgroundFile() const;
79 QString backgroundFile() const;
68 void setBackgroundFile(const QString &backgroundFile);
80 void setBackgroundFile(const QString &backgroundFile);
69 bool statsWelcomeScreen() const;
81 bool statsWelcomeScreen() const;
@@ -75,12 +87,16 @@ public:
75Q_SIGNALS:
87Q_SIGNALS:
76 void userChanged();
88 void userChanged();
77 void demoEdgesChanged();
89 void demoEdgesChanged();
90+ void enableLauncherWhileLockedChanged();
91+ void enableIndicatorsWhileLockedChanged();
78 void backgroundFileChanged();
92 void backgroundFileChanged();
79 void statsWelcomeScreenChanged();
93 void statsWelcomeScreenChanged();
80 void passwordDisplayHintChanged();
94 void passwordDisplayHintChanged();
81 void failedLoginsChanged();
95 void failedLoginsChanged();
82
96
83private:
97private:
98+ bool m_enableLauncherWhileLocked;
99+ bool m_enableIndicatorsWhileLocked;
84 QString m_backgroundFile;
100 QString m_backgroundFile;
85 QString m_user;
101 QString m_user;
86 bool m_statsWelcomeScreen;
102 bool m_statsWelcomeScreen;
tests/qmltests/tst_ShellWithPin.qml+10−5
@@ -90,6 +90,8 @@ Item {
90 swipeAwayGreeter()
90 swipeAwayGreeter()
91 shell.failedLoginsDelayAttempts = -1
91 shell.failedLoginsDelayAttempts = -1
92 maxRetriesTextField.text = "-1"
92 maxRetriesTextField.text = "-1"
93+ AccountsService.enableLauncherWhileLocked = true
94+ AccountsService.enableIndicatorsWhileLocked = true
93 }
95 }
94
96
95 function cleanup() {
97 function cleanup() {
@@ -145,9 +147,13 @@ Item {
145
147
146 function test_disabledEdges() {
148 function test_disabledEdges() {
147 var launcher = findChild(shell, "launcher")
149 var launcher = findChild(shell, "launcher")
150+ tryCompare(launcher, "available", true)
151+ AccountsService.enableLauncherWhileLocked = false
148 tryCompare(launcher, "available", false)
152 tryCompare(launcher, "available", false)
149
153
150 var indicators = findChild(shell, "indicators")
154 var indicators = findChild(shell, "indicators")
155+ tryCompare(indicators, "available", true)
156+ AccountsService.enableIndicatorsWhileLocked = false
151 tryCompare(indicators, "available", false)
157 tryCompare(indicators, "available", false)
152 }
158 }
153
159
@@ -165,12 +171,9 @@ Item {
165 tryCompare(greeter, "fakeActiveForApp", "dialer-app")
171 tryCompare(greeter, "fakeActiveForApp", "dialer-app")
166 tryCompare(lockscreen, "shown", false)
172 tryCompare(lockscreen, "shown", false)
167 tryCompare(panel, "fullscreenMode", true)
173 tryCompare(panel, "fullscreenMode", true)
168− tryCompare(stage, "spreadEnabled", false)
169−
170− // These are normally false anyway, but confirm they remain so in
171− // emergency mode.
172− tryCompare(launcher, "available", false)
173 tryCompare(indicators, "available", false)
174 tryCompare(indicators, "available", false)
175+ tryCompare(launcher, "available", false)
176+ tryCompare(stage, "spreadEnabled", false)
174
177
175 // Cancel emergency mode, and go back to normal
178 // Cancel emergency mode, and go back to normal
176 waitForRendering(greeter)
179 waitForRendering(greeter)
@@ -180,6 +183,8 @@ Item {
180 tryCompare(greeter, "fakeActiveForApp", "")
183 tryCompare(greeter, "fakeActiveForApp", "")
181 tryCompare(lockscreen, "shown", true)
184 tryCompare(lockscreen, "shown", true)
182 tryCompare(panel, "fullscreenMode", false)
185 tryCompare(panel, "fullscreenMode", false)
186+ tryCompare(indicators, "available", true)
187+ tryCompare(launcher, "available", true)
183 tryCompare(stage, "spreadEnabled", true)
188 tryCompare(stage, "spreadEnabled", true)
184 }
189 }
185
190