+// SPDX-License-Identifier: Apache-2.0
/*
* 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.
+ * Copyright (c) 2018,2019 TOYOTA MOTOR CORPORATION
+ * Copyright (C) 2022 Konsulko Group
*/
#include "applicationmodel.h"
#include "appinfo.h"
-#include "hmi-debug.h"
-
-#include <QtDBus/QDBusInterface>
-#include <QtDBus/QDBusReply>
-
-#include "afm_user_daemon_proxy.h"
+#include <QtCore/QFile>
+#include <QtCore/QJsonObject>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonArray>
-extern org::AGL::afm::user *afm_user_daemon_proxy;
+#include "hmi-debug.h"
class ApplicationModel::Private
{
public:
Private();
+ void addApp(QString icon, QString name, QString id);
+ void removeApp(QString id);
+
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)) )
- {
+ QString icon = i["icon"].toString();
+ fprintf(stderr, "Looking for icon %s\n", icon.toLocal8Bit().data());
+ if ( !QFile::exists(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));
- }
+}
+
+void ApplicationModel::Private::addApp(QString icon, QString name, QString id)
+{
+ HMI_DEBUG("addApp","name: %s icon: %s id: %s.", name.toStdString().c_str(), icon.toStdString().c_str(), id.toStdString().c_str());
+ for(int i = 0; i < this->data.size(); ++i) {
+ if(this->data[i].id() == id)
+ return;
+ }
+
+ QString _icon;
+ if ( QFile::exists(icon) )
+ {
+ _icon = QString("file:%1").arg(icon);
+ fprintf(stderr, "using icon '%s'\n", _icon.toLocal8Bit().data());
+ }
+ else
+ {
+ _icon = "blank";
+ }
- HMI_DEBUG("launcher","name: %s icon: %s id: %s.", name.toStdString().c_str(), icon.toStdString().c_str(), id.toStdString().c_str());
+ int pos = 0;
+ for (pos = 0; pos < this->data.size(); ++pos) {
+ if (QString::compare(this->data.at(pos).name(), name, Qt::CaseInsensitive) > 0)
+ break;
+ }
+ this->data.insert(pos, AppInfo(_icon, name, id));
+}
+
+void ApplicationModel::Private::removeApp(QString id)
+{
+ HMI_DEBUG("removeApp","id: %s.",id.toStdString().c_str());
+ for (int i = 0; i < this->data.size(); ++i) {
+ if (this->data.at(i).id() == id) {
+ this->data.removeAt(i);
+ break;
+ }
}
}
return data(index(i), Qt::UserRole).toString();
}
+QString ApplicationModel::appid(int i) const
+{
+ QString id = data(index(i), Qt::UserRole).toString();
+ return id.split("@")[0];
+}
+
QString ApplicationModel::name(int i) const
{
return data(index(i), Qt::DisplayRole).toString();
HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
}
}
+
+void ApplicationModel::updateApplist(QStringList info)
+{
+ QString icon = info.at(0);
+ QString name = info.at(1);
+ QString id = info.at(2);
+
+ beginResetModel();
+ if(icon == "") { // uninstall
+ d->removeApp(id);
+ }
+ else {
+ // new app
+ d->addApp(icon, name, id);
+ }
+ endResetModel();
+}
+
+void ApplicationModel::initAppList(QList<QMap<QString, QString>> &apps)
+{
+ HMI_DEBUG("launcher","init application list.");
+ beginResetModel();
+ qDebug() << "ApplicationModel::initAppList: got " << apps.size() << " apps";
+ for (int i = 0; i < apps.size(); i++) {
+ d->addApp(apps[i]["icon_path"], apps[i]["name"], apps[i]["id"]);
+ }
+ endResetModel();
+}