This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
homescreen [2017/02/01 14:56] jbocklage |
homescreen [2018/09/05 03:59] hoshina0406 [Purpose] |
||
---|---|---|---|
Line 7: | Line 7: | ||
===== Summary ===== | ===== Summary ===== | ||
This document contains the documentation for the following application: | This document contains the documentation for the following application: | ||
- | * HomeScreen | + | * HomeScreen-client (menu-bar,launcher etc) |
- | * HomeScreenAppFrameworkBinderTizen | + | * HomeScreen-service |
- | * HomeScreenSimulator | + | |
- | * InputEventManager | + | |
- | * SampleAppTimeDate | + | |
- | * WindowManager | + | |
- | The main focus is on the Home Screen application. | + | |
- | The other applications were created to enable functionality that is provided by already existing components (like Tizen app framework) or that are not available by default (InputEventManager, WindowManager). | + | |
Line 32: | Line 27: | ||
See the License for the specific language governing permissions and limitations under the License. | See the License for the specific language governing permissions and limitations under the License. | ||
- | |||
- | ===== HomeScreen ===== | ||
- | ==== Purpose ==== | ||
- | The Home Screen application is the main visual interface to the user. Its main functionalities: | ||
- | * Provide a control bar for quick commands | ||
- | * Provide a status bar to display information | ||
- | * Provide areas for application surfaces | ||
- | * Provide a popup mechanism | ||
- | * Provide a list of applications that can be launched by the user | ||
- | ==== Start Screen with App Launcher Widget ==== | ||
- | {{eg-ui-graphics:homescreen_applauncher.png}} | ||
- | ==== Applications Design ==== | ||
- | === Programming Language === | ||
- | All applications are written in C++, using Qt 5.5.1. | ||
- | === Software Architecture === | ||
- | == Overview == | ||
- | This diagram shows which class is instantiated and who the owner is. It also shows the interfaces of the classes. | ||
- | The graphical representations of the classes (UI-files) are shown on the right side. | ||
- | |||
- | {{eg-ui-graphics:homescreen_architecture_v1.2.png}} | ||
- | |||
- | |||
- | == IPC == | ||
- | The current choice is D-Bus. HSA uses the Qt D-Bus binder. | ||
- | For system wide events like Day/Night Mode, signals are used, for direct communication like popup requests, methods are used. | ||
- | To generate the D-Bus adapter and proxy source code, qdbusxml2cpp is used. | ||
- | == Multiple instances == | ||
- | To only allow one instance, uncomment this in the main.cpp: | ||
- | // allow only one instance of this application | ||
- | QSharedMemory appInstance; | ||
- | appInstance.setKey("AGLHomeScreenApp"); | ||
- | if (!appInstance.create(1)) | ||
- | { | ||
- | qDebug("Only one instance of the Home Screen App allowed!"); | ||
- | exit(-1); | ||
- | } | ||
- | ==== StatusBarWidget ==== | ||
- | The status bar has 5 status bar placeholder. They are placed as shown here: | ||
- | {{eg-ui-graphics:homescreen_statusbar.png}} | ||
- | ==== ControlBarWidget ==== | ||
- | The control bar has thee entries right now. | ||
- | * The “Home” button | ||
- | * This will show the app launcher widget. A list of applications that can be launched by clicking the app name. | ||
- | * The “Settings” button | ||
- | * This will bring up the settings widget (see settings chapter) | ||
- | * The “Navigation” button | ||
- | * This is an example for a soft “Hard Key”. It will use the InputEventManager to emit a key press signal. | ||
- | ==== PopupWidget ==== | ||
- | This widget is shown as soon as a showPopup request in incoming. Right now, only text can be displayed. | ||
- | ==== SettingsWidget ==== | ||
- | This widget is used to set up HomeScreen settings. Right now, the language and the color scheme can be configured. | ||
- | |||
- | English language selected: | ||
- | {{eg-ui-graphics:homescreen_language_english.png}} | ||
- | |||
- | Japanese language selected: | ||
- | {{eg-ui-graphics:homescreen_language_japanese.png}} | ||
- | ==== Internationalization ==== | ||
- | HSA uses the QTranslator class to support multiple languages. | ||
- | ==== Application Settings ==== | ||
- | Applications settings that are needed for the development are stored via QSettings. | ||
- | Therefore some QCoreApplication values are set: | ||
- | // used for application settings (QSettings) | ||
- | QCoreApplication::setOrganizationDomain("LinuxFoundation"); | ||
- | QCoreApplication::setOrganizationName("AutomotiveGradeLinux"); | ||
- | QCoreApplication::setApplicationName("HomeScreen"); | ||
- | QCoreApplication::setApplicationVersion("0.x.x"); | ||
- | These are stored on the developer OS in the file | ||
- | ~/.config/AutomotiveGradeLinux/HomeScreen.conf | ||
- | ===== HomeScreenAppFrameworkBinderTizen ===== | ||
- | ==== Purpose ==== | ||
- | The binder is used to access the systems application framework functionalities, like | ||
- | * Receive a list of applications that can be launched by the user | ||
- | * Launch applications | ||
- | The binder can be used as blueprint for other app framework binders. | ||
- | ==== Tizen ==== | ||
- | This binder uses AUL and the pkgmgr-info API of the Tizen application framework. | ||
- | === Receiving the list of launchable applications: === | ||
- | pkgmgr_info::pkgmgrinfo_pkginfo_get_list(…) | ||
- | === Launch application === | ||
- | AUL:: aul_launch_app(…) | ||
- | ==== D-Bus interface ==== | ||
- | The binder implements the org.agl.appframework interface. | ||
- | <node> | ||
- | <interface name="org.agl.appframework"> | ||
- | <method name="getAvailableAppNames"> | ||
- | <arg name="names" type="as" direction="out"/> | ||
- | </method> | ||
- | <method name="launchApp"> | ||
- | <arg name="name" type="s" direction="in"/> | ||
- | <arg name="pid" type="i" direction="out"/> | ||
- | </method> | ||
- | </interface> | ||
- | </node> | ||
- | ===== HomeScreenSimulator ===== | ||
- | ==== Purpose ==== | ||
- | This application is meant to run on the developer PC to inject events into the HomeScreen application. For example, to use D-Bus interfaces exposed by the HomeScreen app. | ||
- | ==== Status Bar ==== | ||
- | The Simulator app uses the D-Bus interface org.agl.statusbar to get and set the status bar info. The status bar is the green bar at the very top of the app. | ||
- | {{eg-ui-graphics:homescreen_simulator_statusbar.png}} | ||
- | ==== Popup ==== | ||
- | The Simulator app uses the D-Bus interface org.agl.popup to display a popup. | ||
- | |||
- | {{eg-ui-graphics:homescreen_simulator_popup.png}} | ||
- | |||
- | <node> | ||
- | <interface name="org.agl.popup"> | ||
- | <method name="showPopup"> | ||
- | <arg name="type" type="i" direction="in"/> | ||
- | <arg name="text" type="s" direction="in"/> | ||
- | </method> | ||
- | </interface> | ||
- | </node> | ||
- | |||
- | ==== Day/Night Mode ==== | ||
- | The Simulator app uses the D-Bus interface org.agl.daynightmode to switch the color schemes between day and night. | ||
- | <node> | ||
- | <interface name="org.agl.daynightmode"> | ||
- | <signal name="dayNightMode"> | ||
- | <arg name="mode" type="i" direction="out"/> | ||
- | </signal> | ||
- | </interface> | ||
- | </node> | ||
- | |||
- | Day mode: | ||
- | {{eg-ui-graphics:homescreen_simulator_daynightmode_day.png}} | ||
- | |||
- | Night mode: | ||
- | {{eg-ui-graphics:homescreen_simulator_daynightmode_night.png}} | ||
- | |||
- | ==== Future features ==== | ||
- | These will be implemented as soon as the features are available. | ||
- | ===== InputEventManager ===== | ||
- | ==== Purpose ==== | ||
- | The event manager can receive high level events, like hard key presses and distributes them to the corresponding component. | ||
- | ==== Interfaces ==== | ||
- | Therefore it implements org.agl.inputevent | ||
- | <node> | ||
- | <interface name="org.agl.inputevent"> | ||
- | <method name="hardKeyPressed"> | ||
- | <arg name="key" type="i" direction="in"/> | ||
- | </method> | ||
- | </interface> | ||
- | </node> | ||
- | Right now it uses the org.agl.homescreen interface to distribute keys to the HSA: | ||
- | <node> | ||
- | <interface name="org.agl.homescreen"> | ||
- | <method name="hardKeyPressed"> | ||
- | <arg name="key" type="i" direction="in"/> <!-- using the inputevent.hpp InputEvent::HardKey type --> | ||
- | </method> | ||
- | </interface> | ||
- | </node> | ||
- | ===== SampleAppTimeDate ===== | ||
- | ==== Purpose ==== | ||
- | This app demonstrates how to use the org.agl.statusbar interface. | ||
- | ==== Functionality | ||
- | It shows the current time in the first available status bar placeholder. | ||
- | ===== WindowManager ===== | ||
- | ==== Purpose ==== | ||
- | The WindowManager is the interface to the wayland compositor. It will use the IVI-shell to receive information about the display and the available surfaces. | ||
- | ==== Functionality ==== | ||
- | The Window Manager will implement a logic to decide between different app surface render layouts. Therefore it will access the app framework to receive information like preferred app resolutions and so on. | ||
- | |||
- | ==== Application Design ==== | ||
- | === Programming Language === | ||
- | The Home Screen application is written in C++, using Qt 5.5.1. | ||
- | |||
- | ==== Simulation on Developer PC ===== | ||
- | === System Settings Simulator === | ||
- | The x86 build includes a simulator for system settings and events like day/night mode, clamp 15 (ignition) and reverse gear. | ||
- | |||
- | ==== Infrastructure ==== | ||
- | === Source Code === | ||
- | The source code is located here: | ||
- | https://gerrit.automotivelinux.org/gerrit/gitweb?p=staging/HomeScreen.git | ||
- | === Bitbake Recipes === | ||
- | https://gerrit.automotivelinux.org/gerrit/gitweb?p=AGL/meta-agl-demo.git | ||
+ | ==== API&SERVICE ==== | ||
+ | [[http://docs.automotivelinux.org/docs/apis_services/en/dev/reference/hmi-framework/3_1-HomeScreen-Guide.html|HomeScreen API&SERVICE]]. |