Application Framework

Application Framework

1. Overview

The definition of Application framework can be difficult to agree upon. For the moment we start with a Wikipedia definition:

“Application framework consists of a software framework used by software developers to implement the standard structure of an application”

Where software framework is defined like this:

“A software framework is an abstraction in which software providing generic functionality can be selectively  changed by additional user-written code,thus providing application-specific software. […] Software frameworks may include support programs, compilers, code libraries, tool sets, and application programming interfaces (APIs)  that bring together all the different components to enable development of a project or solution”

The GENIVI Reference Architecture works with two different approaches to developing applications, namely the Managed and the Native application type.

Most people associate Application Framework mostly with the solution for the Managed application category, which includes a well-defined and limited set of application APIs and usually a constrained (“sandboxed”) execution environment.

Refer latest "Reference Architecture" document at the below link for more information on Applications FW , Native and Managed Applications, Application Life cycle

Reference Architecture (access requires Genivi Member Login)

 

1.1 App FW Scope and Concept

In the following review comments can be added to the App FW scope and concept document.

App FW Scope and Concept - Review

1.2 Application Manager

The Application Manager component is a part of the Application Framework set of components, aimed at supporting Applications, "Apps", in a GENIVI setting.

An Application manager component manages the overall responsibilities of the application framework infrastructure. This may include launching applications, restarting applications upon failure or when updated, controlling the privileges associated with the applications, keeping track of application states (in focus / background, speech context and access to audio).

Below is the comparison study of API's belonging to Application Manager in Tizen and Apertis.

 

Sl No.

Tizen Web API

Description

Tizen Native

Description

Apertis (formerly eCORE)

Description

Qt Automotive Suite
Application Manager

Description

Comments
/ Remarks

Sl No.

Tizen Web API

Description

Tizen Native

Description

Apertis (formerly eCORE)

Description

Qt Automotive Suite
Application Manager

Description

Comments
/ Remarks

1

getCurrentApplication

Gets the Application object
defining the current application.

 

 

CurrentActiveApp

Property update
Get the current active application on top of the application stack

 

Defined by the System UI, can support multiple active applications at once.

 

2

kill

Kills an application with
the specified application context ID.

 

 

Apps are killed based on their states by app manager.

Apps are killed based on their activity state. There is no exposed API using which system UI or managed app can request another app to be killed.

ApplicationManager::stopApplication(string id, bool forceKill).

Only available to System UI and via System DBus

 

3

launch

Launches an application
with the given application ID.

 

 

LaunchNewApp ()

Launch an application
from any other application

ApplicationManager::startApplication
ApplicationManager::openUrl

Only available to System UI and via System DBus.
Apps themselves can only launch other apps through mime-types.

 

4

launchAppControl

Launches an application
with the specified application
control.

 

 

OpenURI()

This method is used to
launch an application
which handles the MIME
type of the
arguments.

For apps: [http://doc.qt.io/qt-5/qml-qtqml-qt.html#openUrlExternally-method
]
For System UI: ApplicationManager::startApplication

Applications uses standard Qt interfaces, i.e. they are independent of Application Manager.

 

5

findAppControl

Finds application information
 can be launched with the
 given application control.

 

 

AppLaunchDatabase

Returns a list of apps and the MIMEs that they can handle.
NOTE: the name will be corrected.

The ApplicationManager singleton presents a model with the metadata regarding all installed apps and information regarding if the application is running or not.

Only available to System UI and via System DBus.

 

6

getAppsContext

Gets a list of application
contexts for applications
 that are currently running
on a device.

 

 

 

Not clear about the API

 

Not sure what a context is.

 

7

getAppContext

Gets the application context
 for the specified application
 context ID.

app_manager_get
_app_context

Gets the application
context for the given
 ID of the application.

 

Not clear about the API

 

Not sure what a context is.

 

8

getAppsInfo

Gets the list of installed
application's information
 on a device.

 

 

Not yet implemented

Assuming that this API should provide a complete list of apps that are installed on the device.
NOTE: there are API for system UI like launcher to get this info. But not in general for managed apps.

The ApplicationManager singleton presents a model with the metadata regarding all installed apps and information regarding if the application is running or not.

Only available to System UI and via System DBus.

 

9

getAppInfo

Gets application information
 for a specified application ID.

 

 

GetApplicationInfo

Returns manifest info to
the calling process

The ApplicationManager singleton presents a model with the metadata regarding all installed apps and information regarding if the application is running or not.

Only available to System UI and via System DBus.

 

10

getAppSharedURI

Gets URI of read-only shared
directory of application for a
 specified application ID.

 

 

 

Not yet implemented

 

 

 

11

getAppMetaData

Gets application meta data
array for a specified
application ID.

 

 

 

Not clear if this is
different from GetAppInfo

The ApplicationManager singleton presents a model with the metadata regarding all installed apps and information regarding if the application is running or not.

Only available to System UI and via System DBus.

 

12

addAppInfoEventListener

Adds a listener for receiving
any notification for changes
in the list of the installed
applications on a device.

 

 

 

The application entries use the freedesktop desktop entry format and method.
[https://developer.gnome.org/desktop-entry-spec/
]

Available through the object returned from  ApplicationManager::get.

Only available to System UI and via System DBus.

 

13

removeAppInfoEvent
Listener

Removes the listener to
stop receiving notifications
for changes on the list of
installed applications on a device.

 

 

 

As above

Yes, through Qt signals/slots.

Only available to System UI and via System DBus.

 

14

 

 

 

 

GetGlobalSearchApps

Global search is distributed
over all apps. This API
gives a list of apps that are
supporting global search
NOTE: This is a product specific feature

This would be implemented as a tag in the manifest, e.g. another capability.

Global search is not a part of the Application Manager but would have to be supported through some other service.

 

15

 

 

 

 

RegisterMyApp

All applications register
to application manager
The registration is needed as app manager is a dbus service.

The ApplicationManager itself is not tied to a specific appstore implementation - as long as the package can be downloaded via HTTP, HTTPS or FTP; it can also be provided as a local file or via a UNIX socket connection. QtAS comes with a PoC appstore implementation (server side: django, client side: QML).
See ApplicationInstaller singleton (system-UI and system DBus)

Not sure if this refers installation or during run-time. Installation is initiated through an Application Manager interface, so it works automatically. Apps are launched through Application Manager, so again, it works automatically.

 

16

 

 

 

 

SetUninstalledApplication

DEPRECATED API !

AppStore :Set the
application manifest
name which isuninstalled.

 

Application Manager handles uninstall, no need to call.

 

17

 

 

 

 

InsertNewEntry

DEPRECATED!

AppStore :Launcher
displays categories of
 applications and the
list of applications in
 each category.

 

Application Manager handles install, no need to call.
AppStore is integrated through a custom plugin, so anything apart from the reference store needs to be integrated by writing a C++ plugin.

 

18

 

 

 

 

SetInstalledApplication
Manifest

DEPRECATED API !
AppStore :Set the manifest
file of the installed application.

 

Application Manager handles install, no need to call.

 

20

 

 

 

 

 

 

 

 

 

21

 

 

 

 

"signal: AppLaunchDatabase
Update "

This signal indicates
an update of the app database

 

Application Manager owns the database. No need to call. System UI is notified through the QAbstractItemModel interface of the ApplicationManager singleton object.

 

24

 

 

app_manager_foreach
_app_context

Retrieves all application
 contexts of running
applications.

 

 

 

Not sure what a context is.

 

25

 

 

app_manager_foreach
_app_info

Retrieves all installed
 applications information.

 

 

The ApplicationManager singleton presents a model with the metadata regarding all installed apps and information regarding if the application is running or not.

 

 

26

 

 

int app_manager_get
_app_id

Gets the ID of the
application for the
given process ID.

 

 

The ApplicationManager singleton presents a model with the metadata regarding all installed apps and information regarding if the application is running or not.

 

 

27

 

 

app_manager_get_
external_shared_
data_path

Gets the absolute path
to the shared data
directory of the
application specified
with an application ID.

 

 

ApplicationInstaller::getInstallationLocation

There's no real "shared" directory, but the path to the app's private data directory is available. Only available to System UI and via System DBus.