Improve DevicesPage and DevicesModel
- Split the list into sections for "this devices", "verified devices", "unverified devices", and "devices without encryption support" - Sort the lists by last activity
This commit is contained in:
134
src/qml/Settings/DeviceDelegate.qml
Normal file
134
src/qml/Settings/DeviceDelegate.qml
Normal file
@@ -0,0 +1,134 @@
|
||||
// SPDX-FileCopyrightText: 2020 - 2023 Tobias Fella <tobias.fella@kde.org>
|
||||
// SPDX-FileCopyrightText: 2022 James Graham <james.h.graham@protonmail.com>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.15 as QQC2
|
||||
import QtQuick.Layouts 1.15
|
||||
|
||||
import org.kde.kirigami 2.19 as Kirigami
|
||||
import org.kde.kirigamiaddons.labs.mobileform 0.1 as MobileForm
|
||||
|
||||
import org.kde.neochat 1.0
|
||||
|
||||
MobileForm.AbstractFormDelegate {
|
||||
id: deviceDelegate
|
||||
|
||||
required property string id
|
||||
required property int lastTimestamp
|
||||
required property string displayName
|
||||
|
||||
property bool editDeviceName: false
|
||||
property bool showVerifyButton
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
onClicked: deviceDelegate.editDeviceName = true
|
||||
|
||||
contentItem: RowLayout {
|
||||
spacing: Kirigami.Units.largeSpacing
|
||||
|
||||
Kirigami.Icon {
|
||||
source: "network-connect"
|
||||
implicitWidth: Kirigami.Units.iconSizes.medium
|
||||
implicitHeight: Kirigami.Units.iconSizes.medium
|
||||
}
|
||||
ColumnLayout {
|
||||
id: deviceLabel
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
visible: !deviceDelegate.editDeviceName
|
||||
|
||||
QQC2.Label {
|
||||
Layout.fillWidth: true
|
||||
text: deviceDelegate.displayName
|
||||
elide: Text.ElideRight
|
||||
wrapMode: Text.Wrap
|
||||
maximumLineCount: 2
|
||||
}
|
||||
|
||||
QQC2.Label {
|
||||
Layout.fillWidth: true
|
||||
text: deviceDelegate.id + ", Last activity: " + (new Date(deviceDelegate.lastTimestamp)).toLocaleString(Qt.locale(), Locale.ShortFormat)
|
||||
color: Kirigami.Theme.disabledTextColor
|
||||
font: Kirigami.Theme.smallFont
|
||||
elide: Text.ElideRight
|
||||
visible: text.length > 0
|
||||
}
|
||||
}
|
||||
Kirigami.ActionTextField {
|
||||
id: nameField
|
||||
Accessible.description: i18n("New device name")
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: deviceLabel.implicitHeight
|
||||
visible: deviceDelegate.editDeviceName
|
||||
|
||||
text: deviceDelegate.displayName
|
||||
|
||||
rightActions: [
|
||||
Kirigami.Action {
|
||||
text: i18n("Cancel editing display name")
|
||||
icon.name: "edit-delete-remove"
|
||||
onTriggered: {
|
||||
deviceDelegate.editDeviceName = false
|
||||
}
|
||||
},
|
||||
Kirigami.Action {
|
||||
text: i18n("Confirm new display name")
|
||||
icon.name: "checkmark"
|
||||
visible: nameField.text !== deviceDelegate.displayName
|
||||
onTriggered: {
|
||||
devicesModel.setName(deviceDelegate.id, nameField.text)
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
onAccepted: devicesModel.setName(deviceDelegate.id, nameField.text)
|
||||
}
|
||||
QQC2.ToolButton {
|
||||
display: QQC2.AbstractButton.IconOnly
|
||||
action: Kirigami.Action {
|
||||
id: editDeviceAction
|
||||
text: i18n("Edit device name")
|
||||
icon.name: "document-edit"
|
||||
onTriggered: deviceDelegate.editDeviceName = true
|
||||
}
|
||||
QQC2.ToolTip {
|
||||
text: editDeviceAction.text
|
||||
delay: Kirigami.Units.toolTipDelay
|
||||
}
|
||||
}
|
||||
QQC2.ToolButton {
|
||||
display: QQC2.AbstractButton.IconOnly
|
||||
visible: Controller.encryptionSupported && deviceDelegate.showVerifyButton
|
||||
action: Kirigami.Action {
|
||||
id: verifyDeviceAction
|
||||
text: i18n("Verify device")
|
||||
icon.name: "security-low-symbolic"
|
||||
onTriggered: {
|
||||
devicesModel.connection.startKeyVerificationSession(devicesModel.connection.localUserId, deviceDelegate.id)
|
||||
}
|
||||
}
|
||||
QQC2.ToolTip {
|
||||
text: verifyDeviceAction.text
|
||||
delay: Kirigami.Units.toolTipDelay
|
||||
}
|
||||
}
|
||||
QQC2.ToolButton {
|
||||
display: QQC2.AbstractButton.IconOnly
|
||||
action: Kirigami.Action {
|
||||
id: logoutDeviceAction
|
||||
text: i18n("Logout device")
|
||||
icon.name: "edit-delete-remove"
|
||||
onTriggered: {
|
||||
passwordSheet.deviceId = deviceDelegate.id
|
||||
passwordSheet.open()
|
||||
}
|
||||
}
|
||||
QQC2.ToolTip {
|
||||
text: logoutDeviceAction.text
|
||||
delay: Kirigami.Units.toolTipDelay
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user