Skip to content

Commit

Permalink
Added support for notifications
Browse files Browse the repository at this point in the history
It is possible to initiate a notification using
the AM NotificationManager using the same interface
from the system UI and applications.

Change-Id: If486958bdb5a3fd37024b4430eb86ce1d3d142c0
Reviewed-by: Juergen Bocklage-Ryannel <[email protected]>
  • Loading branch information
Nedim Hadzic committed Aug 3, 2016
1 parent dad8498 commit d372607
Show file tree
Hide file tree
Showing 7 changed files with 270 additions and 1 deletion.
37 changes: 37 additions & 0 deletions imports/shared/service/notification/NotificationInterface.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/****************************************************************************
**
** Copyright (C) 2016 Pelagicore AG
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Neptune IVI UI.
**
** $QT_BEGIN_LICENSE:GPL-QTAS$
** Commercial License Usage
** Licensees holding valid commercial Qt Automotive Suite licenses may use
** this file in accordance with the commercial license agreement provided
** with the Software or, alternatively, in accordance with the terms
** contained in a written agreement between you and The Qt Company. For
** licensing terms and conditions see https://www.qt.io/terms-conditions.
** For further information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
** SPDX-License-Identifier: GPL-3.0
**
****************************************************************************/

import QtQuick 2.0
import QtApplicationManager 1.0

Notification {
timeout: 10000
}
1 change: 1 addition & 0 deletions imports/shared/service/notification/qmldir
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
NotificationInterface 1.0 NotificationInterface.qml
116 changes: 116 additions & 0 deletions imports/system/models/NotificationModel.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
/****************************************************************************
**
** Copyright (C) 2016 Pelagicore AG
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Neptune IVI UI.
**
** $QT_BEGIN_LICENSE:GPL-QTAS$
** Commercial License Usage
** Licensees holding valid commercial Qt Automotive Suite licenses may use
** this file in accordance with the commercial license agreement provided
** with the Software or, alternatively, in accordance with the terms
** contained in a written agreement between you and The Qt Company. For
** licensing terms and conditions see https://www.qt.io/terms-conditions.
** For further information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
** SPDX-License-Identifier: GPL-3.0
**
****************************************************************************/

pragma Singleton
import QtQuick 2.0

import utils 1.0
import QtApplicationManager 1.0

QtObject {
id: root

readonly property int maxNotifications: 20

property bool notificationVisible: false

property int notificationIndex: -1

property string title
property string description

property var buttonModel: []

property Connections notificationManagerConnection: Connections {
target: NotificationManager

onNotificationAdded: {
console.log("::: Notification received :::", id)
addNotification()
}

onNotificationChanged: {
console.log("::: Notification changed :::", id)
updateNotification(id)
}

onNotificationAboutToBeRemoved: {
console.log("::: Notification closing :::", id)
closeNotification()
}
}

function addNotification() {
var notification = NotificationManager.get(NotificationManager.count - 1)
var notificationId = notification.id
var actions = []
for (var i in notification.actions) {
actions.push(i)
}
root.buttonModel = actions
root.notificationIndex = notificationId
root.title = notification.summary
root.description = notification.body
root.notificationVisible = true
}

function updateNotification(index) {
var notification = NotificationManager.notification(index)
root.notificationIndex = notification.id
root.title = notification.summary
root.description = notification.body
var actions = []
for (var i in notification.actions) {
actions.push(i)
}
root.buttonModel = actions
root.notificationVisible = true
}

function closeNotification() {
root.title = root.description = ""
root.buttonModel = []
root.notificationIndex = -1
root.notificationVisible = false
}

function removeNotification() {
NotificationManager.dismissNotification(root.notificationIndex)
closeNotification()
}

function buttonClicked(index) {
NotificationManager.triggerNotificationAction(root.notificationIndex, root.buttonModel[index])
closeNotification()
}

}

1 change: 1 addition & 0 deletions imports/system/models/qmldir
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
singleton ApplicationManagerInterface 1.0 ApplicationManagerInterface.qml
singleton NotificationModel 1.0 NotificationModel.qml
6 changes: 6 additions & 0 deletions sysui/Display.qml
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,12 @@ Item {
}
}

NotificationContainer {
id: notificationContainer

anchors.centerIn: parent
}

Loader {
id: keyboardLoader
anchors.left: parent.left
Expand Down
97 changes: 97 additions & 0 deletions sysui/NotificationContainer.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/****************************************************************************
**
** Copyright (C) 2016 Pelagicore AG
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Neptune IVI UI.
**
** $QT_BEGIN_LICENSE:GPL-QTAS$
** Commercial License Usage
** Licensees holding valid commercial Qt Automotive Suite licenses may use
** this file in accordance with the commercial license agreement provided
** with the Software or, alternatively, in accordance with the terms
** contained in a written agreement between you and The Qt Company. For
** licensing terms and conditions see https://www.qt.io/terms-conditions.
** For further information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
** SPDX-License-Identifier: GPL-3.0
**
****************************************************************************/

import QtQuick 2.0
import utils 1.0
import controls 1.0
import models 1.0

UIElement {
id: root

hspan: 8
vspan: 6

visible: opacity > 0

scale: NotificationModel.notificationVisible ? 1 : 0
Behavior on scale { NumberAnimation { duration: 200 } }

opacity: NotificationModel.notificationVisible ? 1 : 0
Behavior on opacity { NumberAnimation { duration: 200 } }

Rectangle {
anchors.fill: parent
color: '#000'
opacity: 0.85
}

Label {
id: title
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
text: NotificationModel.title
}

Label {
id: body

width: parent.width
anchors.bottom: buttonsRow.top
anchors.top: title.bottom
anchors.topMargin: 10
font.pixelSize: Style.fontSizeM
text: NotificationModel.description
horizontalAlignment: Text.AlignHCenter
}

Row {
id: buttonsRow
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
spacing: 2

Repeater {
id: buttonModel

property int buttonWidth: model ? root.width / model.length : 0

model: NotificationModel.buttonModel

delegate: Button {
width: buttonModel.buttonWidth
text: modelData
onClicked: NotificationModel.buttonClicked(index)
}
}
}

}
13 changes: 12 additions & 1 deletion sysui/Settings/FunctionsPage.qml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import QtGraphicalEffects 1.0
import controls 1.0
import utils 1.0
import service.settings 1.0
import service.notification 1.0

UIPage {
id: root
Expand All @@ -45,6 +46,12 @@ UIPage {
title: qsTr('Car Settings')
symbolName: "settings"

NotificationInterface {
id: notificationInterface
actions: ["OK"]
summary: "Car Settings"
}

GridView {
id: view

Expand Down Expand Up @@ -118,7 +125,11 @@ UIPage {

MouseArea {
anchors.fill: parent
onClicked: active = !active
onClicked: {
active = !active
notificationInterface.body = model.description + (active ? " activated" : " deactivated")
notificationInterface.show()
}
}
}
}
Expand Down

0 comments on commit d372607

Please sign in to comment.