From 7634177191c3e9d0d433f159a85e26faa2d6b48d Mon Sep 17 00:00:00 2001 From: otsmr Date: Tue, 12 May 2026 21:57:22 +0200 Subject: [PATCH] add option to open system settings --- .../generated/app_localizations.dart | 12 ++++++++++ .../generated/app_localizations_de.dart | 7 ++++++ .../generated/app_localizations_en.dart | 7 ++++++ lib/src/localization/translations | 2 +- .../views/settings/notification.view.dart | 23 +++++++++++++++++++ 5 files changed, 50 insertions(+), 1 deletion(-) diff --git a/lib/src/localization/generated/app_localizations.dart b/lib/src/localization/generated/app_localizations.dart index bc7f7860..42d2cda2 100644 --- a/lib/src/localization/generated/app_localizations.dart +++ b/lib/src/localization/generated/app_localizations.dart @@ -596,6 +596,18 @@ abstract class AppLocalizations { /// **'Notification'** String get settingsNotification; + /// No description provided for @settingsNotifyPermission. + /// + /// In en, this message translates to: + /// **'Notification permissions'** + String get settingsNotifyPermission; + + /// No description provided for @settingsNotifyPermissionDesc. + /// + /// In en, this message translates to: + /// **'Open system settings to allow push notifications.'** + String get settingsNotifyPermissionDesc; + /// No description provided for @settingsNotifyTroubleshooting. /// /// In en, this message translates to: diff --git a/lib/src/localization/generated/app_localizations_de.dart b/lib/src/localization/generated/app_localizations_de.dart index e9f531d3..4b5b9caf 100644 --- a/lib/src/localization/generated/app_localizations_de.dart +++ b/lib/src/localization/generated/app_localizations_de.dart @@ -277,6 +277,13 @@ class AppLocalizationsDe extends AppLocalizations { @override String get settingsNotification => 'Benachrichtigung'; + @override + String get settingsNotifyPermission => 'Benachrichtigungsberechtigung'; + + @override + String get settingsNotifyPermissionDesc => + 'Systemeinstellungen öffnen, um Push-Benachrichtigungen zu erlauben.'; + @override String get settingsNotifyTroubleshooting => 'Fehlersuche'; diff --git a/lib/src/localization/generated/app_localizations_en.dart b/lib/src/localization/generated/app_localizations_en.dart index 2c27966d..65b8db55 100644 --- a/lib/src/localization/generated/app_localizations_en.dart +++ b/lib/src/localization/generated/app_localizations_en.dart @@ -273,6 +273,13 @@ class AppLocalizationsEn extends AppLocalizations { @override String get settingsNotification => 'Notification'; + @override + String get settingsNotifyPermission => 'Notification permissions'; + + @override + String get settingsNotifyPermissionDesc => + 'Open system settings to allow push notifications.'; + @override String get settingsNotifyTroubleshooting => 'Troubleshooting'; diff --git a/lib/src/localization/translations b/lib/src/localization/translations index 9eeb6b5c..65bf6a4d 160000 --- a/lib/src/localization/translations +++ b/lib/src/localization/translations @@ -1 +1 @@ -Subproject commit 9eeb6b5cb46410a1616c0dbd63ce74143dfdfbbc +Subproject commit 65bf6a4d161bfa0cd2db698446c58b4cd03db92c diff --git a/lib/src/visual/views/settings/notification.view.dart b/lib/src/visual/views/settings/notification.view.dart index c68eec4c..2a5343f9 100644 --- a/lib/src/visual/views/settings/notification.view.dart +++ b/lib/src/visual/views/settings/notification.view.dart @@ -4,6 +4,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:hashlib/random.dart'; +import 'package:permission_handler/permission_handler.dart'; import 'package:twonly/locator.dart'; import 'package:twonly/src/model/protobuf/client/generated/push_notification.pb.dart'; import 'package:twonly/src/services/notifications/fcm.notifications.dart'; @@ -22,6 +23,22 @@ class _NotificationViewState extends State { bool _isLoadingTroubleshooting = false; bool _isLoadingReset = false; bool _troubleshootingDidRun = false; + bool? _hasNotificationPermission; + + @override + void initState() { + super.initState(); + _checkPermission(); + } + + Future _checkPermission() async { + final isGranted = await Permission.notification.isGranted; + if (mounted) { + setState(() { + _hasNotificationPermission = isGranted; + }); + } + } Future _troubleshooting() async { setState(() { @@ -93,6 +110,12 @@ class _NotificationViewState extends State { ), body: ListView( children: [ + if (_hasNotificationPermission == false) + ListTile( + title: Text(context.lang.settingsNotifyPermission), + subtitle: Text(context.lang.settingsNotifyPermissionDesc), + onTap: openAppSettings, + ), ListTile( title: Text(context.lang.settingsNotifyTroubleshooting), subtitle: Text(context.lang.settingsNotifyTroubleshootingDesc),