Merge lp:~fboucault/messaging-app/async_bottom_edge into lp:messaging-app
- async_bottom_edge
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Tiago Salem Herrmann |
Approved revision: | 576 |
Merged at revision: | 574 |
Proposed branch: | lp:~fboucault/messaging-app/async_bottom_edge |
Merge into: | lp:messaging-app |
Diff against target: |
294 lines (+108/-14) 7 files modified
debian/rules (+1/-1) src/qml/MainPage.qml (+9/-3) src/qml/MessagingBottomEdge.qml (+14/-5) src/qml/SettingsPage.qml (+5/-0) src/qml/messaging-app.qml (+73/-5) tests/qml/tst_DualSim.qml (+4/-0) tests/qml/tst_SingleSim.qml (+2/-0) |
To merge this branch: | bzr merge lp:~fboucault/messaging-app/async_bottom_edge |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Tiago Salem Herrmann (community) | Approve | ||
system-apps-ci-bot | continuous-integration | Needs Fixing | |
Bill Filler (community) | Needs Fixing | ||
Florian Boucault (community) | Needs Fixing | ||
PS Jenkins bot | continuous-integration | Pending | |
Review via email: mp+297334@code.launchpad.net |
Commit message
Always load MessagingBottomEdge asynchronously.
Saves around 1000ms at startup.
Description of the change
Always load MessagingBottomEdge asynchronously.
Saves around 1000ms at startup.
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
Florian Boucault (fboucault) wrote : | # |
From tiago's testing: "it breaks the use case where we can start messaging-app directly in the new message view via url dispatcher"
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:563
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Tiago Salem Herrmann (tiagosh) wrote : | # |
looks good now.
Thanks
Bill Filler (bfiller) wrote : | # |
This is not working correctly in 2 column mode, compared to shipping version. Found two issues, testing as follows:
Hardware: Arale
Changed the grid units to make arale go into 2 column mode when rotate:
create this file: /etc/ubuntu-
GRID_UNIT_PX=14
Tests:
1) rotate phone into landscape, causes 2 column mode
Expected results: no bottom edge hint in column 1, only + button on toolbar to create new page
Actual result: bottom edge hint displayed in column 1, invoking it brings up empty page
2) rotate phone into landscape, causes 2 column mode
-- select an existing conversation, verify thread view is open
-- press the + button from header
Expected results: thread view in column 2 is fully replaced with New Message view, "New Message" entry added to top of column 1
Actual results: thread view is not replaced (or partially replaced) in column 2, no "New Message" entry added to column 1
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:565
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
- 566. By Florian Boucault
-
Revert delaying QML compilation as it triggers a bug in QtQuick
- 567. By Florian Boucault
-
Do not call emptyStack too often as it is slower
- 568. By Florian Boucault
-
Do not show an empty page if we know another page will be loaded right after
- 569. By Florian Boucault
-
Clear the reference to the bottomEdge in the main page if it about to be destroyed.
Florian Boucault (fboucault) wrote : | # |
> This is not working correctly in 2 column mode, compared to shipping version.
> Found two issues, testing as follows:
>
> Hardware: Arale
> Changed the grid units to make arale go into 2 column mode when rotate:
> create this file: /etc/ubuntu-
> GRID_UNIT_PX=14
>
> Tests:
> 1) rotate phone into landscape, causes 2 column mode
> Expected results: no bottom edge hint in column 1, only + button on toolbar to
> create new page
> Actual result: bottom edge hint displayed in column 1, invoking it brings up
> empty page
>
> 2) rotate phone into landscape, causes 2 column mode
> -- select an existing conversation, verify thread view is open
> -- press the + button from header
> Expected results: thread view in column 2 is fully replaced with New Message
> view, "New Message" entry added to top of column 1
> Actual results: thread view is not replaced (or partially replaced) in column
> 2, no "New Message" entry added to column 1
Both issues should be resolved now. One of them was caused by https:/
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:569
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
- 570. By Florian Boucault
-
reverted latest commit
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:570
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
- 571. By Florian Boucault
-
reverted latest commit
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:571
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
- 572. By Florian Boucault
-
more robust tests
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:572
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
- 573. By Florian Boucault
-
ensure that bottomEdge is set only when a single instance exists
- 574. By Florian Boucault
-
Simplified bottom edge queue
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:573
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:574
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
- 575. By Florian Boucault
-
Document queuing behaviour
Florian Boucault (fboucault) wrote : | # |
Should be good to go now
- 576. By Florian Boucault
-
Merged from trunk
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:575
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:576
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
FAILURE: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Tiago Salem Herrmann (tiagosh) wrote : | # |
Just verified that all bugs found by bill are fixed.
Tested on arale.
Could not find any other regression.
Looks good to me.
Preview Diff
1 | === modified file 'debian/rules' | |||
2 | --- debian/rules 2016-06-24 13:46:28 +0000 | |||
3 | +++ debian/rules 2016-07-12 08:56:26 +0000 | |||
4 | @@ -10,7 +10,7 @@ | |||
5 | 10 | DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) | 10 | DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) |
6 | 11 | # Skip tests on the archs they are known to be flaky with current configuration | 11 | # Skip tests on the archs they are known to be flaky with current configuration |
7 | 12 | # Ref.: https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/1585942 | 12 | # Ref.: https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/1585942 |
9 | 13 | testskip_architectures := arm64 | 13 | testskip_architectures := arm64 s390x |
10 | 14 | 14 | ||
11 | 15 | %: | 15 | %: |
12 | 16 | dh $@ --parallel --fail-missing --with translations | 16 | dh $@ --parallel --fail-missing --with translations |
13 | 17 | 17 | ||
14 | === modified file 'src/qml/MainPage.qml' | |||
15 | --- src/qml/MainPage.qml 2016-05-23 13:02:03 +0000 | |||
16 | +++ src/qml/MainPage.qml 2016-07-12 08:56:26 +0000 | |||
17 | @@ -96,7 +96,7 @@ | |||
18 | 96 | text: i18n.tr("Settings") | 96 | text: i18n.tr("Settings") |
19 | 97 | iconName: "settings" | 97 | iconName: "settings" |
20 | 98 | onTriggered: { | 98 | onTriggered: { |
22 | 99 | emptyStack() | 99 | emptyStack(false) |
23 | 100 | pageStack.addFileToNextColumnSync(mainPage, Qt.resolvedUrl("SettingsPage.qml")) | 100 | pageStack.addFileToNextColumnSync(mainPage, Qt.resolvedUrl("SettingsPage.qml")) |
24 | 101 | } | 101 | } |
25 | 102 | }, | 102 | }, |
26 | @@ -229,7 +229,8 @@ | |||
27 | 229 | section.delegate: searching && searchField.text !== "" ? null : sectionDelegate | 229 | section.delegate: searching && searchField.text !== "" ? null : sectionDelegate |
28 | 230 | header: ListItem.Standard { | 230 | header: ListItem.Standard { |
29 | 231 | id: newItem | 231 | id: newItem |
31 | 232 | height: mainView.bottomEdge.status === BottomEdge.Committed && | 232 | height: mainView.bottomEdge && |
32 | 233 | mainView.bottomEdge.status === BottomEdge.Committed && | ||
33 | 233 | !mainView.bottomEdge.showingConversation && | 234 | !mainView.bottomEdge.showingConversation && |
34 | 234 | mainView.dualPanel ? units.gu(10) : 0 | 235 | mainView.dualPanel ? units.gu(10) : 0 |
35 | 235 | text: i18n.tr("New message") | 236 | text: i18n.tr("New message") |
36 | @@ -281,7 +282,7 @@ | |||
37 | 281 | if (displayedEvent != null) { | 282 | if (displayedEvent != null) { |
38 | 282 | properties["scrollToEventId"] = displayedEvent.eventId | 283 | properties["scrollToEventId"] = displayedEvent.eventId |
39 | 283 | } | 284 | } |
41 | 284 | emptyStack() | 285 | emptyStack(false) |
42 | 285 | mainStack.addComponentToNextColumnSync(mainPage, messagesWithBottomEdge, properties) | 286 | mainStack.addComponentToNextColumnSync(mainPage, messagesWithBottomEdge, properties) |
43 | 286 | 287 | ||
44 | 287 | // mark this item as current | 288 | // mark this item as current |
45 | @@ -326,6 +327,11 @@ | |||
46 | 326 | Loader { | 327 | Loader { |
47 | 327 | id: bottomEdgeLoader | 328 | id: bottomEdgeLoader |
48 | 328 | active: !selectionMode && !searching && !mainView.dualPanel | 329 | active: !selectionMode && !searching && !mainView.dualPanel |
49 | 330 | asynchronous: true | ||
50 | 331 | /* FIXME: would be even more efficient to use setSource() to | ||
51 | 332 | delay the compilation step but a bug in Qt prevents us. | ||
52 | 333 | Ref.: https://bugreports.qt.io/browse/QTBUG-54657 | ||
53 | 334 | */ | ||
54 | 329 | sourceComponent: MessagingBottomEdge { | 335 | sourceComponent: MessagingBottomEdge { |
55 | 330 | parent: mainPage | 336 | parent: mainPage |
56 | 331 | } | 337 | } |
57 | 332 | 338 | ||
58 | === modified file 'src/qml/MessagingBottomEdge.qml' | |||
59 | --- src/qml/MessagingBottomEdge.qml 2016-05-02 18:35:28 +0000 | |||
60 | +++ src/qml/MessagingBottomEdge.qml 2016-07-12 08:56:26 +0000 | |||
61 | @@ -23,7 +23,9 @@ | |||
62 | 23 | id: bottomEdge | 23 | id: bottomEdge |
63 | 24 | 24 | ||
64 | 25 | function commitWithProperties(properties) { | 25 | function commitWithProperties(properties) { |
66 | 26 | _realPage.destroy() | 26 | if (_realPage) { |
67 | 27 | _realPage.destroy() | ||
68 | 28 | } | ||
69 | 27 | _realPage = messagesComponent.createObject(null, properties) | 29 | _realPage = messagesComponent.createObject(null, properties) |
70 | 28 | commit() | 30 | commit() |
71 | 29 | } | 31 | } |
72 | @@ -42,16 +44,23 @@ | |||
73 | 42 | } | 44 | } |
74 | 43 | 45 | ||
75 | 44 | Component.onCompleted: { | 46 | Component.onCompleted: { |
78 | 45 | mainView.bottomEdge = bottomEdge | 47 | if (!_realPage) { |
79 | 46 | _realPage = messagesComponent.createObject(null) | 48 | _realPage = messagesComponent.createObject(null) |
80 | 49 | } | ||
81 | 50 | mainView.setBottomEdge(bottomEdge) | ||
82 | 47 | } | 51 | } |
83 | 48 | 52 | ||
84 | 49 | Component.onDestruction: { | 53 | Component.onDestruction: { |
86 | 50 | _realPage.destroy() | 54 | mainView.unsetBottomEdge(bottomEdge) |
87 | 55 | if (_realPage) { | ||
88 | 56 | _realPage.destroy() | ||
89 | 57 | } | ||
90 | 51 | } | 58 | } |
91 | 52 | 59 | ||
92 | 53 | onCollapseCompleted: { | 60 | onCollapseCompleted: { |
94 | 54 | _realPage.destroy() | 61 | if (_realPage) { |
95 | 62 | _realPage.destroy() | ||
96 | 63 | } | ||
97 | 55 | _realPage = messagesComponent.createObject(null) | 64 | _realPage = messagesComponent.createObject(null) |
98 | 56 | } | 65 | } |
99 | 57 | 66 | ||
100 | 58 | 67 | ||
101 | === modified file 'src/qml/SettingsPage.qml' | |||
102 | --- src/qml/SettingsPage.qml 2016-03-22 13:52:47 +0000 | |||
103 | +++ src/qml/SettingsPage.qml 2016-07-12 08:56:26 +0000 | |||
104 | @@ -110,6 +110,11 @@ | |||
105 | 110 | Loader { | 110 | Loader { |
106 | 111 | id: messagesBottomEdgeLoader | 111 | id: messagesBottomEdgeLoader |
107 | 112 | active: mainView.dualPanel | 112 | active: mainView.dualPanel |
108 | 113 | asynchronous: true | ||
109 | 114 | /* FIXME: would be even more efficient to use setSource() to | ||
110 | 115 | delay the compilation step but a bug in Qt prevents us. | ||
111 | 116 | Ref.: https://bugreports.qt.io/browse/QTBUG-54657 | ||
112 | 117 | */ | ||
113 | 113 | sourceComponent: MessagingBottomEdge { | 118 | sourceComponent: MessagingBottomEdge { |
114 | 114 | id: messagesBottomEdge | 119 | id: messagesBottomEdge |
115 | 115 | parent: settingsPage | 120 | parent: settingsPage |
116 | 116 | 121 | ||
117 | === modified file 'src/qml/messaging-app.qml' | |||
118 | --- src/qml/messaging-app.qml 2016-05-04 19:36:27 +0000 | |||
119 | +++ src/qml/messaging-app.qml 2016-07-12 08:56:26 +0000 | |||
120 | @@ -50,6 +50,44 @@ | |||
121 | 50 | 50 | ||
122 | 51 | activeFocusOnPress: false | 51 | activeFocusOnPress: false |
123 | 52 | 52 | ||
124 | 53 | /* Multiple MessagingBottomEdge instances can be created simultaneously | ||
125 | 54 | and ask to become the unique 'bottomEdge'. | ||
126 | 55 | Queue the requests until only one MessagingBottomEdge instance is left. | ||
127 | 56 | */ | ||
128 | 57 | property var bottomEdgeQueue: [] | ||
129 | 58 | function setBottomEdge(newBottomEdge) { | ||
130 | 59 | /* If the queue is empty and no other bottom edge is set then | ||
131 | 60 | set 'bottomEdge' to newBottomEdge. Otherwise insert newBottomEdge | ||
132 | 61 | in the queue | ||
133 | 62 | */ | ||
134 | 63 | if (!bottomEdge && bottomEdgeQueue.length == 0) { | ||
135 | 64 | bottomEdge = newBottomEdge; | ||
136 | 65 | } else { | ||
137 | 66 | if (bottomEdge) { | ||
138 | 67 | bottomEdgeQueue.unshift(bottomEdge) | ||
139 | 68 | bottomEdge = null | ||
140 | 69 | } | ||
141 | 70 | bottomEdgeQueue.push(newBottomEdge) | ||
142 | 71 | } | ||
143 | 72 | } | ||
144 | 73 | |||
145 | 74 | function unsetBottomEdge(oldBottomEdge) { | ||
146 | 75 | /* Remove all references to oldBottomEdge (from the queue and from 'bottomEdge') | ||
147 | 76 | If only one bottom edge remains in the queue then set 'bottomEdge' to it | ||
148 | 77 | */ | ||
149 | 78 | if (bottomEdge == oldBottomEdge) { | ||
150 | 79 | bottomEdge = null; | ||
151 | 80 | } else { | ||
152 | 81 | var index = bottomEdgeQueue.indexOf(oldBottomEdge); | ||
153 | 82 | if (index != -1) { | ||
154 | 83 | bottomEdgeQueue.splice(index, 1); | ||
155 | 84 | if (bottomEdgeQueue.length == 1) { | ||
156 | 85 | bottomEdge = bottomEdgeQueue.pop(); | ||
157 | 86 | } | ||
158 | 87 | } | ||
159 | 88 | } | ||
160 | 89 | } | ||
161 | 90 | |||
162 | 53 | function defaultPhoneAccount() { | 91 | function defaultPhoneAccount() { |
163 | 54 | // we only use the default account property if we have more | 92 | // we only use the default account property if we have more |
164 | 55 | // than one account, otherwise we use always the first one | 93 | // than one account, otherwise we use always the first one |
165 | @@ -131,8 +169,22 @@ | |||
166 | 131 | threadModel.removeThreads(threads); | 169 | threadModel.removeThreads(threads); |
167 | 132 | } | 170 | } |
168 | 133 | 171 | ||
169 | 172 | property var pendingCommitProperties | ||
170 | 173 | function bottomEdgeCommit() { | ||
171 | 174 | if (bottomEdge) { | ||
172 | 175 | mainView.onBottomEdgeChanged.disconnect(bottomEdgeCommit); | ||
173 | 176 | bottomEdge.commitWithProperties(pendingCommitProperties); | ||
174 | 177 | pendingCommitProperties = null; | ||
175 | 178 | } | ||
176 | 179 | } | ||
177 | 180 | |||
178 | 134 | function showBottomEdgePage(properties) { | 181 | function showBottomEdgePage(properties) { |
180 | 135 | bottomEdge.commitWithProperties(properties) | 182 | pendingCommitProperties = properties; |
181 | 183 | if (bottomEdge) { | ||
182 | 184 | bottomEdgeCommit(); | ||
183 | 185 | } else { | ||
184 | 186 | mainView.onBottomEdgeChanged.connect(bottomEdgeCommit); | ||
185 | 187 | } | ||
186 | 136 | } | 188 | } |
187 | 137 | 189 | ||
188 | 138 | Connections { | 190 | Connections { |
189 | @@ -230,11 +282,14 @@ | |||
190 | 230 | return ContentType.Unknown | 282 | return ContentType.Unknown |
191 | 231 | } | 283 | } |
192 | 232 | 284 | ||
194 | 233 | function emptyStack() { | 285 | function emptyStack(showEmpty) { |
195 | 286 | if (typeof showEmpty === 'undefined') { showEmpty = true; } | ||
196 | 234 | mainView.emptyStackRequested() | 287 | mainView.emptyStackRequested() |
197 | 235 | mainStack.removePage(mainPage) | 288 | mainStack.removePage(mainPage) |
198 | 236 | layout.deleteInstances() | 289 | layout.deleteInstances() |
200 | 237 | showEmptyState() | 290 | if (showEmpty) { |
201 | 291 | showEmptyState() | ||
202 | 292 | } | ||
203 | 238 | mainPage.displayedThreadIndex = -1 | 293 | mainPage.displayedThreadIndex = -1 |
204 | 239 | } | 294 | } |
205 | 240 | 295 | ||
206 | @@ -290,7 +345,7 @@ | |||
207 | 290 | properties["accountId"] = accountId | 345 | properties["accountId"] = accountId |
208 | 291 | } | 346 | } |
209 | 292 | 347 | ||
211 | 293 | emptyStack() | 348 | emptyStack(false) |
212 | 294 | // FIXME: AdaptivePageLayout takes a really long time to create pages, | 349 | // FIXME: AdaptivePageLayout takes a really long time to create pages, |
213 | 295 | // so we create manually and push that | 350 | // so we create manually and push that |
214 | 296 | mainStack.addComponentToNextColumnSync(mainPage, messagesWithBottomEdge, properties) | 351 | mainStack.addComponentToNextColumnSync(mainPage, messagesWithBottomEdge, properties) |
215 | @@ -330,6 +385,11 @@ | |||
216 | 330 | Loader { | 385 | Loader { |
217 | 331 | id: messagesBottomEdgeLoader | 386 | id: messagesBottomEdgeLoader |
218 | 332 | active: mainView.dualPanel | 387 | active: mainView.dualPanel |
219 | 388 | asynchronous: true | ||
220 | 389 | /* FIXME: would be even more efficient to use setSource() to | ||
221 | 390 | delay the compilation step but a bug in Qt prevents us. | ||
222 | 391 | Ref.: https://bugreports.qt.io/browse/QTBUG-54657 | ||
223 | 392 | */ | ||
224 | 333 | sourceComponent: MessagingBottomEdge { | 393 | sourceComponent: MessagingBottomEdge { |
225 | 334 | id: messagesBottomEdge | 394 | id: messagesBottomEdge |
226 | 335 | parent: messages | 395 | parent: messages |
227 | @@ -378,6 +438,11 @@ | |||
228 | 378 | 438 | ||
229 | 379 | Loader { | 439 | Loader { |
230 | 380 | id: bottomEdgeLoader | 440 | id: bottomEdgeLoader |
231 | 441 | asynchronous: true | ||
232 | 442 | /* FIXME: would be even more efficient to use setSource() to | ||
233 | 443 | delay the compilation step but a bug in Qt prevents us. | ||
234 | 444 | Ref.: https://bugreports.qt.io/browse/QTBUG-54657 | ||
235 | 445 | */ | ||
236 | 381 | sourceComponent: MessagingBottomEdge { | 446 | sourceComponent: MessagingBottomEdge { |
237 | 382 | parent: emptyStatePage | 447 | parent: emptyStatePage |
238 | 383 | hint.text: "" | 448 | hint.text: "" |
239 | @@ -394,9 +459,11 @@ | |||
240 | 394 | id: mainPage | 459 | id: mainPage |
241 | 395 | } | 460 | } |
242 | 396 | 461 | ||
243 | 462 | property bool completed: false | ||
244 | 463 | |||
245 | 397 | onColumnsChanged: { | 464 | onColumnsChanged: { |
246 | 398 | // we only have things to do here in case no thread is selected | 465 | // we only have things to do here in case no thread is selected |
248 | 399 | if (layout.columns == 2 && !application.findMessagingChild("emptyStatePage") && !application.findMessagingChild("fakeItem")) { | 466 | if (layout.completed && layout.columns == 2 && !application.findMessagingChild("emptyStatePage") && !application.findMessagingChild("fakeItem")) { |
249 | 400 | layout.removePage(mainPage) | 467 | layout.removePage(mainPage) |
250 | 401 | emptyStack() | 468 | emptyStack() |
251 | 402 | } | 469 | } |
252 | @@ -405,6 +472,7 @@ | |||
253 | 405 | if (layout.columns == 2 && !application.findMessagingChild("emptyStatePage")) { | 472 | if (layout.columns == 2 && !application.findMessagingChild("emptyStatePage")) { |
254 | 406 | emptyStack() | 473 | emptyStack() |
255 | 407 | } | 474 | } |
256 | 475 | layout.completed = true; | ||
257 | 408 | } | 476 | } |
258 | 409 | } | 477 | } |
259 | 410 | } | 478 | } |
260 | 411 | 479 | ||
261 | === modified file 'tests/qml/tst_DualSim.qml' | |||
262 | --- tests/qml/tst_DualSim.qml 2016-05-05 19:57:41 +0000 | |||
263 | +++ tests/qml/tst_DualSim.qml 2016-07-12 08:56:26 +0000 | |||
264 | @@ -151,6 +151,8 @@ | |||
265 | 151 | 151 | ||
266 | 152 | mainViewLoader.item.startNewMessage() | 152 | mainViewLoader.item.startNewMessage() |
267 | 153 | waitForRendering(mainViewLoader.item) | 153 | waitForRendering(mainViewLoader.item) |
268 | 154 | tryCompare(mainViewLoader.item, 'pendingCommitProperties', null) | ||
269 | 155 | waitForRendering(mainViewLoader.item.bottomEdge) | ||
270 | 154 | 156 | ||
271 | 155 | var messagesView = findChild(mainViewLoader, "messagesPage") | 157 | var messagesView = findChild(mainViewLoader, "messagesPage") |
272 | 156 | var headerSections = findChild(messagesView, "headerSections") | 158 | var headerSections = findChild(messagesView, "headerSections") |
273 | @@ -213,6 +215,8 @@ | |||
274 | 213 | 215 | ||
275 | 214 | mainViewLoader.item.startNewMessage() | 216 | mainViewLoader.item.startNewMessage() |
276 | 215 | waitForRendering(mainViewLoader.item) | 217 | waitForRendering(mainViewLoader.item) |
277 | 218 | tryCompare(mainViewLoader.item, 'pendingCommitProperties', null) | ||
278 | 219 | waitForRendering(mainViewLoader.item.bottomEdge) | ||
279 | 216 | 220 | ||
280 | 217 | var messagesView = findChild(mainViewLoader, "messagesPage") | 221 | var messagesView = findChild(mainViewLoader, "messagesPage") |
281 | 218 | var textArea = findChild(messagesView, "messageTextArea") | 222 | var textArea = findChild(messagesView, "messageTextArea") |
282 | 219 | 223 | ||
283 | === modified file 'tests/qml/tst_SingleSim.qml' | |||
284 | --- tests/qml/tst_SingleSim.qml 2016-05-05 19:57:41 +0000 | |||
285 | +++ tests/qml/tst_SingleSim.qml 2016-07-12 08:56:26 +0000 | |||
286 | @@ -138,6 +138,8 @@ | |||
287 | 138 | 138 | ||
288 | 139 | mainViewLoader.item.startNewMessage() | 139 | mainViewLoader.item.startNewMessage() |
289 | 140 | waitForRendering(mainViewLoader.item) | 140 | waitForRendering(mainViewLoader.item) |
290 | 141 | tryCompare(mainViewLoader.item, 'pendingCommitProperties', null) | ||
291 | 142 | waitForRendering(mainViewLoader.item.bottomEdge) | ||
292 | 141 | 143 | ||
293 | 142 | var messagesView = findChild(mainViewLoader, "messagesPage") | 144 | var messagesView = findChild(mainViewLoader, "messagesPage") |
294 | 143 | var textArea = findChild(messagesView, "messageTextArea") | 145 | var textArea = findChild(messagesView, "messageTextArea") |
FAILED: Continuous integration, rev:562 /jenkins. canonical. com/system- apps/job/ lp-messaging- app-ci/ 2/ /jenkins. canonical. com/system- apps/job/ build/656/ console /jenkins. canonical. com/system- apps/job/ build-0- fetch/656 /jenkins. canonical. com/system- apps/job/ build-1- sourcepkg/ release= vivid+overlay/ 620 /jenkins. canonical. com/system- apps/job/ build-1- sourcepkg/ release= xenial+ overlay/ 620 /jenkins. canonical. com/system- apps/job/ build-1- sourcepkg/ release= yakkety/ 620 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=amd64, release= vivid+overlay/ 612/console /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=amd64, release= xenial+ overlay/ 612/console /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=amd64, release= yakkety/ 612/console /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=armhf, release= vivid+overlay/ 612/console /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=armhf, release= xenial+ overlay/ 612/console /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=armhf, release= yakkety/ 612/console /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=i386, release= vivid+overlay/ 612/console /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=i386, release= xenial+ overlay/ 612/console /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=i386, release= yakkety/ 612/console
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild: /jenkins. canonical. com/system- apps/job/ lp-messaging- app-ci/ 2/rebuild
https:/