on xenial help sign in
Listen to the system setting StatsWelcomeScreen, which tells us whether to show user-specific infographic data in the greeter. Fixes: https://bugs.launchpad.net/bugs/1207857.

Approved by PS Jenkins bot, Michael Zanetti.

commitb8d722a0900e431b7772652d28e636c002cf66b1 authorMichael Terry <michael.terry@canonical.com> dateThu 3 Oct 2013, 07:44 (13 years ago) parentaca9b0644a26d2
9 files changed+93−15
Greeter/GreeterContent.qml+11−7 Greeter/Infographics.qml+10−1 plugins/AccountsService/AccountsService.cpp+19 plugins/AccountsService/AccountsService.h+7 tests/mocks/AccountsService/AccountsService.cpp+13−1 tests/mocks/AccountsService/AccountsService.h+8 tests/mocks/libusermetrics/UserMetrics.cpp+6−2 tests/qmltests/Greeter/tst_Infographics.qml+4−4 tests/qmltests/Greeter/tst_Phone.qml+15
Greeter/GreeterContent.qml+11−7
@@ -135,19 +135,23 @@ MouseArea {
135135
136136 Infographics {
137137 id: infographics
138+ objectName: "infographics"
138139 height: narrowMode ? parent.height : 0.75 * parent.height
139140 model: greeterContentLoader.infographicModel
140141
141− Component.onCompleted: infographics.updateUsername(greeterContentLoader.currentIndex)
142+ property string selectedUser
143+ property string infographicUser: AccountsService.statsWelcomeScreen ? selectedUser : ""
144+ onInfographicUserChanged: greeterContentLoader.infographicModel.username = infographicUser
142145
143− Connections {
144− target: root
145− onSelected: infographics.updateUsername(uid)
146+ Component.onCompleted: {
147+ selectedUser = greeterContentLoader.model.data(greeterContentLoader.currentIndex, LightDM.UserRoles.NameRole)
148+ greeterContentLoader.infographicModel.username = infographicUser
149+ greeterContentLoader.infographicModel.readyForDataChange()
146150 }
147151
148− function updateUsername(uid) {
149− greeterContentLoader.infographicModel.username = greeterContentLoader.model.data(uid, LightDM.UserRoles.NameRole)
150− greeterContentLoader.infographicModel.readyForDataChangeSlot();
152+ Connections {
153+ target: root
154+ onSelected: infographics.selectedUser = greeterContentLoader.model.data(uid, LightDM.UserRoles.NameRole)
151155 }
152156
153157 anchors {
Greeter/Infographics.qml+10−1
@@ -29,21 +29,30 @@ Item {
2929 Connections {
3030 target: model
3131
32+ onDataAboutToAppear: startHideAnimation() // hide "no data" label
3233 onDataAppeared: startShowAnimation()
3334
3435 onDataAboutToChange: startHideAnimation()
35−
3636 onDataChanged: startShowAnimation()
3737
3838 onDataAboutToDisappear: startHideAnimation()
39+ onDataDisappeared: startShowAnimation() // show "no data" label
3940 }
4041
4142 function startShowAnimation() {
43+ dotHideAnimTimer.stop()
44+ circleShrinkAnimTimer.stop()
45+ notification.hideAnim.stop()
46+
4247 dotShowAnimTimer.startFromBeginning()
4348 notification.showAnim.start()
4449 }
4550
4651 function startHideAnimation() {
52+ dotShowAnimTimer.stop()
53+ circleGrowAnimTimer.stop()
54+ notification.showAnim.stop()
55+
4756 dotHideAnimTimer.startFromBeginning()
4857 notification.hideAnim.start()
4958 }
plugins/AccountsService/AccountsService.cpp+19
@@ -44,6 +44,7 @@ void AccountsService::setUser(const QString &user)
4444
4545 updateDemoEdges();
4646 updateBackgroundFile();
47+ updateStatsWelcomeScreen();
4748}
4849
4950bool AccountsService::demoEdges() const
@@ -62,6 +63,11 @@ QString AccountsService::backgroundFile() const
6263 return m_backgroundFile;
6364}
6465
66+bool AccountsService::statsWelcomeScreen() const
67+{
68+ return m_statsWelcomeScreen;
69+}
70+
6571void AccountsService::updateDemoEdges()
6672{
6773 auto demoEdges = m_service->getUserProperty(m_user, "com.canonical.unity.AccountsService", "demo-edges").toBool();
@@ -80,6 +86,15 @@ void AccountsService::updateBackgroundFile()
8086 }
8187}
8288
89+void AccountsService::updateStatsWelcomeScreen()
90+{
91+ bool statsWelcomeScreen = m_service->getUserProperty(m_user, "com.ubuntu.touch.AccountsService.SecurityPrivacy", "StatsWelcomeScreen").toBool();
92+ if (m_statsWelcomeScreen != statsWelcomeScreen) {
93+ m_statsWelcomeScreen = statsWelcomeScreen;
94+ Q_EMIT statsWelcomeScreenChanged();
95+ }
96+}
97+
8398void AccountsService::propertiesChanged(const QString &user, const QString &interface, const QStringList &changed)
8499{
85100 if (m_user != user) {
@@ -90,6 +105,10 @@ void AccountsService::propertiesChanged(const QString &user, const QString &inte
90105 if (changed.contains("demo-edges")) {
91106 updateDemoEdges();
92107 }
108+ } else if (interface == "com.ubuntu.touch.AccountsService.SecurityPrivacy") {
109+ if (changed.contains("StatsWelcomeScreen")) {
110+ updateStatsWelcomeScreen();
111+ }
93112 }
94113}
95114
plugins/AccountsService/AccountsService.h+7
@@ -38,6 +38,9 @@ class AccountsService: public QObject
3838 Q_PROPERTY (QString backgroundFile
3939 READ backgroundFile
4040 NOTIFY backgroundFileChanged)
41+ Q_PROPERTY (bool statsWelcomeScreen
42+ READ statsWelcomeScreen
43+ NOTIFY statsWelcomeScreenChanged)
4144
4245public:
4346 explicit AccountsService(QObject *parent = 0);
@@ -47,11 +50,13 @@ public:
4750 bool demoEdges() const;
4851 void setDemoEdges(bool demoEdges);
4952 QString backgroundFile() const;
53+ bool statsWelcomeScreen() const;
5054
5155Q_SIGNALS:
5256 void userChanged();
5357 void demoEdgesChanged();
5458 void backgroundFileChanged();
59+ void statsWelcomeScreenChanged();
5560
5661private Q_SLOTS:
5762 void propertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
@@ -60,11 +65,13 @@ private Q_SLOTS:
6065private:
6166 void updateDemoEdges();
6267 void updateBackgroundFile();
68+ void updateStatsWelcomeScreen();
6369
6470 AccountsServiceDBusAdaptor *m_service;
6571 QString m_user;
6672 bool m_demoEdges;
6773 QString m_backgroundFile;
74+ bool m_statsWelcomeScreen;
6875};
6976
7077#endif
tests/mocks/AccountsService/AccountsService.cpp+13−1
@@ -20,7 +20,8 @@
2020
2121AccountsService::AccountsService(QObject* parent)
2222 : QObject(parent),
23− m_backgroundFile(TOP_SRCDIR "/graphics/phone_background.jpg")
23+ m_backgroundFile(TOP_SRCDIR "/graphics/phone_background.jpg"),
24+ m_statsWelcomeScreen(true)
2425{
2526}
2627
@@ -54,3 +55,14 @@ void AccountsService::setBackgroundFile(const QString &backgroundFile)
5455 m_backgroundFile = backgroundFile;
5556 backgroundFileChanged();
5657}
58+
59+bool AccountsService::statsWelcomeScreen() const
60+{
61+ return m_statsWelcomeScreen;
62+}
63+
64+void AccountsService::setStatsWelcomeScreen(bool statsWelcomeScreen)
65+{
66+ m_statsWelcomeScreen = statsWelcomeScreen;
67+ statsWelcomeScreenChanged();
68+}
tests/mocks/AccountsService/AccountsService.h+8
@@ -39,6 +39,10 @@ class AccountsService: public QObject
3939 READ backgroundFile
4040 WRITE setBackgroundFile // only available in mock
4141 NOTIFY backgroundFileChanged)
42+ Q_PROPERTY (bool statsWelcomeScreen
43+ READ statsWelcomeScreen
44+ WRITE setStatsWelcomeScreen // only available in mock
45+ NOTIFY statsWelcomeScreenChanged)
4246
4347public:
4448 explicit AccountsService(QObject *parent = 0);
@@ -49,14 +53,18 @@ public:
4953 void setDemoEdges(bool demoEdges);
5054 QString backgroundFile() const;
5155 void setBackgroundFile(const QString &backgroundFile);
56+ bool statsWelcomeScreen() const;
57+ void setStatsWelcomeScreen(bool statsWelcomeScreen);
5258
5359Q_SIGNALS:
5460 void userChanged();
5561 void demoEdgesChanged();
5662 void backgroundFileChanged();
63+ void statsWelcomeScreenChanged();
5764
5865private:
5966 QString m_backgroundFile;
67+ bool m_statsWelcomeScreen;
6068};
6169
6270#endif
tests/mocks/libusermetrics/UserMetrics.cpp+6−2
@@ -228,7 +228,7 @@ UserMetricsPrivate::~UserMetricsPrivate()
228228
229229void UserMetricsPrivate::setUsername(const QString &username)
230230{
231− if (m_username == username) {
231+ if (m_username == username && m_newData) {
232232 return;
233233 }
234234
@@ -407,7 +407,11 @@ UserMetrics::~UserMetrics()
407407
408408QString UserMetrics::label() const
409409{
410− return d_ptr->m_label;
410+ if (d_ptr->m_label.isEmpty()) {
411+ return "No data";
412+ } else {
413+ return d_ptr->m_label;
414+ }
411415}
412416
413417QString UserMetrics::username() const
tests/qmltests/Greeter/tst_Infographics.qml+4−4
@@ -64,15 +64,15 @@ Item {
6464
6565 function test_set_username_data() {
6666 return [
67− { username: "has-password" },
68− { username: "no-password" },
69− { username: "empty-name" }
67+ { username: "has-password", label: "<b>19</b> minutes talk time" },
68+ { username: "two-factor", label: "No data" },
69+ { username: "", label: "No data" },
7070 ]
7171 }
7272
7373 function test_set_username(data) {
7474 infographicModel.username = data.username
75− tryCompare(label, "text", "<b>19</b> minutes talk time")
75+ tryCompare(label, "text", data.label)
7676 }
7777 }
7878
tests/qmltests/Greeter/tst_Phone.qml+15
@@ -19,6 +19,7 @@ import QtTest 1.0
1919import ".."
2020import "../../../Greeter"
2121import AccountsService 0.1
22+import LightDM 0.1 as LightDM
2223import Ubuntu.Components 0.1
2324import Unity.Test 0.1 as UT
2425
@@ -53,6 +54,10 @@ Item {
5354 name: "Greeter"
5455 when: windowShown
5556
57+ function cleanup() {
58+ AccountsService.statsWelcomeScreen = true
59+ }
60+
5661 function test_properties() {
5762 compare(greeter.multiUser, false)
5863 compare(greeter.narrowMode, true)
@@ -105,6 +110,16 @@ Item {
105110 tryCompareFunction(function() { return greeter.x;}, 0);
106111 }
107112
113+ function test_statsWelcomeScreen() {
114+ // Test logic in greeter that turns statsWelcomeScreen setting into infographic changes
115+ compare(AccountsService.statsWelcomeScreen, true)
116+ tryCompare(LightDM.Infographic, "username", "single")
117+ AccountsService.statsWelcomeScreen = false
118+ tryCompare(LightDM.Infographic, "username", "")
119+ AccountsService.statsWelcomeScreen = true
120+ tryCompare(LightDM.Infographic, "username", "single")
121+ }
122+
108123 function test_wallpaper_data() {
109124 return [
110125 {tag: "set", accounts: "../tests/data/unity/backgrounds/blue.png", expected: "blue.png"},