on xenial help sign in
Reload Infographics userdata when the day changes (LP: #1378814)

Approved by: Albert Astals Cid

commit7ed77a1582171fff1b359ebd891863d1887dbeba authorTomás Tormo <tomas.tormo@gmail.com> dateWed 9 Nov 2016, 15:07 (10 years ago) parentbb50476834dfb5
4 files changed+137−29
qml/Greeter/Infographics.qml+25−3 tests/mocks/libusermetrics/UserMetrics.cpp+33−13 tests/mocks/libusermetrics/UserMetrics.h+2 tests/qmltests/Greeter/tst_Infographics.qml+77−13
qml/Greeter/Infographics.qml+25−3
@@ -25,6 +25,8 @@ Item {
2525
2626 property int animDuration: 10
2727
28+ property int currentWeekDay
29+
2830 QtObject {
2931 id: d
3032 objectName: "infographicPrivate"
@@ -56,6 +58,24 @@ Item {
5658 onDataDisappeared: startShowAnimation() // show "no data" label
5759 }
5860
61+ LiveTimer {
62+ frequency: LiveTimer.Hour
63+ onTrigger: handleTimerTrigger()
64+ }
65+
66+ function handleTimerTrigger(){
67+ var today = new Date().getDay()
68+ if(infographic.currentWeekDay !== today){
69+ infographic.currentWeekDay = today
70+ reloadUserData();
71+ }
72+ }
73+
74+ function reloadUserData(){
75+ d.useDotAnimation = false
76+ infographic.model.nextDataSource()
77+ }
78+
5979 function startShowAnimation() {
6080 dotHideAnimTimer.stop()
6181 notification.hideAnim.stop()
@@ -81,7 +101,10 @@ Item {
81101
82102 visible: model.username !== ""
83103
84− Component.onCompleted: startShowAnimation()
104+ Component.onCompleted: {
105+ currentWeekDay = new Date().getDay()
106+ startShowAnimation()
107+ }
85108
86109 Item {
87110 id: dataCircle
@@ -405,8 +428,7 @@ Item {
405428
406429 onDoubleClicked: {
407430 if (!d.animating) {
408− d.useDotAnimation = false
409− infographic.model.nextDataSource()
431+ reloadUserData()
410432 }
411433 }
412434 }
tests/mocks/libusermetrics/UserMetrics.cpp+33−13
@@ -88,12 +88,16 @@ public:
8888 void setUsername(const QString &username);
8989
9090protected:
91+ void findAndSetUsername(const QString &username);
92+
9193 void nextFakeData();
9294
9395 void generateFakeData();
9496
9597 void loadFakeData();
9698
99+ void loadUserMetricsData();
100+
97101 void finishSetFakeData();
98102
99103private:
@@ -131,7 +135,7 @@ private:
131135}
132136
133137UserMetricsDataPrivate::UserMetricsDataPrivate(UserMetricsData *parent) :
134− q_ptr(parent), m_firstColor(this), m_secondColor(this)
138+ q_ptr(parent), m_label(""), m_firstColor(this), m_secondColor(this)
135139{
136140 m_length = calculateLength();
137141}
@@ -229,12 +233,8 @@ UserMetricsPrivate::~UserMetricsPrivate()
229233{
230234}
231235
232−void UserMetricsPrivate::setUsername(const QString &username)
236+void UserMetricsPrivate::findAndSetUsername(const QString &username)
233237{
234− if (m_username == username && m_newData) {
235− return;
236− }
237−
238238 m_username = username;
239239
240240 m_dataIndex = m_fakeData.constFind(m_username);
@@ -243,6 +243,16 @@ void UserMetricsPrivate::setUsername(const QString &username)
243243 m_dataIndex = m_fakeData.constFind("");
244244 }
245245
246+ m_newData = *m_dataIndex;
247+}
248+
249+void UserMetricsPrivate::setUsername(const QString &username)
250+{
251+ if (m_username == username && m_newData) {
252+ return;
253+ }
254+
255+ findAndSetUsername(username);
246256 loadFakeData();
247257
248258 q_ptr->usernameChanged(m_username);
@@ -332,7 +342,6 @@ void UserMetricsPrivate::generateFakeData()
332342
333343void UserMetricsPrivate::loadFakeData()
334344{
335− m_newData = *m_dataIndex;
336345
337346 bool oldLabelEmpty = m_label.isEmpty();
338347 bool newLabelEmpty = m_newData->label().isEmpty();
@@ -351,24 +360,28 @@ void UserMetricsPrivate::loadFakeData()
351360 // we emit no signal if the data has stayed empty
352361}
353362
354−void UserMetricsPrivate::finishSetFakeData()
363+void UserMetricsPrivate::loadUserMetricsData()
355364{
356− bool oldLabelEmpty = m_label.isEmpty();
357− bool newLabelEmpty = m_newData->label().isEmpty();
358−
359365 m_label = m_newData->label();
360366 m_firstColor = m_newData->firstColor();
361367 m_firstMonth.setVariantList(m_newData->firstMonth());
362368 m_secondColor = m_newData->secondColor();
363369 m_secondMonth.setVariantList(m_newData->secondMonth());
370+ m_currentDay = m_newData->length();
371+}
364372
373+void UserMetricsPrivate::finishSetFakeData()
374+{
375+ bool oldLabelEmpty = m_label.isEmpty();
376+ bool newLabelEmpty = m_newData->label().isEmpty();
365377 bool currentDayChanged = m_currentDay != m_newData->length();
366− m_currentDay = m_newData->length();
378+
379+ loadUserMetricsData();
367380
368381 q_ptr->labelChanged(m_label);
369382 if (currentDayChanged)
370383 {
371− q_ptr->currentDayChanged(m_currentDay);
384+ q_ptr->currentDayChanged(m_currentDay);
372385 }
373386
374387 if (oldLabelEmpty && !newLabelEmpty)
@@ -396,6 +409,7 @@ void UserMetricsPrivate::nextFakeData()
396409 }
397410 }
398411
412+ m_newData = *m_dataIndex;
399413 loadFakeData();
400414}
401415
@@ -464,6 +478,12 @@ void UserMetrics::readyForDataChangeSlot()
464478 d_ptr->finishSetFakeData();
465479}
466480
481+void UserMetrics::reset()
482+{
483+ d_ptr->findAndSetUsername("");
484+ d_ptr->loadUserMetricsData();
485+}
486+
467487/**
468488 * Factory methods
469489 */
tests/mocks/libusermetrics/UserMetrics.h+2
@@ -61,6 +61,8 @@ public:
6161
6262 QAbstractItemModel *secondMonth() const;
6363
64+ Q_INVOKABLE void reset();
65+
6466Q_SIGNALS:
6567 void labelChanged(const QString &label);
6668
tests/qmltests/Greeter/tst_Infographics.qml+77−13
@@ -38,15 +38,62 @@ Item {
3838 width: units.gu(120)
3939 height: units.gu(120)
4040
41+ Loader {
42+ id: loader
43+
44+ active: false
45+ anchors.fill: parent
46+
47+ property bool componentDestroyed: true
48+ sourceComponent: Component {
49+ Infographics {
50+ id: infographic
51+ width: loader.width
52+ height: loader.height
53+ model: infographicModel
54+
55+ Component.onDestruction: {
56+ loader.componentDestroyed = true
57+ }
58+ }
59+ }
60+ }
61+
4162 UT.UnityTestCase {
4263 name: "Infographics"
4364 when: windowShown
4465
45− property var dataCircle: findChild(infographic, "dataCircle")
46− property var dots: findChild(infographic, "dots")
47− property var label: findChild(infographic, "label")
48− property var presentCircles: findChild(infographic, "presentCircles")
49− property var pastCircles: findChild(infographic, "pastCircles")
66+ property var dataCircle
67+ property var dots
68+ property var label
69+ property var presentCircles
70+ property var pastCircles
71+ property var infographic
72+
73+ function reloadInfographic() {
74+ loader.active = false;
75+ tryCompare(loader, "status", Loader.Null);
76+ tryCompare(loader, "item", null);
77+ tryCompare(loader, "componentDestroyed", true);
78+ loader.active = true;
79+ tryCompare(loader, "status", Loader.Ready);
80+ loader.componentDestroyed = false
81+ infographic = loader.item
82+ }
83+
84+ function reloadModel() {
85+ infographicModel.reset()
86+ }
87+
88+ function init() {
89+ reloadModel()
90+ reloadInfographic()
91+ dataCircle = findChild(infographic, "dataCircle")
92+ dots = findChild(infographic, "dots")
93+ label = findChild(infographic, "label")
94+ presentCircles = findChild(infographic, "presentCircles")
95+ pastCircles = findChild(infographic, "pastCircles")
96+ }
5097
5198 function test_dot_states_data() {
5299 return [
@@ -74,9 +121,10 @@ Item {
74121
75122 function test_set_username_data() {
76123 return [
77− { username: "has-password", label: "<b>19</b> minutes talk time", visible: true },
78− { username: "two-factor", label: "", visible: true },
79− { username: "", label: "", visible: false },
124+ { username: "has-password", label: "<b>19</b> minutes talk time", visible: true },
125+ { username: "two-factor", label: "", visible: true },
126+ { username: "", label: "", visible: false },
127+
80128 ]
81129 }
82130
@@ -85,13 +133,29 @@ Item {
85133 tryCompare(label, "text", data.label)
86134 compare(infographic.visible, data.visible);
87135 }
88− }
89136
90− Infographics {
91− id: infographic
137+ function test_update_userdata_when_new_day_data()
138+ {
139+ return [
140+ { tag: "Same day", currentDayOffset: 0, label: "<b>19</b> minutes talk time" },
141+ { tag: "Different day", currentDayOffset: 1, label: "<b>33</b> messages today" },
142+ ]
143+ }
92144
93− anchors.fill: parent
94− model: infographicModel
145+ function test_update_userdata_when_new_day(data)
146+ {
147+ //Given
148+ var today = new Date().getDay()
149+ infographicModel.username = "single"
150+ infographic.currentWeekDay = (today - data.currentDayOffset)
151+
152+ //When
153+ infographic.handleTimerTrigger()
154+
155+ //Then
156+ tryCompare(infographic, "currentWeekDay", today)
157+ tryCompare(label, "text", data.label)
158+ }
95159 }
96160
97161 Dot { id: dot }