ask pin before executing notification actions

only allow a phone call notification to execute actions without
unlocking
for the rest open the pin dialog and execute the action only after
successful authentication
This commit is contained in:
Marco Martin 2020-11-19 12:24:29 +01:00
parent 7fa7879493
commit 57df5430d6
3 changed files with 51 additions and 3 deletions

View file

@ -41,7 +41,19 @@ PlasmaCore.ColorScope {
function isPinDrawerOpen() {
return passwordFlickable.contentY === passwordFlickable.columnHeight;
}
function askPassword() {
showPasswordAnim.restart();
}
NumberAnimation {
id: showPasswordAnim
target: passwordFlickable
property: "contentY"
from: 0
to: passwordFlickable.contentHeight - passwordFlickable.height
duration: units.longDuration
easing.type: Easing.InOutQuad
}
// blur background once keypad is open
FastBlur {
id: blur

View file

@ -25,10 +25,13 @@ import org.kde.notificationmanager 1.1 as Notifications
import "../components"
Item {
id: notificationsRoot
property alias notificationListHeight: notificationListView.contentHeight
property int count: notificationListView.count
clip: true
property var pendingAction: {"notificationId": 0, "actionName": ""}
Rectangle {
z: 1
anchors {
@ -86,7 +89,25 @@ Item {
color: Qt.rgba(1, 1, 1, 0.5)
}
}
Connections {
target: authenticator
function onSucceeded() {
if (notificationsRoot.pendingAction.notificationId !== 0) {
if (notificationsRoot.pendingAction.actionName.length == 0) {
notifModel.invokeDefaultAction(pendingAction.notificationId);
} else {
notifModel.invokeAction(pendingAction.notificationId, pendingAction.actionName);
}
notificationsRoot.pendingAction = {"notificationId": 0, "actionName":""};
}
}
function onFailed() {
notificationsRoot.pendingAction = {"notificationId": 0, "actionName":""};
}
}
ListView {
id: notificationListView
model: notifModel

View file

@ -162,7 +162,13 @@ Item {
text: modelData.label || ""
onClicked: {
notifModel.invokeAction(notificationItem.notification.notificationId, modelData.actionName);
if (notificationItem.notification.category === "x-kde.incoming-call") {
notifModel.invokeAction(notificationItem.notification.notificationId, modelData.actionName);
} else {
notificationsRoot.pendingAction = {"notificationId": notificationItem.notification.notificationId,
"actionName":modelData.actionName};
root.askPassword();
}
}
}
}
@ -187,6 +193,15 @@ Item {
} else {
slideAnim.restart();
}
if (notificationItem.notification.hasDefaultAction && Math.abs(rect.x) < units.gridUnit) {
if (notificationItem.notification.category === "x-kde.incoming-call") {
notifModel.invokeDefaultAction(notificationItem.notification.notificationId);
} else {
notificationsRoot.pendingAction = {"notificationId": notificationItem.notification.notificationId,
"actionName": ""};
root.askPassword();
}
}
}
NumberAnimation {