on xenial help sign in
Pay attention to StatsWelcomeScreen setting and disable infographic on greeter if requested
e6dbf00Michael Terry
Greeter/GreeterContent.qml+9−4
@@ -134,18 +134,23 @@ MouseArea {
134
134
135 Infographics {
135 Infographics {
136 id: infographics
136 id: infographics
137+ objectName: "infographics"
137 height: narrowMode ? parent.height : 0.75 * parent.height
138 height: narrowMode ? parent.height : 0.75 * parent.height
138 model: greeterContentLoader.infographicModel
139 model: greeterContentLoader.infographicModel
139
140
141+ property string selectedUser
142+ property string infographicUser: AccountsService.statsWelcomeScreen ? selectedUser : ""
143+ onInfographicUserChanged: updateUsername()
144+
140− Component.onCompleted: infographics.updateUsername(greeterContentLoader.currentIndex)
145+ Component.onCompleted: selectedUser = greeterContentLoader.model.data(greeterContentLoader.currentIndex, LightDM.UserRoles.NameRole)
141
146
142 Connections {
147 Connections {
143 target: root
148 target: root
144− onSelected: infographics.updateUsername(uid)
149+ onSelected: infographics.selectedUser = greeterContentLoader.model.data(uid, LightDM.UserRoles.NameRole)
145 }
150 }
146
151
147− function updateUsername(uid) {
152+ function updateUsername() {
148− greeterContentLoader.infographicModel.username = greeterContentLoader.model.data(uid, LightDM.UserRoles.NameRole)
153+ greeterContentLoader.infographicModel.username = infographicUser;
149 greeterContentLoader.infographicModel.readyForDataChangeSlot();
154 greeterContentLoader.infographicModel.readyForDataChangeSlot();
150 }
155 }
151
156
Greeter/Infographics.qml+8−1
@@ -29,13 +29,20 @@ Item {
29 Connections {
29 Connections {
30 target: model
30 target: model
31
31
32+ property bool appeared: false
33+
34+ onDataAboutToAppear: {
35+ // Don't 'hide' on first appearance, since there is no content yet
36+ if (appeared) startHideAnimation() // hide "no data" label
37+ appeared = true
38+ }
32 onDataAppeared: startShowAnimation()
39 onDataAppeared: startShowAnimation()
33
40
34 onDataAboutToChange: startHideAnimation()
41 onDataAboutToChange: startHideAnimation()
35−
36 onDataChanged: startShowAnimation()
42 onDataChanged: startShowAnimation()
37
43
38 onDataAboutToDisappear: startHideAnimation()
44 onDataAboutToDisappear: startHideAnimation()
45+ onDataDisappeared: startShowAnimation() // show "no data" label
39 }
46 }
40
47
41 function startShowAnimation() {
48 function startShowAnimation() {
plugins/AccountsService/AccountsBindings.cpp+19
@@ -37,6 +37,7 @@ void AccountsBindings::setUser(const QString &user)
37 m_user = user;
37 m_user = user;
38 updateDemoEdges();
38 updateDemoEdges();
39 updateBackgroundFile();
39 updateBackgroundFile();
40+ updateStatsWelcomeScreen();
40}
41}
41
42
42bool AccountsBindings::getDemoEdges()
43bool AccountsBindings::getDemoEdges()
@@ -55,6 +56,11 @@ QString AccountsBindings::getBackgroundFile()
55 return m_backgroundFile;
56 return m_backgroundFile;
56}
57}
57
58
59+bool AccountsBindings::getStatsWelcomeScreen()
60+{
61+ return m_statsWelcomeScreen;
62+}
63+
58void AccountsBindings::updateDemoEdges()
64void AccountsBindings::updateDemoEdges()
59{
65{
60 auto demoEdges = m_service->getUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges").toBool();
66 auto demoEdges = m_service->getUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges").toBool();
@@ -73,6 +79,15 @@ void AccountsBindings::updateBackgroundFile()
73 }
79 }
74}
80}
75
81
82+void AccountsBindings::updateStatsWelcomeScreen()
83+{
84+ auto statsWelcomeScreen = m_service->getUserProperty(m_user, "com.ubuntu.touch.AccountsService.SecurityPrivacy", "StatsWelcomeScreen").toBool();
85+ if (m_statsWelcomeScreen != statsWelcomeScreen) {
86+ m_statsWelcomeScreen = statsWelcomeScreen;
87+ Q_EMIT statsWelcomeScreenChanged();
88+ }
89+}
90+
76void AccountsBindings::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
91void AccountsBindings::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
77{
92{
78 if (m_user != user) {
93 if (m_user != user) {
@@ -83,6 +98,10 @@ void AccountsBindings::propertiesChanged(const QString &user, const QString &int
83 if (changed.contains("demo-edges")) {
98 if (changed.contains("demo-edges")) {
84 updateDemoEdges();
99 updateDemoEdges();
85 }
100 }
101+ } else if (interface == "com.ubuntu.touch.AccountsService.SecurityPrivacy") {
102+ if (changed.contains("StatsWelcomeScreen")) {
103+ updateStatsWelcomeScreen();
104+ }
86 }
105 }
87}
106}
88
107
plugins/AccountsService/AccountsBindings.h+7
@@ -34,6 +34,9 @@ class AccountsBindings: public QObject
34 Q_PROPERTY (QString backgroundFile
34 Q_PROPERTY (QString backgroundFile
35 READ getBackgroundFile
35 READ getBackgroundFile
36 NOTIFY backgroundFileChanged)
36 NOTIFY backgroundFileChanged)
37+ Q_PROPERTY (bool statsWelcomeScreen
38+ READ getStatsWelcomeScreen
39+ NOTIFY statsWelcomeScreenChanged)
37
40
38public:
41public:
39 explicit AccountsBindings(QObject *parent = 0);
42 explicit AccountsBindings(QObject *parent = 0);
@@ -43,10 +46,12 @@ public:
43 bool getDemoEdges();
46 bool getDemoEdges();
44 void setDemoEdges(bool demoEdges);
47 void setDemoEdges(bool demoEdges);
45 QString getBackgroundFile();
48 QString getBackgroundFile();
49+ bool getStatsWelcomeScreen();
46
50
47Q_SIGNALS:
51Q_SIGNALS:
48 void demoEdgesChanged();
52 void demoEdgesChanged();
49 void backgroundFileChanged();
53 void backgroundFileChanged();
54+ void statsWelcomeScreenChanged();
50
55
51private Q_SLOTS:
56private Q_SLOTS:
52 void propertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
57 void propertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
@@ -55,11 +60,13 @@ private Q_SLOTS:
55private:
60private:
56 void updateDemoEdges();
61 void updateDemoEdges();
57 void updateBackgroundFile();
62 void updateBackgroundFile();
63+ void updateStatsWelcomeScreen();
58
64
59 AccountsService *m_service;
65 AccountsService *m_service;
60 QString m_user;
66 QString m_user;
61 bool m_demoEdges;
67 bool m_demoEdges;
62 QString m_backgroundFile;
68 QString m_backgroundFile;
69+ bool m_statsWelcomeScreen;
63};
70};
64
71
65#endif
72#endif
tests/mocks/AccountsService/AccountsBindings.cpp+13−1
@@ -19,7 +19,8 @@
19#include "AccountsBindings.h"
19#include "AccountsBindings.h"
20
20
21AccountsBindings::AccountsBindings(QObject* parent)
21AccountsBindings::AccountsBindings(QObject* parent)
22− : QObject(parent)
22+ : QObject(parent),
23+ m_statsWelcomeScreen(true)
23{
24{
24}
25}
25
26
@@ -40,3 +41,14 @@ QString AccountsBindings::getBackgroundFile()
40{
41{
41 return TOP_SRCDIR "/graphics/phone_background.jpg";
42 return TOP_SRCDIR "/graphics/phone_background.jpg";
42}
43}
44+
45+bool AccountsBindings::getStatsWelcomeScreen()
46+{
47+ return m_statsWelcomeScreen;
48+}
49+
50+void AccountsBindings::setStatsWelcomeScreen(bool statsWelcomeScreen)
51+{
52+ m_statsWelcomeScreen = statsWelcomeScreen;
53+ statsWelcomeScreenChanged();
54+}
tests/mocks/AccountsService/AccountsBindings.h+10
@@ -34,6 +34,10 @@ class AccountsBindings: public QObject
34 Q_PROPERTY (QString backgroundFile
34 Q_PROPERTY (QString backgroundFile
35 READ getBackgroundFile
35 READ getBackgroundFile
36 NOTIFY backgroundFileChanged)
36 NOTIFY backgroundFileChanged)
37+ Q_PROPERTY (bool statsWelcomeScreen
38+ READ getStatsWelcomeScreen
39+ WRITE setStatsWelcomeScreen // addition for testing
40+ NOTIFY statsWelcomeScreenChanged)
37
41
38public:
42public:
39 explicit AccountsBindings(QObject *parent = 0);
43 explicit AccountsBindings(QObject *parent = 0);
@@ -43,10 +47,16 @@ public:
43 bool getDemoEdges();
47 bool getDemoEdges();
44 void setDemoEdges(bool demoEdges);
48 void setDemoEdges(bool demoEdges);
45 QString getBackgroundFile();
49 QString getBackgroundFile();
50+ bool getStatsWelcomeScreen();
51+ void setStatsWelcomeScreen(bool statsWelcomeScreen);
46
52
47Q_SIGNALS:
53Q_SIGNALS:
48 void demoEdgesChanged();
54 void demoEdgesChanged();
49 void backgroundFileChanged();
55 void backgroundFileChanged();
56+ void statsWelcomeScreenChanged();
57+
58+private:
59+ bool m_statsWelcomeScreen;
50};
60};
51
61
52#endif
62#endif
tests/mocks/libusermetrics/UserMetrics.cpp+5−1
@@ -407,7 +407,11 @@ UserMetrics::~UserMetrics()
407
407
408QString UserMetrics::label() const
408QString UserMetrics::label() const
409{
409{
410+ if (d_ptr->m_label.isEmpty()) {
411+ return "No data";
412+ } else {
410− return d_ptr->m_label;
413+ return d_ptr->m_label;
414+ }
411}
415}
412
416
413QString UserMetrics::username() const
417QString UserMetrics::username() const
tests/qmltests/Greeter/tst_Infographics.qml+4−4
@@ -64,15 +64,15 @@ Item {
64
64
65 function test_set_username_data() {
65 function test_set_username_data() {
66 return [
66 return [
67− { username: "has-password" },
67+ { username: "has-password", label: "<b>19</b> minutes talk time" },
68− { username: "no-password" },
68+ { username: "two-factor", label: "No data" },
69− { username: "empty-name" }
69+ { username: "", label: "No data" },
70 ]
70 ]
71 }
71 }
72
72
73 function test_set_username(data) {
73 function test_set_username(data) {
74 infographicModel.username = data.username
74 infographicModel.username = data.username
75− tryCompare(label, "text", "<b>19</b> minutes talk time")
75+ tryCompare(label, "text", data.label)
76 }
76 }
77 }
77 }
78
78
tests/qmltests/Greeter/tst_Phone.qml+15
@@ -21,6 +21,7 @@ import "../../../Greeter"
21import Ubuntu.Components 0.1
21import Ubuntu.Components 0.1
22import LightDM 0.1 as LightDM
22import LightDM 0.1 as LightDM
23import Unity.Test 0.1 as UT
23import Unity.Test 0.1 as UT
24+import AccountsService 0.1
24
25
25Item {
26Item {
26 width: units.gu(60)
27 width: units.gu(60)
@@ -51,6 +52,10 @@ Item {
51 name: "Greeter"
52 name: "Greeter"
52 when: windowShown
53 when: windowShown
53
54
55+ function cleanup() {
56+ AccountsService.statsWelcomeScreen = true
57+ }
58+
54 function test_properties() {
59 function test_properties() {
55 compare(greeter.multiUser, false)
60 compare(greeter.multiUser, false)
56 compare(greeter.narrowMode, true)
61 compare(greeter.narrowMode, true)
@@ -102,5 +107,15 @@ Item {
102 // Wait until we're back to 0
107 // Wait until we're back to 0
103 tryCompareFunction(function() { return greeter.x;}, 0);
108 tryCompareFunction(function() { return greeter.x;}, 0);
104 }
109 }
110+
111+ function test_statsWelcomeScreen() {
112+ // Test logic in greeter that turns statsWelcomeScreen setting into infographic changes
113+ compare(AccountsService.statsWelcomeScreen, true)
114+ tryCompare(LightDM.Infographic, "username", "single")
115+ AccountsService.statsWelcomeScreen = false
116+ tryCompare(LightDM.Infographic, "username", "")
117+ AccountsService.statsWelcomeScreen = true
118+ tryCompare(LightDM.Infographic, "username", "single")
119+ }
105 }
120 }
106}
121}