[gnome-initial-setup/wip/rancell/ubuntu-welcome] Add Ubuntu mode with special pages



commit 6f7ae23fda4b7d96c48fdbb9a2e015d37decb22c
Author: Robert Ancell <robert ancell canonical com>
Date:   Tue Mar 20 11:51:30 2018 +1300

    Add Ubuntu mode with special pages

 .gitignore                                         |    4 +
 configure.ac                                       |    4 +
 gnome-initial-setup/Makefile.am                    |    4 +
 gnome-initial-setup/gnome-initial-setup.c          |   16 +++-
 gnome-initial-setup/pages/Makefile.am              |    6 +-
 gnome-initial-setup/pages/apps/Makefile.am         |   21 ++++
 gnome-initial-setup/pages/apps/apps.gresource.xml  |    7 +
 gnome-initial-setup/pages/apps/gis-apps-page.c     |  116 +++++++++++++++++++
 gnome-initial-setup/pages/apps/gis-apps-page.h     |   52 +++++++++
 gnome-initial-setup/pages/apps/gis-apps-page.ui    |   59 ++++++++++
 gnome-initial-setup/pages/livepatch/Makefile.am    |   21 ++++
 .../pages/livepatch/gis-livepatch-page.c           |   95 ++++++++++++++++
 .../pages/livepatch/gis-livepatch-page.h           |   52 +++++++++
 .../pages/livepatch/gis-livepatch-page.ui          |   68 +++++++++++
 .../pages/livepatch/livepatch.gresource.xml        |    7 +
 .../pages/privacy/gis-privacy-page.c               |    2 +-
 .../pages/ubuntu-changes/Makefile.am               |   21 ++++
 .../pages/ubuntu-changes/gis-ubuntu-changes-page.c |  107 ++++++++++++++++++
 .../pages/ubuntu-changes/gis-ubuntu-changes-page.h |   52 +++++++++
 .../ubuntu-changes/gis-ubuntu-changes-page.ui      |   52 +++++++++
 .../ubuntu-changes/ubuntu-changes.gresource.xml    |    7 +
 .../pages/ubuntu-privacy/Makefile.am               |   21 ++++
 .../pages/ubuntu-privacy/gis-ubuntu-privacy-page.c |   95 ++++++++++++++++
 .../pages/ubuntu-privacy/gis-ubuntu-privacy-page.h |   52 +++++++++
 .../ubuntu-privacy/gis-ubuntu-privacy-page.ui      |  117 ++++++++++++++++++++
 .../ubuntu-privacy/ubuntu-privacy.gresource.xml    |    7 +
 po/POTFILES.in                                     |    8 ++
 27 files changed, 1069 insertions(+), 4 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 3844b01..777fc82 100644
--- a/.gitignore
+++ b/.gitignore
@@ -65,6 +65,10 @@ gnome-initial-setup/pages/account/account-resources.[ch]
 gnome-initial-setup/pages/account/um-realm-generated.[ch]
 gnome-initial-setup/pages/software/software-resources.[ch]
 gnome-initial-setup/pages/summary/summary-resources.[ch]
+gnome-initial-setup/pages/ubuntu-privacy/ubuntu-privacy-resources.[ch]
+gnome-initial-setup/pages/livepatch/livepatch-resources.[ch]
+gnome-initial-setup/pages/ubuntu-changes/ubuntu-changes-resources.[ch]
+gnome-initial-setup/pages/apps/apps-resources.[ch]
 
 gnome-initial-setup-first-login.desktop
 gnome-initial-setup.desktop
diff --git a/configure.ac b/configure.ac
index ce17c55..9f89d12 100644
--- a/configure.ac
+++ b/configure.ac
@@ -157,6 +157,10 @@ gnome-initial-setup/pages/account/Makefile
 gnome-initial-setup/pages/password/Makefile
 gnome-initial-setup/pages/software/Makefile
 gnome-initial-setup/pages/summary/Makefile
+gnome-initial-setup/pages/ubuntu-privacy/Makefile
+gnome-initial-setup/pages/livepatch/Makefile
+gnome-initial-setup/pages/ubuntu-changes/Makefile
+gnome-initial-setup/pages/apps/Makefile
 po/Makefile.in
 ])
 AC_OUTPUT
diff --git a/gnome-initial-setup/Makefile.am b/gnome-initial-setup/Makefile.am
index c04f1e4..74a7c38 100644
--- a/gnome-initial-setup/Makefile.am
+++ b/gnome-initial-setup/Makefile.am
@@ -44,6 +44,10 @@ gnome_initial_setup_LDADD =  \
        pages/password/libgispassword.la \
        pages/software/libgissoftware.la \
        pages/summary/libgissummary.la \
+       pages/ubuntu-privacy/libgisubuntu-privacy.la \
+       pages/livepatch/libgislivepatch.la \
+       pages/ubuntu-changes/libgisubuntu-changes.la \
+       pages/apps/libgisapps.la \
        $(INITIAL_SETUP_LIBS) \
        -lm
 
diff --git a/gnome-initial-setup/gnome-initial-setup.c b/gnome-initial-setup/gnome-initial-setup.c
index 5671cae..830f467 100644
--- a/gnome-initial-setup/gnome-initial-setup.c
+++ b/gnome-initial-setup/gnome-initial-setup.c
@@ -48,6 +48,10 @@
 #include "pages/account/gis-account-pages.h"
 #include "pages/password/gis-password-page.h"
 #include "pages/summary/gis-summary-page.h"
+#include "pages/ubuntu-privacy/gis-ubuntu-privacy-page.h"
+#include "pages/livepatch/gis-livepatch-page.h"
+#include "pages/ubuntu-changes/gis-ubuntu-changes-page.h"
+#include "pages/apps/gis-apps-page.h"
 
 #define VENDOR_PAGES_GROUP "pages"
 #define VENDOR_PAGES_SKIP_KEY "skip"
@@ -80,6 +84,14 @@ static PageData page_table[] = {
   { NULL },
 };
 
+static PageData ubuntu_page_table[] = {
+  PAGE (ubuntu_privacy, FALSE),
+  PAGE (livepatch,      FALSE),
+  PAGE (ubuntu_changes, FALSE),
+  PAGE (apps,           FALSE),
+  { NULL },
+};
+
 #undef PAGE
 
 static gboolean
@@ -169,12 +181,12 @@ rebuild_pages_cb (GisDriver *driver)
 
   skip_pages = pages_to_skip_from_file ();
 
-  page_data = page_table;
+  page_data = ubuntu_page_table; // FIXME: conditional
 
   if (current_page != NULL) {
     destroy_pages_after (assistant, current_page);
 
-    for (page_data = page_table; page_data->page_id != NULL; ++page_data)
+    for (page_data = ubuntu_page_table; page_data->page_id != NULL; ++page_data) // FIXME conditional
       if (g_str_equal (page_data->page_id, GIS_PAGE_GET_CLASS (current_page)->page_id))
         break;
 
diff --git a/gnome-initial-setup/pages/Makefile.am b/gnome-initial-setup/pages/Makefile.am
index e5182a7..549fc1e 100644
--- a/gnome-initial-setup/pages/Makefile.am
+++ b/gnome-initial-setup/pages/Makefile.am
@@ -11,4 +11,8 @@ SUBDIRS = \
        account \
        password \
        summary \
-       software
+       software \
+       ubuntu-privacy \
+       livepatch \
+       ubuntu-changes \
+       apps
diff --git a/gnome-initial-setup/pages/apps/Makefile.am b/gnome-initial-setup/pages/apps/Makefile.am
new file mode 100644
index 0000000..8badc4d
--- /dev/null
+++ b/gnome-initial-setup/pages/apps/Makefile.am
@@ -0,0 +1,21 @@
+
+noinst_LTLIBRARIES = libgisapps.la
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies 
$(srcdir)/apps.gresource.xml)
+apps-resources.c: apps.gresource.xml $(resource_files)
+       $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+apps-resources.h: apps.gresource.xml $(resource_files)
+       $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += apps-resources.c apps-resources.h
+
+libgisapps_la_SOURCES =        \
+       gis-apps-page.c gis-apps-page.h \
+       $(BUILT_SOURCES)
+
+libgisapps_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.." -I "$(top_srcdir)" -I "$(top_builddir)"
+libgisapps_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgisapps_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = apps.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/apps/apps.gresource.xml 
b/gnome-initial-setup/pages/apps/apps.gresource.xml
new file mode 100644
index 0000000..7d14caf
--- /dev/null
+++ b/gnome-initial-setup/pages/apps/apps.gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/gnome/initial-setup">
+    <file preprocess="xml-stripblanks" alias="gis-apps-page.ui">gis-apps-page.ui</file>
+  </gresource>
+</gresources>
+
diff --git a/gnome-initial-setup/pages/apps/gis-apps-page.c b/gnome-initial-setup/pages/apps/gis-apps-page.c
new file mode 100644
index 0000000..3a679f3
--- /dev/null
+++ b/gnome-initial-setup/pages/apps/gis-apps-page.c
@@ -0,0 +1,116 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* Get more apps page {{{1 */
+
+#define PAGE_ID "apps"
+
+#include "config.h"
+#include "gis-apps-page.h"
+#include "apps-resources.h"
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+
+struct _GisAppsPagePrivate {
+  int dummy;
+};
+typedef struct _GisAppsPagePrivate GisAppsPagePrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GisAppsPage, gis_apps_page, GIS_TYPE_PAGE);
+
+static void
+gis_apps_page_constructed (GObject *object)
+{
+  GisAppsPage *page = GIS_APPS_PAGE (object);
+  GisAppsPagePrivate *priv = gis_apps_page_get_instance_private (page);
+
+  G_OBJECT_CLASS (gis_apps_page_parent_class)->constructed (object);
+
+  gis_page_set_skippable (GIS_PAGE (page), TRUE);
+
+  gis_page_set_complete (GIS_PAGE (page), TRUE);
+  gtk_widget_show (GTK_WIDGET (page));
+}
+
+static void
+gis_apps_page_dispose (GObject *object)
+{
+  GisAppsPage *page = GIS_APPS_PAGE (object);
+  GisAppsPagePrivate *priv = gis_apps_page_get_instance_private (page);
+
+  G_OBJECT_CLASS (gis_apps_page_parent_class)->dispose (object);
+}
+
+static void
+open_software (GtkButton      *button,
+               const gchar    *uri,
+               GisAppsPage *page)
+{
+  g_autoptr(GAppInfo) info = NULL;
+  g_autoptr(GError) error = NULL;
+
+  info = g_app_info_create_from_commandline ("gnome-software", NULL, G_APP_INFO_CREATE_NONE, &error);
+  if (info == NULL) {
+     g_warning ("Failed to get launch information from gnome-software: %s", error->message);
+     return;
+  }
+  if (!g_app_info_launch (info, NULL, NULL, &error)) {
+     g_warning ("Failed to launch gnome-software: %s", error->message);
+     return;
+  }
+}
+
+static void
+gis_apps_page_locale_changed (GisPage *page)
+{
+  gis_page_set_title (GIS_PAGE (page), _("Welcome to Ubuntu"));
+}
+
+static void
+gis_apps_page_class_init (GisAppsPageClass *klass)
+{
+  GisPageClass *page_class = GIS_PAGE_CLASS (klass);
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass), 
"/org/gnome/initial-setup/gis-apps-page.ui");
+
+  gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), open_software);
+
+  page_class->page_id = PAGE_ID;
+  page_class->locale_changed = gis_apps_page_locale_changed;
+  object_class->constructed = gis_apps_page_constructed;
+  object_class->dispose = gis_apps_page_dispose;
+}
+
+static void
+gis_apps_page_init (GisAppsPage *page)
+{
+  g_resources_register (apps_get_resource ());
+
+  gtk_widget_init_template (GTK_WIDGET (page));
+}
+
+void
+gis_prepare_apps_page (GisDriver *driver)
+{
+  gis_driver_add_page (driver,
+                       g_object_new (GIS_TYPE_APPS_PAGE,
+                                     "driver", driver,
+                                     NULL));
+}
diff --git a/gnome-initial-setup/pages/apps/gis-apps-page.h b/gnome-initial-setup/pages/apps/gis-apps-page.h
new file mode 100644
index 0000000..347dcbc
--- /dev/null
+++ b/gnome-initial-setup/pages/apps/gis-apps-page.h
@@ -0,0 +1,52 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIS_APPS_PAGE_H__
+#define __GIS_APPS_PAGE_H__
+
+#include "gnome-initial-setup.h"
+
+G_BEGIN_DECLS
+
+#define GIS_TYPE_APPS_PAGE            (gis_apps_page_get_type ())
+#define GIS_APPS_PAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIS_TYPE_APPS_PAGE, GisAppsPage))
+#define GIS_APPS_PAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GIS_TYPE_APPS_PAGE, 
GisAppsPageClass))
+#define GIS_IS_APPS_PAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIS_TYPE_APPS_PAGE))
+#define GIS_IS_APPS_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GIS_TYPE_APPS_PAGE))
+#define GIS_APPS_PAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GIS_TYPE_APPS_PAGE, 
GisAppsPageClass))
+
+typedef struct _GisAppsPage        GisAppsPage;
+typedef struct _GisAppsPageClass   GisAppsPageClass;
+
+struct _GisAppsPage
+{
+  GisPage parent;
+};
+
+struct _GisAppsPageClass
+{
+  GisPageClass parent_class;
+};
+
+GType gis_apps_page_get_type (void);
+
+void gis_prepare_apps_page (GisDriver *driver);
+
+G_END_DECLS
+
+#endif /* __GIS_APPS_PAGE_H__ */
diff --git a/gnome-initial-setup/pages/apps/gis-apps-page.ui b/gnome-initial-setup/pages/apps/gis-apps-page.ui
new file mode 100644
index 0000000..0aff843
--- /dev/null
+++ b/gnome-initial-setup/pages/apps/gis-apps-page.ui
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <template class="GisAppsPage" parent="GisPage">
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="halign">center</property>
+        <property name="valign">fill</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkLabel" id="title">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">center</property>
+            <property name="valign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">Get more apps</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+              <attribute name="scale" value="1.8"/>
+            </attributes>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">Your Ubuntu system has these apps already:</property>
+            <property name="wrap">True</property>
+          </object>
+        </child>
+       <!-- FIXME: Show install apps -->
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">You can use “Software” to install apps like 
these:</property>
+            <property name="wrap">True</property>
+          </object>
+        </child>
+       <!-- FIXME: Show featured snaps -->
+        <child>
+          <object class="GtkButton">
+            <property name="visible">True</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">Open “Software” now</property>
+            <signal name="clicked" handler="open_software"/>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
diff --git a/gnome-initial-setup/pages/livepatch/Makefile.am b/gnome-initial-setup/pages/livepatch/Makefile.am
new file mode 100644
index 0000000..e40c6dc
--- /dev/null
+++ b/gnome-initial-setup/pages/livepatch/Makefile.am
@@ -0,0 +1,21 @@
+
+noinst_LTLIBRARIES = libgislivepatch.la
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies 
$(srcdir)/livepatch.gresource.xml)
+livepatch-resources.c: livepatch.gresource.xml $(resource_files)
+       $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+livepatch-resources.h: livepatch.gresource.xml $(resource_files)
+       $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += livepatch-resources.c livepatch-resources.h
+
+libgislivepatch_la_SOURCES =   \
+       gis-livepatch-page.c gis-livepatch-page.h       \
+       $(BUILT_SOURCES)
+
+libgislivepatch_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.." -I "$(top_srcdir)" -I 
"$(top_builddir)"
+libgislivepatch_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgislivepatch_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = livepatch.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/livepatch/gis-livepatch-page.c 
b/gnome-initial-setup/pages/livepatch/gis-livepatch-page.c
new file mode 100644
index 0000000..60b7b41
--- /dev/null
+++ b/gnome-initial-setup/pages/livepatch/gis-livepatch-page.c
@@ -0,0 +1,95 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* Canonical Livepatch page {{{1 */
+
+#define PAGE_ID "livepatch"
+
+#include "config.h"
+#include "gis-livepatch-page.h"
+#include "livepatch-resources.h"
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+
+struct _GisLivepatchPagePrivate {
+  int dummy;
+};
+typedef struct _GisLivepatchPagePrivate GisLivepatchPagePrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GisLivepatchPage, gis_livepatch_page, GIS_TYPE_PAGE);
+
+static void
+gis_livepatch_page_constructed (GObject *object)
+{
+  GisLivepatchPage *page = GIS_LIVEPATCH_PAGE (object);
+  GisLivepatchPagePrivate *priv = gis_livepatch_page_get_instance_private (page);
+
+  G_OBJECT_CLASS (gis_livepatch_page_parent_class)->constructed (object);
+
+  gis_page_set_skippable (GIS_PAGE (page), TRUE);
+
+  gis_page_set_complete (GIS_PAGE (page), TRUE);
+  gtk_widget_show (GTK_WIDGET (page));
+}
+
+static void
+gis_livepatch_page_dispose (GObject *object)
+{
+  GisLivepatchPage *page = GIS_LIVEPATCH_PAGE (object);
+  GisLivepatchPagePrivate *priv = gis_livepatch_page_get_instance_private (page);
+
+  G_OBJECT_CLASS (gis_livepatch_page_parent_class)->dispose (object);
+}
+
+static void
+gis_livepatch_page_locale_changed (GisPage *page)
+{
+  gis_page_set_title (GIS_PAGE (page), _("Welcome to Ubuntu"));
+}
+
+static void
+gis_livepatch_page_class_init (GisLivepatchPageClass *klass)
+{
+  GisPageClass *page_class = GIS_PAGE_CLASS (klass);
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass), 
"/org/gnome/initial-setup/gis-livepatch-page.ui");
+
+  page_class->page_id = PAGE_ID;
+  page_class->locale_changed = gis_livepatch_page_locale_changed;
+  object_class->constructed = gis_livepatch_page_constructed;
+  object_class->dispose = gis_livepatch_page_dispose;
+}
+
+static void
+gis_livepatch_page_init (GisLivepatchPage *page)
+{
+  g_resources_register (livepatch_get_resource ());
+
+  gtk_widget_init_template (GTK_WIDGET (page));
+}
+
+void
+gis_prepare_livepatch_page (GisDriver *driver)
+{
+  gis_driver_add_page (driver,
+                       g_object_new (GIS_TYPE_LIVEPATCH_PAGE,
+                                     "driver", driver,
+                                     NULL));
+}
diff --git a/gnome-initial-setup/pages/livepatch/gis-livepatch-page.h 
b/gnome-initial-setup/pages/livepatch/gis-livepatch-page.h
new file mode 100644
index 0000000..eed18e5
--- /dev/null
+++ b/gnome-initial-setup/pages/livepatch/gis-livepatch-page.h
@@ -0,0 +1,52 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIS_LIVEPATCH_PAGE_H__
+#define __GIS_LIVEPATCH_PAGE_H__
+
+#include "gnome-initial-setup.h"
+
+G_BEGIN_DECLS
+
+#define GIS_TYPE_LIVEPATCH_PAGE            (gis_livepatch_page_get_type ())
+#define GIS_LIVEPATCH_PAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIS_TYPE_LIVEPATCH_PAGE, 
GisLivepatchPage))
+#define GIS_LIVEPATCH_PAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GIS_TYPE_LIVEPATCH_PAGE, 
GisLivepatchPageClass))
+#define GIS_IS_LIVEPATCH_PAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIS_TYPE_LIVEPATCH_PAGE))
+#define GIS_IS_LIVEPATCH_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GIS_TYPE_LIVEPATCH_PAGE))
+#define GIS_LIVEPATCH_PAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GIS_TYPE_LIVEPATCH_PAGE, 
GisLivepatchPageClass))
+
+typedef struct _GisLivepatchPage        GisLivepatchPage;
+typedef struct _GisLivepatchPageClass   GisLivepatchPageClass;
+
+struct _GisLivepatchPage
+{
+  GisPage parent;
+};
+
+struct _GisLivepatchPageClass
+{
+  GisPageClass parent_class;
+};
+
+GType gis_livepatch_page_get_type (void);
+
+void gis_prepare_livepatch_page (GisDriver *driver);
+
+G_END_DECLS
+
+#endif /* __GIS_LIVEPATCH_PAGE_H__ */
diff --git a/gnome-initial-setup/pages/livepatch/gis-livepatch-page.ui 
b/gnome-initial-setup/pages/livepatch/gis-livepatch-page.ui
new file mode 100644
index 0000000..a8a461c
--- /dev/null
+++ b/gnome-initial-setup/pages/livepatch/gis-livepatch-page.ui
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <template class="GisLivepatchPage" parent="GisPage">
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="halign">center</property>
+        <property name="valign">fill</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkLabel" id="title">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">center</property>
+            <property name="valign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">Livepatch</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+              <attribute name="scale" value="1.8"/>
+            </attributes>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">Canonical Livepatch helps keep your computer safe, by 
applying some updates that would normally require restarting.</property>
+            <property name="wrap">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">center</property>
+            <property name="orientation">horizontal</property>
+            <property name="homogeneous">False</property>
+            <property name="margin_top">18</property>
+            <child>
+              <object class="GtkLabel">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Do you want to set up Livepatch now?</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkRadioButton" id="opt_in_radio">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Yes</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkRadioButton" id="opt_out_radio">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">No</property>
+                <property name="group">opt_in_radio</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
diff --git a/gnome-initial-setup/pages/livepatch/livepatch.gresource.xml 
b/gnome-initial-setup/pages/livepatch/livepatch.gresource.xml
new file mode 100644
index 0000000..54141df
--- /dev/null
+++ b/gnome-initial-setup/pages/livepatch/livepatch.gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/gnome/initial-setup">
+    <file preprocess="xml-stripblanks" alias="gis-livepatch-page.ui">gis-livepatch-page.ui</file>
+  </gresource>
+</gresources>
+
diff --git a/gnome-initial-setup/pages/privacy/gis-privacy-page.c 
b/gnome-initial-setup/pages/privacy/gis-privacy-page.c
index f2af372..30e76e3 100644
--- a/gnome-initial-setup/pages/privacy/gis-privacy-page.c
+++ b/gnome-initial-setup/pages/privacy/gis-privacy-page.c
@@ -289,7 +289,7 @@ activate_link (GtkLabel       *label,
 static void
 gis_privacy_page_locale_changed (GisPage *page)
 {
-  gis_page_set_title (GIS_PAGE (page), _("Privacy"));
+  gis_page_set_title (GIS_PAGE (page), _("Welcome to Ubuntu"));
 }
 
 static void
diff --git a/gnome-initial-setup/pages/ubuntu-changes/Makefile.am 
b/gnome-initial-setup/pages/ubuntu-changes/Makefile.am
new file mode 100644
index 0000000..f7da724
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-changes/Makefile.am
@@ -0,0 +1,21 @@
+
+noinst_LTLIBRARIES = libgisubuntu-changes.la
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies 
$(srcdir)/ubuntu-changes.gresource.xml)
+ubuntu-changes-resources.c: ubuntu-changes.gresource.xml $(resource_files)
+       $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+ubuntu-changes-resources.h: ubuntu-changes.gresource.xml $(resource_files)
+       $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += ubuntu-changes-resources.c ubuntu-changes-resources.h
+
+libgisubuntu_changes_la_SOURCES =      \
+       gis-ubuntu-changes-page.c gis-ubuntu-changes-page.h     \
+       $(BUILT_SOURCES)
+
+libgisubuntu_changes_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.." -I "$(top_srcdir)" -I 
"$(top_builddir)"
+libgisubuntu_changes_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgisubuntu_changes_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = ubuntu-changes.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.c 
b/gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.c
new file mode 100644
index 0000000..d421294
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.c
@@ -0,0 +1,107 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* Ubuntu changes page {{{1 */
+
+#define PAGE_ID "ubuntu-changes"
+
+#include "config.h"
+#include "gis-ubuntu-changes-page.h"
+#include "ubuntu-changes-resources.h"
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+
+struct _GisUbuntuChangesPagePrivate {
+  int dummy;
+};
+typedef struct _GisUbuntuChangesPagePrivate GisUbuntuChangesPagePrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GisUbuntuChangesPage, gis_ubuntu_changes_page, GIS_TYPE_PAGE);
+
+static void
+gis_ubuntu_changes_page_constructed (GObject *object)
+{
+  GisUbuntuChangesPage *page = GIS_UBUNTU_CHANGES_PAGE (object);
+  GisUbuntuChangesPagePrivate *priv = gis_ubuntu_changes_page_get_instance_private (page);
+
+  G_OBJECT_CLASS (gis_ubuntu_changes_page_parent_class)->constructed (object);
+
+  gis_page_set_skippable (GIS_PAGE (page), TRUE);
+
+  gis_page_set_complete (GIS_PAGE (page), TRUE);
+  gtk_widget_show (GTK_WIDGET (page));
+}
+
+static void
+gis_ubuntu_changes_page_dispose (GObject *object)
+{
+  GisUbuntuChangesPage *page = GIS_UBUNTU_CHANGES_PAGE (object);
+  GisUbuntuChangesPagePrivate *priv = gis_ubuntu_changes_page_get_instance_private (page);
+
+  G_OBJECT_CLASS (gis_ubuntu_changes_page_parent_class)->dispose (object);
+}
+
+static gboolean
+activate_link (GtkLabel             *label,
+               const gchar          *uri,
+               GisUbuntuChangesPage *page)
+{
+  /* FIXME: Show changes */
+
+  return TRUE;
+}
+
+static void
+gis_ubuntu_changes_page_locale_changed (GisPage *page)
+{
+  gis_page_set_title (GIS_PAGE (page), _("Welcome to Ubuntu"));
+}
+
+static void
+gis_ubuntu_changes_page_class_init (GisUbuntuChangesPageClass *klass)
+{
+  GisPageClass *page_class = GIS_PAGE_CLASS (klass);
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass), 
"/org/gnome/initial-setup/gis-ubuntu-changes-page.ui");
+
+  gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), activate_link);
+
+  page_class->page_id = PAGE_ID;
+  page_class->locale_changed = gis_ubuntu_changes_page_locale_changed;
+  object_class->constructed = gis_ubuntu_changes_page_constructed;
+  object_class->dispose = gis_ubuntu_changes_page_dispose;
+}
+
+static void
+gis_ubuntu_changes_page_init (GisUbuntuChangesPage *page)
+{
+  g_resources_register (ubuntu_changes_get_resource ());
+
+  gtk_widget_init_template (GTK_WIDGET (page));
+}
+
+void
+gis_prepare_ubuntu_changes_page (GisDriver *driver)
+{
+  gis_driver_add_page (driver,
+                       g_object_new (GIS_TYPE_UBUNTU_CHANGES_PAGE,
+                                     "driver", driver,
+                                     NULL));
+}
diff --git a/gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.h 
b/gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.h
new file mode 100644
index 0000000..c42993b
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.h
@@ -0,0 +1,52 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIS_UBUNTU_CHANGES_PAGE_H__
+#define __GIS_UBUNTU_CHANGES_PAGE_H__
+
+#include "gnome-initial-setup.h"
+
+G_BEGIN_DECLS
+
+#define GIS_TYPE_UBUNTU_CHANGES_PAGE            (gis_ubuntu_changes_page_get_type ())
+#define GIS_UBUNTU_CHANGES_PAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GIS_TYPE_UBUNTU_CHANGES_PAGE, GisUbuntuChangesPage))
+#define GIS_UBUNTU_CHANGES_PAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  
GIS_TYPE_UBUNTU_CHANGES_PAGE, GisUbuntuChangesPageClass))
+#define GIS_IS_UBUNTU_CHANGES_PAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GIS_TYPE_UBUNTU_CHANGES_PAGE))
+#define GIS_IS_UBUNTU_CHANGES_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  
GIS_TYPE_UBUNTU_CHANGES_PAGE))
+#define GIS_UBUNTU_CHANGES_PAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  
GIS_TYPE_UBUNTU_CHANGES_PAGE, GisUbuntuChangesPageClass))
+
+typedef struct _GisUbuntuChangesPage        GisUbuntuChangesPage;
+typedef struct _GisUbuntuChangesPageClass   GisUbuntuChangesPageClass;
+
+struct _GisUbuntuChangesPage
+{
+  GisPage parent;
+};
+
+struct _GisUbuntuChangesPageClass
+{
+  GisPageClass parent_class;
+};
+
+GType gis_ubuntu_changes_page_get_type (void);
+
+void gis_prepare_ubuntu_changes_page (GisDriver *driver);
+
+G_END_DECLS
+
+#endif /* __GIS_UBUNTU_CHANGES_PAGE_H__ */
diff --git a/gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.ui 
b/gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.ui
new file mode 100644
index 0000000..ad24f3d
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.ui
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <template class="GisUbuntuChangesPage" parent="GisPage">
+    <child>
+      <object class="GtkBox" id="box">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="halign">center</property>
+        <property name="valign">fill</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkLabel" id="title">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">center</property>
+            <property name="valign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">What's new in Ubuntu</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+              <attribute name="scale" value="1.8"/>
+            </attributes>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">Ubuntu 18.04 works differently from older 
versions.</property>
+            <property name="wrap">True</property>
+          </object>
+        </child>
+       <!-- FIXME: Graphic showing changes -->
+        <child>
+          <object class="GtkLabel" id="guide_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">If you like, you can read a &lt;a href=""&gt;quick 
guide to the new system&lt;/a&gt;.</property>
+            <property name="use-markup">True</property>
+            <property name="wrap">True</property>
+            <signal name="activate-link" handler="activate_link"/>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
diff --git a/gnome-initial-setup/pages/ubuntu-changes/ubuntu-changes.gresource.xml 
b/gnome-initial-setup/pages/ubuntu-changes/ubuntu-changes.gresource.xml
new file mode 100644
index 0000000..019ee19
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-changes/ubuntu-changes.gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/gnome/initial-setup">
+    <file preprocess="xml-stripblanks" alias="gis-ubuntu-changes-page.ui">gis-ubuntu-changes-page.ui</file>
+  </gresource>
+</gresources>
+
diff --git a/gnome-initial-setup/pages/ubuntu-privacy/Makefile.am 
b/gnome-initial-setup/pages/ubuntu-privacy/Makefile.am
new file mode 100644
index 0000000..03d6f50
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-privacy/Makefile.am
@@ -0,0 +1,21 @@
+
+noinst_LTLIBRARIES = libgisubuntu-privacy.la
+
+BUILT_SOURCES =
+
+resource_files = $(shell glib-compile-resources --sourcedir=$(srcdir) --generate-dependencies 
$(srcdir)/ubuntu-privacy.gresource.xml)
+ubuntu-privacy-resources.c: ubuntu-privacy.gresource.xml $(resource_files)
+       $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
+ubuntu-privacy-resources.h: ubuntu-privacy.gresource.xml $(resource_files)
+       $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
+BUILT_SOURCES += ubuntu-privacy-resources.c ubuntu-privacy-resources.h
+
+libgisubuntu_privacy_la_SOURCES =      \
+       gis-ubuntu-privacy-page.c gis-ubuntu-privacy-page.h     \
+       $(BUILT_SOURCES)
+
+libgisubuntu_privacy_la_CFLAGS = $(INITIAL_SETUP_CFLAGS) -I "$(srcdir)/../.." -I "$(top_srcdir)" -I 
"$(top_builddir)"
+libgisubuntu_privacy_la_LIBADD = $(INITIAL_SETUP_LIBS)
+libgisubuntu_privacy_la_LDFLAGS = -export_dynamic -avoid-version -module -no-undefined
+
+EXTRA_DIST = ubuntu-privacy.gresource.xml $(resource_files)
diff --git a/gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.c 
b/gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.c
new file mode 100644
index 0000000..a862745
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.c
@@ -0,0 +1,95 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* Ubuntu privacy page {{{1 */
+
+#define PAGE_ID "ubuntu-privacy"
+
+#include "config.h"
+#include "gis-ubuntu-privacy-page.h"
+#include "ubuntu-privacy-resources.h"
+
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+
+struct _GisUbuntuPrivacyPagePrivate {
+  int dummy;
+};
+typedef struct _GisUbuntuPrivacyPagePrivate GisUbuntuPrivacyPagePrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (GisUbuntuPrivacyPage, gis_ubuntu_privacy_page, GIS_TYPE_PAGE);
+
+static void
+gis_ubuntu_privacy_page_constructed (GObject *object)
+{
+  GisUbuntuPrivacyPage *page = GIS_UBUNTU_PRIVACY_PAGE (object);
+  GisUbuntuPrivacyPagePrivate *priv = gis_ubuntu_privacy_page_get_instance_private (page);
+
+  G_OBJECT_CLASS (gis_ubuntu_privacy_page_parent_class)->constructed (object);
+
+  gis_page_set_skippable (GIS_PAGE (page), TRUE);
+
+  gis_page_set_complete (GIS_PAGE (page), TRUE);
+  gtk_widget_show (GTK_WIDGET (page));
+}
+
+static void
+gis_ubuntu_privacy_page_dispose (GObject *object)
+{
+  GisUbuntuPrivacyPage *page = GIS_UBUNTU_PRIVACY_PAGE (object);
+  GisUbuntuPrivacyPagePrivate *priv = gis_ubuntu_privacy_page_get_instance_private (page);
+
+  G_OBJECT_CLASS (gis_ubuntu_privacy_page_parent_class)->dispose (object);
+}
+
+static void
+gis_ubuntu_privacy_page_locale_changed (GisPage *page)
+{
+  gis_page_set_title (GIS_PAGE (page), _("Welcome to Ubuntu"));
+}
+
+static void
+gis_ubuntu_privacy_page_class_init (GisUbuntuPrivacyPageClass *klass)
+{
+  GisPageClass *page_class = GIS_PAGE_CLASS (klass);
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass), 
"/org/gnome/initial-setup/gis-ubuntu-privacy-page.ui");
+
+  page_class->page_id = PAGE_ID;
+  page_class->locale_changed = gis_ubuntu_privacy_page_locale_changed;
+  object_class->constructed = gis_ubuntu_privacy_page_constructed;
+  object_class->dispose = gis_ubuntu_privacy_page_dispose;
+}
+
+static void
+gis_ubuntu_privacy_page_init (GisUbuntuPrivacyPage *page)
+{
+  g_resources_register (ubuntu_privacy_get_resource ());
+
+  gtk_widget_init_template (GTK_WIDGET (page));
+}
+
+void
+gis_prepare_ubuntu_privacy_page (GisDriver *driver)
+{
+  gis_driver_add_page (driver,
+                       g_object_new (GIS_TYPE_UBUNTU_PRIVACY_PAGE,
+                                     "driver", driver,
+                                     NULL));
+}
diff --git a/gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.h 
b/gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.h
new file mode 100644
index 0000000..affd8ad
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.h
@@ -0,0 +1,52 @@
+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright (C) 2018 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIS_UBUNTU_PRIVACY_PAGE_H__
+#define __GIS_UBUNTU_PRIVACY_PAGE_H__
+
+#include "gnome-initial-setup.h"
+
+G_BEGIN_DECLS
+
+#define GIS_TYPE_UBUNTU_PRIVACY_PAGE            (gis_ubuntu_privacy_page_get_type ())
+#define GIS_UBUNTU_PRIVACY_PAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GIS_TYPE_UBUNTU_PRIVACY_PAGE, GisUbuntuPrivacyPage))
+#define GIS_UBUNTU_PRIVACY_PAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  
GIS_TYPE_UBUNTU_PRIVACY_PAGE, GisUbuntuPrivacyPageClass))
+#define GIS_IS_UBUNTU_PRIVACY_PAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GIS_TYPE_UBUNTU_PRIVACY_PAGE))
+#define GIS_IS_UBUNTU_PRIVACY_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  
GIS_TYPE_UBUNTU_PRIVACY_PAGE))
+#define GIS_UBUNTU_PRIVACY_PAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  
GIS_TYPE_UBUNTU_PRIVACY_PAGE, GisUbuntuPrivacyPageClass))
+
+typedef struct _GisUbuntuPrivacyPage        GisUbuntuPrivacyPage;
+typedef struct _GisUbuntuPrivacyPageClass   GisUbuntuPrivacyPageClass;
+
+struct _GisUbuntuPrivacyPage
+{
+  GisPage parent;
+};
+
+struct _GisUbuntuPrivacyPageClass
+{
+  GisPageClass parent_class;
+};
+
+GType gis_ubuntu_privacy_page_get_type (void);
+
+void gis_prepare_ubuntu_privacy_page (GisDriver *driver);
+
+G_END_DECLS
+
+#endif /* __GIS_UBUNTU_PRIVACY_PAGE_H__ */
diff --git a/gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.ui 
b/gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.ui
new file mode 100644
index 0000000..df95048
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.ui
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <template class="GisUbuntuPrivacyPage" parent="GisPage">
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="halign">center</property>
+        <property name="valign">fill</property>
+        <property name="orientation">vertical</property>
+<!--        <child>
+          <object class="GtkImage">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="pixel_size">96</property>
+            <property name="icon_name">preferences-system-privacy-symbolic</property>
+            <property name="icon_size">1</property>
+            <property name="margin_top">24</property>
+            <style>
+              <class name="dim-label" />
+            </style>
+          </object>
+        </child> -->
+        <child>
+          <object class="GtkLabel" id="title">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">center</property>
+            <property name="valign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">Help improve Ubuntu</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+              <attribute name="scale" value="1.8"/>
+            </attributes>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">Ubuntu can report information that helps developers 
improve it. This includes things like computer model, what software is installed, and the approximate 
location you chose (FIXME).</property>
+            <property name="wrap">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">center</property>
+            <property name="orientation">horizontal</property>
+            <property name="homogeneous">True</property>
+            <property name="margin_top">18</property>
+            <child>
+              <object class="GtkButton">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Show the First Report</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkButton">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Show the Privacy Policy</property>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_top">18</property>
+            <property name="label" translatable="yes">Would you like to send this information?</property>
+            <property name="wrap">True</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="opt_in_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">Yes, send occasional system info to 
Canonical</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="opt_out_radio">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">No, don't send any info</property>
+            <property name="group">opt_in_radio</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel" id="footer_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">You can change your mind later in Settings -> Privacy 
-> Diagnostics.</property>
+            <property name="justify">center</property>
+            <property name="wrap">True</property>
+            <property name="margin_bottom">18</property>
+            <style>
+              <class name="dim-label"/>
+            </style>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
diff --git a/gnome-initial-setup/pages/ubuntu-privacy/ubuntu-privacy.gresource.xml 
b/gnome-initial-setup/pages/ubuntu-privacy/ubuntu-privacy.gresource.xml
new file mode 100644
index 0000000..7564fa1
--- /dev/null
+++ b/gnome-initial-setup/pages/ubuntu-privacy/ubuntu-privacy.gresource.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/gnome/initial-setup">
+    <file preprocess="xml-stripblanks" alias="gis-ubuntu-privacy-page.ui">gis-ubuntu-privacy-page.ui</file>
+  </gresource>
+</gresources>
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 7af03af..854b1bc 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -41,3 +41,11 @@ gnome-initial-setup/pages/timezone/gis-timezone-page.c
 [type: gettext/glade]gnome-initial-setup/pages/timezone/gis-timezone-page.ui
 gnome-initial-setup/pages/software/gis-software-page.c
 [type: gettext/glade]gnome-initial-setup/pages/software/gis-software-page.ui
+gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.c
+[type: gettext/glade]gnome-initial-setup/pages/ubuntu-privacy/gis-ubuntu-privacy-page.ui
+gnome-initial-setup/pages/livepatch/gis-livepatch-page.c
+[type: gettext/glade]gnome-initial-setup/pages/livepatch/gis-livepatch-page.ui
+gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.c
+[type: gettext/glade]gnome-initial-setup/pages/ubuntu-changes/gis-ubuntu-changes-page.ui
+gnome-initial-setup/pages/apps/gis-apps-page.c
+[type: gettext/glade]gnome-initial-setup/pages/apps/gis-apps-page.ui


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]