diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index ef28b9647..ad406e55b 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/setting_keys.dart'; @@ -57,7 +58,8 @@ class MessageContent extends StatelessWidget { return; } final client = Matrix.of(context).client; - if (client.isUnknownSession && client.encryption!.crossSigning.enabled) { + final state = await client.getCryptoIdentityState(); + if (!state.connected) { final success = await context.push('/backup'); if (success != true) return; } diff --git a/lib/pages/device_settings/device_settings.dart b/lib/pages/device_settings/device_settings.dart index dc655ab8f..df7c5f5d2 100644 --- a/lib/pages/device_settings/device_settings.dart +++ b/lib/pages/device_settings/device_settings.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart' show IterableExtension; -import 'package:matrix/encryption/utils/key_verification.dart'; +import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; import 'package:url_launcher/url_launcher_string.dart'; @@ -40,16 +40,10 @@ class DevicesSettingsController extends State { void _checkChatBackup() async { final client = Matrix.of(context).client; - if (client.encryption?.keyManager.enabled == true) { - if (await client.encryption?.keyManager.isCached() == false || - await client.encryption?.crossSigning.isCached() == false || - client.isUnknownSession && !mounted) { - setState(() { - chatBackupEnabled = false; - }); - return; - } - } + final state = await client.getCryptoIdentityState(); + setState(() { + chatBackupEnabled = state.initialized && !state.connected; + }); } void removeDevicesAction(List devices) async { diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index a54b4205f..3f6c7411b 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -6,6 +6,7 @@ import 'package:collection/collection.dart'; import 'package:file_picker/file_picker.dart'; import 'package:go_router/go_router.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -61,13 +62,12 @@ class SettingsController extends State { } void logoutAction() async { - final noBackup = showChatBackupBanner == true; if (await showOkCancelAlertDialog( useRootNavigator: false, context: context, title: L10n.of(context).areYouSureYouWantToLogout, message: L10n.of(context).noBackupWarning, - isDestructive: noBackup, + isDestructive: cryptoIdentityConnected == false, okLabel: L10n.of(context).logout, cancelLabel: L10n.of(context).cancel, ) == @@ -167,23 +167,17 @@ class SettingsController extends State { if (client.prevBatch == null) { await client.onSync.stream.first; } - final crossSigning = - await client.encryption?.crossSigning.isCached() ?? false; - final needsBootstrap = - await client.encryption?.keyManager.isCached() == false || - client.encryption?.crossSigning.enabled == false || - !crossSigning; - final isUnknownSession = client.isUnknownSession; + + final state = await client.getCryptoIdentityState(); setState(() { - showChatBackupBanner = needsBootstrap || isUnknownSession; + cryptoIdentityConnected = state.initialized && state.connected; }); } - bool? crossSigningCached; - bool? showChatBackupBanner; + bool? cryptoIdentityConnected; void firstRunBootstrapAction([_]) async { - if (showChatBackupBanner != true) { + if (cryptoIdentityConnected == true) { showOkAlertDialog( context: context, title: L10n.of(context).chatBackup, diff --git a/lib/pages/settings/settings_view.dart b/lib/pages/settings/settings_view.dart index 476c56d81..3b25f30b0 100644 --- a/lib/pages/settings/settings_view.dart +++ b/lib/pages/settings/settings_view.dart @@ -22,7 +22,6 @@ class SettingsView extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final showChatBackupBanner = controller.showChatBackupBanner; final activeRoute = GoRouter.of( context, ).routeInformationProvider.value.uri.path; @@ -142,20 +141,13 @@ class SettingsView extends StatelessWidget { }, ), Divider(color: theme.dividerColor), - if (showChatBackupBanner == null) - ListTile( - leading: const Icon(Icons.backup_outlined), - title: Text(L10n.of(context).chatBackup), - trailing: const CircularProgressIndicator.adaptive(), - ) - else - SwitchListTile.adaptive( - controlAffinity: ListTileControlAffinity.trailing, - value: controller.showChatBackupBanner == false, - secondary: const Icon(Icons.backup_outlined), - title: Text(L10n.of(context).chatBackup), - onChanged: controller.firstRunBootstrapAction, - ), + SwitchListTile.adaptive( + controlAffinity: ListTileControlAffinity.trailing, + value: controller.cryptoIdentityConnected == true, + secondary: const Icon(Icons.backup_outlined), + title: Text(L10n.of(context).chatBackup), + onChanged: controller.firstRunBootstrapAction, + ), Divider(color: theme.dividerColor), ListTile( leading: const Icon(Icons.format_paint_outlined),