diff --git a/data/resources/resources.gresource.xml b/data/resources/resources.gresource.xml
index 960ef4a2..6f16cf22 100644
--- a/data/resources/resources.gresource.xml
+++ b/data/resources/resources.gresource.xml
@@ -55,6 +55,7 @@
ui/account-settings-device-row.ui
ui/account-settings-devices-page.ui
ui/account-settings-import-export-keys-subpage.ui
+ ui/account-settings-notifications-page.ui
ui/account-settings-security-page.ui
ui/account-settings-user-page.ui
ui/account-settings.ui
diff --git a/data/resources/ui/account-settings-notifications-page.ui b/data/resources/ui/account-settings-notifications-page.ui
new file mode 100644
index 00000000..b650bfa8
--- /dev/null
+++ b/data/resources/ui/account-settings-notifications-page.ui
@@ -0,0 +1,47 @@
+
+
+
+ preferences-system-notifications-symbolic
+ Notifications
+ notifications
+
+
+
+
+
diff --git a/data/resources/ui/account-settings.ui b/data/resources/ui/account-settings.ui
index 3140cc89..961e2aaa 100644
--- a/data/resources/ui/account-settings.ui
+++ b/data/resources/ui/account-settings.ui
@@ -9,6 +9,11 @@
+
+
+
+
+
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 00583648..9bf6c50a 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -10,6 +10,7 @@ data/resources/ui/account-settings-deactivate-account-subpage.ui
data/resources/ui/account-settings-device-row.ui
data/resources/ui/account-settings-devices-page.ui
data/resources/ui/account-settings-import-export-keys-subpage.ui
+data/resources/ui/account-settings-notifications-page.ui
data/resources/ui/account-settings-user-page.ui
data/resources/ui/account-settings-security-page.ui
data/resources/ui/account-settings.ui
@@ -60,6 +61,7 @@ src/login/mod.rs
src/secret.rs
src/session/account_settings/devices_page/device_list.rs
src/session/account_settings/devices_page/device_row.rs
+src/session/account_settings/notifications_page.rs
src/session/account_settings/security_page/import_export_keys_subpage.rs
src/session/account_settings/user_page/change_password_subpage.rs
src/session/account_settings/user_page/deactivate_account_subpage.rs
diff --git a/src/session/account_settings/mod.rs b/src/session/account_settings/mod.rs
index c89aad72..bfb5bb59 100644
--- a/src/session/account_settings/mod.rs
+++ b/src/session/account_settings/mod.rs
@@ -6,12 +6,14 @@ use gtk::{
};
mod devices_page;
+mod notifications_page;
mod security_page;
mod user_page;
-use devices_page::DevicesPage;
-use security_page::SecurityPage;
-use user_page::UserPage;
+use self::{
+ devices_page::DevicesPage, notifications_page::NotificationsPage, security_page::SecurityPage,
+ user_page::UserPage,
+};
use super::Session;
mod imp {
@@ -37,6 +39,7 @@ mod imp {
fn class_init(klass: &mut Self::Class) {
DevicesPage::static_type();
UserPage::static_type();
+ NotificationsPage::static_type();
SecurityPage::static_type();
Self::bind_template(klass);
diff --git a/src/session/account_settings/notifications_page.rs b/src/session/account_settings/notifications_page.rs
new file mode 100644
index 00000000..0bc481bb
--- /dev/null
+++ b/src/session/account_settings/notifications_page.rs
@@ -0,0 +1,351 @@
+use adw::{prelude::*, subclass::prelude::*};
+use gettextrs::gettext;
+use gtk::{glib, glib::clone, CompositeTemplate};
+use log::{error, warn};
+use matrix_sdk::event_handler::EventHandlerDropGuard;
+use ruma::{
+ api::client::push::{set_pushrule_enabled, RuleKind},
+ events::push_rules::{PushRulesEvent, PushRulesEventContent},
+ push::Ruleset,
+};
+
+use crate::{session::UserExt, spawn, spawn_tokio, toast, Session};
+
+const MASTER_RULE_ID: &str = ".m.rule.master";
+
+mod imp {
+ use std::cell::{Cell, RefCell};
+
+ use glib::{subclass::InitializingObject, WeakRef};
+
+ use super::*;
+
+ #[derive(Debug, Default, CompositeTemplate)]
+ #[template(resource = "/org/gnome/Fractal/account-settings-notifications-page.ui")]
+ pub struct NotificationsPage {
+ /// The current session.
+ pub session: WeakRef,
+ /// Binding to the session settings `notifications-enabled` property.
+ pub settings_binding: RefCell