diff options
author | tiansen <tian_sen@dl.cn.nexty-ele.com> | 2018-11-02 20:40:38 +0800 |
---|---|---|
committer | tiansen <tian_sen@dl.cn.nexty-ele.com> | 2018-11-02 20:40:38 +0800 |
commit | 26e3a508eb0bec7a59dbcef0251233df42781963 (patch) | |
tree | 2649f1ec185c5173cbbb5e07275649d1dbbe0100 | |
parent | 33d31b5bac3c8c9105d43d6566174f39ef7a4ea4 (diff) |
verticalsandbox/tiansen/vertical
29 files changed, 506 insertions, 162 deletions
@@ -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 Binary files differindex 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 diff --git a/homescreen/qml/images/AGL_HMI_Full_Background.png b/homescreen/qml/images/AGL_HMI_Full_Background.png Binary files differnew file mode 100644 index 0000000..8b11e20 --- /dev/null +++ b/homescreen/qml/images/AGL_HMI_Full_Background.png diff --git a/homescreen/qml/images/AGL_HMI_Normal_Background.png b/homescreen/qml/images/AGL_HMI_Normal_Background.png Binary files differnew file mode 100644 index 0000000..c686067 --- /dev/null +++ b/homescreen/qml/images/AGL_HMI_Normal_Background.png 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,iVBORw0KGgoAAAANSUhEUgAAAMMAAADZCAYAAACdMoRXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI +WXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4gUOCS0krJ9t2wAAD51JREFUeNrt3XuQXnV9x/H353vO +8+wl2WRDQiCAQMJNJMpFCVhuQhEEDGME0VZUvNSObXU60051OtaOTtvp2Fbbf6xTtCAgQVFSkEtB +LkLFCxEICIiIJIRLuCYbkk12n8v59o/n2eyGi1ycAXb385rZ7OY857a/5/s553fOnuccMDMzMzMz +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzs+lIboKuy7aWfb0b ++4uRzTOjt7+vIut1KmV2Xs46QFLSAyXUu5NlQlkDRef1TCiBIiEDKEGZFHT+o0xq6s4vu/OpQ3Ym +J6lTozNdTaCEJCkZ+7mAMsiAsoAiOusQQEGSAapBLTtvb2YNgBqQNYgyk6ba9TK2tHJ069Bg3/C1 +0ogLYLqH4bpH67WRxhtr4pAIHRiwV8BcheqCUgIJQiIASSi63ye+pm5Djg2nO150fi4YH39s2hgb +b8LwiM78to3HhNe6yxp708bWJYJty+xM25kuuhOHJqw3EKEUEEWMktVmSQ8p4m6SW5ut9l0Xz+t9 +ymGYTi55vLdeHz2sUHWKyCNDWhihWZJ6gwxNKMjQxGKbGIQJRb0tBN2CnRCU7afdfvrt5zc+fuj5 +wtMNR3dez1nG863Ps6d9/vEbwHAo1iV5B2VxZVWLay/s0WMOwxRX/s/qfYrgfRG8J8T+kmbS2fJv +kHg4yMeRNkVEU4qUUgHbtqyKmFBYY8O0/TCpM2xb8XW31mPzEIgYL+ruaxEBdLo83R+J0HMDxnjh +sy1YE0M1tpwYHwZEUaQyRWQREb1kzitCuwoWSCqkbCriUcgfqSgvzF5+9C2p4TBMNd9pRlGuPaKo +FZ8IcZKUO0rZlHQ76P+U/CIiH0rKDVG2R0uVrWy3FaoYC0MyoWDHijE7rxV0Kk4koRqKGigpusHY +Ng1jAeiEihgv/m3zzvEwKGI8RN1uFDkxDIkU28IAUEQiBOoGrjeJFEVZUpRFZqBaQV2NHIiodlJW +B1BxlEKHBcyX1IjQSoo4d8tI+/sXDZYbHIap4su3Rew9eFxR8OmQTpTokfIe4FIirlKrcV+jlRta +791v2mwFx3wsM0ae2jxQ1fp2rYkjIlgWcJyCHol7U3H21qp1/vIZ9ScdhikgVqw+IpR/HWKpRBJx +HaFzs9G+vvGeRU/4PErH+9es7++dO3txkGcqOEOwk0L3pfia6jr/GxHrp3QXesqnfcVDe4nmRwXv +SshEl4O+VpX9N7ZP3rHhCEzoSe65wxbglo9uySfIakjiTyD3DXSUmtwAOAyT1qVr+2iPLkM6KaEX +uJYqv96K+ddxwozK5f/8zunXmg8Nt79ZJ2tK3oR0TXskp/zZpakdhnbzEJFLJe2C+DWK81ubNt3A +mQ7Cizl/RvHgWZtGz1ZZm9lsac0Fs+MZh2GyOu/ndTKPJ/SWhCbJlfT0/5AzF7pr9BKdO9DzwHT6 +faduGPrn7iX4A5LBTG5LdHW+a6d1LnGbfmEQb0bs1T2pfwtF3O23236XmJK/1SmfC8jFwDzEUMKq +JHwK1aZhGD78530QuwMzk3yMZC2n7u5jBZuGYYjsRzkXKIAnKIr1fqtteoahbPSQ9HQPHoYpYqvf +apueB9CZJdLYpW5t2q3X7u8KX7wodNDhs4T6y80MNfbt28qh89Ol5z3Dq0MSmZ3P22SFqvZrty4H +LJlPq31WZPtfNKv6eP9Qc+/BC1cWLj2H4dXaNbyO9r3lrpJOFfxxiH8sWs0vV3N3Wtpz3eMDc778 +nXAJOgzTR9WYkcpBlAgGhE4tpK/Myubny0OPWTznm9/2XsJhmCayCjKLzof9GUlyc5ALI/hMXa3/ +GNjvuDN3vX7dDnv853LfnMEH0FNd0f1YmzaTuUJoFeIM4DBJx4jcv7c/3l4cdvy5ZP4cyQfXDsPU +1f1I8tZ25q1Zb3wt2j0rS+ksyKXAToKzop0Hv+n2p8+r3Tl0yR1vGXzdXUP1mcyeLRX9I0O0azsw +cs4U/Gy0u0mvbipy5A/3bQ6vvvcnjYi/bROfQ3ETmXXB2wrxJdH6t4Pv3vDO/R57rPZ6We2zNmV9 +tMnSssU3Bmbx1b42x/iYwX7P44ciAZp/emJ7wzELHo+5O19Ytau/RPwrmWvJ3CHQabXMr8wZ6v3s +Yau37PN6WO3+mSDYCziJiuOy4g0Og73CEKQgicjtjgceWRwjjc0jd7Zqs/4Z5WcRV4hMKRcX4q/q +7caXj12z+bRDfjU08zXu5kHnZhx1OjfnC4fBfr9I8NyD48dP3qu95q0z1qssL6uq6m8g/oHkbpLB +SJ2iqvqnuX3F35308PDBr4ffgdfVH3F8AD1501C9cB3dc/C8EeCeg+58el1krkryg8BJkvYtpE8F +HLh03fDy7Ou/8vJBPenW9J5hsh9Bv+hWddVb5m7YumH9Nc3ML6T0RdDPIAdCnFBIX+hpjvz96U+P +HnXwutGa29NhmMpZAOCuo/dtrNx/h9+0k28ifR44O2GdYJHIj5bwpQP6i09+aP3IHm5Ud5MmYycJ +qpd38ezN+8x+5uiVj97Agtn3F9JtoDMER0q8Q1SLynpx4CdG2xcM1ONnX51G90R1GKbEbuHl/3X5 +pkN3qYAHT3xg6IKegf5fKaqPA0sFuwudqYo5W9o0gJ+5jd1NmkR5eOVnYq5eNLj5kh3rN2bqR8BT +3ROefYjFmSxw43rPMElC0H3IiF75tXjHPvhM/0BP7yGZ1TGg+d2O18OJrijEXW5kh2Ey7A26davU +K7wI79g1mxbOqJUnFLTPkDgSVCV5c2Z8L5tc+vVerXZDOwyT5tiZzl2PX1YYjrzvqcF6rW9JvcjT +ldVJiXYj9QhwVSYXt9tx87mDGnYDOwyTb++gfElhOPTeoXpUsSiCpcrqdFJLEraS3Fih72bqygsG +62vcsA7D5NwzdJ/y82IOWfnIfNrVkWXwAVInkMwCrU64osq8ePO8np9eKzXdqA7DZE3D2FPWXjAO +e696qr9eaR+Veh9ZnY60H7A54Zp25kWjTa66Yc+Zj7stHYYpsnt47l06Zl/+25j7hrlzi+bo8UXE +h5M4LhRFovsruLSVWn79HgO3uv0chil10MCzLtRb8OMnZ5Sq9tPWkQ+oiPcBe0JubCc/TvK8Zl/8 +7+27zXrG7ecwTLVAJBEJUPv35cXggUfsqKp1YhT6MJnvELSQ7snkkra0/BdvnHOP28xhmIo7hgQK +lL21S+7smzF7zkFBnClymWAB5FAmP6zgnOHd51573xwfIDsMU/VQQSRiAHR0z4zZc6KqlqZYooxG +olUZxbfb4uJ7D573oBvMYZi6IjKzagP9EXqvMk8l1Sv0VBtdEcG5/Uvm33SX5OfMOQxTfc+gFmQD +hKqqlKKV0k+rKs9Xb/2StW+f59OlDsM00W5tVKlHuz2mhzLz0kqc9+QDu/2CT/qGYQ7DdNJTW0u7 +/a3MuKMVWjk6q37zG//i9KGNq252EByGV+uwtbPVTUXn+T2vlVW3beLYIy7PzRuu5plmozp5cWuy +nTPd0EKzKtRpUr3sCw4dhtfSaLQos+pcD5Q1qvK1i8MXlmUFTTpfk7NIhjYVzBoou8+9qCKm5qnf +KfqwksYIypHO9isHaDVmuBPwyvXNG+hFOTOhQBrJYNhhmCx22GMY9CSiBZpPxFyX9CtXba0Gq6pa +kFmR5EbaPO0wTBbv7N+KeABpk8gFZO7Jd3/d57J+ZdpiN9Cizv3EtS4LHnEYJlVXSb8k8wnQDBXx +1ujp29ll/fKd+UQWBToAWCRoCO5vB+schsmVhrtI3dc5A5JLMhsHubRfvp5ZLBR5lGBnkrVVlbee +LW12GCaTGX1rEm4CPaFk/4CTiytWL3R5v3SnjWZJ5rFIh4PI4HYKTdnPVkzdMJywoKKMa4FbJSF0 +olq5lMsemOkyf2kG2xyuzNPIXJiwOtHVVcH9DsNkVN/5riRWJPwW8QaRHyyTd3PRmrpL/Xf7WCPf +RFYfA44BmqBrKLn+bKntMExGJ/W1sqhfntIK0EZgieBTtRlaVl6zxnuIF/CRLa0Ds1V9GrEM6E24 +keTi/4qpfX+mqX9t0qm7ruOyB79FtucK3i84Gqo+GrmzrnrwB82hh9fwR0f48mngAxtH59TK2uFR +VR+SciliJuiWCv13a+vwzVP99582zx4ufrD6bZH5ZwHvlZgt6WEirpa4inbzDtH/2PC7d9k83QLw +7qea9Rmt4blFf//eBXpHSKcELEFI0k8p4usbGtWKFbOKTQ7DVArE5WveXFTVR0JaJmlRCCTdh1gp +6bZMVkfk+iJiq0KtTFBVKUIEkAFBIkEQICElheg86UyB1H3omYQUiCSi29ABgQh1O6jZmU8EECVB +Z3qRnXGAiEAx3p+VtG1+6v7TWdb4sABqEd3p6b4WRK2WtJqiHopSdTXbs5F2KZQHhOIwkQdJ6pfY +JHEDRXnOFnHNd3q1ZTrUx7R7Kn1txa8XRFE/RcGyAt6m0Hx1qqUheLIQT0rarKAlRYqU1AmDNP4V +dIpU3YLr/HG2W5jdou38n/FC7YZBAkVnvG2FHGPPTu8Uc7eWiRifD93xx+a53TK7y+gGvPvVXdcQ +6iw3BVJIIfoEcyTtFGJWZ/00LHG/pKsz+N76vmdu/YF2mDZdyGkXBgDu2RA9qzctLrI6XsHRkvYL +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,iVBORw0KGgoAAAANSUhEUgAAAMMAAADZCAYAAACdMoRXAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI +WXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4gUOCS0TFCLI1AAAE5JJREFUeNrtneuTFNd5xp/3Pd1z +3VmWZVlu5iKEJDDYMsa2ZCPFVtmO/SEfUmVXpSr5R5LKX5T4g5PYqbLjlCNFNuhGLAsjCTACCZbL +wsLeZ6Yv582H7t6ZgUUISzBLz/OrkrZ3trunz+F9+n3O6XNOA4QQQgghhBBCCCGEEEIIIYQQQggh +hBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQ +QgghhBBCCCGEkM+HwExYDYQAAQCKgZBcDMpqIISZgRCKgRDaJEKYGQh5gBh2UgyEZGKIb9ImEQIA +gW1lZiAEAAJPm0RILoZ52iRCMps0wcxASCYG2iRCcjEs0SYRkomhxcxACMAn0IT0ZYYV2iRCMjE0 +mRkIoU0iZCAztGmTCGFmIKRfDLU6xUBIZpM6tEmEZGKgTSIkbzPUKAZCsszQpU0CAN8xh5WoLkvt +hpjWfOrDwEys2MFlPxQB4LKeBwAwA9QBIgBgsHxXMWQ5V4vjsl/EDE4Ac8XdKDug+B5DkH2VAk6y +8xgs+8x6fzABVAGV/Bryr4Nk53PFdedf5PJNUZj38KnTdhtpZyEM2quGLiNgxHuTfDsJk0sL+3Wp +e1gTO6ip3yOGCVGpOJgTZEGuIlmwiUA0/yl9f5MiEPPPke+n2bZDb/9iHy32yz8XkTy447Xfi+8X +ZN+hmeLyz7PvUO3fRyD5PpofrJL2rjsBVMUEgHqNzPyqj/21xOn5ZciZq4JzV0N3Z3QzQ3X0xJAu +JFV/fv55Wex8V6P0mAK7RaQpIlWFqfi+AC2CD/m2ydrvxY1/LagtzwDFti/Egb7z9J1PeucRAGrF +OQeFUIiu/zjI4DGFeBQ2INY14Vm+nf8Ub8UxMVLfHhOdnRL78Gkvr31c0RMfO9watbiQVtcOjlKB +47N39trsyo81Sr+vZk+LSANZUCyKw3UVzEF1RVVjEYWIzwJZ8yBWXbt7FBlBtBe8WtzVtRfEKAJV ++8Wgg0GtgKqu3fm1sFcq+Tny82Mwo6AQ7UC2KrKH9j4DIM5BzAAx51SrYrY5VJl2wFYRcRBLoDob +wd6ad8Ev31W8tQrEIyOGsa4dGoWCWmIa/3H2KBajn2rsXxaxSRFLxOkHCN07Ug3OSMNdt0q4IBVE +qi4170XE1gLd8jtwz6pkPr64gyNvN4g4iOiApcHanX6t6nseH727+MC50bNkA+eynoiK//WfW/pt +W26GxXIhqxoEUhGE1dSaDfgtTfMHqimOhSrPB8AkRGJTOb3o9N9Oe/uvG04WR0UMXy69EKJUo/du +vYD5zj9oasdFUBGHC6i438rm2uuyuXrJNtcXtRGOzF2wr19AJ5OkOWU6vc3b0ZbgB1XgBVVUvODi +kujPTsN+cVX19ig0oEvfmxR9cPuozXf+XhP/XQjMQvd7jFf/XXY039SdY7f7btAj17OWArgZBCs3 +gYszcXLtgOj5Hd4u14EfOcNT42J/9xWBQewXV00Wyt2ALnlvUnxhcbe/1f5bjf1xy4TwmkzW/8U9 +N/mO1FzMh449FsKgewr407Metw94v9QS/MTB9jYgx7YZ3p4BSm2XSt216pfiajKz8H2JkpcNqCLQ +N3Si8rPgyNRb4sSDQliXc4prKeTnB82HVcP+ZZGTt1LMwZW7voK8x7CcWeHi/GG04+8JsBVOLsl4 +9T/doclTEshIWqKH4YKTGy7Bz2uq9RnI1bkAK2WvsyAs6d3Rr0ahv91+Eak9YyKJVNzvK3s3vxk2 +KgkzwmfjYuBmiu1wBOqstG2G7uXl3dZNnxdDy1Q+1PHayWB7bY5tBPJpbYZSpr70TucZePsSIJCq +OxNsa1ykNSIjlxmsG6tvJwfgbQIiS1ILzrup+jyzAnlQZihdgPgOapbYdgANU3wiNXdDa45tBTJ6 +Nsm3kzrMJgAonMxLPVyiRSIPtklSQpvkk6p5C/PxOW2puKiM5SRfdGaIS3jHjCwUyea3CNTgDcMq +pyWp+uWkYd20po1wWcaCrkhvzhDZSGIoY2YQCMyyxGC++GQo5UznOpuji/M/0Cg96JrhGbdz/E2Z +rl1F4DzDb6OJISifGET7Qr+YWTOkcqYrybStJC8h9Ucl8cc1unMMi7Vf+X2bTmlNOxTFRmozJOWz +SWZQy/tRDRAYdFjltG7cMPNjEINAGhL54zrXOVBpp6+m02P/nUxXLiIMKYgNkRnK2d14ty2SoZXT +vMLMwQADIi+WhN52uE7yk8r1xUPWrv2qPd08kY4Fy1BlW4I26Qvm7tGVChlaOVWLWfpt1NzvpBn+ +2TrJ98RwyKX2vC529laT9HA0Vf/14vbmB9JbKIPQJn0RRv2urGAiQ7NJtjYrNPJVdz49vPU/cHnx +nFuIfmRJ8m0xbA666Y+rs+1naivpb5an6q+vNsMNN6usDoR1QS1JkXYVURdIypcZytj/LsWMYruf +bXrM17KWoSAVl6Z7xt9vryYzdn3ljHbivxZvR9Tbc812vKsxmx5ZbVV/fXNL7Y+muiECrmoIvq74 +zjbDKz7E8jXg1Tc9TpVODEEJJ2x4tzaHHiLZPPhhlTMWiBdI1pJ3CBwEzhlqbj5pVf6nM7t8wS10 +X3GR/ysx2xYm9nJtqftUK/Gvzm+uvbbQDGY2QMNSxgw7G8A3vWF+THCmjHETWFpCm+T7ymR579Kw +ymkQ+Oz5t4ih/zpMJelubV5Kxhv/On5r+bx20x+EZkcDw75qlP60fmf12YlO9bczzeBUHLr2sKoz +Xw5KxRAiG9zpzJcvbsrbm3TvqixDsklr32sm/YvDFI19tbSB5YUdrTejpc7Hspwc1zj5bmDYW03w +rVo72juWpM/daYSvzTTCC0OuT8PaQjUlzAylFIPcuzzREMspfRnrvtfhQ41XJhuX40byy80LnY82 +xf6Vhtk3AsiuWmp/02zH+zd5/9qVRvXtRcXC0Mrw6Z898WIo42hOuUsbOrRyDghT5EHXEdWC1Zuu +/m67k1yd6iTnN6X2Ugg7WIN8vZb4XZva3Wdvhu71jwJ31qs8rga29tdpvs5x+WxSKSf3ZEvJrWUE +y/8bki6z5wxiAjF8lutIQ5cuhO5apxb8Jmqnl6ai+OUm8M0asL3i/Q8bseydFPn9Jx5vXwvc7GNo +M9xTf0ab9GRmhqG2Gfq/Nxs8+Jmvoxu69hWnp5divb4zSj/a4u2lBvDlmuArNe+3b3Ly1Bb4V89D +zz7Kfv/7CKGEYijjUjHaX6Y8S8jQbZLlC6Q+1HWYE8y74FYnkNe6Ca7sTNMftoBvVoGtVcgr+wwt +7+DfN5x9lDVaLDCOwUXJmRmeuN4kbJDMoH95w7MTuO6FAO+32raj6f1zgDQVqFQEe5vA5CMu34hk +hlGwSRhy16oMNKD/ousIU1/dGdn+ZuqPqGATAMTA3DLk1CzwyWMQgzygjkvRgC53b1JukYZVTltb +PF6KASIPfR0TnWR6V+yf35L67zQcDomotWEfLkLfuGR4a8Yw+yh7dyx/x0l//ZYxbkbEJslwM4MV +QSUPdUetRUlzquMPbI2TF1uGoxUnW7zJ7SWRP9x0evKi0w/biu5jKBtt0hMshQ3zkEiKN4YYLHvr +4YOvQ1MftFbTbVOd+NimxL/YUDkgTqIu8P5S4E5erbj/mw305mMs10Zqgz1SMZTQJq078VOHJk0r +gufBD/9qK9H4ptXk4OZ2+p0a7KuhSj11Mrsa6B/mKu6NK43wXJq9VuFxlqffJhXPHGiTnsgG9NDH +JhXDeXob90Rb7Kv15Wj75FL8Qj2OX6iq7hQnnY6T0ysVd+JaI3x3peIWhpTlRmM4hpawUHcVSKT3 +fsJhXEsuRIPA33sd3iTopq3m3OqRsdXk5ZrhcOBEE5EbUcW9s9CsnLjVqlxEdiseShn0Lls0zPp8 +tJmhhENxYdDeKwLzlqsf4hDuYsCnH7wOidJquBDtaMy3v12L028FIlsRyGrX6bnVZvj63ETtvcRp +e9j/RpY9xuzrCMgWWSifGLSENknXsUk67CHcYnAKKMSSVHU1aVVudr5aW45eCtL0kAYuTSs6E9fd +O4ub6yeXW5WZDWRH5K4rkTLOkCzptM97/tmGOO0zH7jgoTCrWBRX5VZnT+VW53jYTY45kQk4W40r +7k/RZO1/F6cbZ0yQbjBPLnlHQJYZpKS9SSWe6SZFTofJ0Ga6mS88ktX9UnzQPrgzFqxGXxOP/eI0 +SWv6STxeO9mZarwVjVXm8jkPG+rfxAC1PpsEg1gpbZIruU0q7szDKmeg2ZJJhop2km9IlBwVlRCh +W44b4R9tW/13ne1jZz+tp2kD9Ulk3apS0t4kjMY7C4aW1kXEJB9eLd4rRFNfdReSidqJdM+mU74Z +LG6gtsFnqr/yPoEuo00y6ZuZJVkPzpDKKYF0JHQLSBOYk9toVd5Nd7VOJNvGPhaBPSH1f49NAm3S +E2ST+kvlIMMqp5uq37GV+IQtxZdtsnrJ7xr7s1a1LZ9jOPfQM6twbNKTZYqK9rMITIY3UE9qrhs+ +O3EaiX8fThMJ1D8BtujeGvWQbGyVwBtQyq5VK+VDN82arABgFiCVIa7zky+YFGar4z2J9S3eB6Lq +sgfpZibiuW7Sk0IoCRxiGADvaxbFVfDlhn8xVacVB6tBRD0kjgVRMR69XGIo4RNobVQiCdyySeIt +QcsiP1bKJ+2PiYa3RgC/ySBIRDptyGoZ67OUY5MkkFRqbs5WpCNpusmvxFPWTqpSDWKG9sPTMkzW +RKYAQQxZXDAslLI3SUtqH9x49Zq/01lGimm0kz22nJxx1WCOof2QWdagW4CdFWDKDGlHcHPBsFTO +UasltQ/BVP1aem1l1pJo2rfjfentlS8FW2u3Gd4Px1bD1GZvT4fAeAzcvG12pa0SgUO4n6DMMFGb +l1blI+sm+yTy2/yt9pF0S/uam6wzO3zWrADol8yebYrsA4AVwcwNyJWyxkxph2OICsIdzXPRUvSM +tJNDthwfTGaWr0kjfFNrQZeh/mD2GZ6aNnu+AmzpiszNQs5eN8yVNWaCMveyBNub19PbndPp9ZVp +SdItfm71WFJ1y+HTE+9JqCnD/f7sALbtS/wLTeCAAekC5NxlxXlvG3pA4eeLFytpysvSgyDYPf6h +byfTuNN+Ed10j7+2cjwWkWBP6wOpMkOsxy6znc+YfXsC+IoCwRJw/rLhvRsp5oHyxkvpR6268cpS +uGf8VJL4pix2viadZL9dWw7TKBmXna33dVP1tqjwDZsAGmb1XYa9e7z/+oTgy05QXYVcvgx5+yPY +pYGptKUUgyv/w6hgR+MGzJ9MP4ZgsXtEusluzK6OWyfdbltqZzFRuYqx6pJUXTRqAnBmrpn65mZg +y7YUT08aDo4BuwHICuTjK4G+cVbsg1hko82+ewRiKLNNGmg/jF2F6u/8J4ttLEaHkdqkzne/JavJ +ftwKLkszvGr14LZUtC2BxlDJBtR5y16vAMCkN/dRinn+RYRo/qn0fESxepj0reAkAwf1TSYWQe+v +vWOK75FB9zfwy8CrifJ9VeTe/UUh5gEVcQJXSa1WB8Zb5reNm+yuw3Y6kTARdFeAC1ecO/Vnw7kY +EpfxIds9rrrVtX8cpTuhX+y0/JWVgzbfOezayS4BxrI35SKFkxUX6IqodMXBi2gemLI2j7R4qa5A +19ZLUS2CTtaEk+0nUOkFYyYUydeuKfaTwXPmYsqHeOfvVO8TWP855a7vBPK/ydp5Ifk50BuHLZkY +gsBQD0RaoaAqAEwligVz8yrnL6ucvqIyUywDOApIq2v/NGrWwMzEbra3YXb1AJajfRL7reKtKd6q +TuB6AdoLPIH0BVrv59pnRbAXQaj5NvqPHTx+8Hy9Y7VfIP2f4a5zoH/fu67nPsf275+9Lh6RV2nH +wPyy6swtlfOXnX7SEXRGLS5krGv/PMqNRj/fnZCF7rQsR9s0SjdLamNqFsCsTxQ6eLfuC7TMIfVt +FytsqazZHMW9QiiCuRAF7hKe9NbuBlx2Xu1bkqyXBXqWaEAA+dJf6wgmX+xSklTRiUQWVpzenBe5 +flNsLlYd2fFbozIH+r7oRHUBE9UFAOfT1Jyl5tSbQ+IdYOv4dFkTxcBdxfqMe74exnoVqwrY2mkz +G6b5puHu47SvrdH/Zehbqs9g/ZOSJWvbFJeug6/ERqYGMw+kiZMkhqWydvUPt0o4xVDmNOnEixMP +IAbcoLW6z/YTWtK+rdEWwN1iUFYDISUewk0IbRIhtEmEMDMQ8sWIwSgGQvLM4GmTCMnEwCVUCGGb +gZBBMRhtEiG0SYTQJhGyjhiMvUmE0CYRQptEyLpioE0iJBMDh3ATwjYDIbRJhKwrBo5aJYQ2iRDa +JELWFwNtEiG0SYQMioFDuAmhTSJkUAxCMRBCm0RIvxj40I0QthkIuUcMtEmEgEO4CaFNImS9BjRt +EiHMDIRQDISsKwbaJEKYGQihGAhZRwwcm0RILgaOWiWENokQ2iRC1hOD0SYRQptEyIAYlDaJkDwz +cKkYQvI2A20SIXlm4PKShNAmETIoBtokQmiTCGFmIIRtBkI+TQx86EYIbRIhg2LgQD1CaJMIoU0i +ZD0xcD4DIbkYOISbkCIz0CYRwjYDIXeLgTaJEGYGQigGQmiTCGFmIIRiIIQ2iRBmBkIoBkI+lxg4 +NomQXAwctUrImk16n9VACCCtrhmrgZAsM5xjNRAC/D8DlbvEcx9iPAAAAABJRU5ErkJggg== +" + 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 Binary files differnew file mode 100644 index 0000000..cf9ec4e --- /dev/null +++ b/homescreen/qml/images/TopSection_NoText_NoIcons-01.png 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 Binary files differnew file mode 100644 index 0000000..21a602d --- /dev/null +++ b/homescreen/qml/images/Utility_Logo_Background-01.png 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 Binary files differnew file mode 100644 index 0000000..3bb9ef0 --- /dev/null +++ b/homescreen/qml/images/fullscreen.png 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 Binary files differnew file mode 100644 index 0000000..34a9c65 --- /dev/null +++ b/homescreen/qml/images/normal.png 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 |