import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../notification/notify_updater.dart'; import '../../../../state/app/modules/settings/bloc/settings_cubit.dart'; import '../../../../widget/centered_leading.dart'; class TalkSection extends StatelessWidget { const TalkSection({super.key}); @override Widget build(BuildContext context) { final settings = context.read(); final talkSettings = settings.val().talkSettings; final notificationSettings = settings.val().notificationSettings; return Column( children: [ ListTile( leading: const Icon(Icons.star_border), title: const Text('Favoriten im Talk nach oben sortieren'), trailing: Checkbox( value: talkSettings.sortFavoritesToTop, onChanged: (e) => settings.val(write: true).talkSettings.sortFavoritesToTop = e!, ), ), ListTile( leading: const Icon(Icons.mark_email_unread_outlined), title: const Text('Ungelesene Chats nach oben sortieren'), trailing: Checkbox( value: talkSettings.sortUnreadToTop, onChanged: (e) => settings.val(write: true).talkSettings.sortUnreadToTop = e!, ), ), ListTile( leading: const CenteredLeading(Icon(Icons.notifications_active_outlined)), title: const Text('Push-Benachrichtigungen aktivieren'), subtitle: const Text('Lange tippen für mehr Informationen'), trailing: Checkbox( value: notificationSettings.enabled, onChanged: (e) { if (e!) { NotifyUpdater.enableAfterDisclaimer(settings).asDialog(context); } else { settings.val(write: true).notificationSettings.enabled = e; } }, ), onLongPress: () => _showInfoDialog(context), ), ], ); } void _showInfoDialog(BuildContext context) => showDialog( context: context, builder: (context) => AlertDialog( title: const Text('Info über Push'), content: const SingleChildScrollView( child: Text( "Aufgrund technischer Limitationen müssen Push-Nachrichten über einen externen Server - hier 'mhsl.eu' (Author dieser App) - erfolgen.\n\n" 'Wenn Push aktiviert wird, werden deine Zugangsdaten und ein Token verschlüsselt an den Betreiber gesendet und von ihm unverschlüsselt gespeichert.\n\n' 'Der extene Server verwendet die Zugangsdaten um sich maschinell in Nextcloud Talk anzumelden und via Websockets auf neue Nachrichten zu warten.\n\n' 'Wenn eine neue Nachricht eintrifft wird dein Telefon via FBC-Messaging (Google Firebase Push) vom externen Server benachrichtigt.\n\n' 'Behalte im Hinterkopf, dass deine Zugangsdaten auf einem externen Server gespeichert werden und dies trotz bester Absichten ein Sicherheitsrisiko sein kann!', ), ), actions: [ TextButton(onPressed: () => Navigator.of(context).pop(), child: const Text('Zurück')), ], ), ); }