summaryrefslogtreecommitdiffstats
path: root/launcher/src/applicationmodel.cpp
diff options
context:
space:
mode:
authorzheng_wenlong <wenlong_zheng@nexty-ele.com>2018-06-19 15:00:46 +0900
committerzheng_wenlong <wenlong_zheng@nexty-ele.com>2018-06-27 14:54:23 +0900
commitcde1f8b32286b263040cd1d9360f4b8835699505 (patch)
treedce7f4fc1faf575dc47b7362f3f3ffb759ad9045 /launcher/src/applicationmodel.cpp
parentaf18398e4ea4b8f86949f31c2766390caeccdbe4 (diff)
Detach launcher application from HomeScreen
Detach launcher application from Homescreen, Use qlibhomescreen instead of homescreenhandle. [Patch sets 3] This application needs qlibhomescreen, add into sdk in 14597. [Patch sets 4] Right now add qlibhomescreen class into src for instead. Delete it after qlibhomescreen is add into sdk. [Patch sets 5] From Jan-Simon advise, waitting for qlibhomescreen sdk. So return to Patch sets 3. Relative commit: https://gerrit.automotivelinux.org/gerrit/#/c/14597/ Task-AGL: SPEC-1518 Change-Id: Ia16aecddd2bf4623038a84254a0c56967ace9b92 Signed-off-by: zheng_wenlong <wenlong_zheng@nexty-ele.com>
Diffstat (limited to 'launcher/src/applicationmodel.cpp')
-rw-r--r--launcher/src/applicationmodel.cpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/launcher/src/applicationmodel.cpp b/launcher/src/applicationmodel.cpp
new file mode 100644
index 0000000..90f81de
--- /dev/null
+++ b/launcher/src/applicationmodel.cpp
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2016 The Qt Company Ltd.
+ * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH
+ * Copyright (c) 2018 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "applicationmodel.h"
+#include "appinfo.h"
+
+#include "hmi-debug.h"
+
+#include <QtDBus/QDBusInterface>
+#include <QtDBus/QDBusReply>
+
+#include "afm_user_daemon_proxy.h"
+
+extern org::AGL::afm::user *afm_user_daemon_proxy;
+
+class ApplicationModel::Private
+{
+public:
+ Private();
+
+ QList<AppInfo> data;
+};
+
+namespace {
+ QString get_icon_name(QJsonObject const &i)
+ {
+ QString icon = i["name"].toString().toLower();
+
+ if ( !QFile::exists(QString(":/images/%1_active.svg").arg(icon)) ||
+ !QFile::exists(QString(":/images/%1_inactive.svg").arg(icon)) )
+ {
+ icon = "blank";
+ }
+ return icon;
+ }
+}
+
+ApplicationModel::Private::Private()
+{
+ QString apps = afm_user_daemon_proxy->runnables(QStringLiteral(""));
+ QJsonDocument japps = QJsonDocument::fromJson(apps.toUtf8());
+ for (auto const &app : japps.array()) {
+ QJsonObject const &jso = app.toObject();
+ auto const name = jso["name"].toString();
+ auto const id = jso["id"].toString();
+ auto const icon = get_icon_name(jso);
+
+ // Hide HomeScreen icon itself
+ if (name != "launcher" && name != "homescreen-2017" && name != "OnScreenApp") {
+ this->data.append(AppInfo(icon, name, id));
+ }
+
+ HMI_DEBUG("launcher","name: %s icon: %s id: %s.", name.toStdString().c_str(), icon.toStdString().c_str(), id.toStdString().c_str());
+ }
+}
+
+ApplicationModel::ApplicationModel(QObject *parent)
+ : QAbstractListModel(parent)
+ , d(new Private())
+{
+}
+
+ApplicationModel::~ApplicationModel()
+{
+ delete this->d;
+}
+
+int ApplicationModel::rowCount(const QModelIndex &parent) const
+{
+ if (parent.isValid())
+ return 0;
+
+ return this->d->data.count();
+}
+
+QVariant ApplicationModel::data(const QModelIndex &index, int role) const
+{
+ QVariant ret;
+ if (!index.isValid())
+ return ret;
+
+ switch (role) {
+ case Qt::DecorationRole:
+ ret = this->d->data[index.row()].iconPath();
+ break;
+ case Qt::DisplayRole:
+ ret = this->d->data[index.row()].name();
+ break;
+ case Qt::UserRole:
+ ret = this->d->data[index.row()].id();
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+QHash<int, QByteArray> ApplicationModel::roleNames() const
+{
+ QHash<int, QByteArray> roles;
+ roles[Qt::DecorationRole] = "icon";
+ roles[Qt::DisplayRole] = "name";
+ roles[Qt::UserRole] = "id";
+ return roles;
+}
+
+QString ApplicationModel::id(int i) const
+{
+ return data(index(i), Qt::UserRole).toString();
+}
+
+QString ApplicationModel::name(int i) const
+{
+ return data(index(i), Qt::DisplayRole).toString();
+}
+
+void ApplicationModel::move(int from, int to)
+{
+ QModelIndex parent;
+ if (to < 0 || to > rowCount()) return;
+ if (from < to) {
+ if (!beginMoveRows(parent, from, from, parent, to + 1)) {
+ HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
+ return;
+ }
+ d->data.move(from, to);
+ endMoveRows();
+ } else if (from > to) {
+ if (!beginMoveRows(parent, from, from, parent, to)) {
+ HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
+ return;
+ }
+ d->data.move(from, to);
+ endMoveRows();
+ } else {
+ HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
+ }
+}