Merge lp:~vthompson/music-app/remix-walkthrough into lp:music-app/remix
- remix-walkthrough
- Merge into remix
Status: | Merged |
---|---|
Approved by: | Andrew Hayzen |
Approved revision: | 709 |
Merged at revision: | 796 |
Proposed branch: | lp:~vthompson/music-app/remix-walkthrough |
Merge into: | lp:music-app/remix |
Diff against target: |
972 lines (+544/-79) 9 files modified
common/Walkthrough/FirstRunWalkthrough.qml (+43/-0) common/Walkthrough/Slide1.qml (+73/-0) common/Walkthrough/Slide2.qml (+67/-0) common/Walkthrough/Slide3.qml (+82/-0) common/Walkthrough/Walkthrough.qml (+136/-0) music-app.qml (+12/-3) po/com.ubuntu.music.pot (+111/-75) tests/autopilot/music_app/__init__.py (+16/-0) tests/autopilot/music_app/tests/test_music.py (+4/-1) |
To merge this branch: | bzr merge lp:~vthompson/music-app/remix-walkthrough |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andrew Hayzen | Approve | ||
Ubuntu Phone Apps Jenkins Bot | continuous-integration | Approve | |
Review via email: mp+239293@code.launchpad.net |
Commit message
Initial walkthrough prototype.
Description of the change
Initial walkthrough prototype borrowed from Flashback. Currently it needs graphic resources, suggestions for text, and general layout recommendations from Design.
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
Andrew Hayzen (ahayzen) wrote : | # |
2 inline comments and we need design for this.
- 700. By Victor Thompson
-
Update pot file
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:699
http://
Executed test runs:
UNSTABLE: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:700
http://
Executed test runs:
UNSTABLE: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 701. By Victor Thompson
-
update to show walkthrough when there is no music
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:701
http://
Executed test runs:
UNSTABLE: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Andrew Hayzen (ahayzen) wrote : | # |
Would be good if we could get rid of these console errors
file://
file://
I'm also worried about the startup cost of always loading the Walkthrough, could you use createObject (the same as MusicNowPlaying) where you push to the stack.
- 702. By Victor Thompson
-
Merge AP skip of walkthrough
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:702
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 703. By Victor Thompson
-
Dynamically create Walkthrough.
- 704. By Victor Thompson
-
Add objectName to object.
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:703
http://
Executed test runs:
UNSTABLE: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 705. By Victor Thompson
-
revert debug code
- 706. By Victor Thompson
-
Add objectName to FIrstRunWalkthr
ough.qml
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
FAILED: Continuous integration, rev:706
http://
Executed test runs:
UNSTABLE: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 707. By Victor Thompson
-
Set toolbar visible and firstRun to false when finished.
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:707
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 708. By Victor Thompson
-
Resolve console warnings
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:708
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 709. By Victor Thompson
-
Update toolbar visible toggle
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:709
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Andrew Hayzen (ahayzen) wrote : | # |
Awesome, thanks for adding those extra fixes :)
Preview Diff
1 | === added directory 'common/Walkthrough' |
2 | === added file 'common/Walkthrough/FirstRunWalkthrough.qml' |
3 | --- common/Walkthrough/FirstRunWalkthrough.qml 1970-01-01 00:00:00 +0000 |
4 | +++ common/Walkthrough/FirstRunWalkthrough.qml 2015-01-20 05:33:53 +0000 |
5 | @@ -0,0 +1,43 @@ |
6 | +/* |
7 | + * Copyright (C) 2014 |
8 | + * Nekhelesh Ramananthan <nik90@ubuntu.com> |
9 | + * Victor Thompson <victor.thompson@gmail.com> |
10 | + * |
11 | + * This program is free software; you can redistribute it and/or modify |
12 | + * it under the terms of the GNU General Public License as published by |
13 | + * the Free Software Foundation; version 3. |
14 | + * |
15 | + * This program is distributed in the hope that it will be useful, |
16 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
18 | + * GNU General Public License for more details. |
19 | + * |
20 | + * You should have received a copy of the GNU General Public License |
21 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
22 | + * |
23 | + * Upstream location: |
24 | + * https://github.com/krnekhelesh/flashback |
25 | + */ |
26 | + |
27 | +import QtQuick 2.3 |
28 | +import Ubuntu.Components 1.1 |
29 | + |
30 | +// Initial Walkthrough tutorial |
31 | +Walkthrough { |
32 | + id: walkthrough |
33 | + objectName: "walkthroughPage" |
34 | + |
35 | + appName: "Music" |
36 | + |
37 | + onFinished: { |
38 | + walkthrough.visible = false |
39 | + pageStack.pop() |
40 | + firstRun = false |
41 | + } |
42 | + |
43 | + model: [ |
44 | + Slide1{}, |
45 | + Slide2{}, |
46 | + Slide3{} |
47 | + ] |
48 | +} |
49 | |
50 | === added file 'common/Walkthrough/Slide1.qml' |
51 | --- common/Walkthrough/Slide1.qml 1970-01-01 00:00:00 +0000 |
52 | +++ common/Walkthrough/Slide1.qml 2015-01-20 05:33:53 +0000 |
53 | @@ -0,0 +1,73 @@ |
54 | +/* |
55 | + * Copyright (C) 2014-2015 |
56 | + * Nekhelesh Ramananthan <nik90@ubuntu.com> |
57 | + * Victor Thompson <victor.thompson@gmail.com> |
58 | + * |
59 | + * This program is free software; you can redistribute it and/or modify |
60 | + * it under the terms of the GNU General Public License as published by |
61 | + * the Free Software Foundation; version 3. |
62 | + * |
63 | + * This program is distributed in the hope that it will be useful, |
64 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
65 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
66 | + * GNU General Public License for more details. |
67 | + * |
68 | + * You should have received a copy of the GNU General Public License |
69 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
70 | + * |
71 | + * Upstream location: |
72 | + * https://github.com/krnekhelesh/flashback |
73 | + */ |
74 | + |
75 | +import QtQuick 2.3 |
76 | +import Ubuntu.Components 1.1 |
77 | + |
78 | +// Slide 1 |
79 | +Component { |
80 | + id: slide1 |
81 | + |
82 | + Item { |
83 | + id: slide1Container |
84 | + |
85 | + UbuntuShape { |
86 | + anchors { |
87 | + top: parent.top |
88 | + topMargin: units.gu(6) |
89 | + horizontalCenter: parent.horizontalCenter |
90 | + } |
91 | + height: (parent.height - bodyText.contentHeight - introductionText.height - 4*units.gu(4))/2 |
92 | + image: Image { |
93 | + id: centerImage |
94 | + source: Qt.resolvedUrl("../../images/music-app@30.png") |
95 | + } |
96 | + radius: "medium" |
97 | + width: height |
98 | + } |
99 | + |
100 | + Label { |
101 | + id: introductionText |
102 | + anchors { |
103 | + bottom: bodyText.top |
104 | + bottomMargin: units.gu(4) |
105 | + } |
106 | + fontSize: "x-large" |
107 | + height: contentHeight |
108 | + horizontalAlignment: Text.AlignHLeft |
109 | + text: i18n.tr("Welcome to Music") |
110 | + } |
111 | + |
112 | + Label { |
113 | + id: bodyText |
114 | + anchors { |
115 | + bottom: parent.bottom |
116 | + bottomMargin: units.gu(10) |
117 | + } |
118 | + fontSize: "large" |
119 | + height: contentHeight |
120 | + horizontalAlignment: Text.AlignHLeft |
121 | + text: i18n.tr("Enjoy your favorite music with Ubuntu's Music App. Take a short tour on how to get started or press skip to start listening now.") |
122 | + width: parent.width |
123 | + wrapMode: Text.WordWrap |
124 | + } |
125 | + } |
126 | +} |
127 | |
128 | === added file 'common/Walkthrough/Slide2.qml' |
129 | --- common/Walkthrough/Slide2.qml 1970-01-01 00:00:00 +0000 |
130 | +++ common/Walkthrough/Slide2.qml 2015-01-20 05:33:53 +0000 |
131 | @@ -0,0 +1,67 @@ |
132 | +/* |
133 | + * Copyright (C) 2014-2015 |
134 | + * Nekhelesh Ramananthan <nik90@ubuntu.com> |
135 | + * Victor Thompson <victor.thompson@gmail.com> |
136 | + * |
137 | + * This program is free software; you can redistribute it and/or modify |
138 | + * it under the terms of the GNU General Public License as published by |
139 | + * the Free Software Foundation; version 3. |
140 | + * |
141 | + * This program is distributed in the hope that it will be useful, |
142 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
143 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
144 | + * GNU General Public License for more details. |
145 | + * |
146 | + * You should have received a copy of the GNU General Public License |
147 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
148 | + * |
149 | + * Upstream location: |
150 | + * https://github.com/krnekhelesh/flashback |
151 | + */ |
152 | + |
153 | +import QtQuick 2.3 |
154 | +import Ubuntu.Components 1.1 |
155 | + |
156 | +// Walkthrough - Slide 2 |
157 | +Component { |
158 | + id: slide2 |
159 | + Item { |
160 | + id: slide2Container |
161 | + |
162 | + Image { |
163 | + id: centerImage |
164 | + anchors { |
165 | + top: parent.top |
166 | + topMargin: units.gu(6) |
167 | + horizontalCenter: parent.horizontalCenter |
168 | + } |
169 | + height: (parent.height - bodyText.contentHeight - introductionText.height - 4*units.gu(4))/2 |
170 | + fillMode: Image.PreserveAspectFit |
171 | + source: Qt.resolvedUrl("../../images/sd_phone_icon.png") |
172 | + } |
173 | + |
174 | + Label { |
175 | + id: introductionText |
176 | + anchors { |
177 | + bottom: bodyText.top |
178 | + bottomMargin: units.gu(4) |
179 | + } |
180 | + fontSize: "x-large" |
181 | + horizontalAlignment: Text.AlignHLeft |
182 | + text: i18n.tr("Import your music") |
183 | + } |
184 | + |
185 | + Label { |
186 | + id: bodyText |
187 | + anchors { |
188 | + bottom: parent.bottom |
189 | + bottomMargin: units.gu(10) |
190 | + } |
191 | + fontSize: "large" |
192 | + horizontalAlignment: Text.AlignHLeft |
193 | + text: i18n.tr("Plug your phone into your Ubuntu computer and drag and drop files staight across.") |
194 | + width: parent.width |
195 | + wrapMode: Text.WordWrap |
196 | + } |
197 | + } |
198 | +} |
199 | |
200 | === added file 'common/Walkthrough/Slide3.qml' |
201 | --- common/Walkthrough/Slide3.qml 1970-01-01 00:00:00 +0000 |
202 | +++ common/Walkthrough/Slide3.qml 2015-01-20 05:33:53 +0000 |
203 | @@ -0,0 +1,82 @@ |
204 | +/* |
205 | + * Copyright (C) 2014-2015 |
206 | + * Nekhelesh Ramananthan <nik90@ubuntu.com> |
207 | + * Victor Thompson <victor.thompson@gmail.com> |
208 | + * |
209 | + * This program is free software; you can redistribute it and/or modify |
210 | + * it under the terms of the GNU General Public License as published by |
211 | + * the Free Software Foundation; version 3. |
212 | + * |
213 | + * This program is distributed in the hope that it will be useful, |
214 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
215 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
216 | + * GNU General Public License for more details. |
217 | + * |
218 | + * You should have received a copy of the GNU General Public License |
219 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
220 | + * |
221 | + * Upstream location: |
222 | + * https://github.com/krnekhelesh/flashback |
223 | + */ |
224 | + |
225 | +import QtQuick 2.3 |
226 | +import Ubuntu.Components 1.1 |
227 | + |
228 | +// Walkthrough - Slide 7 |
229 | +Component { |
230 | + id: slide7 |
231 | + Item { |
232 | + id: slide7Container |
233 | + |
234 | + Image { |
235 | + id: smileImage |
236 | + anchors { |
237 | + top: parent.top |
238 | + topMargin: units.gu(4) |
239 | + horizontalCenter: parent.horizontalCenter |
240 | + } |
241 | + height: (parent.height - introductionText.height - finalMessage.contentHeight - 4.5*units.gu(4))/2 |
242 | + fillMode: Image.PreserveAspectFit |
243 | + source: Qt.resolvedUrl("../../images/music_download_icon.png") |
244 | + } |
245 | + |
246 | + Label { |
247 | + id: introductionText |
248 | + anchors { |
249 | + bottom: finalMessage.top |
250 | + bottomMargin: units.gu(4) |
251 | + } |
252 | + fontSize: "x-large" |
253 | + horizontalAlignment: Text.AlignHLeft |
254 | + text: i18n.tr("Download new music") |
255 | + } |
256 | + |
257 | + Label { |
258 | + id: finalMessage |
259 | + anchors { |
260 | + bottom: continueButton.top |
261 | + bottomMargin: units.gu(4) |
262 | + } |
263 | + fontSize: "large" |
264 | + horizontalAlignment: Text.AlignHLeft |
265 | + text: i18n.tr("Directly import music bought while browsing online.") |
266 | + width: parent.width |
267 | + wrapMode: Text.WordWrap |
268 | + } |
269 | + |
270 | + Button { |
271 | + id: continueButton |
272 | + anchors { |
273 | + bottom: parent.bottom |
274 | + bottomMargin: units.gu(4) |
275 | + horizontalCenter: parent.horizontalCenter |
276 | + } |
277 | + color: UbuntuColors.green |
278 | + height: units.gu(5) |
279 | + text: i18n.tr("Start") |
280 | + width: units.gu(18) |
281 | + |
282 | + onClicked: finished() |
283 | + } |
284 | + } |
285 | +} |
286 | |
287 | === added file 'common/Walkthrough/Walkthrough.qml' |
288 | --- common/Walkthrough/Walkthrough.qml 1970-01-01 00:00:00 +0000 |
289 | +++ common/Walkthrough/Walkthrough.qml 2015-01-20 05:33:53 +0000 |
290 | @@ -0,0 +1,136 @@ |
291 | +/* |
292 | + * Copyright (C) 2014-2015 |
293 | + * Nekhelesh Ramananthan <nik90@ubuntu.com> |
294 | + * Victor Thompson <victor.thompson@gmail.com> |
295 | + * |
296 | + * This program is free software; you can redistribute it and/or modify |
297 | + * it under the terms of the GNU General Public License as published by |
298 | + * the Free Software Foundation; version 3. |
299 | + * |
300 | + * This program is distributed in the hope that it will be useful, |
301 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
302 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
303 | + * GNU General Public License for more details. |
304 | + * |
305 | + * You should have received a copy of the GNU General Public License |
306 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
307 | + * |
308 | + * Upstream location: |
309 | + * https://github.com/krnekhelesh/flashback |
310 | + */ |
311 | + |
312 | +import QtQuick 2.3 |
313 | +import Ubuntu.Components 1.1 |
314 | +import Ubuntu.Components.ListItems 1.0 as ListItem |
315 | + |
316 | +Page { |
317 | + id: walkthrough |
318 | + |
319 | + // Property to set the app name used in the walkthrough |
320 | + property string appName |
321 | + |
322 | + // Property to check if this is the first run or not |
323 | + property bool isFirstRun: true |
324 | + |
325 | + // Property to store the slides shown in the walkthrough (Each slide is a component defined in a separate file for simplicity) |
326 | + property list<Component> model |
327 | + |
328 | + // Property to signal walkthrough completion |
329 | + signal finished |
330 | + |
331 | + // ListView to show the slides |
332 | + ListView { |
333 | + id: listView |
334 | + anchors { |
335 | + left: parent.left |
336 | + right: parent.right |
337 | + top: parent.top |
338 | + bottom: slideIndicator.top |
339 | + } |
340 | + |
341 | + model: walkthrough.model |
342 | + snapMode: ListView.SnapOneItem |
343 | + orientation: Qt.Horizontal |
344 | + highlightMoveDuration: UbuntuAnimation.FastDuration |
345 | + highlightRangeMode: ListView.StrictlyEnforceRange |
346 | + highlightFollowsCurrentItem: true |
347 | + |
348 | + delegate: Item { |
349 | + width: listView.width |
350 | + height: listView.height |
351 | + clip: true |
352 | + |
353 | + Loader { |
354 | + anchors { |
355 | + fill: parent |
356 | + margins: units.gu(2) |
357 | + } |
358 | + |
359 | + sourceComponent: modelData |
360 | + } |
361 | + } |
362 | + } |
363 | + |
364 | + // Label to skip the walkthrough. |
365 | + Label { |
366 | + id: skipLabel |
367 | + |
368 | + color: "grey" |
369 | + fontSize: "medium" |
370 | + objectName: "skipLabel" |
371 | + width: contentWidth |
372 | + text: i18n.tr("Skip") |
373 | + |
374 | + anchors { |
375 | + bottom: parent.bottom |
376 | + left: parent.left |
377 | + margins: units.gu(2) |
378 | + } |
379 | + |
380 | + MouseArea { |
381 | + anchors.fill: parent |
382 | + onClicked: walkthrough.finished() |
383 | + } |
384 | + } |
385 | + |
386 | + // Indicator element to represent the current slide of the walkthrough |
387 | + Row { |
388 | + id: slideIndicator |
389 | + height: units.gu(6) |
390 | + spacing: units.gu(2) |
391 | + anchors { |
392 | + bottom: parent.bottom |
393 | + horizontalCenter: parent.horizontalCenter |
394 | + } |
395 | + |
396 | + Repeater { |
397 | + model: walkthrough.model.length |
398 | + delegate: Image { |
399 | + anchors.verticalCenter: parent.verticalCenter |
400 | + antialiasing: true |
401 | + height: width |
402 | + source: listView.currentIndex == index ? "../../images/Ellipse@27.png" : "../../images/Ellipse_15_opacity@27.png" |
403 | + width: units.gu(2) |
404 | + } |
405 | + } |
406 | + } |
407 | + |
408 | + Icon { |
409 | + id: nextIcon |
410 | + anchors { |
411 | + bottom: parent.bottom |
412 | + right: parent.right |
413 | + margins: units.gu(2) |
414 | + } |
415 | + color: "white" |
416 | + height: units.gu(2) |
417 | + name: "chevron" |
418 | + visible: listView.currentIndex !== 2 |
419 | + width: height |
420 | + |
421 | + MouseArea { |
422 | + anchors.fill: parent |
423 | + onClicked: listView.currentIndex++ |
424 | + } |
425 | + } |
426 | +} |
427 | |
428 | === added file 'images/Ellipse@27.png' |
429 | Binary files images/Ellipse@27.png 1970-01-01 00:00:00 +0000 and images/Ellipse@27.png 2015-01-20 05:33:53 +0000 differ |
430 | === added file 'images/Ellipse_15_opacity@27.png' |
431 | Binary files images/Ellipse_15_opacity@27.png 1970-01-01 00:00:00 +0000 and images/Ellipse_15_opacity@27.png 2015-01-20 05:33:53 +0000 differ |
432 | === added file 'images/music_download_icon@27.png' |
433 | Binary files images/music_download_icon@27.png 1970-01-01 00:00:00 +0000 and images/music_download_icon@27.png 2015-01-20 05:33:53 +0000 differ |
434 | === added file 'images/sd_phone_icon@27.png' |
435 | Binary files images/sd_phone_icon@27.png 1970-01-01 00:00:00 +0000 and images/sd_phone_icon@27.png 2015-01-20 05:33:53 +0000 differ |
436 | === modified file 'music-app.qml' |
437 | --- music-app.qml 2015-01-18 18:57:12 +0000 |
438 | +++ music-app.qml 2015-01-20 05:33:53 +0000 |
439 | @@ -46,6 +46,7 @@ |
440 | id: startupSettings |
441 | category: "StartupSettings" |
442 | |
443 | + property bool firstRun: true |
444 | property int queueIndex: 0 |
445 | property int tabIndex: -1 |
446 | } |
447 | @@ -540,7 +541,6 @@ |
448 | // Run on startup |
449 | Component.onCompleted: { |
450 | customdebug("Version "+appVersion) // print the curren version |
451 | - customdebug("Arguments on startup: Debug: "+args.values.debug) |
452 | |
453 | Library.createRecent() // initialize recent |
454 | |
455 | @@ -569,6 +569,13 @@ |
456 | // Run post load |
457 | tabs.ensurePopulated(tabs.selectedTab); |
458 | |
459 | + // Display walkthrough on first run, even if the user has music |
460 | + if (firstRun) { |
461 | + var comp = Qt.createComponent("common/Walkthrough/FirstRunWalkthrough.qml") |
462 | + var walkthrough = comp.createObject(mainPageStack, {}); |
463 | + mainPageStack.push(walkthrough) |
464 | + } |
465 | + |
466 | if (args.values.url) { |
467 | uriHandler.process(args.values.url, true); |
468 | } |
469 | @@ -583,6 +590,7 @@ |
470 | property string appVersion: '2.0' |
471 | property bool toolbarShown: musicToolbar.visible |
472 | property bool selectedAlbum: false |
473 | + property alias firstRun: startupSettings.firstRun |
474 | property alias queueIndex: startupSettings.queueIndex |
475 | |
476 | signal listItemSwiping(int i) |
477 | @@ -1051,7 +1059,8 @@ |
478 | MusicToolbar { |
479 | id: musicToolbar |
480 | visible: mainPageStack.currentPage.title !== i18n.tr("Now playing") && |
481 | - mainPageStack.currentPage.title !== i18n.tr("Queue") |
482 | + mainPageStack.currentPage.title !== i18n.tr("Queue") && |
483 | + !firstRun |
484 | objectName: "musicToolbarObject" |
485 | z: 200 // put on top of everything else |
486 | } |
487 | @@ -1246,7 +1255,7 @@ |
488 | Page { |
489 | id: emptyPage |
490 | title: i18n.tr("Music") |
491 | - visible: noMusic || noPlaylists || noRecent |
492 | + visible: (noMusic || noPlaylists || noRecent) && !firstRun |
493 | |
494 | property bool noMusic: allSongsModel.rowCount === 0 && allSongsModelModel.status === SongsModel.Ready && loadedUI |
495 | property bool noPlaylists: playlistModel.model.count === 0 && playlistModel.workerComplete && mainPageStack.currentPage.title !== i18n.tr("Now playing") && mainPageStack.currentPage.title !== i18n.tr("Queue") |
496 | |
497 | === modified file 'po/com.ubuntu.music.pot' |
498 | --- po/com.ubuntu.music.pot 2015-01-16 22:54:07 +0000 |
499 | +++ po/com.ubuntu.music.pot 2015-01-20 05:33:53 +0000 |
500 | @@ -8,7 +8,7 @@ |
501 | msgstr "" |
502 | "Project-Id-Version: music-app\n" |
503 | "Report-Msgid-Bugs-To: \n" |
504 | -"POT-Creation-Date: 2015-01-16 16:52-0600\n" |
505 | +"POT-Creation-Date: 2015-01-18 17:32-0600\n" |
506 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
507 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
508 | "Language-Team: LANGUAGE <LL@li.org>\n" |
509 | @@ -22,18 +22,18 @@ |
510 | msgid "Albums" |
511 | msgstr "" |
512 | |
513 | -#: ../MusicAlbums.qml:68 ../MusicStart.qml:78 ../common/AlbumsPage.qml:142 |
514 | -#: ../common/AlbumsPage.qml:156 ../common/SongsPage.qml:352 |
515 | +#: ../MusicAlbums.qml:68 ../MusicStart.qml:78 ../common/AlbumsPage.qml:148 |
516 | +#: ../common/AlbumsPage.qml:162 ../common/SongsPage.qml:373 |
517 | msgid "Unknown Album" |
518 | msgstr "" |
519 | |
520 | #: ../MusicAlbums.qml:69 ../MusicArtists.qml:76 ../MusicStart.qml:79 |
521 | -#: ../common/AlbumsPage.qml:103 ../common/AlbumsPage.qml:155 |
522 | -#: ../common/SongsPage.qml:373 |
523 | +#: ../common/AlbumsPage.qml:104 ../common/AlbumsPage.qml:161 |
524 | +#: ../common/SongsPage.qml:394 |
525 | msgid "Unknown Artist" |
526 | msgstr "" |
527 | |
528 | -#: ../MusicAlbums.qml:80 ../MusicStart.qml:95 ../common/AlbumsPage.qml:154 |
529 | +#: ../MusicAlbums.qml:80 ../MusicStart.qml:95 ../common/AlbumsPage.qml:160 |
530 | msgid "Album" |
531 | msgstr "" |
532 | |
533 | @@ -49,26 +49,26 @@ |
534 | msgid "Genres" |
535 | msgstr "" |
536 | |
537 | -#: ../MusicGenres.qml:107 ../MusicGenres.qml:109 ../common/SongsPage.qml:291 |
538 | -#: ../common/SongsPage.qml:325 ../common/SongsPage.qml:339 |
539 | -#: ../common/SongsPage.qml:375 ../common/SongsPage.qml:394 |
540 | -#: ../common/SongsPage.qml:426 |
541 | +#: ../MusicGenres.qml:107 ../MusicGenres.qml:109 ../common/SongsPage.qml:312 |
542 | +#: ../common/SongsPage.qml:346 ../common/SongsPage.qml:360 |
543 | +#: ../common/SongsPage.qml:396 ../common/SongsPage.qml:415 |
544 | +#: ../common/SongsPage.qml:447 |
545 | msgid "Genre" |
546 | msgstr "" |
547 | |
548 | -#: ../MusicNowPlaying.qml:35 ../music-app.qml:656 ../music-app.qml:688 |
549 | -#: ../music-app.qml:1047 ../music-app.qml:1059 ../music-app.qml:1087 |
550 | -#: ../music-app.qml:1088 |
551 | +#: ../MusicNowPlaying.qml:35 ../music-app.qml:667 ../music-app.qml:699 |
552 | +#: ../music-app.qml:1062 ../music-app.qml:1220 ../music-app.qml:1232 |
553 | +#: ../music-app.qml:1260 ../music-app.qml:1261 |
554 | msgid "Queue" |
555 | msgstr "" |
556 | |
557 | -#: ../MusicNowPlaying.qml:35 ../music-app.qml:656 ../music-app.qml:889 |
558 | -#: ../music-app.qml:1046 ../music-app.qml:1087 ../music-app.qml:1088 |
559 | +#: ../MusicNowPlaying.qml:35 ../music-app.qml:667 ../music-app.qml:1061 |
560 | +#: ../music-app.qml:1219 ../music-app.qml:1260 ../music-app.qml:1261 |
561 | msgid "Now playing" |
562 | msgstr "" |
563 | |
564 | #: ../MusicNowPlaying.qml:90 ../MusicNowPlaying.qml:150 ../MusicTracks.qml:74 |
565 | -#: ../common/ListItemActions/AddToPlaylist.qml:26 ../common/SongsPage.qml:153 |
566 | +#: ../common/ListItemActions/AddToPlaylist.qml:26 ../common/SongsPage.qml:169 |
567 | msgid "Add to playlist" |
568 | msgstr "" |
569 | |
570 | @@ -77,28 +77,28 @@ |
571 | msgstr "" |
572 | |
573 | #: ../MusicNowPlaying.qml:128 ../MusicTracks.qml:51 |
574 | -#: ../common/SongsPage.qml:131 |
575 | +#: ../common/SongsPage.qml:147 |
576 | msgid "Cancel selection" |
577 | msgstr "" |
578 | |
579 | #: ../MusicNowPlaying.qml:137 ../MusicTracks.qml:62 |
580 | -#: ../common/SongsPage.qml:141 |
581 | +#: ../common/SongsPage.qml:157 |
582 | msgid "Select All" |
583 | msgstr "" |
584 | |
585 | -#: ../MusicNowPlaying.qml:173 ../common/SongsPage.qml:188 |
586 | +#: ../MusicNowPlaying.qml:173 ../common/SongsPage.qml:204 |
587 | msgid "Delete" |
588 | msgstr "" |
589 | |
590 | #. TRANSLATORS: this is the name of the playlists page shown in the tab header. |
591 | #. Remember to keep the translation short to fit the screen width |
592 | #: ../MusicPlaylists.qml:35 ../MusicaddtoPlaylist.qml:114 |
593 | -#: ../common/SongsPage.qml:69 |
594 | +#: ../common/SongsPage.qml:85 |
595 | msgid "Playlists" |
596 | msgstr "" |
597 | |
598 | #: ../MusicPlaylists.qml:96 ../MusicaddtoPlaylist.qml:104 |
599 | -#: ../common/SongsPage.qml:395 ../common/SongsPage.qml:396 |
600 | +#: ../common/SongsPage.qml:416 ../common/SongsPage.qml:417 |
601 | #, qt-format |
602 | msgid "%1 song" |
603 | msgid_plural "%1 songs" |
604 | @@ -106,20 +106,20 @@ |
605 | msgstr[1] "" |
606 | |
607 | #: ../MusicPlaylists.qml:109 ../MusicPlaylists.qml:110 ../MusicStart.qml:79 |
608 | -#: ../MusicStart.qml:95 ../common/SongsPage.qml:89 ../common/SongsPage.qml:189 |
609 | -#: ../common/SongsPage.qml:293 ../common/SongsPage.qml:327 |
610 | -#: ../common/SongsPage.qml:338 ../common/SongsPage.qml:374 |
611 | -#: ../common/SongsPage.qml:410 ../common/SongsPage.qml:413 |
612 | -#: ../common/SongsPage.qml:428 |
613 | +#: ../MusicStart.qml:95 ../common/SongsPage.qml:64 ../common/SongsPage.qml:105 |
614 | +#: ../common/SongsPage.qml:205 ../common/SongsPage.qml:314 |
615 | +#: ../common/SongsPage.qml:348 ../common/SongsPage.qml:359 |
616 | +#: ../common/SongsPage.qml:395 ../common/SongsPage.qml:431 |
617 | +#: ../common/SongsPage.qml:434 ../common/SongsPage.qml:449 |
618 | msgid "Playlist" |
619 | msgstr "" |
620 | |
621 | #: ../MusicStart.qml:34 ../MusicaddtoPlaylist.qml:122 |
622 | -#: ../common/SongsPage.qml:79 |
623 | +#: ../common/SongsPage.qml:95 |
624 | msgid "Recent" |
625 | msgstr "" |
626 | |
627 | -#: ../MusicToolbar.qml:128 |
628 | +#: ../MusicToolbar.qml:155 |
629 | msgid "Tap to shuffle music" |
630 | msgstr "" |
631 | |
632 | @@ -127,27 +127,27 @@ |
633 | msgid "Songs" |
634 | msgstr "" |
635 | |
636 | -#: ../MusicTracks.qml:97 ../common/SongsPage.qml:176 |
637 | +#: ../MusicTracks.qml:97 ../common/SongsPage.qml:192 |
638 | msgid "Add to queue" |
639 | msgstr "" |
640 | |
641 | -#: ../MusicaddtoPlaylist.qml:42 ../music-app.qml:1143 |
642 | +#: ../MusicaddtoPlaylist.qml:42 ../music-app.qml:1316 |
643 | msgid "Select playlist" |
644 | msgstr "" |
645 | |
646 | -#: ../common/AlbumsPage.qml:62 ../common/SongsPage.qml:286 |
647 | +#: ../common/AlbumsPage.qml:63 ../common/SongsPage.qml:307 |
648 | msgid "Shuffle" |
649 | msgstr "" |
650 | |
651 | -#: ../common/AlbumsPage.qml:76 ../common/SongsPage.qml:312 |
652 | +#: ../common/AlbumsPage.qml:77 ../common/SongsPage.qml:333 |
653 | msgid "Queue all" |
654 | msgstr "" |
655 | |
656 | -#: ../common/AlbumsPage.qml:84 ../common/SongsPage.qml:320 |
657 | +#: ../common/AlbumsPage.qml:85 ../common/SongsPage.qml:341 |
658 | msgid "Play all" |
659 | msgstr "" |
660 | |
661 | -#: ../common/AlbumsPage.qml:122 |
662 | +#: ../common/AlbumsPage.qml:123 |
663 | #, qt-format |
664 | msgid "%1 album" |
665 | msgid_plural "%1 albums" |
666 | @@ -158,7 +158,7 @@ |
667 | msgid "Add to Queue" |
668 | msgstr "" |
669 | |
670 | -#: ../common/ListItemActions/Remove.qml:27 ../common/SongsPage.qml:564 |
671 | +#: ../common/ListItemActions/Remove.qml:27 ../common/SongsPage.qml:586 |
672 | msgid "Remove" |
673 | msgstr "" |
674 | |
675 | @@ -175,166 +175,202 @@ |
676 | msgstr "" |
677 | |
678 | #. TRANSLATORS: this is a title of a dialog with a prompt to rename a playlist |
679 | -#: ../common/SongsPage.qml:498 |
680 | +#: ../common/SongsPage.qml:521 |
681 | msgid "Rename playlist" |
682 | msgstr "" |
683 | |
684 | -#: ../common/SongsPage.qml:505 ../music-app.qml:843 |
685 | +#: ../common/SongsPage.qml:528 ../music-app.qml:1015 |
686 | msgid "Enter playlist name" |
687 | msgstr "" |
688 | |
689 | -#: ../common/SongsPage.qml:515 |
690 | +#: ../common/SongsPage.qml:537 |
691 | msgid "Change" |
692 | msgstr "" |
693 | |
694 | -#: ../common/SongsPage.qml:536 ../music-app.qml:869 |
695 | +#: ../common/SongsPage.qml:558 ../music-app.qml:1041 |
696 | msgid "Playlist already exists" |
697 | msgstr "" |
698 | |
699 | -#: ../common/SongsPage.qml:540 ../music-app.qml:874 |
700 | +#: ../common/SongsPage.qml:562 ../music-app.qml:1046 |
701 | msgid "Please type in a name." |
702 | msgstr "" |
703 | |
704 | -#: ../common/SongsPage.qml:545 ../common/SongsPage.qml:583 |
705 | -#: ../music-app.qml:481 ../music-app.qml:880 |
706 | +#: ../common/SongsPage.qml:567 ../common/SongsPage.qml:605 |
707 | +#: ../music-app.qml:486 ../music-app.qml:1052 |
708 | msgid "Cancel" |
709 | msgstr "" |
710 | |
711 | #. TRANSLATORS: this is a title of a dialog with a prompt to delete a playlist |
712 | -#: ../common/SongsPage.qml:558 |
713 | +#: ../common/SongsPage.qml:580 |
714 | msgid "Permanently delete playlist?" |
715 | msgstr "" |
716 | |
717 | -#: ../common/SongsPage.qml:559 |
718 | +#: ../common/SongsPage.qml:581 |
719 | msgid "This cannot be undone" |
720 | msgstr "" |
721 | |
722 | -#: ../music-app.qml:145 |
723 | +#: ../common/Walkthrough/Slide1.qml:61 |
724 | +msgid "Welcome to Music" |
725 | +msgstr "" |
726 | + |
727 | +#: ../common/Walkthrough/Slide1.qml:73 |
728 | +msgid "" |
729 | +"Enjoy your favorite music with Ubuntu's Music App. Take a short tour on how " |
730 | +"to get started or press skip to start listening now." |
731 | +msgstr "" |
732 | + |
733 | +#: ../common/Walkthrough/Slide2.qml:56 |
734 | +msgid "Import your music" |
735 | +msgstr "" |
736 | + |
737 | +#: ../common/Walkthrough/Slide2.qml:67 |
738 | +msgid "" |
739 | +"Plug your phone into your Ubuntu computer and drag and drop files staight " |
740 | +"across." |
741 | +msgstr "" |
742 | + |
743 | +#: ../common/Walkthrough/Slide3.qml:57 |
744 | +msgid "Download new music" |
745 | +msgstr "" |
746 | + |
747 | +#: ../common/Walkthrough/Slide3.qml:68 |
748 | +msgid "Directly import music bought while browsing online." |
749 | +msgstr "" |
750 | + |
751 | +#: ../common/Walkthrough/Slide3.qml:82 |
752 | +msgid "Start" |
753 | +msgstr "" |
754 | + |
755 | +#: ../common/Walkthrough/Walkthrough.qml:81 |
756 | +msgid "Skip" |
757 | +msgstr "" |
758 | + |
759 | +#: ../music-app.qml:147 |
760 | msgid "Next" |
761 | msgstr "" |
762 | |
763 | -#: ../music-app.qml:146 |
764 | +#: ../music-app.qml:148 |
765 | msgid "Next Track" |
766 | msgstr "" |
767 | |
768 | -#: ../music-app.qml:152 |
769 | +#: ../music-app.qml:154 |
770 | msgid "Pause" |
771 | msgstr "" |
772 | |
773 | -#: ../music-app.qml:152 |
774 | +#: ../music-app.qml:154 |
775 | msgid "Play" |
776 | msgstr "" |
777 | |
778 | -#: ../music-app.qml:154 |
779 | +#: ../music-app.qml:156 |
780 | msgid "Pause Playback" |
781 | msgstr "" |
782 | |
783 | -#: ../music-app.qml:154 |
784 | +#: ../music-app.qml:156 |
785 | msgid "Continue or start playback" |
786 | msgstr "" |
787 | |
788 | -#: ../music-app.qml:159 |
789 | +#: ../music-app.qml:161 |
790 | msgid "Back" |
791 | msgstr "" |
792 | |
793 | -#: ../music-app.qml:160 |
794 | +#: ../music-app.qml:162 |
795 | msgid "Go back to last page" |
796 | msgstr "" |
797 | |
798 | -#: ../music-app.qml:168 |
799 | +#: ../music-app.qml:170 |
800 | msgid "Previous" |
801 | msgstr "" |
802 | |
803 | -#: ../music-app.qml:169 |
804 | +#: ../music-app.qml:171 |
805 | msgid "Previous Track" |
806 | msgstr "" |
807 | |
808 | -#: ../music-app.qml:174 |
809 | +#: ../music-app.qml:176 |
810 | msgid "Stop" |
811 | msgstr "" |
812 | |
813 | -#: ../music-app.qml:175 |
814 | +#: ../music-app.qml:177 |
815 | msgid "Stop Playback" |
816 | msgstr "" |
817 | |
818 | #. TRANSLATORS: This string represents that the target destination filepath does not start with ~/Music/Imported/ |
819 | -#: ../music-app.qml:324 |
820 | +#: ../music-app.qml:329 |
821 | msgid "Filepath must start with" |
822 | msgstr "" |
823 | |
824 | #. TRANSLATORS: This string represents that a blank filepath destination has been used |
825 | -#: ../music-app.qml:350 |
826 | +#: ../music-app.qml:355 |
827 | msgid "Filepath must be a file" |
828 | msgstr "" |
829 | |
830 | #. TRANSLATORS: This string represents that there was failure moving the file to the target destination |
831 | -#: ../music-app.qml:356 |
832 | +#: ../music-app.qml:361 |
833 | msgid "Failed to move file" |
834 | msgstr "" |
835 | |
836 | -#: ../music-app.qml:435 |
837 | +#: ../music-app.qml:440 |
838 | msgid "Waiting for file(s)..." |
839 | msgstr "" |
840 | |
841 | -#: ../music-app.qml:454 |
842 | +#: ../music-app.qml:459 |
843 | msgid "OK" |
844 | msgstr "" |
845 | |
846 | -#: ../music-app.qml:467 |
847 | +#: ../music-app.qml:472 |
848 | msgid "Imported file not found" |
849 | msgstr "" |
850 | |
851 | -#: ../music-app.qml:471 |
852 | +#: ../music-app.qml:476 |
853 | msgid "Wait" |
854 | msgstr "" |
855 | |
856 | #. TRANSLATORS: this refers to a number of songs greater than one. The actual number will be prepended to the string automatically (plural forms are not yet fully supported in usermetrics, the library that displays that string) |
857 | -#: ../music-app.qml:492 |
858 | +#: ../music-app.qml:497 |
859 | msgid "songs played today" |
860 | msgstr "" |
861 | |
862 | -#: ../music-app.qml:493 |
863 | +#: ../music-app.qml:498 |
864 | msgid "No songs played today" |
865 | msgstr "" |
866 | |
867 | -#: ../music-app.qml:579 ../music-app.qml:1083 |
868 | +#: ../music-app.qml:589 ../music-app.qml:1256 |
869 | #: com.ubuntu.music_music.desktop.in.in.h:1 |
870 | msgid "Music" |
871 | msgstr "" |
872 | |
873 | -#: ../music-app.qml:597 |
874 | +#: ../music-app.qml:608 |
875 | msgid "Debug: " |
876 | msgstr "" |
877 | |
878 | -#: ../music-app.qml:839 |
879 | +#: ../music-app.qml:1011 |
880 | msgid "New playlist" |
881 | msgstr "" |
882 | |
883 | -#: ../music-app.qml:853 |
884 | +#: ../music-app.qml:1025 |
885 | msgid "Create" |
886 | msgstr "" |
887 | |
888 | -#: ../music-app.qml:1117 |
889 | +#: ../music-app.qml:1290 |
890 | msgid "No music found" |
891 | msgstr "" |
892 | |
893 | -#: ../music-app.qml:1128 |
894 | +#: ../music-app.qml:1301 |
895 | msgid "Please import music" |
896 | msgstr "" |
897 | |
898 | -#: ../music-app.qml:1157 |
899 | +#: ../music-app.qml:1330 |
900 | msgid "No playlists found" |
901 | msgstr "" |
902 | |
903 | -#: ../music-app.qml:1168 |
904 | +#: ../music-app.qml:1341 |
905 | msgid "Click the + to create a playlist" |
906 | msgstr "" |
907 | |
908 | -#: ../music-app.qml:1197 |
909 | +#: ../music-app.qml:1370 |
910 | msgid "No recent albums or playlists found" |
911 | msgstr "" |
912 | |
913 | -#: ../music-app.qml:1208 |
914 | +#: ../music-app.qml:1381 |
915 | msgid "Play some music to see your favorites" |
916 | msgstr "" |
917 | |
918 | |
919 | === modified file 'tests/autopilot/music_app/__init__.py' |
920 | --- tests/autopilot/music_app/__init__.py 2015-01-10 15:53:24 +0000 |
921 | +++ tests/autopilot/music_app/__init__.py 2015-01-20 05:33:53 +0000 |
922 | @@ -107,6 +107,10 @@ |
923 | return self.main_view.wait_select_single( |
924 | MusicPage, objectName='tracksPage') |
925 | |
926 | + def get_walkthrough_page(self): |
927 | + return self.main_view.wait_select_single(Walkthrough, |
928 | + objectName="walkthroughPage") |
929 | + |
930 | @property |
931 | def loaded(self): |
932 | return (not self.main_view.select_single("ActivityIndicator", |
933 | @@ -137,6 +141,18 @@ |
934 | self.main_view = self.get_root_instance().select_single(MainView) |
935 | |
936 | |
937 | +class Walkthrough(Page): |
938 | + """ Autopilot helper for the walkthrough page """ |
939 | + def __init__(self, *args): |
940 | + super(Walkthrough, self).__init__(*args) |
941 | + |
942 | + self.visible.wait_for(True) |
943 | + |
944 | + @click_object |
945 | + def skip(self): |
946 | + return self.wait_select_single("Label", objectName="skipLabel") |
947 | + |
948 | + |
949 | class MusicAlbums(): |
950 | """ Autopilot helper for the albums page """ |
951 | def __init__(self, *args): |
952 | |
953 | === modified file 'tests/autopilot/music_app/tests/test_music.py' |
954 | --- tests/autopilot/music_app/tests/test_music.py 2014-11-07 23:08:29 +0000 |
955 | +++ tests/autopilot/music_app/tests/test_music.py 2015-01-20 05:33:53 +0000 |
956 | @@ -1,5 +1,5 @@ |
957 | # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- |
958 | -# Copyright 2013, 2014 Canonical |
959 | +# Copyright 2013, 2014, 2015 Canonical |
960 | # |
961 | # This program is free software: you can redistribute it and/or modify it |
962 | # under the terms of the GNU General Public License version 3, as published |
963 | @@ -47,6 +47,9 @@ |
964 | } |
965 | ] |
966 | |
967 | + # Skip the walkthrough for every test |
968 | + self.app.get_walkthrough_page().skip() |
969 | + |
970 | @property |
971 | def player(self): |
972 | return self.app.player |
PASSED: Continuous integration, rev:693 91.189. 93.70:8080/ job/music- app-remix- ci/150/ 91.189. 93.70:8080/ job/generic- mediumtests- utopic- python3/ 1189 91.189. 93.70:8080/ job/generic- mediumtests- utopic- python3/ 1189/artifact/ work/output/ *zip*/output. zip 91.189. 93.70:8080/ job/music- app-remix- utopic- amd64-ci/ 150
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild: 91.189. 93.70:8080/ job/music- app-remix- ci/150/ rebuild
http://