Merge lp:~vthompson/music-app/remix-walkthrough into lp:music-app/remix

Proposed by Victor Thompson
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
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.

To post a comment you must log in.
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Andrew Hayzen (ahayzen) wrote :

2 inline comments and we need design for this.

review: Needs Information
700. By Victor Thompson

Update pot file

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
701. By Victor Thompson

update to show walkthrough when there is no music

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Andrew Hayzen (ahayzen) wrote :

Would be good if we could get rid of these console errors

file:///home/andy/Workspace/sdk/vthompson-music-app-remix-walkthrough/common/Walkthrough/Slide2.qml:31:9: QML Column: Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column. Column will not function.
file:///home/andy/Workspace/sdk/vthompson-music-app-remix-walkthrough/common/Walkthrough/Slide1.qml:32:9: QML Column: Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column. Column will not function.

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.

review: Needs Fixing
702. By Victor Thompson

Merge AP skip of walkthrough

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
703. By Victor Thompson

Dynamically create Walkthrough.

704. By Victor Thompson

Add objectName to object.

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
705. By Victor Thompson

revert debug code

706. By Victor Thompson

Add objectName to FIrstRunWalkthrough.qml

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
707. By Victor Thompson

Set toolbar visible and firstRun to false when finished.

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
708. By Victor Thompson

Resolve console warnings

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
709. By Victor Thompson

Update toolbar visible toggle

Revision history for this message
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Andrew Hayzen (ahayzen) wrote :

Awesome, thanks for adding those extra fixes :)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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'
429Binary 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'
431Binary 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'
433Binary 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'
435Binary 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

Subscribers

People subscribed via source and target branches