status-desktop/ui/app/AppLayouts/Profile/views/NotificationsView.qml

386 lines
15 KiB
QML

import QtQuick 2.13
import QtQuick.Controls 2.13
import QtGraphicalEffects 1.13
import QtQuick.Layouts 1.13
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import utils 1.0
import shared.panels 1.0
import shared.status 1.0
import shared.controls 1.0
import "../popups"
import "../panels"
import "./"
ScrollView {
id: root
height: parent.height
width: parent.width
contentHeight: notificationsContainer.height
clip: true
property var store
Item {
id: notificationsContainer
width: profileContainer.profileContentWidth
anchors.horizontalCenter: parent.horizontalCenter
height: this.childrenRect.height + 100
property Component mutedChatsModalComponent: MutedChatsModal {}
ButtonGroup {
id: notificationSetting
}
ButtonGroup {
id: soundSetting
}
ButtonGroup {
id: messageSetting
}
StatusSectionHeadline {
id: sectionHeadlineNotifications
//% "Notification preferences"
text: qsTrId("notifications-preferences")
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
}
Column {
id: column
anchors.top: sectionHeadlineNotifications.bottom
anchors.topMargin: Style.current.smallPadding
anchors.left: parent.left
anchors.right: parent.right
RadioButtonSelector {
//% "All messages"
title: qsTrId("all-messages")
buttonGroup: notificationSetting
checked: localAccountSensitiveSettings.notificationSetting === Constants.notifyAllMessages
onCheckedChanged: {
if (checked) {
localAccountSensitiveSettings.notificationSetting = Constants.notifyAllMessages
}
}
}
RadioButtonSelector {
//% "Just @mentions"
title: qsTrId("just--mentions")
buttonGroup: notificationSetting
checked: localAccountSensitiveSettings.notificationSetting === Constants.notifyJustMentions
onCheckedChanged: {
if (checked) {
localAccountSensitiveSettings.notificationSetting = Constants.notifyJustMentions
}
}
}
RadioButtonSelector {
//% "Nothing"
title: qsTrId("nothing")
buttonGroup: notificationSetting
checked: localAccountSensitiveSettings.notificationSetting === Constants.notifyNone
onCheckedChanged: {
if (checked) {
localAccountSensitiveSettings.notificationSetting = Constants.notifyNone
}
}
}
}
Separator {
id: separator
anchors.top: column.bottom
anchors.topMargin: Style.current.bigPadding
anchors.left: parent.left
anchors.leftMargin: -Style.current.padding
anchors.right: parent.right
anchors.rightMargin: -Style.current.padding
}
StatusSectionHeadline {
id: sectionHeadlineSound
//% "Appearance"
text: qsTrId("appearance")
anchors.top: separator.bottom
anchors.left: parent.left
anchors.right: parent.right
}
Column {
id: column2
anchors.top: sectionHeadlineSound.bottom
anchors.topMargin: Style.current.smallPadding
anchors.left: parent.left
anchors.right: parent.right
width: parent.width
// TODO: replace with StatusListItem
StatusSettingsLineButton {
//% "Play a sound when receiving a notification"
text: qsTrId("play-a-sound-when-receiving-a-notification")
isSwitch: true
switchChecked: localAccountSensitiveSettings.notificationSoundsEnabled
onClicked: {
localAccountSensitiveSettings.notificationSoundsEnabled = checked
}
}
// TODO: replace with StatusListItem
StatusSettingsLineButton {
//% "Use your operating system's notifications"
text: qsTrId("use-your-operating-system-s-notifications")
isSwitch: true
switchChecked: localAccountSensitiveSettings.useOSNotifications
onClicked: {
localAccountSensitiveSettings.useOSNotifications = checked
}
StatusBaseText {
id: detailText
//% "Setting this to false will instead use Status' notification style as seen below"
text: qsTrId("setting-this-to-false-will-instead-use-status--notification-style-as-seen-below")
color: Theme.palette.baseColor1
width: parent.width
font.pixelSize: 12
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.leftMargin: Style.current.padding
anchors.bottom: parent.bottom
anchors.topMargin: 2
}
}
}
Column {
id: column3
spacing: Style.current.bigPadding
anchors.top: column2.bottom
anchors.topMargin: Style.current.padding*2
anchors.left: parent.left
anchors.right: parent.right
StatusBaseText {
//% "Message preview"
text: qsTrId("message-preview")
font.pixelSize: 15
anchors.left: parent.left
anchors.right: parent.right
color: Theme.palette.directColor1
}
Column {
anchors.left: parent.left
anchors.leftMargin: -Style.current.padding
anchors.right: parent.right
spacing: 10
NotificationAppearancePreviewPanel {
//% "Anonymous"
name: qsTrId("anonymous")
notificationTitle: "Status"
//% "You have a new message"
notificationMessage: qsTrId("you-have-a-new-message")
buttonGroup: messageSetting
checked: localAccountSensitiveSettings.notificationMessagePreviewSetting === Constants.notificationPreviewAnonymous
onRadioCheckedChanged: {
if (checked) {
localAccountSensitiveSettings.notificationMessagePreviewSetting = Constants.notificationPreviewAnonymous
}
}
}
NotificationAppearancePreviewPanel {
//% "Name only"
name: qsTrId("name-only")
notificationTitle: "Vitalik Buterin"
//% "You have a new message"
notificationMessage: qsTrId("you-have-a-new-message")
buttonGroup: messageSetting
checked: localAccountSensitiveSettings.notificationMessagePreviewSetting === Constants.notificationPreviewNameOnly
onRadioCheckedChanged: {
if (checked) {
localAccountSensitiveSettings.notificationMessagePreviewSetting = Constants.notificationPreviewNameOnly
}
}
}
NotificationAppearancePreviewPanel {
//% "Name & Message"
name: qsTrId("name---message")
notificationTitle: "Vitalik Buterin"
//% "Hi there! Yes, no problem, let me know if I can help."
notificationMessage: qsTrId("hi-there--yes--no-problem--let-me-know-if-i-can-help-")
buttonGroup: messageSetting
checked: localAccountSensitiveSettings.notificationMessagePreviewSetting === Constants.notificationPreviewNameAndMessage
onRadioCheckedChanged: {
if (checked) {
localAccountSensitiveSettings.notificationMessagePreviewSetting = Constants.notificationPreviewNameAndMessage
}
}
}
}
StatusBaseText {
//% "No preview or Advanced? Go to Notification Center"
text: qsTrId("no-preview-or-advanced--go-to-notification-center")
font.pixelSize: 15
anchors.left: parent.left
color: Theme.palette.directColor1
}
}
Separator {
id: separator2
anchors.top: column3.bottom
anchors.topMargin: Style.current.bigPadding
anchors.left: parent.left
anchors.leftMargin: -Style.current.padding
anchors.right: parent.right
anchors.rightMargin: -Style.current.padding
}
StatusSectionHeadline {
id: sectionHeadlineContacts
//% "Contacts & Users"
text: qsTrId("contacts---users")
anchors.top: separator2.bottom
anchors.left: parent.left
anchors.right: parent.right
}
Column {
id: column4
anchors.top: sectionHeadlineContacts.bottom
anchors.topMargin: Style.current.smallPadding
anchors.left: parent.left
anchors.right: parent.right
width: parent.width
// TODO: replace with StatusListItem
StatusSettingsLineButton {
//% "Notify on new requests"
text: qsTrId("notify-on-new-requests")
isSwitch: true
switchChecked: localAccountSensitiveSettings.notifyOnNewRequests
onClicked: {
localAccountSensitiveSettings.notifyOnNewRequests = checked
}
}
// TODO: replace with StatusListItem
StatusSettingsLineButton {
//% "Muted users"
text: qsTrId("muted-users")
//% "None"
currentValue: root.store.mutedChatsContacts.rowCount() > 0 ? root.store.mutedChatsContacts.rowCount() : qsTrId("none")
isSwitch: false
onClicked: {
const mutedChatsModal = notificationsContainer.mutedChatsModalComponent.createObject(notificationsContainer, {
showMutedContacts: true
})
//% "Muted contacts"
mutedChatsModal.title = qsTrId("muted-contacts");
//% "Muted contacts will appear here"
mutedChatsModal.noContentText = qsTrId("muted-contacts-will-appear-here");
mutedChatsModal.open();
}
}
// TODO: replace with StatusListItem
StatusSettingsLineButton {
//% "Muted chats"
text: qsTrId("muted-chats")
//% "None"
currentValue: root.store.mutedChats.rowCount() > 0 ? root.store.mutedChats.rowCount() : qsTrId("none")
isSwitch: false
onClicked: {
const mutedChatsModal = notificationsContainer.mutedChatsModalComponent.createObject(notificationsContainer, {
showMutedContacts: false
})
//% "Muted chats"
mutedChatsModal.title = qsTrId("muted-chats");
//% "Muted chats will appear here"
mutedChatsModal.noContentText = qsTrId("muted-chats-will-appear-here");
mutedChatsModal.open();
}
StatusBaseText {
//% "You can limit what gets shown in notifications"
text: qsTrId("you-can-limit-what-gets-shown-in-notifications")
color: Theme.palette.baseColor1
width: parent.width
font.pixelSize: 12
wrapMode: Text.WordWrap
anchors.left: parent.left
anchors.leftMargin: Style.current.padding
anchors.bottom: parent.bottom
anchors.topMargin: 2
}
}
}
Separator {
id: separator3
anchors.top: column4.bottom
anchors.topMargin: Style.current.bigPadding
anchors.left: parent.left
anchors.leftMargin: -Style.current.padding
anchors.right: parent.right
anchors.rightMargin: -Style.current.padding
}
Column {
id: column5
spacing: Style.current.smallPadding
anchors.top: separator3.bottom
anchors.topMargin: Style.current.bigPadding
anchors.left: parent.left
anchors.right: parent.right
width: parent.width
StatusBaseText {
//% "Reset notification settings"
text: qsTrId("reset-notification-settings")
font.pixelSize: 15
color: Theme.palette.dangerColor1
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onEntered: {
parent.font.underline = true
}
onExited: {
parent.font.underline = false
}
onClicked: {
localAccountSensitiveSettings.notificationSetting = Constants.notifyAllMessages
localAccountSensitiveSettings.notificationSoundsEnabled = true
localAccountSensitiveSettings.notificationMessagePreviewSetting = Constants.notificationPreviewNameAndMessage
localAccountSensitiveSettings.allowNotificationsFromNonContacts = false
}
}
}
StatusBaseText {
//% "Restore default notification settings and unmute all chats and users"
text: qsTrId("restore-default-notification-settings-and-unmute-all-chats-and-users")
font.pixelSize: 15
color: Theme.palette.baseColor1
}
}
}
}