aboutsummaryrefslogtreecommitdiffstats
path: root/sysui/Cloud
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@pelagicore.com>2015-10-19 13:48:23 +0200
committerRobert Griebl <robert.griebl@pelagicore.com>2015-11-16 14:04:52 +0000
commit0446271eb6ce5f2f24662031ce55fcf6ee500ba4 (patch)
treea991373c1336ecd5452c7e146758e86e676dacde /sysui/Cloud
parent0eb472c7031ba2cfe1cc49153865e36f3162abfe (diff)
Initial commit of Pelagicore's Neptune-UI with squashed history.
Change-Id: I36747394458e3528f38ed9c078334c260f22d53b Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
Diffstat (limited to 'sysui/Cloud')
-rw-r--r--sysui/Cloud/CloudPage.qml49
-rw-r--r--sysui/Cloud/Settings/SettingsScreen.qml65
-rw-r--r--sysui/Cloud/Store/AppGridItemDelegate.qml103
-rw-r--r--sysui/Cloud/Store/AppGridView.qml60
-rw-r--r--sysui/Cloud/Store/AppStore.qml90
-rw-r--r--sysui/Cloud/Store/AppStoreController.qml153
-rw-r--r--sysui/Cloud/Store/JSONBackend.js85
-rw-r--r--sysui/Cloud/Store/JSONModel.qml50
-rw-r--r--sysui/Cloud/Store/LoadingPage.qml42
-rw-r--r--sysui/Cloud/Store/NotFoundOverlay.qml42
-rw-r--r--sysui/Cloud/Store/StoreScreen.qml41
11 files changed, 780 insertions, 0 deletions
diff --git a/sysui/Cloud/CloudPage.qml b/sysui/Cloud/CloudPage.qml
new file mode 100644
index 0000000..bf7a3a5
--- /dev/null
+++ b/sysui/Cloud/CloudPage.qml
@@ -0,0 +1,49 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+import controls 1.0
+import utils 1.0
+
+UIPage {
+ id: root
+ hspan: 24
+ vspan: 24
+
+ title: "MY CLOUD"
+ symbolName: "my_cloud"
+
+ TabView {
+ id: tabView
+ anchors.fill: parent
+ tabs: [
+ { title : "SETTINGS", url : Qt.resolvedUrl("Settings/SettingsScreen.qml"), properties : {} },
+ { title : "APP STORE", url : Qt.resolvedUrl("Store/StoreScreen.qml"), properties : {} },
+ ]
+ }
+}
diff --git a/sysui/Cloud/Settings/SettingsScreen.qml b/sysui/Cloud/Settings/SettingsScreen.qml
new file mode 100644
index 0000000..4beabbf
--- /dev/null
+++ b/sysui/Cloud/Settings/SettingsScreen.qml
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import utils 1.0
+
+import controls 1.0
+import utils 1.0
+import service.settings 1.0
+
+UIElement {
+ id: root
+
+ ListViewManager {
+ id: settingsListView
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top; anchors.bottom: parent.bottom
+ hspan: 14
+
+ model: SettingsService.entries
+
+ delegate: SettingsListItem {
+ hspan: settingsListView.hspan
+ vspan: 2
+
+ iconName: model.icon
+ titleText: model.title
+ checked: model.checked
+ hasChildren: model.hasChildren
+ }
+ }
+
+ Image {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ source: Style.icon('cloud_bottom_shadow')
+ asynchronous: true
+ visible: false
+ }
+}
diff --git a/sysui/Cloud/Store/AppGridItemDelegate.qml b/sysui/Cloud/Store/AppGridItemDelegate.qml
new file mode 100644
index 0000000..971f349
--- /dev/null
+++ b/sysui/Cloud/Store/AppGridItemDelegate.qml
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+import controls 1.0
+import utils 1.0
+
+UIElement {
+ id: root
+
+ property string icon
+ property alias titleText: titleLabel.text
+ property alias subtitleText: subtitleLabel.text
+
+ signal clicked()
+
+ Image {
+ anchors.fill: parent
+ anchors.rightMargin: 1
+ source: Style.icon('appstore_grid_cell_panel')
+ asynchronous: true
+ }
+
+ Column {
+ anchors.left: parent.left; anchors.right: parent.right
+ anchors.bottom: parent.bottom; anchors.bottomMargin: Style.padding
+
+ spacing: Style.paddingXL
+
+ Image {
+ id: iconImage
+
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ width: Style.hspan(2)
+
+ source: root.icon //Style.icon(root.icon)
+
+ fillMode: Image.PreserveAspectFit
+ asynchronous: true
+ }
+
+ Column {
+ anchors.left: parent.left; anchors.right: parent.right
+ spacing: -10
+
+ Label {
+ id: titleLabel
+
+ anchors.left: parent.left; anchors.right: parent.right
+ anchors.margins: Style.padding
+ font.capitalization: Font.AllUppercase
+
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: Style.fontSizeS
+ color: Style.colorWhite
+ elide: Text.ElideRight
+ }
+
+ Label {
+ id: subtitleLabel
+
+ anchors.left: parent.left; anchors.right: parent.right
+ anchors.margins: Style.padding
+ font.capitalization: Font.AllUppercase
+
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: Style.fontSizeXXS
+ color: Style.colorGrey
+ }
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: root.clicked()
+ }
+}
diff --git a/sysui/Cloud/Store/AppGridView.qml b/sysui/Cloud/Store/AppGridView.qml
new file mode 100644
index 0000000..16357ee
--- /dev/null
+++ b/sysui/Cloud/Store/AppGridView.qml
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+import controls 1.0
+import utils 1.0
+
+UIElement {
+ id: root
+
+ property string appCategory: ""
+ property alias cellWidth: grid.cellWidth
+ property alias cellHeight: grid.cellHeight
+ property alias model: grid.model
+ property alias delegate: grid.delegate
+ property bool loading: true
+
+ onLoadingChanged: print("loading: ", loading, model.count)
+
+ GridView {
+ id: grid
+
+ anchors.fill: parent
+
+ clip: true
+
+ NotFoundOverlay {
+ anchors.top: parent.top; anchors.topMargin: Style.vspan(6)
+ width: parent.width
+
+ text: loading ? "Loading..." : model.count === 0 ? qsTr("No apps found in %1").arg(root.appCategory) : ""
+ overlayVisible: loading || model.count === 0
+ }
+ }
+}
diff --git a/sysui/Cloud/Store/AppStore.qml b/sysui/Cloud/Store/AppStore.qml
new file mode 100644
index 0000000..af5fadf
--- /dev/null
+++ b/sysui/Cloud/Store/AppStore.qml
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "JSONBackend.js" as JSONBackend
+import com.pelagicore.ApplicationManager 0.1
+
+Item {
+
+ property bool serverOnline: false
+ property string serverReason
+ property string server: ApplicationManager.additionalConfiguration.appStoreServerUrl
+
+ signal loginSuccessful()
+
+ function goBack() {
+ if (categoriesPage.state != "")
+ categoriesPage.goBack()
+ else
+ root.close();
+ }
+
+ function checkServer() {
+ print("#####################checkserver#####################")
+ var url = server + "/hello"
+ var data = {"platform" : "AM", "version" : "1"}
+ JSONBackend.setErrorFunction(function () {
+ serverOnline = false
+ serverReason = "unknown"
+ })
+ JSONBackend.serverCall(url, data, function(data) {
+ if (data !== 0) {
+ if (data.status == "ok") {
+ serverOnline = true
+ login()
+ //refresh()
+ } else if (data.status == "maintenance") {
+ serverOnline = false
+ serverReason = "maintenance"
+ } else {
+ print("HELLO ERROR: " + data.error)
+ serverOnline = false
+ }
+ } else {
+ serverOnline = false
+ serverReason = "unknown"
+ }
+ })
+ }
+
+ function login() {
+ var url = server + "/login"
+ var data = {"username" : "t", "password" : "t", "imei" : "112163001487801"}
+ JSONBackend.serverCall(url, data, function(data) {
+ if (data !== 0) {
+ if (data.status == "ok") {
+ print("LOGIN SUCCESSFUL");
+ loginSuccessful()
+ } else {
+ print("LOGIN ERROR: " + data.error)
+ }
+ }
+ })
+ }
+ Component.onCompleted: checkServer()
+}
diff --git a/sysui/Cloud/Store/AppStoreController.qml b/sysui/Cloud/Store/AppStoreController.qml
new file mode 100644
index 0000000..d519ebf
--- /dev/null
+++ b/sysui/Cloud/Store/AppStoreController.qml
@@ -0,0 +1,153 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Layouts 1.0
+
+import controls 1.0
+import utils 1.0
+import service.apps 1.0
+
+import "JSONBackend.js" as JSONBackend
+import com.pelagicore.ApplicationInstaller 0.1
+
+Item {
+ id: root
+
+ property int categoryid: 1
+ property string filter: ""
+
+ function download(id) {
+ var url = appstore.server + "/app/purchase"
+ var data = {"id": id, "device_id" : "00-11-22-33-44-55" }
+
+ JSONBackend.serverCall(url, data, function(data) {
+ if (data !== 0) {
+ if (data.status === "ok") {
+ print("start downloading")
+ var icon = appstore.server + "/app/icon?id=" + id
+ var installID = ApplicationInstaller.startPackageInstallation("internal-0", data.url);
+ ApplicationInstaller.acknowledgePackageInstallation(installID);
+ } else if (data.status === "fail" && data.error === "not-logged-in"){
+ print(":::AppStoreController::: not logged in")
+ } else {
+ print(":::AppStoreController::: download failed: " + data.error)
+ }
+ }
+ })
+ }
+
+ AppStore {
+ id: appstore
+ onLoginSuccessful: categoriesModel.refresh()
+ }
+
+ JSONModel {
+ id: categoriesModel
+ url: appstore.server + "/category/list"
+ }
+
+ JSONModel {
+ id: appModel
+ url: appstore.server + "/app/list"
+ data: root.categoryid >= 0 ? { "filter" : root.filter , "category_id" : root.categoryid} : { "filter" : root.filter}
+ }
+
+ Row {
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Column {
+ width: Style.hspan(4)
+
+ ListViewManager {
+ id: categoryView
+
+ anchors.left: parent.left; anchors.right: parent.right
+ vspan: 14
+
+ model: categoriesModel
+
+ header: Label {
+ // The graphics for the category list is not align to the grid, have to specify hardcoded values.
+ height: Style.vspan(5/3)
+ anchors.left: parent.left; anchors.right: parent.right
+ anchors.margins: Style.paddingXL
+
+ text: "CATEGORY"
+ font.pixelSize: Style.fontSizeM
+ }
+
+ delegate: CategoryListItem {
+ width: ListView.view.width
+ height: Style.vspan(5/3)
+ text: model.name //.title
+ onClicked: ListView.view.currentIndex = index
+ }
+
+ onCurrentIndexChanged: {
+ appGrid.appCategory = model.get(currentIndex) ? model.get(currentIndex).name : ""
+ categoryid = model.get(currentIndex) ? model.get(currentIndex).id : 1
+ appModel.refresh()
+ }
+ }
+ }
+
+ AppGridView {
+ id: appGrid
+ // The graphics for the category list is not align to the grid, have to specify hardcoded values.
+ width: Style.hspan(3)*4
+ height: root.height
+ loading: categoriesModel.status !== "ready" || appModel.status !== "ready"
+
+ cellWidth: Style.hspan(3)
+ cellHeight:Style.vspan(5)
+
+ appCategory: ""
+
+ model: appModel
+
+ delegate: AppGridItemDelegate {
+ width: GridView.view.cellWidth
+ height: GridView.view.cellHeight
+
+ icon: appstore.server + "/app/icon?id=" + model.id //model.icon
+ titleText: model.name //model.title
+ subtitleText: model.category //model.subtitle
+
+ onClicked: download(model.id)
+ }
+ }
+ }
+
+ Image {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ source: Style.icon('appstore_bottom_shadow')
+ asynchronous: true
+ visible: false
+ }
+ }
diff --git a/sysui/Cloud/Store/JSONBackend.js b/sysui/Cloud/Store/JSONBackend.js
new file mode 100644
index 0000000..a1ba1b1
--- /dev/null
+++ b/sysui/Cloud/Store/JSONBackend.js
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+.pragma library
+
+var request = new XMLHttpRequest()
+var errorCounter = 0
+var errorFunc = 0
+
+//Will be called when the error is not responding after a few tries
+function setErrorFunction(func) {
+ errorFunc = func
+}
+
+function serverCall(url, data, dataReadyFunction, xhr) {
+ var i = 0
+ for (var key in data)
+ {
+ if (i === 0) {
+ url += "?" + key + "=" + data[key];
+ } else {
+ url += "&" + key+ "=" + data[key];
+ }
+ i++
+ }
+
+ //when no xhr is defined use the global one and reuse it
+ if (xhr == undefined) {
+ xhr = new XMLHttpRequest()
+ }
+
+ console.log("HTTP GET to " + url);
+ if (xhr.readyState != 0) {
+ xhr.abort();
+ }
+ xhr.open("GET", url);
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState == XMLHttpRequest.DONE) {
+ //print(xhr.responseText);
+
+ if (xhr.responseText !== "") {
+ errorCounter = 0
+ var data = JSON.parse(xhr.responseText);
+ return dataReadyFunction(data)
+ } else {
+ print("JSONBackend: " + xhr.status + xhr.statusText)
+ errorCounter++
+ if (errorCounter >= 3 && errorFunc) {
+ errorFunc()
+ }
+
+ return dataReadyFunction(0)
+ }
+ }
+ }
+ xhr.send();
+}
+
+function abortableServerCall(url, data, dataReadyFunction) {
+ serverCall(url,data,dataReadyFunction,request)
+}
diff --git a/sysui/Cloud/Store/JSONModel.qml b/sysui/Cloud/Store/JSONModel.qml
new file mode 100644
index 0000000..beae582
--- /dev/null
+++ b/sysui/Cloud/Store/JSONModel.qml
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import "JSONBackend.js" as JSONBackend
+
+ListModel {
+ id: contenModel
+
+ property int itemCount: 10;
+ property string url: ""
+ property variant data
+ property string status: "empty"
+
+ function refresh() {
+ status = "loading"
+ clear();
+ JSONBackend.abortableServerCall(url, data, function(data) {
+ for (var i = 0; i < data.length; i++) {
+ var entry = data[i];
+ append(entry);
+ }
+ status = "ready"
+ })
+ }
+}
diff --git a/sysui/Cloud/Store/LoadingPage.qml b/sysui/Cloud/Store/LoadingPage.qml
new file mode 100644
index 0000000..2818980
--- /dev/null
+++ b/sysui/Cloud/Store/LoadingPage.qml
@@ -0,0 +1,42 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Image {
+ anchors.fill: parent
+
+ z:2
+
+ Text {
+ anchors.centerIn: parent
+
+ text: "Loading..."
+ color: "white"
+ font.pixelSize: 24
+ }
+}
diff --git a/sysui/Cloud/Store/NotFoundOverlay.qml b/sysui/Cloud/Store/NotFoundOverlay.qml
new file mode 100644
index 0000000..4d04b6d
--- /dev/null
+++ b/sysui/Cloud/Store/NotFoundOverlay.qml
@@ -0,0 +1,42 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+import utils 1.0
+import controls 1.0
+
+Label {
+ id: root
+
+ property bool overlayVisible: false
+
+ horizontalAlignment: Qt.AlignHCenter
+ opacity: overlayVisible
+
+ Behavior on opacity { NumberAnimation { duration: 200 } }
+}
diff --git a/sysui/Cloud/Store/StoreScreen.qml b/sysui/Cloud/Store/StoreScreen.qml
new file mode 100644
index 0000000..cde148e
--- /dev/null
+++ b/sysui/Cloud/Store/StoreScreen.qml
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pelagicore AG
+** Contact: http://www.pelagicore.com/
+**
+** This file is part of Neptune IVI UI.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Neptune IVI UI licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Pelagicore. For licensing terms
+** and conditions see http://www.pelagicore.com.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3 requirements will be
+** met: http://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Controls 1.0
+import QtQuick.Layouts 1.0
+
+import controls 1.0
+import utils 1.0
+
+Item {
+ id: root
+
+ AppStoreController {
+ anchors.fill: parent; anchors.topMargin: Style.vspan(1)
+ }
+}