QortalOS Brooklyn for Raspberry Pi 4
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

342 lines
12 KiB

/*
SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <[email protected]>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#pragma once
#include <QObject>
#include <KSharedConfig>
#include <QDateTime>
#include <QScopedPointer>
#include <QString>
#include "notificationmanager_export.h"
namespace NotificationManager
{
/**
* @short Notification settings and state
*
* This class encapsulates all global settings related to notifications
* as well as do not disturb mode and other state.
*
* This class can be used by applications to alter their behavior
* depending on user's notification preferences.
*
* @author Kai Uwe Broulik <[email protected]>
**/
class NOTIFICATIONMANAGER_EXPORT Settings : public QObject
{
Q_OBJECT
/**
* Whether to show critical notification popups in do not disturb mode.
*/
Q_PROPERTY(bool criticalPopupsInDoNotDisturbMode READ criticalPopupsInDoNotDisturbMode WRITE setCriticalPopupsInDoNotDisturbMode NOTIFY settingsChanged)
/**
* Whether to keep normal notifications always on top.
*/
Q_PROPERTY(bool keepNormalAlwaysOnTop READ keepNormalAlwaysOnTop WRITE setKeepNormalAlwaysOnTop NOTIFY settingsChanged)
/**
* Whether to show popups for low priority notifications.
*/
Q_PROPERTY(bool lowPriorityPopups READ lowPriorityPopups WRITE setLowPriorityPopups NOTIFY settingsChanged)
/**
* Whether to add low priority notifications to the history.
*/
Q_PROPERTY(bool lowPriorityHistory READ lowPriorityHistory WRITE setLowPriorityHistory NOTIFY settingsChanged)
/**
* The notification popup position on screen.
* CloseToWidget means they should be positioned closely to where the plasmoid is located on screen.
*/
Q_PROPERTY(PopupPosition popupPosition READ popupPosition WRITE setPopupPosition NOTIFY settingsChanged)
/**
* The default timeout for notification popups that do not have an explicit timeout set,
* in milliseconds. Default is 5000ms (5 seconds).
*/
Q_PROPERTY(int popupTimeout READ popupTimeout WRITE setPopupTimeout RESET resetPopupTimeout NOTIFY settingsChanged)
/**
* Whether to show application jobs in task manager
*/
Q_PROPERTY(bool jobsInTaskManager READ jobsInTaskManager WRITE setJobsInTaskManager /*RESET resetJobsInTaskManager*/ NOTIFY settingsChanged)
/**
* Whether to show application jobs as notifications
*/
Q_PROPERTY(bool jobsInNotifications READ jobsInNotifications WRITE setJobsInNotifications /*RESET resetJobsPopup*/ NOTIFY settingsChanged)
/**
* Whether application jobs stay visible for the whole duration of the job
*/
Q_PROPERTY(bool permanentJobPopups READ permanentJobPopups WRITE setPermanentJobPopups /*RESET resetAutoHideJobsPopup*/ NOTIFY settingsChanged)
/**
* Whether to show notification badges (numbers in circles) in task manager
*/
Q_PROPERTY(bool badgesInTaskManager READ badgesInTaskManager WRITE setBadgesInTaskManager NOTIFY settingsChanged)
/**
* A list of desktop entries of applications that have been seen sending a notification.
*/
Q_PROPERTY(QStringList knownApplications READ knownApplications NOTIFY knownApplicationsChanged)
/**
* A list of desktop entries of applications for which no popups should be shown.
*/
Q_PROPERTY(QStringList popupBlacklistedApplications READ popupBlacklistedApplications NOTIFY settingsChanged)
/**
* A list of notifyrc names of services for which no popups should be shown.
*/
Q_PROPERTY(QStringList popupBlacklistedServices READ popupBlacklistedServices NOTIFY settingsChanged)
/**
* A list of desktop entries of applications for which a popup should be shown even in do not disturb mode.
*/
Q_PROPERTY(QStringList doNotDisturbPopupWhitelistedApplications READ doNotDisturbPopupWhitelistedApplications NOTIFY settingsChanged)
/**
* A list of notifyrc names of services for which a popup should be shown even in do not disturb mode.
*/
Q_PROPERTY(QStringList doNotDisturbPopupWhitelistedServices READ doNotDisturbPopupWhitelistedServices NOTIFY settingsChanged)
/**
* A list of desktop entries of applications which shouldn't be shown in the history.
*/
Q_PROPERTY(QStringList historyBlacklistedApplications READ historyBlacklistedApplications NOTIFY settingsChanged)
/**
* A list of notifyrc names of services which shouldn't be shown in the history.
*/
Q_PROPERTY(QStringList historyBlacklistedServices READ historyBlacklistedServices NOTIFY settingsChanged)
/**
* A list of desktop entries of applications which shouldn't show badges in task manager.
*/
Q_PROPERTY(QStringList badgeBlacklistedApplications READ badgeBlacklistedApplications NOTIFY settingsChanged)
/**
* The date until which do not disturb mode is enabled.
*
* When invalid or in the past, do not disturb mode should be considered disabled.
* Do not disturb mode is considered active when this property points to a date
* in the future OR notificationsInhibitedByApplication is true.
*/
Q_PROPERTY(QDateTime notificationsInhibitedUntil READ notificationsInhibitedUntil WRITE setNotificationsInhibitedUntil RESET
resetNotificationsInhibitedUntil NOTIFY settingsChanged)
/**
* Whether an application currently requested do not disturb mode.
*
* Do not disturb mode is considered active when this property is true OR
* notificationsInhibitedUntil points to a date in the future.
*
* @sa revokeApplicationInhibitions
*/
Q_PROPERTY(bool notificationsInhibitedByApplication READ notificationsInhibitedByApplication NOTIFY notificationsInhibitedByApplicationChanged)
Q_PROPERTY(QStringList notificationInhibitionApplications READ notificationInhibitionApplications NOTIFY notificationInhibitionApplicationsChanged)
Q_PROPERTY(QStringList notificationInhibitionReasons READ notificationInhibitionReasons NOTIFY notificationInhibitionApplicationsChanged)
/**
* Whether to enable do not disturb mode when screens are mirrored/overlapping
*
* @since 5.17
*/
Q_PROPERTY(bool inhibitNotificationsWhenScreensMirrored READ inhibitNotificationsWhenScreensMirrored WRITE setInhibitNotificationsWhenScreensMirrored NOTIFY
settingsChanged)
/**
* Whether there currently are mirrored/overlapping screens
*
* This property is only updated when @c inhibitNotificationsWhenScreensMirrored
* is set to true, otherwise it is always false.
* You can assign false to this property if you want to temporarily revoke automatic do not disturb
* mode when screens are mirrored until the screen configuration changes.
*
* @since 5.17
*/
Q_PROPERTY(bool screensMirrored READ screensMirrored WRITE setScreensMirrored NOTIFY screensMirroredChanged)
/**
* Whether to enable do not disturb mode while screen sharing
*
* @since 5.22
*/
Q_PROPERTY(bool inhibitNotificationsWhenScreenSharing READ inhibitNotificationsWhenScreenSharing WRITE setInhibitNotificationsWhenScreenSharing NOTIFY
settingsChanged)
/**
* Whether notification sounds should be disabled
*
* This does not reflect the actual mute state of the Notification Sounds
* stream but only remembers what value was assigned to this property.
*
* This way you can tell whether to unmute notification sounds or not, in case
* the user had them explicitly muted previously.
*
* @note This does not actually mute or unmute the actual sound stream,
* you need to do this yourself using e.g. PulseAudio.
*/
Q_PROPERTY(bool notificationSoundsInhibited READ notificationSoundsInhibited WRITE setNotificationSoundsInhibited NOTIFY settingsChanged)
/**
* Whether to update the properties immediately when they are changed on disk
*
* This can be undesirable for a settings dialog where outside changes
* should not suddenly cause the UI to change.
*
* Default is true.
*/
Q_PROPERTY(bool live READ live WRITE setLive NOTIFY liveChanged)
/**
* Whether the settings have changed and need to be saved
*
* @sa save()
*/
Q_PROPERTY(bool dirty READ dirty NOTIFY dirtyChanged)
public:
explicit Settings(QObject *parent = nullptr);
/**
* @deprecated
*/
Settings(const KSharedConfig::Ptr &config, QObject *parent = nullptr);
~Settings() override;
enum PopupPosition {
CloseToWidget = 0,
TopLeft,
TopCenter,
TopRight,
BottomLeft,
BottomCenter,
BottomRight,
};
Q_ENUM(PopupPosition)
enum NotificationBehavior {
ShowPopups = 1 << 1,
ShowPopupsInDoNotDisturbMode = 1 << 2,
ShowInHistory = 1 << 3,
ShowBadges = 1 << 4,
};
Q_ENUM(NotificationBehavior)
Q_DECLARE_FLAGS(NotificationBehaviors, NotificationBehavior)
Q_FLAG(NotificationBehaviors)
Q_INVOKABLE NotificationBehaviors applicationBehavior(const QString &desktopEntry) const;
Q_INVOKABLE void setApplicationBehavior(const QString &desktopEntry, NotificationBehaviors behaviors);
Q_INVOKABLE NotificationBehaviors serviceBehavior(const QString &desktopEntry) const;
Q_INVOKABLE void setServiceBehavior(const QString &desktopEntry, NotificationBehaviors behaviors);
Q_INVOKABLE void registerKnownApplication(const QString &desktopEntry);
Q_INVOKABLE void forgetKnownApplication(const QString &desktopEntry);
Q_INVOKABLE void load();
Q_INVOKABLE void save();
Q_INVOKABLE void defaults();
bool live() const;
void setLive(bool live);
bool dirty() const;
bool criticalPopupsInDoNotDisturbMode() const;
void setCriticalPopupsInDoNotDisturbMode(bool enable);
bool keepNormalAlwaysOnTop() const;
void setKeepNormalAlwaysOnTop(bool enable);
bool lowPriorityPopups() const;
void setLowPriorityPopups(bool enable);
bool lowPriorityHistory() const;
void setLowPriorityHistory(bool enable);
PopupPosition popupPosition() const;
void setPopupPosition(PopupPosition popupPosition);
int popupTimeout() const;
void setPopupTimeout(int popupTimeout);
void resetPopupTimeout();
bool jobsInTaskManager() const;
void setJobsInTaskManager(bool enable);
bool jobsInNotifications() const;
void setJobsInNotifications(bool enable);
bool permanentJobPopups() const;
void setPermanentJobPopups(bool enable);
bool badgesInTaskManager() const;
void setBadgesInTaskManager(bool enable);
QStringList knownApplications() const;
QStringList popupBlacklistedApplications() const;
QStringList popupBlacklistedServices() const;
QStringList doNotDisturbPopupWhitelistedApplications() const;
QStringList doNotDisturbPopupWhitelistedServices() const;
QStringList historyBlacklistedApplications() const;
QStringList historyBlacklistedServices() const;
QStringList badgeBlacklistedApplications() const;
QDateTime notificationsInhibitedUntil() const;
void setNotificationsInhibitedUntil(const QDateTime &time);
void resetNotificationsInhibitedUntil();
bool notificationsInhibitedByApplication() const;
QStringList notificationInhibitionApplications() const;
QStringList notificationInhibitionReasons() const;
bool inhibitNotificationsWhenScreensMirrored() const;
void setInhibitNotificationsWhenScreensMirrored(bool mirrored);
bool screensMirrored() const;
void setScreensMirrored(bool enable);
bool inhibitNotificationsWhenScreenSharing() const;
void setInhibitNotificationsWhenScreenSharing(bool inhibit);
bool notificationSoundsInhibited() const;
void setNotificationSoundsInhibited(bool inhibited);
/**
* Revoke application notification inhibitions.
*
* @note Applications are not notified of the fact that their
* inhibition might have been taken away.
*/
Q_INVOKABLE void revokeApplicationInhibitions();
Q_SIGNALS:
void settingsChanged();
void liveChanged();
void dirtyChanged();
void knownApplicationsChanged();
void notificationsInhibitedByApplicationChanged(bool notificationsInhibitedByApplication);
void notificationInhibitionApplicationsChanged();
void screensMirroredChanged();
private:
class Private;
QScopedPointer<Private> d;
};
} // namespace NotificationManager
Q_DECLARE_OPERATORS_FOR_FLAGS(NotificationManager::Settings::NotificationBehaviors)