diff options
Diffstat (limited to 'interfaces')
-rw-r--r-- | interfaces/README.md | 10 | ||||
-rw-r--r-- | interfaces/afm_user_daemon.xml | 52 | ||||
-rw-r--r-- | interfaces/appframework.xml | 57 | ||||
-rw-r--r-- | interfaces/include/afm_user_daemon.hpp | 21 | ||||
-rw-r--r-- | interfaces/include/appframework.hpp | 66 | ||||
-rw-r--r-- | interfaces/interfaces.pri | 18 | ||||
-rw-r--r-- | interfaces/interfaces.pro | 60 | ||||
-rw-r--r-- | interfaces/src/appframework.cpp | 167 |
8 files changed, 451 insertions, 0 deletions
diff --git a/interfaces/README.md b/interfaces/README.md new file mode 100644 index 0000000..4a80a6c --- /dev/null +++ b/interfaces/README.md @@ -0,0 +1,10 @@ +AGL launcher reference implementation + + +Build with QtCreator 3.5.1 + +AGL repo for source code: +https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/launcher + +AGL repo for bitbake recipe: +https://gerrit.automotivelinux.org/gerrit/apps/launcher diff --git a/interfaces/afm_user_daemon.xml b/interfaces/afm_user_daemon.xml new file mode 100644 index 0000000..17b7d63 --- /dev/null +++ b/interfaces/afm_user_daemon.xml @@ -0,0 +1,52 @@ +<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> +<node path="/org/AGL/afm/user"> + <interface name="org.AGL.afm.user"> + <method name="runnables"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="detail"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="start"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="once"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="terminate"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="pause"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="resume"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="runners"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="state"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="install"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <method name="uninstall"> + <arg name="in" type="s" direction="in"/> + <arg name="out" type="s" direction="out"/> + </method> + <signal name="changed"> + <arg name="out" type="s" direction="out"/> + </signal> + </interface> +</node> diff --git a/interfaces/appframework.xml b/interfaces/appframework.xml new file mode 100644 index 0000000..ebc5088 --- /dev/null +++ b/interfaces/appframework.xml @@ -0,0 +1,57 @@ +<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> +<!-- Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH + + 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. --> +<node> + <!-- + org.agl.appframework: + @short_description: The interface of the app framework binder. + + The app framework has to provide some basic functionality like + getting a list of applications and start them. In further versions, + also pausing or stopping, . + --> + <interface name="org.agl.appframework"> + <!-- + getAvailableApps: + @apps: A list of applications that can be launched. + + The application info consists of: + string id; + string version; + int width; + int height; + string name; + string description; + string shortname; + string author; + string iconPath; + --> + <method name="getAvailableApps"> + <arg name="apps" type="{ssiisssss}" direction="out"/> + <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QList<AppInfo>"/> + </method> + <!-- + launchApp: + @name: The name of the application that shall be launched. + @pid: Returns the pid of the process. + + Use the id of the application info to launch the app. + --> + <method name="launchApp"> + <arg name="name" type="s" direction="in"/> + <arg name="pid" type="i" direction="out"/> + </method> + </interface> +</node> + diff --git a/interfaces/include/afm_user_daemon.hpp b/interfaces/include/afm_user_daemon.hpp new file mode 100644 index 0000000..b9a5321 --- /dev/null +++ b/interfaces/include/afm_user_daemon.hpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH + * + * 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. + */ + +#ifndef AFM_USER_DAEMON_HPP +#define AFM_USER_DAEMON_HPP + + +#endif // AFM_USER_DAEMON_HPP diff --git a/interfaces/include/appframework.hpp b/interfaces/include/appframework.hpp new file mode 100644 index 0000000..98ec317 --- /dev/null +++ b/interfaces/include/appframework.hpp @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH + * + * 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. + */ + +#ifndef APPFRAMEWORK_HPP +#define APPFRAMEWORK_HPP + +#include <QtCore/QSharedDataPointer> +#include <QtDBus/QDBusArgument> + +class AppInfo +{ + Q_GADGET + Q_PROPERTY(QString id READ id) + Q_PROPERTY(QString version READ version) + Q_PROPERTY(int width READ width) + Q_PROPERTY(int height READ height) + Q_PROPERTY(QString name READ name) + Q_PROPERTY(QString description READ description) + Q_PROPERTY(QString shortname READ shortname) + Q_PROPERTY(QString author READ author) + Q_PROPERTY(QString iconPath READ iconPath) +public: + AppInfo(); + AppInfo(const AppInfo &other); + virtual ~AppInfo(); + AppInfo &operator =(const AppInfo &other); + void swap(AppInfo &other) { qSwap(d, other.d); } + + QString id() const; + QString version() const; + int width() const; + int height() const; + QString name() const; + QString description() const; + QString shortname() const; + QString author() const; + QString iconPath() const; + + void read(const QJsonObject &json); + + friend QDBusArgument &operator <<(QDBusArgument &argument, const AppInfo &appInfo); + friend const QDBusArgument &operator >>(const QDBusArgument &argument, AppInfo &appInfo); + +private: + class Private; + QSharedDataPointer<Private> d; +}; + +Q_DECLARE_SHARED(AppInfo) +Q_DECLARE_METATYPE(AppInfo) +Q_DECLARE_METATYPE(QList<AppInfo>) + +#endif // APPFRAMEWORK_HPP diff --git a/interfaces/interfaces.pri b/interfaces/interfaces.pri new file mode 100644 index 0000000..07b9e6a --- /dev/null +++ b/interfaces/interfaces.pri @@ -0,0 +1,18 @@ +# Copyright (C) 2016 The Qt Company Ltd. +# Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH +# +# 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. + +INCLUDEPATH += $$PWD $$OUT_PWD/../interfaces/ + +LIBS += -L$$OUT_PWD/../interfaces/ -linterfaces diff --git a/interfaces/interfaces.pro b/interfaces/interfaces.pro new file mode 100644 index 0000000..281eeb8 --- /dev/null +++ b/interfaces/interfaces.pro @@ -0,0 +1,60 @@ +# Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH +# +# 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. + +TEMPLATE = lib +TARGET = interfaces +QT = dbus +CONFIG += staticlib + +HEADERS += \ + include/appframework.hpp + +SOURCES += \ + src/appframework.cpp + +XMLSOURCES = \ + afm_user_daemon.xml \ + appframework.xml + +gen_adaptor_cpp.input = XMLSOURCES +gen_adaptor_cpp.commands = \ + qdbusxml2cpp -i include/${QMAKE_FILE_IN_BASE}.hpp -m -a ${QMAKE_FILE_IN_BASE}_adaptor ${QMAKE_FILE_IN}; \ + moc $$OUT_PWD/${QMAKE_FILE_IN_BASE}_adaptor.h -o $$OUT_PWD/${QMAKE_FILE_IN_BASE}_adaptor.moc +gen_adaptor_cpp.output = ${QMAKE_FILE_IN_BASE}_adaptor.cpp +gen_adaptor_cpp.variable_out = SOURCES +gen_adaptor_cpp.clean = ${QMAKE_FILE_IN_BASE}_adaptor.cpp + +gen_proxy_cpp.input = XMLSOURCES +gen_proxy_cpp.commands = \ + qdbusxml2cpp -i include/${QMAKE_FILE_IN_BASE}.hpp -m -p ${QMAKE_FILE_IN_BASE}_proxy ${QMAKE_FILE_IN}; \ + moc $$OUT_PWD/${QMAKE_FILE_IN_BASE}_proxy.h -o $$OUT_PWD/${QMAKE_FILE_IN_BASE}_proxy.moc +gen_proxy_cpp.output = ${QMAKE_FILE_IN_BASE}_proxy.cpp +gen_proxy_cpp.variable_out = SOURCES +gen_proxy_cpp.clean = ${QMAKE_FILE_IN_BASE}_proxy.cpp + +gen_adaptor_h.input = XMLSOURCES +gen_adaptor_h.commands = @echo Fake making the header for ${QMAKE_FILE_IN} +gen_adaptor_h.depends = ${QMAKE_FILE_IN_BASE}_adaptor.cpp +gen_adaptor_h.output = ${QMAKE_FILE_IN_BASE}_adaptor.h +gen_adaptor_h.clean = ${QMAKE_FILE_IN_BASE}_adaptor.h + +gen_proxy_h.input = XMLSOURCES +gen_proxy_h.commands = @echo Fake making the header for ${QMAKE_FILE_IN} +gen_proxy_h.depends = ${QMAKE_FILE_IN_BASE}_proxy.cpp +gen_proxy_h.output = ${QMAKE_FILE_IN_BASE}_proxy.h +gen_proxy_h.clean = ${QMAKE_FILE_IN_BASE}_proxy.h + +QMAKE_EXTRA_COMPILERS += gen_adaptor_cpp gen_proxy_cpp gen_adaptor_h gen_proxy_h + +DISTFILES += diff --git a/interfaces/src/appframework.cpp b/interfaces/src/appframework.cpp new file mode 100644 index 0000000..7420642 --- /dev/null +++ b/interfaces/src/appframework.cpp @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH + * + * 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 "include/appframework.hpp" + +#include <QtCore/QJsonObject> + +class AppInfo::Private : public QSharedData +{ +public: + Private(); + Private(const Private &other); + + QString id; + QString version; + int width; + int height; + QString name; + QString description; + QString shortname; + QString author; + QString iconPath; +}; + +AppInfo::Private::Private() + : width(-1) + , height(-1) +{ +} + +AppInfo::Private::Private(const Private &other) + : QSharedData(other) + , id(other.id) + , version(other.version) + , width(other.width) + , height(other.height) + , name(other.name) + , description(other.description) + , shortname(other.shortname) + , author(other.author) + , iconPath(other.iconPath) +{ +} + +AppInfo::AppInfo() + : d(new Private) +{ +} + +AppInfo::AppInfo(const AppInfo &other) + : d(other.d) +{ +} + +AppInfo::~AppInfo() +{ +} + +AppInfo &AppInfo::operator =(const AppInfo &other) +{ + d = other.d; + return *this; +} + +QString AppInfo::id() const +{ + return d->id; +} + +QString AppInfo::version() const +{ + return d->version; +} + +int AppInfo::width() const +{ + return d->width; +} + +int AppInfo::height() const +{ + return d->height; +} + +QString AppInfo::name() const +{ + return d->name; +} + +QString AppInfo::description() const +{ + return d->description; +} + +QString AppInfo::shortname() const +{ + return d->shortname; +} + +QString AppInfo::author() const +{ + return d->author; +} + +QString AppInfo::iconPath() const +{ + return d->iconPath; +} + +void AppInfo::read(const QJsonObject &json) +{ + d->id = json["id"].toString(); + d->version = json["version"].toString(); + d->width = json["width"].toInt(); + d->height = json["height"].toInt(); + d->name = json["name"].toString(); + d->description = json["description"].toString(); + d->shortname = json["shortname"].toString(); + d->author = json["author"].toString(); + d->iconPath = json["iconPath"].toString(); +} + +QDBusArgument &operator <<(QDBusArgument &argument, const AppInfo &appInfo) +{ + argument.beginStructure(); + argument << appInfo.d->id; + argument << appInfo.d->version; + argument << appInfo.d->width; + argument << appInfo.d->height; + argument << appInfo.d->name; + argument << appInfo.d->description; + argument << appInfo.d->shortname; + argument << appInfo.d->author; + argument << appInfo.d->iconPath; + argument.endStructure(); + + return argument; +} + +const QDBusArgument &operator >>(const QDBusArgument &argument, AppInfo &appInfo) +{ + argument.beginStructure(); + argument >> appInfo.d->id; + argument >> appInfo.d->version; + argument >> appInfo.d->width; + argument >> appInfo.d->height; + argument >> appInfo.d->name; + argument >> appInfo.d->description; + argument >> appInfo.d->shortname; + argument >> appInfo.d->author; + argument >> appInfo.d->iconPath; + argument.endStructure(); + return argument; +} |