mac_usernotifications/settings.rs
1//! Types for querying the current notification authorization state.
2
3use objc2_user_notifications::{UNAuthorizationStatus, UNNotificationSetting};
4
5/// The app's authorization to post notifications.
6///
7/// Returned by [`get_notification_settings`] and [`blocking::get_notification_settings`].
8///
9/// [`get_notification_settings`]: crate::get_notification_settings
10/// [`blocking::get_notification_settings`]: crate::blocking::get_notification_settings
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
12pub enum AuthorizationStatus {
13 /// The user has not made a choice yet.
14 NotDetermined,
15 /// The user denied permission.
16 Denied,
17 /// The user granted permission.
18 Authorized,
19 /// Provisional authorization (notifications delivered quietly).
20 Provisional,
21 /// Ephemeral authorization (granted by App Clips).
22 Ephemeral,
23 /// An unknown status code was returned by the OS.
24 Unknown,
25}
26
27impl From<UNAuthorizationStatus> for AuthorizationStatus {
28 fn from(status: UNAuthorizationStatus) -> Self {
29 match status {
30 UNAuthorizationStatus::NotDetermined => AuthorizationStatus::NotDetermined,
31 UNAuthorizationStatus::Denied => AuthorizationStatus::Denied,
32 UNAuthorizationStatus::Authorized => AuthorizationStatus::Authorized,
33 UNAuthorizationStatus::Provisional => AuthorizationStatus::Provisional,
34 UNAuthorizationStatus::Ephemeral => AuthorizationStatus::Ephemeral,
35 _ => AuthorizationStatus::Unknown,
36 }
37 }
38}
39
40/// Whether a specific notification feature is enabled.
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
42pub enum NotificationSettingStatus {
43 /// The feature is not supported on this device or OS version.
44 NotSupported,
45 /// The feature is disabled.
46 Disabled,
47 /// The feature is enabled.
48 Enabled,
49 /// An unknown status was returned.
50 Unknown,
51}
52
53impl From<UNNotificationSetting> for NotificationSettingStatus {
54 fn from(setting: UNNotificationSetting) -> Self {
55 match setting {
56 UNNotificationSetting::NotSupported => NotificationSettingStatus::NotSupported,
57 UNNotificationSetting::Disabled => NotificationSettingStatus::Disabled,
58 UNNotificationSetting::Enabled => NotificationSettingStatus::Enabled,
59 _ => NotificationSettingStatus::Unknown,
60 }
61 }
62}
63
64/// The current notification settings for the app.
65///
66/// Obtained via [`get_notification_settings`] or [`blocking::get_notification_settings`].
67///
68/// [`get_notification_settings`]: crate::get_notification_settings
69/// [`blocking::get_notification_settings`]: crate::blocking::get_notification_settings
70#[derive(Debug, Clone, Copy, PartialEq, Eq)]
71pub struct NotificationSettings {
72 /// Whether the app is authorized to post notifications.
73 pub authorization_status: AuthorizationStatus,
74 /// Whether alert notifications (banners) are enabled.
75 pub alert_enabled: NotificationSettingStatus,
76 /// Whether badge updates are enabled.
77 pub badge_enabled: NotificationSettingStatus,
78 /// Whether notification sounds are enabled.
79 pub sound_enabled: NotificationSettingStatus,
80 /// Whether notifications appear on the lock screen.
81 pub lock_screen_enabled: NotificationSettingStatus,
82 /// Whether notifications appear in Notification Center.
83 pub notification_center_enabled: NotificationSettingStatus,
84}