diff --git a/lib/pages/chat/events/encrypted_content.dart b/lib/pages/chat/events/encrypted_content.dart index a9d50358ad..bf8ea2caac 100644 --- a/lib/pages/chat/events/encrypted_content.dart +++ b/lib/pages/chat/events/encrypted_content.dart @@ -1,16 +1,10 @@ -import 'package:fluffychat/pages/bootstrap/bootstrap_dialog.dart'; import 'package:fluffychat/pages/chat/events/encrypted_content_style.dart'; -import 'package:fluffychat/pages/chat/events/message_content_style.dart'; -import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; -import 'package:fluffychat/utils/date_time_extension.dart'; -import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; -import 'package:fluffychat/widgets/avatar/avatar.dart'; -import 'package:fluffychat/widgets/matrix.dart'; +import 'package:fluffychat/pages/chat/events/encrypted_mixin.dart'; import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -class EncryptedContent extends StatelessWidget { +class EncryptedContent extends StatelessWidget with EncryptedMixin { final Event event; const EncryptedContent({Key? key, required this.event}) : super(key: key); @@ -20,7 +14,7 @@ class EncryptedContent extends StatelessWidget { return Padding( padding: EncryptedContentStyle.parentPadding, child: InkWell( - onTap: () => _verifyOrRequestKey(context), + onTap: () => verifyOrRequestKey(context, event), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -54,67 +48,4 @@ class EncryptedContent extends StatelessWidget { ), ); } - - void _verifyOrRequestKey(BuildContext context) async { - final l10n = L10n.of(context)!; - if (event.content['can_request_session'] != true) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - event.type == EventTypes.Encrypted - ? l10n.needPantalaimonWarning - : event.calcLocalizedBodyFallback( - MatrixLocals(l10n), - ), - ), - ), - ); - return; - } - final client = Matrix.of(context).client; - if (client.isUnknownSession && client.encryption!.crossSigning.enabled) { - final success = await BootstrapDialog( - client: Matrix.of(context).client, - ).show(context); - if (success != true) return; - } - event.requestKey(); - final sender = event.senderFromMemoryOrFallback; - await showAdaptiveBottomSheet( - context: context, - builder: (context) => Scaffold( - appBar: AppBar( - leading: CloseButton(onPressed: Navigator.of(context).pop), - title: Text( - l10n.whyIsThisMessageEncrypted, - style: - const TextStyle(fontSize: MessageContentStyle.appBarFontSize), - ), - ), - body: SafeArea( - child: ListView( - padding: const EdgeInsets.all(16), - children: [ - ListTile( - contentPadding: EdgeInsets.zero, - leading: Avatar( - mxContent: sender.avatarUrl, - name: sender.calcDisplayname(), - ), - title: Text(sender.calcDisplayname()), - subtitle: Text(event.originServerTs.localizedTime(context)), - trailing: const Icon(Icons.lock_outlined), - ), - const Divider(), - Text( - event.calcLocalizedBodyFallback( - MatrixLocals(l10n), - ), - ) - ], - ), - ), - ), - ); - } } diff --git a/lib/pages/chat/events/encrypted_mixin.dart b/lib/pages/chat/events/encrypted_mixin.dart new file mode 100644 index 0000000000..23eb1cada9 --- /dev/null +++ b/lib/pages/chat/events/encrypted_mixin.dart @@ -0,0 +1,75 @@ +import 'package:fluffychat/pages/bootstrap/bootstrap_dialog.dart'; +import 'package:fluffychat/pages/chat/events/message_content_style.dart'; +import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; +import 'package:fluffychat/utils/date_time_extension.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; +import 'package:fluffychat/widgets/avatar/avatar.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; + +mixin EncryptedMixin { + void verifyOrRequestKey(BuildContext context, Event event) async { + final l10n = L10n.of(context)!; + if (event.content['can_request_session'] != true) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + event.type == EventTypes.Encrypted + ? l10n.needPantalaimonWarning + : event.calcLocalizedBodyFallback( + MatrixLocals(l10n), + ), + ), + ), + ); + return; + } + final client = Matrix.of(context).client; + if (client.isUnknownSession && client.encryption!.crossSigning.enabled) { + final success = await BootstrapDialog( + client: Matrix.of(context).client, + ).show(context); + if (success != true) return; + } + event.requestKey(); + final sender = event.senderFromMemoryOrFallback; + await showAdaptiveBottomSheet( + context: context, + builder: (context) => Scaffold( + appBar: AppBar( + leading: CloseButton(onPressed: Navigator.of(context).pop), + title: Text( + l10n.whyIsThisMessageEncrypted, + style: + const TextStyle(fontSize: MessageContentStyle.appBarFontSize), + ), + ), + body: SafeArea( + child: ListView( + padding: const EdgeInsets.all(16), + children: [ + ListTile( + contentPadding: EdgeInsets.zero, + leading: Avatar( + mxContent: sender.avatarUrl, + name: sender.calcDisplayname(), + ), + title: Text(sender.calcDisplayname()), + subtitle: Text(event.originServerTs.localizedTime(context)), + trailing: const Icon(Icons.lock_outlined), + ), + const Divider(), + Text( + event.calcLocalizedBodyFallback( + MatrixLocals(l10n), + ), + ) + ], + ), + ), + ), + ); + } +}