Merge lp:~unity-team/ubuntu-system-settings/welcome-wizard into lp:ubuntu-system-settings

Proposed by Michael Terry
Status: Merged
Approved by: Sebastien Bacher
Approved revision: 508
Merged at revision: 635
Proposed branch: lp:~unity-team/ubuntu-system-settings/welcome-wizard
Merge into: lp:ubuntu-system-settings
Diff against target: 812 lines (+653/-19)
20 files modified
CMakeLists.txt (+1/-0)
debian/rules (+1/-0)
debian/ubuntu-system-settings.install (+1/-0)
po/CMakeLists.txt (+34/-13)
src/CMakeLists.txt (+0/-6)
tests/mocks/Unity/Application/OSKController.qml (+20/-0)
tests/mocks/Unity/Application/qmldir (+2/-0)
wizard/CMakeLists.txt (+18/-0)
wizard/main.cpp (+64/-0)
wizard/qml/Components/Page.qml (+65/-0)
wizard/qml/Pages/LocationPage.qml (+52/-0)
wizard/qml/Pages/SetupCompletePage.qml (+51/-0)
wizard/qml/Pages/SimCardPage.qml (+67/-0)
wizard/qml/Pages/SpinnerPage.qml (+44/-0)
wizard/qml/Pages/WelcomePage.qml (+83/-0)
wizard/qml/Pages/WiFiPage.qml (+43/-0)
wizard/qml/main.qml (+56/-0)
wizard/test.sh (+16/-0)
wizard/ubuntu-system-settings-wizard.conf (+22/-0)
wizard/ui.qrc (+13/-0)
To merge this branch: bzr merge lp:~unity-team/ubuntu-system-settings/welcome-wizard
Reviewer Review Type Date Requested Status
Sebastien Bacher (community) Approve
PS Jenkins bot continuous-integration Needs Fixing
Iain Lane Needs Information
Review via email: mp+186862@code.launchpad.net

Commit message

Add disabled skeleton of a "Welcome to Ubuntu" wizard for first-time boot. Will be enabled when it is more complete.

Description of the change

Add disabled skeleton of a "Welcome to Ubuntu" wizard for first-time boot. Will be enabled when it is more complete.

This builds a new executable (system-settings-wizard -- why aren't the executables ubuntu- namespaced like the packages and desktop files?). It adds an upstart job to get started one time before unity8 (except the packaging disables that job because we're not ready to go live yet).

The eventual experience and some mockups are documented here:
https://docs.google.com/a/canonical.com/document/d/1JHFd_6mYdUTd0RpR-Sm7-WnX-06rY8r58K3Cz32mhJg/edit#heading=h.a99ud9r7cofq

To test on desktop:
debuild
./wizard/test.sh

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Sebastien Bacher (seb128) wrote :

Thank you for your work, could you do a summary of the changes/what's the intend? How do you test the current version? (e.g what do you install/run)?

Some first review comments:

- why do you add an "account" plugin? that icon is not in the design from https://wiki.ubuntu.com/SystemSettings and is not working

Is the intend to provide bindings to access accountsservice? If so we probably don't need a new directory for it, nor a .settings (which adds an icon in the settings grid)

- there is a conflict in po/CMakefile.list, that needs to be rebased on trunk

* main.cpp : start_xsession() seems really hackish, don't we have a libupstart we can use for those things rather than doing system() calls? doing a stop of the osk first seems wrong as well

* the __<name> variable are not easy to read/type and we don't use that convention in system settings ... could you get ride of that (or make an argument on why we should have it ;-)

review: Needs Fixing
Revision history for this message
Andrea Cimitan (cimi) wrote :

> Thank you for your work, could you do a summary of the changes/what's the
> intend? How do you test the current version? (e.g what do you install/run)?
>
>
> Some first review comments:
>
> - why do you add an "account" plugin? that icon is not in the design from
> https://wiki.ubuntu.com/SystemSettings and is not working
>
> Is the intend to provide bindings to access accountsservice? If so we probably
> don't need a new directory for it, nor a .settings (which adds an icon in the
> settings grid)
>
We need a way to edit/add/remove users on at least tablet and desktop. The plugin is meant to do that, even for the moment it's limited to change names. I imagine we will have a page on the system settings to edit the users indeed.
Icon will get updated when we'll add that page I believe, in the meanwhile it's there as a placeholder but it's hidden to the user

> - there is a conflict in po/CMakefile.list, that needs to be rebased on trunk
>
> * main.cpp : start_xsession() seems really hackish, don't we have a libupstart
> we can use for those things rather than doing system() calls? doing a stop of
> the osk first seems wrong as well
>
> * the __<name> variable are not easy to read/type and we don't use that
> convention in system settings ... could you get ride of that (or make an
> argument on why we should have it ;-)

498. By Michael Terry

Merge from trunk

Revision history for this message
Michael Terry (mterry) wrote :

> - there is a conflict in po/CMakefile.list, that needs to be rebased on trunk

Fixed.

> * main.cpp : start_xsession() seems really hackish, don't we have a libupstart we can use for those things rather than doing system() calls? doing a stop of the osk first seems wrong as well

Eh, it's a bit hackish, agreed. I use system() because libupstart's API is a pain. :) That whole section is temporary until we figure out exactly how we want to handle the handover. And once we split unity8-greeter out, the wizard will be inserted into the upstart workflow in a different place anyway.

Stopping the OSK is a workaround for an OSK bug. It seemed to be a known bug at the time of writing the workaround. I'd have to investigate to see if it's still a problem. But this code was written at the time of Mir being enabled by default, so things have likely changed.

Anyway, my point is that start_xsession is a known pile of hacks, to be replaced by better code. If you accept that welcome-wizard will be improved incrementally, please overlook this section of code.

> * the __<name> variable are not easy to read/type and we don't use that
> convention in system settings ... could you get ride of that (or make an
> argument on why we should have it ;-)

What's the convention for marking non-public variables? It looks like you just don't bother?

Revision history for this message
Sebastien Bacher (seb128) wrote :

> We need a way to edit/add/remove users on at least tablet and desktop. The plugin is meant to do that, even
> for the moment it's limited to change names. I imagine we will have a page on the system settings to edit
> the users indeed.
> Icon will get updated when we'll add that page I believe, in the meanwhile it's there as a placeholder but
> it's hidden to the user

Having a plugin to handle account changes is fine, that should be a backend (like for other panels), no a panel with a .settings. Not that in the current version the placeholder is not hidden to the user, that merge is adding an account icon in the settings grid which is not in the design, duplicating an icon (next to online account) and giving an empty/not working page when clicked

> If you accept that welcome-wizard will be improved incrementally, please overlook this section of code.

Ok, fair enough. If we workaround an OSK bug I would like at least a bug reference in a code comment though...

> What's the convention for marking non-public variables? It looks like you just don't bother?

Right, those sources are standalone UIs, not re-usable components, so by definition everything is private to that only user...

BTW I would still welcome tips on how to actually run/test that code on a desktop (or do I need to build a package and install it on the device to test?)

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Andrea Cimitan (cimi) wrote :

> > We need a way to edit/add/remove users on at least tablet and desktop. The
> plugin is meant to do that, even
> > for the moment it's limited to change names. I imagine we will have a page
> on the system settings to edit
> > the users indeed.
> > Icon will get updated when we'll add that page I believe, in the meanwhile
> it's there as a placeholder but
> > it's hidden to the user
>
> Having a plugin to handle account changes is fine, that should be a backend
> (like for other panels), no a panel with a .settings. Not that in the current
> version the placeholder is not hidden to the user, that merge is adding an
> account icon in the settings grid which is not in the design, duplicating an
> icon (next to online account) and giving an empty/not working page when
> clicked
>

I think it wasn't when I did the original work, I'll work on it.
>
> > If you accept that welcome-wizard will be improved incrementally, please
> overlook this section of code.
>
> Ok, fair enough. If we workaround an OSK bug I would like at least a bug
> reference in a code comment though...
>
>
> > What's the convention for marking non-public variables? It looks like you
> just don't bother?
>
> Right, those sources are standalone UIs, not re-usable components, so by
> definition everything is private to that only user...
>
>
> BTW I would still welcome tips on how to actually run/test that code on a
> desktop (or do I need to build a package and install it on the device to
> test?)

499. By Andrea Cimitan

Remove panel

500. By Michael Terry

Add simple testing script to make running on desktop easier

501. By Michael Terry

Drop __ prefix for private variables

502. By Michael Terry

Expand OSK maliit-server restart bug comment

Revision history for this message
Michael Terry (mterry) wrote :

OK, Cimi added a commit to address your plugin comment.

I've expanded the OSK bug comment (basically saying it used to be a bug, needs to be re-investigated, but likely won't matter for the way we eventually will launch the wizard).

I've also taken out the __ prefixes and added a script to the source to test the wizard locally. And added a comment to this merge describing how to use it (basically just build locally and run the script).

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Sebastien Bacher (seb128) wrote :

Thanks for the update, that looks mostly good (let's not nitpick on UI/code for the first landing, we can fix stuff once the basis are in), some things to fix though:

- there is a conflicts in debian/rules (we merged autopilots support which change it as well), can you rebase again?

- trying to run it on my desktop gives a ""Unity.Application" is not installed" error ... is that a missing depends? (why is that import needed in the main source?)

- running "make pot" in po/ gives an error

"extractsettingsinfo: error: argument files: can't open '../plugins/orientation-lock//orientation-lock.settings'"

review: Needs Fixing
Revision history for this message
Iain Lane (laney) wrote :

Can you reassure about the technical debt we'd be introducing here by explaining what the eventual plan for launching the wizard is and why it can't be done like that straight away?

A small review

  - I think it's best if you don't update the translation templates here; it's likely to lead to conflicts (we usually do them in separate MPs)
  - 2774 + anchors {
    2775 + fill: parent
    2776 + topMargin: topMargin
    2777 + leftMargin: leftMargin
    2778 + rightMargin: rightMargin
    2779 + bottomMargin: bottomMargin
    2780 + }

    Is it necessary to set the margins if you fill: parent? (It might be, just checking)
  - Feels like it would be nicer to add wizard/qml to the import path rather than importing a relative path.
  - Thanks for the accounts plugin; do you think it could be generalised and used everywhere we use AS in u-s-s? Not necessarily a blocker for this.
  - Please wrap at 80 columns.

review: Needs Information
Revision history for this message
Iain Lane (laney) wrote :

also our convention for member variables is to prefix them with "m_"

Revision history for this message
Michael Terry (mterry) wrote :

> - there is a conflicts in debian/rules (we merged autopilots support which change it as well), can you rebase again?

Fixed.

> - trying to run it on my desktop gives a ""Unity.Application" is not installed" error ... is that a missing depends? (why is that import needed in the main source?)

Unity.Application contains the OSKController qml item. There is a mock for it in the source that I've added. Run debuild, then run wizard/test.sh to run the wizard locally.

> - running "make pot" in po/ gives an error
>
> "extractsettingsinfo: error: argument files: can't open '../plugins/orientation-lock//orientation-lock.settings'"

Fixed.

> - I think it's best if you don't update the translation templates here; it's likely to lead to conflicts (we usually do them in separate MPs)

Fixed.

> Is it necessary to set the margins if you fill: parent? (It might be, just checking)

Yes. We could re-organize the hierarchy to move some margins into the parent. But the way it is now, you need to specify both. I don't think it's a big deal, but if you like, we can move things around.

> - Feels like it would be nicer to add wizard/qml to the import path rather than importing a relative path.

I tried to add the qrc:/qml to the import path, which the docs say should work, but I couldn't get it to find the Components subdirectory. Instead, I just specified "qrc:/qml/Components" instead of "../Components" which worked fine.

> - Thanks for the accounts plugin; do you think it could be generalised and used everywhere we use AS in u-s-s? Not necessarily a blocker for this.

Sure. Over time, functionality could be moved into it.

> - Please wrap at 80 columns.

You mean in the qml files? OK, fixed, with the exception of translated strings, which xgettext doesn't pick up if split over lines.

> also our convention for member variables is to prefix them with "m_"

I thought I did?

> Can you reassure about the technical debt we'd be introducing here by explaining what the eventual plan for launching the wizard is and why it can't be done like that straight away?

I wouldn't say technical debt, just incomplete code. It has to be fixed before enabling for the user, so it's not like we're taking a temporary shortcut.

The deal with launching is that once the greeter is split out from the user unity8 process, it needs to be launched from a system upstart job, rather than the user upstart job in this branch. Plus, the transition between the wizard and the greeter will be controlled by unity-system-compositor then.

These are just moving parts that we'll have to wait to settle before really finalizing it here.

OK, I think that's all the review comments addressed? Please re-review.

503. By Michael Terry

Merge from trunk

504. By Michael Terry

Restore pot file to trunk; updating it will be separate MP

505. By Michael Terry

Shorten the SIM page title

506. By Michael Terry

Use full qrc url for Component folder and wrap qml at 80 columns, except for translated strings

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Sebastien Bacher (seb128) wrote :

Thanks for the update. Laney added a library for accountsservice (see https://code.launchpad.net/~laney/ubuntu-system-settings/as-library/+merge/200646) ... could you update your code to use that one (see https://code.launchpad.net/~laney/ubuntu-system-settings/private-as-background/+merge/200648 for an example of client)

review: Needs Fixing
Revision history for this message
Andrea Cimitan (cimi) wrote :

> Thanks for the update. Laney added a library for accountsservice (see
> https://code.launchpad.net/~laney/ubuntu-system-settings/as-
> library/+merge/200646) ... could you update your code to use that one (see
> https://code.launchpad.net/~laney/ubuntu-system-settings/private-as-
> background/+merge/200648 for an example of client)
I'll do it

Revision history for this message
Sebastien Bacher (seb128) wrote :

Is there any news of the changes there?

507. By Michael Terry

Merge from trunk

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
508. By Michael Terry

Drop name screen and associated (redundant) AccountsService plugin

Revision history for this message
Michael Terry (mterry) wrote :

OK, dropped the account plugin entirely, because new designs don't have "About you" page at all (not needed for phone, though we should eventually add something similar back for tablet/desktop). When we do add it back, we can use the proper library.

Ready for review again, I think.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Sebastien Bacher (seb128) wrote :

Seems fine to me, it's not very useful in the current form but it's not exposed in a visible way either and it gives us a basis to iterate and review changes, let's get it in then!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2014-01-22 04:06:41 +0000
3+++ CMakeLists.txt 2014-02-20 21:25:07 +0000
4@@ -68,6 +68,7 @@
5 add_subdirectory(plugins)
6 add_subdirectory(src)
7 add_subdirectory(tests)
8+add_subdirectory(wizard)
9
10 configure_file(ubuntu-system-settings.desktop.in ubuntu-system-settings.desktop @ONLY)
11 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ubuntu-system-settings.desktop DESTINATION share/applications)
12
13=== modified file 'debian/rules'
14--- debian/rules 2013-12-05 17:40:46 +0000
15+++ debian/rules 2014-02-20 21:25:07 +0000
16@@ -8,6 +8,7 @@
17 include /usr/share/dpkg/architecture.mk
18
19 override_dh_install:
20+ rm -r debian/tmp/usr/share/upstart # not ready yet; also, do not enable wizard without tests!
21 cd tests/autopilot; \
22 set -ex; for python in $(shell pyversions -r); do \
23 $$python setup.py install --root=$(CURDIR)/debian/tmp --install-layout=deb; \
24
25=== modified file 'debian/ubuntu-system-settings.install'
26--- debian/ubuntu-system-settings.install 2014-01-30 16:28:59 +0000
27+++ debian/ubuntu-system-settings.install 2014-02-20 21:25:07 +0000
28@@ -4,4 +4,5 @@
29 usr/share/glib-2.0
30 usr/share/locale
31 usr/share/ubuntu/settings/system
32+#usr/share/upstart
33 usr/share/url-dispatcher
34
35=== modified file 'po/CMakeLists.txt'
36--- po/CMakeLists.txt 2013-11-18 13:57:43 +0000
37+++ po/CMakeLists.txt 2014-02-20 21:25:07 +0000
38@@ -1,8 +1,15 @@
39-file(GLOB SOURCECODE "${CMAKE_SOURCE_DIR}/plugins/*/*.qml" "${CMAKE_SOURCE_DIR}/src/qml/*.qml")
40-file(GLOB SETTINGSFILES "${CMAKE_SOURCE_DIR}/plugins/*/*.settings")
41+file(GLOB CPPFILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
42+ "${CMAKE_SOURCE_DIR}/src/*.cpp")
43+file(GLOB QMLFILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
44+ "${CMAKE_SOURCE_DIR}/plugins/*/*.qml"
45+ "${CMAKE_SOURCE_DIR}/src/qml/*.qml"
46+ "${CMAKE_SOURCE_DIR}/wizard/qml/*/*.qml")
47+file(GLOB SETTINGSFILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
48+ "${CMAKE_SOURCE_DIR}/plugins/*/*.settings")
49
50 add_custom_command(OUTPUT settings.js
51- COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/extractsettingsinfo ${SETTINGSFILES} -o ${CMAKE_CURRENT_BINARY_DIR}/settings.js
52+ COMMAND ./extractsettingsinfo ${SETTINGSFILES} -o ${CMAKE_CURRENT_BINARY_DIR}/settings.js
53+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
54 DEPENDS ${SETTINGSFILES}
55 )
56
57@@ -11,16 +18,30 @@
58 # DEPENDS ${CMAKE_SOURCE_DIR}/ubuntu-system-settings.desktop
59 #)
60
61-
62-add_custom_target(pot
63- COMMAND ${XGETTEXT_BIN} -o ${CMAKE_CURRENT_SOURCE_DIR}/ubuntu-system-settings.pot
64- -copyright=\"Canonical Ltd. \"
65- --package-name ubuntu-system-settings
66- --qt --c++ --add-comments=TRANSLATORS
67- --keyword=tr --keyword=tr:1,2 --from-code=UTF-8
68- ${SOURCECODE} ${DESKTOPFILE} settings.js
69- DEPENDS ${SOURCECODE} settings.js #desktop.js
70-)
71+add_custom_target(pot-qml
72+ COMMAND ${XGETTEXT_BIN} -o ubuntu-system-settings.pot
73+ --copyright=\"Canonical Ltd.\"
74+ --package-name ubuntu-system-settings
75+ --qt --c++ --add-comments=TRANSLATORS
76+ --keyword=tr --keyword=tr:1,2 --from-code=UTF-8
77+ ${QMLFILES} "${CMAKE_CURRENT_BINARY_DIR}/settings.js"
78+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
79+ DEPENDS ${QMLFILES} "${CMAKE_CURRENT_BINARY_DIR}/settings.js" #desktop.js
80+)
81+
82+add_custom_target(pot-cpp
83+ COMMAND ${XGETTEXT_BIN} -o ubuntu-system-settings.pot
84+ --join-existing
85+ --copyright=\"Canonical Ltd.\"
86+ --package-name ubuntu-system-settings
87+ --qt --c++ --add-comments=TRANSLATORS
88+ --keyword=_ --from-code=UTF-8
89+ ${CPPFILES}
90+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
91+ DEPENDS pot-qml ${CPPFILES}
92+)
93+
94+add_custom_target(pot DEPENDS pot-qml pot-cpp)
95
96 set(languages "ar;ast;be;bg;bs;ca;cs;de;el;en_AU;en_GB;eo;es;fa;fi;fr;gl;gu;he;hi;hr;hu;id;it;km;ko;lo;lv;ms;my;nb;pl;pt_BR;pt;ru;shn;sl;sv;tr;ug;uk;xh;zh_CN;zh_HK;zh_TW")
97 foreach(i ${languages})
98
99=== modified file 'src/CMakeLists.txt'
100--- src/CMakeLists.txt 2014-01-31 15:07:01 +0000
101+++ src/CMakeLists.txt 2014-02-20 21:25:07 +0000
102@@ -36,9 +36,3 @@
103 qt5_use_modules(uss-accountsservice Core Qml DBus)
104 set_target_properties(uss-accountsservice PROPERTIES VERSION 0.0 SOVERSION 0.0)
105 install(TARGETS uss-accountsservice LIBRARY DESTINATION ${PLUGIN_MODULE_DIR} NAMELINK_SKIP)
106-
107-add_custom_target(po COMMAND
108-${XGETTEXT_BIN} -o ${CMAKE_SOURCE_DIR}/po/ubuntu-system-settings.pot -d ubuntu-system-settings
109---keyword=_ ${USS_SOURCES}
110-WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
111-)
112
113=== added directory 'tests/mocks'
114=== added directory 'tests/mocks/Unity'
115=== added directory 'tests/mocks/Unity/Application'
116=== added file 'tests/mocks/Unity/Application/OSKController.qml'
117--- tests/mocks/Unity/Application/OSKController.qml 1970-01-01 00:00:00 +0000
118+++ tests/mocks/Unity/Application/OSKController.qml 2014-02-20 21:25:07 +0000
119@@ -0,0 +1,20 @@
120+/*
121+ * Copyright (C) 2013 Canonical, Ltd.
122+ *
123+ * This program is free software; you can redistribute it and/or modify
124+ * it under the terms of the GNU General Public License as published by
125+ * the Free Software Foundation; version 3.
126+ *
127+ * This program is distributed in the hope that it will be useful,
128+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
129+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
130+ * GNU General Public License for more details.
131+ *
132+ * You should have received a copy of the GNU General Public License
133+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
134+ */
135+
136+import QtQuick 2.0;
137+
138+Item {
139+}
140
141=== added file 'tests/mocks/Unity/Application/qmldir'
142--- tests/mocks/Unity/Application/qmldir 1970-01-01 00:00:00 +0000
143+++ tests/mocks/Unity/Application/qmldir 2014-02-20 21:25:07 +0000
144@@ -0,0 +1,2 @@
145+module Unity.Application
146+OSKController 0.1 OSKController.qml
147
148=== added directory 'wizard'
149=== added file 'wizard/CMakeLists.txt'
150--- wizard/CMakeLists.txt 1970-01-01 00:00:00 +0000
151+++ wizard/CMakeLists.txt 2014-02-20 21:25:07 +0000
152@@ -0,0 +1,18 @@
153+add_definitions(-DI18N_DOMAIN="ubuntu-system-settings")
154+add_definitions(-DPLUGIN_PRIVATE_MODULE_DIR="${PLUGIN_PRIVATE_MODULE_DIR}")
155+add_definitions(-DPLUGIN_MANIFEST_DIR="${PLUGIN_MANIFEST_DIR}")
156+add_definitions(-DPLUGIN_QML_DIR="${PLUGIN_QML_DIR}")
157+add_definitions(-DPLUGIN_MODULE_DIR="${PLUGIN_MODULE_DIR}")
158+
159+set(WIZARD_SOURCES
160+ main.cpp
161+)
162+
163+QT5_ADD_RESOURCES(system-settings-wizard-resources ui.qrc)
164+
165+add_executable(system-settings-wizard ${WIZARD_SOURCES} ${system-settings-wizard-resources})
166+
167+qt5_use_modules(system-settings-wizard Core Gui Quick Qml)
168+
169+install(TARGETS system-settings-wizard RUNTIME DESTINATION bin)
170+install(FILES ubuntu-system-settings-wizard.conf DESTINATION share/upstart)
171
172=== added file 'wizard/main.cpp'
173--- wizard/main.cpp 1970-01-01 00:00:00 +0000
174+++ wizard/main.cpp 2014-02-20 21:25:07 +0000
175@@ -0,0 +1,64 @@
176+/*
177+ * This file is part of system-settings
178+ *
179+ * Copyright (C) 2013 Canonical Ltd.
180+ *
181+ * This program is free software: you can redistribute it and/or modify it
182+ * under the terms of the GNU General Public License version 3, as published
183+ * by the Free Software Foundation.
184+ *
185+ * This program is distributed in the hope that it will be useful, but
186+ * WITHOUT ANY WARRANTY; without even the implied warranties of
187+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
188+ * PURPOSE. See the GNU General Public License for more details.
189+ *
190+ * You should have received a copy of the GNU General Public License along
191+ * with this program. If not, see <http://www.gnu.org/licenses/>.
192+ */
193+
194+#include <libintl.h>
195+#include <QGuiApplication>
196+#include <QQmlContext>
197+#include <QUrl>
198+#include <QQuickView>
199+#include <QtQml>
200+
201+void start_xsession()
202+{
203+ // When we get a request to stop, we don't quit but rather start xsession
204+ // in the background. When xsession finishes loading, we'll be stopped
205+ // by upstart.
206+
207+ // But first, stop maliit-server, it needs to be started by unity8.
208+ // This was an OSK bug in October, need to discover if it is still a
209+ // problem, especially once we become a system upstart job.
210+ if (system("stop maliit-server") != 0)
211+ {} // ignore any errors
212+
213+ // Now resume starting xsession, which we interrupted with our upstart job
214+ QString command = "initctl emit xsession";
215+ command += " SESSION=" + qgetenv("DESKTOP_SESSION");
216+ command += " SESSIONTYPE=" + qgetenv("SESSIONTYPE");
217+ command += " &";
218+ if (system(command.toLatin1().data()) != 0)
219+ QGuiApplication::quit(); // just quit if we can't start xsession
220+}
221+
222+int main(int argc, char **argv)
223+{
224+ QGuiApplication app(argc, argv);
225+
226+ bindtextdomain(I18N_DOMAIN, NULL);
227+ textdomain(I18N_DOMAIN);
228+
229+ QQuickView view;
230+ QObject::connect(view.engine(), &QQmlEngine::quit, start_xsession);
231+ view.setResizeMode(QQuickView::SizeRootObjectToView);
232+ view.engine()->addImportPath(PLUGIN_PRIVATE_MODULE_DIR);
233+ view.engine()->addImportPath(PLUGIN_QML_DIR);
234+ view.setSource(QUrl("qrc:/qml/main.qml"));
235+ view.show();
236+// view.showFullScreen();
237+
238+ return app.exec();
239+}
240
241=== added directory 'wizard/qml'
242=== added directory 'wizard/qml/Components'
243=== added file 'wizard/qml/Components/Page.qml'
244--- wizard/qml/Components/Page.qml 1970-01-01 00:00:00 +0000
245+++ wizard/qml/Components/Page.qml 2014-02-20 21:25:07 +0000
246@@ -0,0 +1,65 @@
247+/*
248+ * Copyright (C) 2013 Canonical, Ltd.
249+ *
250+ * This program is free software; you can redistribute it and/or modify
251+ * it under the terms of the GNU General Public License as published by
252+ * the Free Software Foundation; version 3.
253+ *
254+ * This program is distributed in the hope that it will be useful,
255+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
256+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
257+ * GNU General Public License for more details.
258+ *
259+ * You should have received a copy of the GNU General Public License
260+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
261+ */
262+
263+import QtQuick 2.0
264+import Ubuntu.Components 0.1
265+
266+Page {
267+ readonly property real buttonMargin: units.gu(2)
268+ readonly property real buttonWidth: (width - buttonMargin * 2) / 2 -
269+ buttonMargin / 2
270+ readonly property real topMargin: units.gu(5)
271+ readonly property real leftMargin: units.gu(3)
272+ readonly property real rightMargin: units.gu(3)
273+ readonly property real bottomMargin: backButton.height + buttonMargin * 2
274+
275+ property bool hasBackButton: true
276+ property alias forwardButtonSourceComponent: forwardButton.sourceComponent
277+
278+ visible: false
279+ tools: ToolbarItems {
280+ back: null
281+ }
282+
283+ Button {
284+ id: backButton
285+ width: buttonWidth
286+ anchors {
287+ left: parent.left
288+ bottom: parent.bottom
289+ leftMargin: buttonMargin
290+ bottomMargin: buttonMargin
291+ }
292+ z: 1
293+ text: i18n.tr("Back")
294+ visible: pageStack.depth > 1 && hasBackButton
295+ gradient: UbuntuColors.greyGradient
296+
297+ onClicked: pageStack.pop()
298+ }
299+
300+ Loader {
301+ id: forwardButton
302+ width: buttonWidth
303+ anchors {
304+ right: parent.right
305+ bottom: parent.bottom
306+ rightMargin: buttonMargin
307+ bottomMargin: buttonMargin
308+ }
309+ z: 1
310+ }
311+}
312
313=== added directory 'wizard/qml/Pages'
314=== added file 'wizard/qml/Pages/LocationPage.qml'
315--- wizard/qml/Pages/LocationPage.qml 1970-01-01 00:00:00 +0000
316+++ wizard/qml/Pages/LocationPage.qml 2014-02-20 21:25:07 +0000
317@@ -0,0 +1,52 @@
318+/*
319+ * Copyright (C) 2013 Canonical, Ltd.
320+ *
321+ * This program is free software; you can redistribute it and/or modify
322+ * it under the terms of the GNU General Public License as published by
323+ * the Free Software Foundation; version 3.
324+ *
325+ * This program is distributed in the hope that it will be useful,
326+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
327+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
328+ * GNU General Public License for more details.
329+ *
330+ * You should have received a copy of the GNU General Public License
331+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
332+ */
333+
334+import QtQuick 2.0
335+import Ubuntu.Components 0.1
336+import "qrc:/qml/Components" as LocalComponents
337+
338+LocalComponents.Page {
339+ title: i18n.tr("Your phone settings")
340+ forwardButtonSourceComponent: forwardButton
341+
342+ Item {
343+ id: content
344+ anchors {
345+ fill: parent
346+ topMargin: topMargin
347+ leftMargin: leftMargin
348+ rightMargin: rightMargin
349+ bottomMargin: bottomMargin
350+ }
351+
352+ Label {
353+ width: parent.width
354+ wrapMode: Text.WordWrap
355+ fontSize: "large"
356+ text: i18n.tr("Your phone is setup to automatically report errors to Canonical. This can be disabled in system settings.") +
357+ "\n\n" +
358+ i18n.tr("Your phone is setup to detect your location. This can be disabled in system settings.")
359+ }
360+ }
361+
362+ Component {
363+ id: forwardButton
364+ Button {
365+ text: i18n.tr("Continue")
366+ onClicked: pageStack.push(Qt.resolvedUrl("SetupCompletePage.qml"))
367+ }
368+ }
369+}
370
371=== added file 'wizard/qml/Pages/SetupCompletePage.qml'
372--- wizard/qml/Pages/SetupCompletePage.qml 1970-01-01 00:00:00 +0000
373+++ wizard/qml/Pages/SetupCompletePage.qml 2014-02-20 21:25:07 +0000
374@@ -0,0 +1,51 @@
375+/*
376+ * Copyright (C) 2013 Canonical, Ltd.
377+ *
378+ * This program is free software; you can redistribute it and/or modify
379+ * it under the terms of the GNU General Public License as published by
380+ * the Free Software Foundation; version 3.
381+ *
382+ * This program is distributed in the hope that it will be useful,
383+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
384+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
385+ * GNU General Public License for more details.
386+ *
387+ * You should have received a copy of the GNU General Public License
388+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
389+ */
390+
391+import QtQuick 2.0
392+import Ubuntu.Components 0.1
393+import "qrc:/qml/Components" as LocalComponents
394+
395+LocalComponents.Page {
396+ title: i18n.tr("That’s it!")
397+ forwardButtonSourceComponent: forwardButton
398+
399+ Item {
400+ id: content
401+ anchors {
402+ fill: parent
403+ topMargin: topMargin
404+ leftMargin: leftMargin
405+ rightMargin: rightMargin
406+ bottomMargin: bottomMargin
407+ }
408+
409+ Label {
410+ width: parent.width
411+ wrapMode: Text.WordWrap
412+ fontSize: "large"
413+ text: i18n.tr("It’s great to have you in the Ubuntu Community.") +
414+ "\n\n" +
415+ i18n.tr("You’re now ready to enjoy your new phone.")
416+ }
417+ }
418+ Component {
419+ id: forwardButton
420+ Button {
421+ text: i18n.tr("Finish")
422+ onClicked: pageStack.push(Qt.resolvedUrl("SpinnerPage.qml"))
423+ }
424+ }
425+}
426
427=== added file 'wizard/qml/Pages/SimCardPage.qml'
428--- wizard/qml/Pages/SimCardPage.qml 1970-01-01 00:00:00 +0000
429+++ wizard/qml/Pages/SimCardPage.qml 2014-02-20 21:25:07 +0000
430@@ -0,0 +1,67 @@
431+/*
432+ * Copyright (C) 2013 Canonical, Ltd.
433+ *
434+ * This program is free software; you can redistribute it and/or modify
435+ * it under the terms of the GNU General Public License as published by
436+ * the Free Software Foundation; version 3.
437+ *
438+ * This program is distributed in the hope that it will be useful,
439+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
440+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
441+ * GNU General Public License for more details.
442+ *
443+ * You should have received a copy of the GNU General Public License
444+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
445+ */
446+
447+import QtQuick 2.0
448+import Ubuntu.Components 0.1
449+import "qrc:/qml/Components" as LocalComponents
450+
451+LocalComponents.Page {
452+ title: i18n.tr("No SIM installed")
453+ forwardButtonSourceComponent: forwardButton
454+
455+ Item {
456+ id: content
457+ anchors {
458+ fill: parent
459+ topMargin: topMargin
460+ rightMargin: rightMargin
461+ bottomMargin: bottomMargin
462+ }
463+
464+ Image {
465+ id: image
466+ anchors {
467+ top: parent.top
468+ left: parent.left
469+ leftMargin: units.gu(2.5)
470+ }
471+ source: "data/meet_ubuntu_simcard@30.png"
472+ height: units.gu(9)
473+ width: units.gu(12.5)
474+ }
475+
476+ Label {
477+ anchors {
478+ top: image.bottom
479+ left: parent.left
480+ topMargin: units.gu(2)
481+ leftMargin: leftMargin
482+ }
483+ width: content.width
484+ wrapMode: Text.WordWrap
485+ fontSize: "large"
486+ text: i18n.tr("You need a valid SIM to use telephone and SMS features.")
487+ }
488+ }
489+
490+ Component {
491+ id: forwardButton
492+ Button {
493+ text: i18n.tr("Skip")
494+ onClicked: pageStack.push(Qt.resolvedUrl("WiFiPage.qml"))
495+ }
496+ }
497+}
498
499=== added file 'wizard/qml/Pages/SpinnerPage.qml'
500--- wizard/qml/Pages/SpinnerPage.qml 1970-01-01 00:00:00 +0000
501+++ wizard/qml/Pages/SpinnerPage.qml 2014-02-20 21:25:07 +0000
502@@ -0,0 +1,44 @@
503+/*
504+ * Copyright (C) 2013 Canonical, Ltd.
505+ *
506+ * This program is free software; you can redistribute it and/or modify
507+ * it under the terms of the GNU General Public License as published by
508+ * the Free Software Foundation; version 3.
509+ *
510+ * This program is distributed in the hope that it will be useful,
511+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
512+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
513+ * GNU General Public License for more details.
514+ *
515+ * You should have received a copy of the GNU General Public License
516+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
517+ */
518+
519+import QtQuick 2.0
520+import Ubuntu.Components 0.1
521+import "qrc:/qml/Components" as LocalComponents
522+
523+LocalComponents.Page {
524+ title: i18n.tr("That’s it!")
525+
526+ hasBackButton: false
527+
528+ Component.onCompleted: Qt.quit()
529+
530+ Item {
531+ id: content
532+ anchors {
533+ fill: parent
534+ topMargin: topMargin
535+ leftMargin: leftMargin
536+ rightMargin: rightMargin
537+ bottomMargin: bottomMargin
538+ }
539+
540+ ActivityIndicator {
541+ id: spinner
542+ anchors.centerIn: parent
543+ running: true
544+ }
545+ }
546+}
547
548=== added file 'wizard/qml/Pages/WelcomePage.qml'
549--- wizard/qml/Pages/WelcomePage.qml 1970-01-01 00:00:00 +0000
550+++ wizard/qml/Pages/WelcomePage.qml 2014-02-20 21:25:07 +0000
551@@ -0,0 +1,83 @@
552+/*
553+ * Copyright (C) 2013 Canonical, Ltd.
554+ *
555+ * This program is free software; you can redistribute it and/or modify
556+ * it under the terms of the GNU General Public License as published by
557+ * the Free Software Foundation; version 3.
558+ *
559+ * This program is distributed in the hope that it will be useful,
560+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
561+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
562+ * GNU General Public License for more details.
563+ *
564+ * You should have received a copy of the GNU General Public License
565+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
566+ */
567+
568+import QtQuick 2.0
569+import Ubuntu.Components 0.1
570+import Ubuntu.Components.ListItems 0.1 as ListItem
571+import Ubuntu.SystemSettings.LanguagePlugin 1.0
572+import "qrc:/qml/Components" as LocalComponents
573+
574+LocalComponents.Page {
575+ title: i18n.tr("Hello!")
576+ forwardButtonSourceComponent: forwardButton
577+
578+ readonly property bool simCardPresent: false // TODO: implement this
579+
580+ UbuntuLanguagePlugin {
581+ id: plugin
582+ }
583+
584+ Item {
585+ id: content
586+ anchors {
587+ fill: parent
588+ topMargin: topMargin
589+ leftMargin: leftMargin
590+ rightMargin: rightMargin
591+ bottomMargin: bottomMargin
592+ }
593+
594+ Column {
595+ id: column
596+ spacing: units.gu(2)
597+
598+ Label {
599+ id: label
600+ width: content.width
601+ wrapMode: Text.WordWrap
602+ fontSize: "large"
603+ text: i18n.tr("Welcome to Ubuntu.") + "\n" +
604+ i18n.tr("Let’s get started.")
605+ }
606+
607+ OptionSelector {
608+ id: languageList
609+ text: i18n.tr("Select your language")
610+ model: plugin.languageNames
611+ selectedIndex: plugin.currentLanguage
612+ onSelectedIndexChanged: {
613+ i18n.language = plugin.languageCodes[selectedIndex]
614+ i18n.domain = i18n.domain
615+ }
616+ containerHeight: content.height - label.height
617+ - column.spacing - units.gu(4)
618+ }
619+ }
620+ }
621+
622+ Component {
623+ id: forwardButton
624+ Button {
625+ text: i18n.tr("Start")
626+ onClicked: {
627+ plugin.currentLanguage = languageList.selectedIndex
628+ pageStack.push(Qt.resolvedUrl(simCardPresent
629+ ? "LocationPage.qml"
630+ : "SimCardPage.qml"))
631+ }
632+ }
633+ }
634+}
635
636=== added file 'wizard/qml/Pages/WiFiPage.qml'
637--- wizard/qml/Pages/WiFiPage.qml 1970-01-01 00:00:00 +0000
638+++ wizard/qml/Pages/WiFiPage.qml 2014-02-20 21:25:07 +0000
639@@ -0,0 +1,43 @@
640+/*
641+ * Copyright (C) 2013 Canonical, Ltd.
642+ *
643+ * This program is free software; you can redistribute it and/or modify
644+ * it under the terms of the GNU General Public License as published by
645+ * the Free Software Foundation; version 3.
646+ *
647+ * This program is distributed in the hope that it will be useful,
648+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
649+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
650+ * GNU General Public License for more details.
651+ *
652+ * You should have received a copy of the GNU General Public License
653+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
654+ */
655+
656+import QtQuick 2.0
657+import Ubuntu.Components 0.1
658+import "qrc:/qml/Components" as LocalComponents
659+
660+LocalComponents.Page {
661+ title: i18n.tr("Connect to Wi-Fi")
662+ forwardButtonSourceComponent: forwardButton
663+
664+ Item {
665+ id: content
666+ anchors {
667+ fill: parent
668+ topMargin: topMargin
669+ leftMargin: leftMargin
670+ rightMargin: rightMargin
671+ bottomMargin: bottomMargin
672+ }
673+ }
674+
675+ Component {
676+ id: forwardButton
677+ Button {
678+ text: i18n.tr("Connect")
679+ onClicked: pageStack.push(Qt.resolvedUrl("LocationPage.qml"))
680+ }
681+ }
682+}
683
684=== added directory 'wizard/qml/Pages/data'
685=== added file 'wizard/qml/Pages/data/meet_ubuntu_simcard@30.png'
686Binary files wizard/qml/Pages/data/meet_ubuntu_simcard@30.png 1970-01-01 00:00:00 +0000 and wizard/qml/Pages/data/meet_ubuntu_simcard@30.png 2014-02-20 21:25:07 +0000 differ
687=== added file 'wizard/qml/main.qml'
688--- wizard/qml/main.qml 1970-01-01 00:00:00 +0000
689+++ wizard/qml/main.qml 2014-02-20 21:25:07 +0000
690@@ -0,0 +1,56 @@
691+/*
692+ * Copyright (C) 2013 Canonical, Ltd.
693+ *
694+ * This program is free software; you can redistribute it and/or modify
695+ * it under the terms of the GNU General Public License as published by
696+ * the Free Software Foundation; version 3.
697+ *
698+ * This program is distributed in the hope that it will be useful,
699+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
700+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
701+ * GNU General Public License for more details.
702+ *
703+ * You should have received a copy of the GNU General Public License
704+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
705+ */
706+
707+import QtQuick 2.0
708+import GSettings 1.0
709+import Ubuntu.Components 0.1
710+import Unity.Application 0.1
711+
712+MainView {
713+ width: units.gu(40)
714+ height: units.gu(71)
715+
716+ headerColor: "#57365E"
717+ backgroundColor: "#A55263"
718+ footerColor: "#D75669"
719+
720+ Component.onCompleted: {
721+ Theme.name = "Ubuntu.Components.Themes.SuruGradient"
722+ i18n.domain = "ubuntu-system-settings"
723+ }
724+
725+ OSKController {
726+ anchors.fill: parent
727+ }
728+
729+ GSettings {
730+ id: background
731+ schema.id: "org.gnome.desktop.background"
732+ }
733+
734+ Image {
735+ id: image
736+ anchors.fill: parent
737+ source: background.pictureUri
738+ fillMode: Image.PreserveAspectCrop
739+ visible: status === Image.Ready
740+ }
741+
742+ PageStack {
743+ id: pageStack
744+ Component.onCompleted: push(Qt.resolvedUrl("Pages/WelcomePage.qml"))
745+ }
746+}
747
748=== added file 'wizard/test.sh'
749--- wizard/test.sh 1970-01-01 00:00:00 +0000
750+++ wizard/test.sh 2014-02-20 21:25:07 +0000
751@@ -0,0 +1,16 @@
752+#!/bin/sh
753+
754+TOPDIR=$(readlink -e "$(dirname ${0})/..")
755+
756+LOCAL_PRIVATE_DIR=$(ls -d ${TOPDIR}/debian/tmp/usr/lib/*/ubuntu-system-settings/private)
757+if [ -n ${LOCAL_PRIVATE_DIR} ]; then
758+ echo "Testing against locally built version"
759+ export QML2_IMPORT_PATH=${LOCAL_PRIVATE_DIR}:${QML2_IMPORT_PATH}
760+ export PATH=${TOPDIR}/debian/tmp/usr/bin:${PATH}
761+else
762+ echo "Testing against system version"
763+fi
764+
765+export QML2_IMPORT_PATH=${TOPDIR}/tests/mocks:${QML2_IMPORT_PATH}
766+
767+system-settings-wizard
768
769=== added file 'wizard/ubuntu-system-settings-wizard.conf'
770--- wizard/ubuntu-system-settings-wizard.conf 1970-01-01 00:00:00 +0000
771+++ wizard/ubuntu-system-settings-wizard.conf 2014-02-20 21:25:07 +0000
772@@ -0,0 +1,22 @@
773+description "Welcome to Ubuntu"
774+author "Michael Terry <michael.terry@canonical.com>"
775+
776+start on starting xsession-init
777+stop on desktop-start
778+task
779+
780+env RUN_FILE=".config/ubuntu-system-settings/wizard-has-run"
781+
782+pre-start script
783+ [ -e $HOME/$RUN_FILE ] && stop || true
784+ start maliit-server # we need OSK for "About you" page
785+end script
786+
787+exec ubuntu-touch-session system-settings-wizard
788+
789+post-stop script
790+ if ! [ -e $HOME/$RUN_FILE ]; then
791+ mkdir -p $(dirname $HOME/$RUN_FILE)
792+ touch $HOME/$RUN_FILE
793+ fi
794+end script
795
796=== added file 'wizard/ui.qrc'
797--- wizard/ui.qrc 1970-01-01 00:00:00 +0000
798+++ wizard/ui.qrc 2014-02-20 21:25:07 +0000
799@@ -0,0 +1,13 @@
800+<RCC>
801+ <qresource prefix="/">
802+ <file>qml/main.qml</file>
803+ <file>qml/Components/Page.qml</file>
804+ <file>qml/Pages/LocationPage.qml</file>
805+ <file>qml/Pages/SetupCompletePage.qml</file>
806+ <file>qml/Pages/SimCardPage.qml</file>
807+ <file>qml/Pages/SpinnerPage.qml</file>
808+ <file>qml/Pages/WelcomePage.qml</file>
809+ <file>qml/Pages/WiFiPage.qml</file>
810+ <file>qml/Pages/data/meet_ubuntu_simcard@30.png</file>
811+ </qresource>
812+</RCC>

Subscribers

People subscribed via source and target branches