Added dialog to ask users to enable Notifications

This commit is contained in:
Elias Müller 2023-09-08 21:58:54 +02:00
parent 6816e77d21
commit fe685c40fc
4 changed files with 57 additions and 16 deletions

View File

@ -53,6 +53,7 @@ class _AppState extends State<App> {
}
FirebaseMessaging.onMessage.listen((message) => NotificationController.onForegroundMessageHandler(message, context));
FirebaseMessaging.onMessageOpenedApp.listen((message) => NotificationController.onForegroundMessageHandler(message, context));
FirebaseMessaging.onBackgroundMessage(NotificationController.onBackgroundMessageHandler);
super.initState();

View File

@ -1,3 +1,4 @@
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'dart:developer';
@ -5,13 +6,33 @@ import 'dart:developer';
import 'package:crypto/crypto.dart';
import 'package:fast_rsa/fast_rsa.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:marianum_mobile/storage/base/settingsProvider.dart';
import '../api/mhsl/notify/register/notifyRegister.dart';
import '../api/mhsl/notify/register/notifyRegisterParams.dart';
import '../model/accountData.dart';
import '../model/endpointData.dart';
import '../widget/confirmDialog.dart';
class NotifyUpdater {
static ConfirmDialog enableAfterDisclaimer(SettingsProvider settings) {
return ConfirmDialog(
title: "Warnung",
icon: Icons.warning_amber,
content: ""
"Die Push-Benachrichtigungen werden durch mhsl.eu versendet.\n\n"
"Durch das aktivieren dieser Funktion wird dein Nutzername, dein Password und eine Geräte-ID von mhsl dauerhaft gespeichert und verarbeitet.\n\n"
"Für mehr Informationen drücke lange auf die Einstellungsoption!",
confirmButton: "Aktivieren",
onConfirm: () {
FirebaseMessaging.instance.requestPermission(
provisional: false
);
settings.val(write: true).notificationSettings.enabled = true;
NotifyUpdater.registerToServer();
},
);
}
static void registerToServer() async {
String? fcmToken = await FirebaseMessaging.instance.getToken();

View File

@ -7,6 +7,7 @@ import 'package:provider/provider.dart';
import '../../../api/marianumcloud/talk/createRoom/createRoom.dart';
import '../../../api/marianumcloud/talk/createRoom/createRoomParams.dart';
import '../../../model/chatList/chatListProps.dart';
import '../../../notification/notifyUpdater.dart';
import '../../../storage/base/settingsProvider.dart';
import '../../../widget/confirmDialog.dart';
import '../../../widget/loadingSpinner.dart';
@ -27,13 +28,43 @@ class _ChatListState extends State<ChatList> {
void initState() {
super.initState();
FirebaseMessaging.instance.requestPermission(
provisional: false
);
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
_query();
SettingsProvider settings = Provider.of<SettingsProvider>(context, listen: false);
if(!settings.val().notificationSettings.enabled && !settings.val().notificationSettings.askUsageDismissed) {
settings.val(write: true).notificationSettings.askUsageDismissed = true;
ConfirmDialog(
icon: Icons.notifications_active_outlined,
title: "Benachrichtigungen aktivieren",
content: "Auf wunsch kannst du Push-Benachrichtigungen aktivieren. Deine Einstellungen kannst du jederzeit ändern.",
confirmButton: "Weiter",
onConfirm: () {
FirebaseMessaging.instance.requestPermission(
provisional: false
).then((value) {
switch (value.authorizationStatus) {
case AuthorizationStatus.authorized:
NotifyUpdater.enableAfterDisclaimer(settings).asDialog(context);
break;
case AuthorizationStatus.denied:
showDialog(context: context, builder: (context) => const AlertDialog(
content: Text("Du kannst die Benachrichtigungen später jederzeit in den App-Einstellungen aktivieren."),
));
break;
default:
break;
}
});
},
).asDialog(context);
}
});
}
void _query({bool renew = false}) {

View File

@ -157,19 +157,7 @@ class _SettingsState extends State<Settings> {
value: settings.val().notificationSettings.enabled,
onChanged: (e) {
if(e!) {
ConfirmDialog(
title: "Warnung",
icon: Icons.warning_amber,
content: ""
"Die Push-Benachrichtigungen werden durch mhsl.eu versendet.\n\n"
"Durch das aktivieren dieser Funktion wird dein Nutzername, dein Password und eine Geräte-ID von mhsl dauerhaft gespeichert und verarbeitet.\n\n"
"Für mehr Informationen drücke lange auf die Einstellungsoption!",
confirmButton: "Aktivieren",
onConfirm: () {
settings.val(write: true).notificationSettings.enabled = e;
NotifyUpdater.registerToServer();
},
).asDialog(context);
NotifyUpdater.enableAfterDisclaimer(settings).asDialog(context);
} else {
settings.val(write: true).notificationSettings.enabled = e;
}