aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortiansen <tian_sen@dl.cn.nexty-ele.com>2018-11-02 20:40:38 +0800
committertiansen <tian_sen@dl.cn.nexty-ele.com>2018-11-02 20:40:38 +0800
commit26e3a508eb0bec7a59dbcef0251233df42781963 (patch)
tree2649f1ec185c5173cbbb5e07275649d1dbbe0100
parent33d31b5bac3c8c9105d43d6566174f39ef7a4ea4 (diff)
-rw-r--r--README.md6
-rw-r--r--homescreen/homescreen.pro6
-rw-r--r--homescreen/qml/MediaAreaBlank.qml2
-rw-r--r--homescreen/qml/ShortcutArea.qml15
-rw-r--r--homescreen/qml/ShortcutIcon.qml2
-rw-r--r--homescreen/qml/StatusArea.qml34
-rw-r--r--homescreen/qml/TopArea.qml2
-rw-r--r--homescreen/qml/images/AGL_HMI_Blue_Background_NoCar-01.pngbin949053 -> 951359 bytes
-rw-r--r--homescreen/qml/images/AGL_HMI_Full_Background.pngbin0 -> 8306 bytes
-rw-r--r--homescreen/qml/images/AGL_HMI_Normal_Background.pngbin0 -> 10012 bytes
-rw-r--r--homescreen/qml/images/Shortcut/shortcut.qrc2
-rw-r--r--homescreen/qml/images/Shortcut/video.svg109
-rw-r--r--homescreen/qml/images/Shortcut/video_active.svg126
-rw-r--r--homescreen/qml/images/TopSection_NoText_NoIcons-01.pngbin0 -> 2097 bytes
-rw-r--r--homescreen/qml/images/TopSection_NoText_NoIcons-01.svg55
-rw-r--r--homescreen/qml/images/Utility_Logo_Background-01.pngbin0 -> 1150 bytes
-rw-r--r--homescreen/qml/images/Utility_Logo_Background-01.svg53
-rw-r--r--homescreen/qml/images/fullscreen.pngbin0 -> 1230 bytes
-rw-r--r--homescreen/qml/images/images.qrc8
-rw-r--r--homescreen/qml/images/normal.pngbin0 -> 1157 bytes
-rw-r--r--homescreen/qml/main.qml93
-rw-r--r--homescreen/src/homescreenhandler.cpp30
-rw-r--r--homescreen/src/homescreenhandler.h10
-rw-r--r--homescreen/src/main.cpp32
-rw-r--r--homescreen/src/mastervolume.cpp2
-rw-r--r--homescreen/src/mastervolume.h4
-rw-r--r--homescreen/src/statusbarmodel.cpp11
-rw-r--r--homescreen/src/toucharea.cpp36
-rw-r--r--homescreen/src/toucharea.h30
29 files changed, 506 insertions, 162 deletions
diff --git a/README.md b/README.md
index 2c04a91..610164d 100644
--- a/README.md
+++ b/README.md
@@ -15,14 +15,14 @@ $ git clone git clone https://gerrit.automotivelinux.org/gerrit/staging/meta-hmi
Then you can get the following recipe.
-* `meta-agl-demo/recipes-demo-hmi/homescreen`
+* `meta-hmi-framework/homescreen-2017`
**Bitbake**
```
$ source meta-agl/scripts/aglsetup.sh -m m3ulcb agl-demo agl-devel agl-appfw-smack agl-hmi-framework
-$ bitbake homescreen
+$ bitbake homescreen-2017
```
Instructions for building HomeScreen app
@@ -54,5 +54,5 @@ Launch HomeScreen App:
Usage:
```
-afm-util start homescreen
+afm-util start homescreen-2017
```
diff --git a/homescreen/homescreen.pro b/homescreen/homescreen.pro
index 0e5bb58..9c36660 100644
--- a/homescreen/homescreen.pro
+++ b/homescreen/homescreen.pro
@@ -30,14 +30,16 @@ SOURCES += \
src/statusbarserver.cpp \
src/applicationlauncher.cpp \
src/mastervolume.cpp \
- src/homescreenhandler.cpp
+ src/homescreenhandler.cpp \
+ src/toucharea.cpp
HEADERS += \
src/statusbarmodel.h \
src/statusbarserver.h \
src/applicationlauncher.h \
src/mastervolume.h \
- src/homescreenhandler.h
+ src/homescreenhandler.h \
+ src/toucharea.h
OTHER_FILES += \
README.md
diff --git a/homescreen/qml/MediaAreaBlank.qml b/homescreen/qml/MediaAreaBlank.qml
index c3a5f89..2b888c8 100644
--- a/homescreen/qml/MediaAreaBlank.qml
+++ b/homescreen/qml/MediaAreaBlank.qml
@@ -24,7 +24,7 @@ import MasterVolume 1.0
Image {
width: 1080
height: 215
- source: './images/Utility_Logo_Background-01.svg'
+ source: './images/Utility_Logo_Background-01.png'
property bool displayVolume: false;
MouseArea {
diff --git a/homescreen/qml/ShortcutArea.qml b/homescreen/qml/ShortcutArea.qml
index e0c9182..a2d98c8 100644
--- a/homescreen/qml/ShortcutArea.qml
+++ b/homescreen/qml/ShortcutArea.qml
@@ -24,6 +24,13 @@ Item {
width: 785
height: 218
+ Timer {
+ id:notificationTimer
+ interval: 3000
+ running: false
+ repeat: true
+ onTriggered: notificationItem.visible = false
+ }
ListModel {
id: applicationModel
@@ -36,11 +43,11 @@ Item {
application: 'mediaplayer@0.1'
}
ListElement {
- name: 'HVAC'
- application: 'hvac@0.1'
+ name: 'Video'
+ application: 'video@0.1'
}
ListElement {
- name: 'Navigation'
+ name: 'navigation'
application: 'navigation@0.1'
}
}
@@ -66,7 +73,7 @@ Item {
console.warn(model.application)
console.warn("app cannot be launched!")
}
- homescreenHandler.tapShortcut(model.name)
+ homescreenHandler.tapShortcut(model.name, false)
}
}
}
diff --git a/homescreen/qml/ShortcutIcon.qml b/homescreen/qml/ShortcutIcon.qml
index 1100a7c..8dfee26 100644
--- a/homescreen/qml/ShortcutIcon.qml
+++ b/homescreen/qml/ShortcutIcon.qml
@@ -32,7 +32,7 @@ MouseArea {
Image {
id: inactiveIcon
anchors.fill: parent
- source: './images/Shortcut/%1.svg'.arg(root.name.toLowerCase())
+ source: './images/Shortcut/%1.svg'.arg(root.name.toLowerCase())
}
Image {
id: activeIcon
diff --git a/homescreen/qml/StatusArea.qml b/homescreen/qml/StatusArea.qml
index 3f2b280..fb37ca0 100644
--- a/homescreen/qml/StatusArea.qml
+++ b/homescreen/qml/StatusArea.qml
@@ -1,7 +1,6 @@
/*
* Copyright (C) 2016 The Qt Company Ltd.
* Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH
- * Copyright (c) 2017, 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.
@@ -117,38 +116,36 @@ Item {
Layout.fillHeight: true
Layout.preferredWidth: 76
spacing: -10
-
+ Rectangle {
+ Layout.preferredWidth: 77
+ Layout.preferredHeight: 55
+ opacity: 0
+ }
Image {
id: bt_icon
Layout.preferredWidth: 77
- Layout.preferredHeight: 73
+ Layout.preferredHeight: 55
source: connStatus ? './images/Status/HMI_Status_Bluetooth_On-01.png' : './images/Status/HMI_Status_Bluetooth_Inactive-01.png'
fillMode: Image.PreserveAspectFit
property string deviceName: "none"
property bool connStatus: false
Connections {
target: bluetooth
-
- //{"event":"Bluetooth-Manager\/connection","data":{"Status":"connected","Address":"88:BD:45:EC:3A:E6"},"jtype":"afb-event"}
- //{"event":"Bluetooth-Manager\/connection","data":{"Status":"disconnected","Address":"88:BD:45:EC:3A:E6"},"jtype":"afb-event"}
onConnectionEvent: {
- // console.log("bluetooth connection is:", data.Status)
- // console.log("onConnectionEvent bt_icon.deviceName:",bt_icon.deviceName, "bt_icon.connStatus:", bt_icon.connStatus)
- if (data.Status == "connected"){
+ console.log("onConnectionEvent", data.Status)
+ if (data.Status === "connected") {
bt_icon.connStatus = true
- } else if (data.Status == "disconnected"){
+ } else if (data.Status === "disconnected") {
bt_icon.connStatus = false
}
}
- //{"event":"Bluetooth-Manager\/device_updated","data":{"Address":"88:BD:45:EC:3A:E6","Name":"SG02","Paired":"True","Connected":"True","AVPConnected":"True","Metadata":{"Title":"","Artist":"","Status":"stop}
- onDeviceUpdatedEvent: {
- // console.log("bluetooth onDeviceUpdatedEvent date is:", data.Name, "Paired: ", data.Paired, "Connected: ", data.Connected)
- // console.log("onDeviceUpdatedEvent bt_icon.deviceName:",bt_icon.deviceName, "bt_icon.connStatus:", bt_icon.connStatus)
- if ( data.Paired == "True" && data.Connected == "True" ){
- bt_icon.deviceName = data.Name
+ onDeviceUpdateEvent: {
+ console.log("onConnectionEvent", data.Paired)
+ if (data.Paired === "True" && data.Connected === "True") {
+ bt_icon.deviceName = data.name
bt_icon.connStatus = true
} else {
- if(bt_icon.deviceName == data.Name)
+ if(bt_icon.deviceName === data.Name)
{
bt_icon.connStatus = false
}
@@ -156,11 +153,12 @@ Item {
}
}
}
+
Repeater {
model: StatusBarModel { objectName: "statusBar" }
delegate: Image {
Layout.preferredWidth: 77
- Layout.preferredHeight: 73
+ Layout.preferredHeight: 55
source: model.modelData
fillMode: Image.PreserveAspectFit
}
diff --git a/homescreen/qml/TopArea.qml b/homescreen/qml/TopArea.qml
index 2a75cf8..9cff3ed 100644
--- a/homescreen/qml/TopArea.qml
+++ b/homescreen/qml/TopArea.qml
@@ -22,7 +22,7 @@ import QtQuick.Controls 2.0
Image {
width: 1920
height: 218
- source: './images/TopSection_NoText_NoIcons-01.svg'
+ source: './images/TopSection_NoText_NoIcons-01.png'
fillMode: Image.PreserveAspectCrop
RowLayout {
diff --git a/homescreen/qml/images/AGL_HMI_Blue_Background_NoCar-01.png b/homescreen/qml/images/AGL_HMI_Blue_Background_NoCar-01.png
index 357c204..a4e026c 100644
--- a/homescreen/qml/images/AGL_HMI_Blue_Background_NoCar-01.png
+++ b/homescreen/qml/images/AGL_HMI_Blue_Background_NoCar-01.png
Binary files differ
diff --git a/homescreen/qml/images/AGL_HMI_Full_Background.png b/homescreen/qml/images/AGL_HMI_Full_Background.png
new file mode 100644
index 0000000..8b11e20
--- /dev/null
+++ b/homescreen/qml/images/AGL_HMI_Full_Background.png
Binary files differ
diff --git a/homescreen/qml/images/AGL_HMI_Normal_Background.png b/homescreen/qml/images/AGL_HMI_Normal_Background.png
new file mode 100644
index 0000000..c686067
--- /dev/null
+++ b/homescreen/qml/images/AGL_HMI_Normal_Background.png
Binary files differ
diff --git a/homescreen/qml/images/Shortcut/shortcut.qrc b/homescreen/qml/images/Shortcut/shortcut.qrc
index 5d67341..f5b3bca 100644
--- a/homescreen/qml/images/Shortcut/shortcut.qrc
+++ b/homescreen/qml/images/Shortcut/shortcut.qrc
@@ -8,5 +8,7 @@
<file>mediaplayer_active.svg</file>
<file>navigation.svg</file>
<file>navigation_active.svg</file>
+ <file>video.svg</file>
+ <file>video_active.svg</file>
</qresource>
</RCC>
diff --git a/homescreen/qml/images/Shortcut/video.svg b/homescreen/qml/images/Shortcut/video.svg
new file mode 100644
index 0000000..e368922
--- /dev/null
+++ b/homescreen/qml/images/Shortcut/video.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ viewBox="0 0 195 217"
+ height="217"
+ width="195"
+ version="1.1"
+ id="svg2">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <image
+ y="0"
+ x="0"
+ id="image10"
+ xlink:href="data:image/png;base64,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
+saNgIER9vJAmFrMmFNr4923DxrbK3eEE48FgwnyeM+8JRbttnpoQvAnDeNY8Jobp2evzAtM+a/wq
+xLBCG0jWKrRSqR82y+Iny2do43Qri+kZhgl6Ln94jzKqA0S1uAgtlDS/s9XM2nhRRafI4rmhQBO6
+PmNb5hjf8m+/V3lWAABFZ95IFM8JXudnis58A3X3BtsH9fmCEornD0woRWZEjKDcKOmhiPhVUfHL
+4dbQb74/b96W6VoL0z4M23WhbhmpN5/ZXJ9ZqlZu3VpPVZ1bBWfS20f3Ntq91Hs7hZc5doPtpJ5Q
+JGQNsug82bMEamPjJEQk9d6xp34GSR9kRW8CfUnVHa8XyMzu66LqgR51psgE6lCVnXnXMqmy8/ml
+ekJGkvXOMkTQSy9V937HmRA9tayyUdVa0ajtXI4uZ20D7eGzaWZmZmZmZmZmZmZmZmZmZmZmZmZm
+ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm
+ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYv6v8BHUYYj+AaytYAAAAA
+SUVORK5CYII=
+"
+ style="image-rendering:optimizeQuality"
+ preserveAspectRatio="none"
+ height="217"
+ width="195" />
+</svg>
diff --git a/homescreen/qml/images/Shortcut/video_active.svg b/homescreen/qml/images/Shortcut/video_active.svg
new file mode 100644
index 0000000..344385f
--- /dev/null
+++ b/homescreen/qml/images/Shortcut/video_active.svg
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ viewBox="0 0 195 217"
+ height="217"
+ width="195"
+ version="1.1"
+ id="svg2">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <image
+ y="0"
+ x="0"
+ id="image10"
+ xlink:href="data:image/png;base64,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
+"
+ style="image-rendering:optimizeQuality"
+ preserveAspectRatio="none"
+ height="217"
+ width="195" />
+</svg>
diff --git a/homescreen/qml/images/TopSection_NoText_NoIcons-01.png b/homescreen/qml/images/TopSection_NoText_NoIcons-01.png
new file mode 100644
index 0000000..cf9ec4e
--- /dev/null
+++ b/homescreen/qml/images/TopSection_NoText_NoIcons-01.png
Binary files differ
diff --git a/homescreen/qml/images/TopSection_NoText_NoIcons-01.svg b/homescreen/qml/images/TopSection_NoText_NoIcons-01.svg
deleted file mode 100644
index 6841001..0000000
--- a/homescreen/qml/images/TopSection_NoText_NoIcons-01.svg
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
- <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
- <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
- <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
- <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
- <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
- <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
- <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
- <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
-]>
-<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
- xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1080 217.9"
- style="enable-background:new 0 0 1080 217.9;" xml:space="preserve">
-<style type="text/css">
- .st0{opacity:0.9;fill:#1B1A1D;}
- .st1{opacity:0.9;fill:#27232B;}
- .st2{fill:none;stroke:url(#SVGID_1_);stroke-miterlimit:10;}
- .st3{fill:none;stroke:url(#SVGID_2_);stroke-miterlimit:10;}
- .st4{fill:none;stroke:url(#SVGID_3_);stroke-miterlimit:10;}
- .st5{fill:none;stroke:url(#SVGID_4_);stroke-miterlimit:10;}
- .st6{opacity:0.9;fill:none;stroke:#545157;stroke-miterlimit:10;}
-</style>
-<switch>
- <g i:extraneous="self">
- <rect class="st0" width="784.8" height="214.3"/>
- <rect x="784.8" y="0" class="st1" width="295.2" height="214.3"/>
- <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="391.5756" y1="107.1501" x2="392.5756" y2="107.1501">
- <stop offset="0.4644" style="stop-color:#000000"/>
- <stop offset="0.4741" style="stop-color:#4D4B51"/>
- </linearGradient>
- <line class="st2" x1="392.1" y1="214.3" x2="392.1" y2="0"/>
- <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="195.6923" y1="107.1501" x2="196.6923" y2="107.1501">
- <stop offset="0.4644" style="stop-color:#000000"/>
- <stop offset="0.4741" style="stop-color:#4D4B51"/>
- </linearGradient>
- <line class="st3" x1="196.2" y1="214.3" x2="196.2" y2="0"/>
- <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="587.4589" y1="107.1501" x2="588.4589" y2="107.1501">
- <stop offset="0.4644" style="stop-color:#000000"/>
- <stop offset="0.4741" style="stop-color:#4D4B51"/>
- </linearGradient>
- <line class="st4" x1="588" y1="214.3" x2="588" y2="0"/>
- <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="783.3421" y1="107.1501" x2="784.3421" y2="107.1501">
- <stop offset="0.4644" style="stop-color:#000000"/>
- <stop offset="0.4741" style="stop-color:#4D4B51"/>
- </linearGradient>
- <line class="st5" x1="783.8" y1="214.3" x2="783.8" y2="0"/>
- <g>
- <line class="st6" x1="815.1" y1="132" x2="983.5" y2="132"/>
- </g>
- <line class="st6" x1="1004.4" y1="-1.1" x2="1004.4" y2="213.2"/>
- </g>
-</switch>
-</svg>
diff --git a/homescreen/qml/images/Utility_Logo_Background-01.png b/homescreen/qml/images/Utility_Logo_Background-01.png
new file mode 100644
index 0000000..21a602d
--- /dev/null
+++ b/homescreen/qml/images/Utility_Logo_Background-01.png
Binary files differ
diff --git a/homescreen/qml/images/Utility_Logo_Background-01.svg b/homescreen/qml/images/Utility_Logo_Background-01.svg
deleted file mode 100644
index c289805..0000000
--- a/homescreen/qml/images/Utility_Logo_Background-01.svg
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
- <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
- <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
- <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
- <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
- <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
- <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
- <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
- <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
-]>
-<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
- xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1080 215"
- style="enable-background:new 0 0 1080 215;" xml:space="preserve">
-<style type="text/css">
- .st0{opacity:0.82;}
- .st1{fill-rule:evenodd;clip-rule:evenodd;fill:url(#SVGID_1_);}
- .st2{opacity:0.9;}
- .st3{fill-rule:evenodd;clip-rule:evenodd;fill:#1B1A1D;}
-</style>
-<switch>
- <foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
- <i:pgfRef xlink:href="#adobe_illustrator_pgf">
- </i:pgfRef>
- </foreignObject>
- <g i:extraneous="self">
- <g>
- <g id="box_14_" class="st0">
- <g>
- <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="540" y1="247.5651" x2="540" y2="-6.7541">
- <stop offset="0.2978" style="stop-color:#FFFFFF;stop-opacity:0"/>
- <stop offset="0.3685" style="stop-color:#FAFAFA;stop-opacity:0.1007"/>
- <stop offset="0.4554" style="stop-color:#EBEBEB;stop-opacity:0.2245"/>
- <stop offset="0.5508" style="stop-color:#D2D2D2;stop-opacity:0.3603"/>
- <stop offset="0.6523" style="stop-color:#AFAFAF;stop-opacity:0.5048"/>
- <stop offset="0.7585" style="stop-color:#828282;stop-opacity:0.6562"/>
- <stop offset="0.8689" style="stop-color:#4B4B4B;stop-opacity:0.8133"/>
- <stop offset="0.9806" style="stop-color:#0C0C0C;stop-opacity:0.9724"/>
- <stop offset="1" style="stop-color:#000000"/>
- </linearGradient>
- <rect class="st1" width="1080" height="215"/>
- </g>
- </g>
- <g id="box_17_" class="st2">
- <g>
- <rect class="st3" width="1080" height="215"/>
- </g>
- </g>
- </g>
- </g>
-</switch>
-</svg>
diff --git a/homescreen/qml/images/fullscreen.png b/homescreen/qml/images/fullscreen.png
new file mode 100644
index 0000000..3bb9ef0
--- /dev/null
+++ b/homescreen/qml/images/fullscreen.png
Binary files differ
diff --git a/homescreen/qml/images/images.qrc b/homescreen/qml/images/images.qrc
index 37ad676..593167c 100644
--- a/homescreen/qml/images/images.qrc
+++ b/homescreen/qml/images/images.qrc
@@ -1,10 +1,14 @@
<RCC>
<qresource prefix="/images">
- <file>TopSection_NoText_NoIcons-01.svg</file>
- <file>Utility_Logo_Background-01.svg</file>
+ <file>TopSection_NoText_NoIcons-01.png</file>
+ <file>Utility_Logo_Background-01.png</file>
<file>Utility_Logo_Grey-01.svg</file>
<file>Utility_Music_Background-01.png</file>
<file>Utility_Radio_Background-01.png</file>
<file>AGL_HMI_Blue_Background_NoCar-01.png</file>
+ <file>AGL_HMI_Full_Background.png</file>
+ <file>AGL_HMI_Normal_Background.png</file>
+ <file>fullscreen.png</file>
+ <file>normal.png</file>
</qresource>
</RCC>
diff --git a/homescreen/qml/images/normal.png b/homescreen/qml/images/normal.png
new file mode 100644
index 0000000..34a9c65
--- /dev/null
+++ b/homescreen/qml/images/normal.png
Binary files differ
diff --git a/homescreen/qml/main.qml b/homescreen/qml/main.qml
index 96a1950..c218057 100644
--- a/homescreen/qml/main.qml
+++ b/homescreen/qml/main.qml
@@ -26,13 +26,14 @@ Window {
width: container.width * container.scale
height: container.height * container.scale
title: 'HomeScreen'
+ color: "#00000000"
Image {
id: container
anchors.centerIn: parent
width: 1080
height: 1920
- scale: screenInfo.scale_factor()
+ scale: 1.0
source: './images/AGL_HMI_Blue_Background_NoCar-01.png'
ColumnLayout {
@@ -60,5 +61,95 @@ Window {
Layout.preferredHeight: 215
}
}
+
+ states: [
+ State {
+ name: "normal"
+ PropertyChanges {
+ target: topArea
+ y: 0
+ }
+ PropertyChanges {
+ target: applicationArea
+ y: 218
+ }
+ PropertyChanges {
+ target: mediaArea
+ y: 1705
+ }
+ },
+ State {
+ name: "fullscreen"
+ PropertyChanges {
+ target: topArea
+ y: -220
+ }
+ PropertyChanges {
+ target: applicationArea
+ y: -1490
+ }
+ PropertyChanges {
+ target: mediaArea
+ y: 2135
+ }
+ }
+ ]
+ transitions: Transition {
+ NumberAnimation {
+ target: topArea
+ property: "y"
+ easing.type: "OutQuad"
+ duration: 250
+ }
+ NumberAnimation {
+ target: mediaArea
+ property: "y"
+ easing.type: "OutQuad"
+ duration: 250
+ }
+ }
+
+ }
+ Item {
+ id: switchBtn
+ anchors.right: parent.right
+ anchors.rightMargin: 20
+ anchors.top: parent.top
+ anchors.topMargin: 25
+ width: 35
+ height: 35
+ z: 1
+
+ MouseArea {
+ anchors.fill: parent
+ property string btnState: 'normal'
+ Image {
+ id: image
+ anchors.fill: parent
+ source: './images/normal.png'
+ }
+ onClicked: {
+ var appName = homescreenHandler.getCurrentApplication()
+ if (btnState === 'normal') {
+ image.source = './images/fullscreen.png'
+ btnState = 'fullscreen'
+ container.state = 'fullscreen'
+ touchArea.switchArea(1)
+ homescreenHandler.tapShortcut(appName, true)
+ if (appName === 'navigation' || appName === 'browser') {
+ container.opacity = 0.0
+ }
+ } else {
+ image.source = './images/normal.png'
+ btnState = 'normal'
+ container.state = 'normal'
+ touchArea.switchArea(0)
+ homescreenHandler.tapShortcut(appName, false)
+ if (appName === 'navigation' || appName === 'browser') {
+ container.opacity = 1.0
+ }
+ }
+ }
+ }
}
}
diff --git a/homescreen/src/homescreenhandler.cpp b/homescreen/src/homescreenhandler.cpp
index 5da8b9e..ac50451 100644
--- a/homescreen/src/homescreenhandler.cpp
+++ b/homescreen/src/homescreenhandler.cpp
@@ -22,7 +22,8 @@ void* HomescreenHandler::myThis = 0;
HomescreenHandler::HomescreenHandler(QObject *parent) :
QObject(parent),
- mp_hs(NULL)
+ mp_hs(NULL),
+ current_applciation("launcher")
{
}
@@ -48,13 +49,34 @@ void HomescreenHandler::init(int port, const char *token)
json_object_object_get(object, "display_message"));
HMI_DEBUG("HomeScreen","set_event_handler Event_OnScreenMessage display_message = %s", display_message);
});
+}
+void HomescreenHandler::tapShortcut(QString application_name, bool is_full)
+{
+ HMI_DEBUG("HomeScreen","tapShortcut %s", application_name.toStdString().c_str());
+ struct json_object* j_json = json_object_new_object();
+ struct json_object* value;
+ if(is_full) {
+ value = json_object_new_string("fullscreen");
+ HMI_DEBUG("HomeScreen","tapShortcut fullscreen");
+ } else {
+ value = json_object_new_string("normal");
+ HMI_DEBUG("HomeScreen","tapShortcut normal");
+ }
+ json_object_object_add(j_json, "area", value);
+ mp_hs->showWindow(application_name.toStdString().c_str(), j_json);
}
-void HomescreenHandler::tapShortcut(QString application_name)
+void HomescreenHandler::setCurrentApplication(QString application_name)
{
- HMI_DEBUG("HomeScreen","tapShortcut %s", application_name.toStdString().c_str());
- mp_hs->tapShortcut(application_name.toStdString().c_str());
+ HMI_DEBUG("HomeScreen","setCurrentApplication %s", application_name.toStdString().c_str());
+ current_applciation = application_name;
+}
+
+QString HomescreenHandler::getCurrentApplication()
+{
+ HMI_DEBUG("HomeScreen","getCurrentApplication %s", current_applciation.toStdString().c_str());
+ return current_applciation;
}
void HomescreenHandler::onRep_static(struct json_object* reply_contents)
diff --git a/homescreen/src/homescreenhandler.h b/homescreen/src/homescreenhandler.h
index c18d7a0..539d380 100644
--- a/homescreen/src/homescreenhandler.h
+++ b/homescreen/src/homescreenhandler.h
@@ -32,7 +32,9 @@ public:
void init(int port, const char* token);
- Q_INVOKABLE void tapShortcut(QString application_name);
+ Q_INVOKABLE void tapShortcut(QString application_name, bool is_full);
+ Q_INVOKABLE QString getCurrentApplication();
+ void setCurrentApplication(QString application_name);
void onRep(struct json_object* reply_contents);
void onEv(const string& event, struct json_object* event_contents);
@@ -40,8 +42,14 @@ public:
static void* myThis;
static void onRep_static(struct json_object* reply_contents);
static void onEv_static(const string& event, struct json_object* event_contents);
+
+signals:
+ void notification(QString id, QString icon, QString text);
+ void information(QString text);
+
private:
LibHomeScreen *mp_hs;
+ QString current_applciation;
};
#endif // HOMESCREENHANDLER_H
diff --git a/homescreen/src/main.cpp b/homescreen/src/main.cpp
index 620c869..ff30e15 100644
--- a/homescreen/src/main.cpp
+++ b/homescreen/src/main.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH
- * Copyright (c) 2017, 2018 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2017 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.
@@ -22,6 +22,7 @@
#include <QtQml/QQmlContext>
#include <QtQml/qqml.h>
#include <QQuickWindow>
+#include <QThread>
#include <qlibwindowmanager.h>
#include <weather.h>
@@ -32,6 +33,7 @@
#include "mastervolume.h"
#include "homescreenhandler.h"
#include "hmi-debug.h"
+#include "toucharea.h"
// XXX: We want this DBus connection to be shared across the different
// QML objects, is there another way to do this, a nice way, perhaps?
@@ -75,7 +77,7 @@ int main(int argc, char *argv[])
parser.addVersionOption();
parser.process(a);
QStringList positionalArguments = parser.positionalArguments();
-
+
int port = 1700;
QString token = "wm";
@@ -93,12 +95,11 @@ int main(int argc, char *argv[])
ApplicationLauncher *launcher = new ApplicationLauncher();
QLibWindowmanager* layoutHandler = new QLibWindowmanager();
+ HomescreenHandler* homescreenHandler = new HomescreenHandler();
if(layoutHandler->init(port,token) != 0){
exit(EXIT_FAILURE);
}
- AGLScreenInfo screenInfo(layoutHandler->get_scale_factor());
-
if (layoutHandler->requestSurface(QString("HomeScreen")) != 0) {
exit(EXIT_FAILURE);
}
@@ -107,19 +108,18 @@ int main(int argc, char *argv[])
layoutHandler->endDraw(QString("HomeScreen"));
});
- layoutHandler->set_event_handler(QLibWindowmanager::Event_ScreenUpdated, [layoutHandler, launcher](json_object *object) {
+ layoutHandler->set_event_handler(QLibWindowmanager::Event_ScreenUpdated, [layoutHandler, launcher, homescreenHandler](json_object *object) {
json_object *jarray = json_object_object_get(object, "ids");
int arrLen = json_object_array_length(jarray);
for( int idx = 0; idx < arrLen; idx++)
{
QString label = QString(json_object_get_string( json_object_array_get_idx(jarray, idx) ));
- HMI_DEBUG("HomeScreen","Event_ScreenUpdated application: %s.", label.toStdString().c_str());
+ HMI_DEBUG("HomeScreen","Event_ScreenUpdated application11: %s.", label.toStdString().c_str());
+ homescreenHandler->setCurrentApplication(label);
QMetaObject::invokeMethod(launcher, "setCurrent", Qt::QueuedConnection, Q_ARG(QString, label));
}
});
- HomescreenHandler* homescreenHandler = new HomescreenHandler();
- homescreenHandler->init(port, token.toStdString().c_str());
QUrl bindingAddress;
bindingAddress.setScheme(QStringLiteral("ws"));
@@ -131,23 +131,35 @@ int main(int argc, char *argv[])
query.addQueryItem(QStringLiteral("token"), token);
bindingAddress.setQuery(query);
+ TouchArea* touchArea = new TouchArea();
+
// mail.qml loading
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("layoutHandler", layoutHandler);
engine.rootContext()->setContextProperty("homescreenHandler", homescreenHandler);
+ engine.rootContext()->setContextProperty("touchArea", touchArea);
engine.rootContext()->setContextProperty("launcher", launcher);
engine.rootContext()->setContextProperty("weather", new Weather(bindingAddress));
engine.rootContext()->setContextProperty("bluetooth", new Bluetooth(bindingAddress));
- engine.rootContext()->setContextProperty("screenInfo", &screenInfo);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject *root = engine.rootObjects().first();
QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
- QObject::connect(window, SIGNAL(frameSwapped()), layoutHandler, SLOT(slotActivateSurface()));
+
+ touchArea->setWindow(window);
+ QThread* thread = new QThread;
+ touchArea->moveToThread(thread);
+ QObject::connect(thread, &QThread::started, touchArea, &TouchArea::init);
+
+ thread->start();
QList<QObject *> sobjs = engine.rootObjects();
StatusBarModel *statusBar = sobjs.first()->findChild<StatusBarModel *>("statusBar");
statusBar->init(bindingAddress, engine.rootContext());
+ QObject::connect(window, SIGNAL(frameSwapped()), layoutHandler, SLOT(slotActivateSurface()));
+
+ homescreenHandler->init(port, token.toStdString().c_str());
+
return a.exec();
}
diff --git a/homescreen/src/mastervolume.cpp b/homescreen/src/mastervolume.cpp
index 9fb92a9..5e1e450 100644
--- a/homescreen/src/mastervolume.cpp
+++ b/homescreen/src/mastervolume.cpp
@@ -16,7 +16,7 @@
#include "mastervolume.h"
-void MasterVolume::setVolume(int volume)
+void MasterVolume::setVolume(pa_volume_t volume)
{
int volume_delta = volume - m_volume;
m_volume = volume;
diff --git a/homescreen/src/mastervolume.h b/homescreen/src/mastervolume.h
index bca6356..645968a 100644
--- a/homescreen/src/mastervolume.h
+++ b/homescreen/src/mastervolume.h
@@ -17,6 +17,8 @@
#include <QtCore/QObject>
#include <QQmlEngine>
+#include <pulse/pulseaudio.h>
+
class MasterVolume : public QObject
{
Q_OBJECT
@@ -31,7 +33,7 @@ class MasterVolume : public QObject
~MasterVolume() {}
uint32_t getVolume() const { return m_volume; }
- void setVolume(int volume);
+ void setVolume(pa_volume_t volume);
public slots:
void changeExternalVolume(int volume);
diff --git a/homescreen/src/statusbarmodel.cpp b/homescreen/src/statusbarmodel.cpp
index 5e63b7d..c093ceb 100644
--- a/homescreen/src/statusbarmodel.cpp
+++ b/homescreen/src/statusbarmodel.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2016 The Qt Company Ltd.
- * Copyright (C) 2017, 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.
@@ -17,11 +16,14 @@
#include "statusbarmodel.h"
#include "statusbarserver.h"
+#include <QDebug>
+#include "hmi-debug.h"
#include <QtDBus/QDBusConnection>
#include "network.h"
+
class StatusBarModel::Private
{
public:
@@ -65,6 +67,7 @@ StatusBarModel::~StatusBarModel()
void StatusBarModel::init(QUrl &url, QQmlContext *context)
{
+ HMI_DEBUG("HomeScreen", "StatusBarModel::init");
d->network = new Network(url, context);
context->setContextProperty("network", d->network);
@@ -77,6 +80,7 @@ void StatusBarModel::init(QUrl &url, QQmlContext *context)
void StatusBarModel::setWifiStatus(bool connected, bool enabled, int strength)
{
+ HMI_DEBUG("HomeScreen", "StatusBarModel::setWifiStatus");
if (enabled && connected)
if (strength < 30)
d->server.setStatusIcon(0, QStringLiteral("qrc:/images/Status/HMI_Status_Wifi_1Bar-01.png"));
@@ -111,7 +115,6 @@ int StatusBarModel::rowCount(const QModelIndex &parent) const
if (parent.isValid())
return 0;
- // Delete bluetooth because use agl-service-bluetooth.
return StatusBarServer::SupportedCount - 1;
}
@@ -123,9 +126,9 @@ QVariant StatusBarModel::data(const QModelIndex &index, int role) const
switch (role) {
case Qt::DisplayRole:
- if (index.row() == 0){
+ if (index.row() == 0) {
ret = d->iconList[StatusBarServer::StatusWifi];
- }else if (index.row() == 1){
+ } else if (index.row() == 1) {
ret = d->iconList[StatusBarServer::StatusCellular];
}
break;
diff --git a/homescreen/src/toucharea.cpp b/homescreen/src/toucharea.cpp
new file mode 100644
index 0000000..1cf4384
--- /dev/null
+++ b/homescreen/src/toucharea.cpp
@@ -0,0 +1,36 @@
+#include "toucharea.h"
+#include "hmi-debug.h"
+
+TouchArea::TouchArea()
+{
+}
+
+TouchArea::~TouchArea()
+{
+
+}
+
+void TouchArea::setWindow(QQuickWindow *window)
+{
+ myWindow = window;
+}
+
+void TouchArea::init()
+{
+ bitmapNormal = QPixmap(":/images/AGL_HMI_Normal_Background.png").createHeuristicMask();
+ bitmapFullscreen = QPixmap(":/images/AGL_HMI_Full_Background.png").createHeuristicMask();
+ myWindow->setMask(QRegion(bitmapNormal));
+}
+
+void TouchArea::switchArea(int areaType)
+{
+ if(areaType == NORMAL) {
+ myWindow->setMask(QRegion(bitmapNormal));
+ HMI_DEBUG("HomeScreen","TouchArea switchArea: %d.", areaType);
+ } else if (areaType == FULLSCREEN) {
+ HMI_DEBUG("HomeScreen","TouchArea switchArea: %d.", areaType);
+ myWindow->setMask(QRegion(bitmapFullscreen));
+ }
+}
+
+
diff --git a/homescreen/src/toucharea.h b/homescreen/src/toucharea.h
new file mode 100644
index 0000000..69c6872
--- /dev/null
+++ b/homescreen/src/toucharea.h
@@ -0,0 +1,30 @@
+#ifndef TOUCHAREA_H
+#define TOUCHAREA_H
+
+#include <QBitmap>
+#include <QQuickWindow>
+
+enum {
+ NORMAL=0,
+ FULLSCREEN
+};
+
+class TouchArea : public QObject
+{
+ Q_OBJECT
+public:
+ explicit TouchArea();
+ ~TouchArea();
+
+ Q_INVOKABLE void switchArea(int areaType);
+ void setWindow(QQuickWindow* window);
+
+public slots:
+ void init();
+
+private:
+ QBitmap bitmapNormal, bitmapFullscreen;
+ QQuickWindow* myWindow;
+};
+
+#endif // TOUCHAREA_H