From cde1f8b32286b263040cd1d9360f4b8835699505 Mon Sep 17 00:00:00 2001 From: zheng_wenlong Date: Tue, 19 Jun 2018 15:00:46 +0900 Subject: 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 --- launcher/src/applicationmodel.cpp | 154 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 launcher/src/applicationmodel.cpp (limited to 'launcher/src/applicationmodel.cpp') 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 +#include + +#include "afm_user_daemon_proxy.h" + +extern org::AGL::afm::user *afm_user_daemon_proxy; + +class ApplicationModel::Private +{ +public: + Private(); + + QList 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 ApplicationModel::roleNames() const +{ + QHash 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); + } +} -- cgit 1.2.3-korg