Merge branch 'soru/verification-dialog' into 'main'

fix: Show bootstrap dialog in the appropriate places

See merge request famedly/fluffychat!549
This commit is contained in:
Krille Fear 2021-11-19 10:32:36 +00:00
commit 8a021cdc90
3 changed files with 33 additions and 42 deletions

View File

@ -2,12 +2,10 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart';
import 'package:matrix/encryption/utils/key_verification.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
import 'package:matrix_link_text/link_text.dart'; import 'package:matrix_link_text/link_text.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:fluffychat/pages/key_verification/key_verification_dialog.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions.dart/event_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions.dart/event_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions.dart/matrix_locals.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions.dart/matrix_locals.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
@ -15,6 +13,7 @@ import '../../../config/app_config.dart';
import '../../../pages/video_viewer/video_viewer.dart'; import '../../../pages/video_viewer/video_viewer.dart';
import '../../../utils/platform_infos.dart'; import '../../../utils/platform_infos.dart';
import '../../../utils/url_launcher.dart'; import '../../../utils/url_launcher.dart';
import '../../bootstrap/bootstrap_dialog.dart';
import 'audio_player.dart'; import 'audio_player.dart';
import 'html_message.dart'; import 'html_message.dart';
import 'image_bubble.dart'; import 'image_bubble.dart';
@ -44,22 +43,12 @@ class MessageContent extends StatelessWidget {
} }
final client = Matrix.of(context).client; final client = Matrix.of(context).client;
if (client.isUnknownSession && client.encryption.crossSigning.enabled) { if (client.isUnknownSession && client.encryption.crossSigning.enabled) {
final req = await BootstrapDialog(
await client.userDeviceKeys[client.userID].startVerification(); client: Matrix.of(context).client,
req.onUpdate = () async { ).show(context);
if (req.state == KeyVerificationState.done) { final timeline = await event.room.getTimeline();
for (var i = 0; i < 12; i++) { timeline.requestKeys();
if (await client.encryption.keyManager.isCached()) { timeline.cancelSubscriptions();
break;
}
await Future.delayed(const Duration(seconds: 1));
}
final timeline = await event.room.getTimeline();
timeline.requestKeys();
timeline.cancelSubscriptions();
}
};
await KeyVerificationDialog(request: req).show(context);
} else { } else {
final success = await showFutureLoadingDialog( final success = await showFutureLoadingDialog(
context: context, context: context,

View File

@ -92,25 +92,7 @@ class SettingsSecurityController extends State<SettingsSecurity> {
} }
} }
void bootstrapSettingsAction() async { void showBootstrapDialog(BuildContext context) async {
if (await Matrix.of(context).client.encryption.keyManager.isCached()) {
if (OkCancelResult.ok ==
await showOkCancelAlertDialog(
useRootNavigator: false,
context: context,
title: L10n.of(context).keysCached,
message: L10n.of(context).wipeChatBackup,
isDestructiveAction: true,
okLabel: L10n.of(context).ok,
cancelLabel: L10n.of(context).cancel,
)) {
await BootstrapDialog(
client: Matrix.of(context).client,
wipe: true,
).show(context);
}
return;
}
await BootstrapDialog( await BootstrapDialog(
client: Matrix.of(context).client, client: Matrix.of(context).client,
).show(context); ).show(context);

View File

@ -67,6 +67,10 @@ class SettingsSecurityView extends StatelessWidget {
Matrix.of(context).client.encryption.crossSigning.enabled Matrix.of(context).client.encryption.crossSigning.enabled
? const Icon(Icons.check, color: Colors.green) ? const Icon(Icons.check, color: Colors.green)
: const Icon(Icons.error, color: Colors.red), : const Icon(Icons.error, color: Colors.red),
onTap:
Matrix.of(context).client.encryption.crossSigning.enabled
? null
: () => controller.showBootstrapDialog(context),
), ),
ListTile( ListTile(
title: Text(L10n.of(context).onlineKeyBackupEnabled), title: Text(L10n.of(context).onlineKeyBackupEnabled),
@ -74,24 +78,40 @@ class SettingsSecurityView extends StatelessWidget {
Matrix.of(context).client.encryption.keyManager.enabled Matrix.of(context).client.encryption.keyManager.enabled
? const Icon(Icons.check, color: Colors.green) ? const Icon(Icons.check, color: Colors.green)
: const Icon(Icons.error, color: Colors.red), : const Icon(Icons.error, color: Colors.red),
onTap: Matrix.of(context).client.encryption.keyManager.enabled
? null
: () => controller.showBootstrapDialog(context),
), ),
ListTile( ListTile(
title: const Text('Session verified'), title: const Text('Session verified'),
trailing: !Matrix.of(context).client.isUnknownSession trailing: !Matrix.of(context).client.isUnknownSession
? const Icon(Icons.check, color: Colors.green) ? const Icon(Icons.check, color: Colors.green)
: const Icon(Icons.error, color: Colors.red), : const Icon(Icons.error, color: Colors.red),
onTap: !Matrix.of(context).client.isUnknownSession
? null
: () => controller.showBootstrapDialog(context),
), ),
FutureBuilder( FutureBuilder(
future: Matrix.of(context) future: () async {
.client return (await Matrix.of(context)
.encryption .client
.keyManager .encryption
.isCached(), .keyManager
.isCached()) &&
(await Matrix.of(context)
.client
.encryption
.crossSigning
.isCached());
}(),
builder: (context, snapshot) => ListTile( builder: (context, snapshot) => ListTile(
title: Text(L10n.of(context).keysCached), title: Text(L10n.of(context).keysCached),
trailing: snapshot.data == true trailing: snapshot.data == true
? const Icon(Icons.check, color: Colors.green) ? const Icon(Icons.check, color: Colors.green)
: const Icon(Icons.error, color: Colors.red), : const Icon(Icons.error, color: Colors.red),
onTap: snapshot.data == true
? null
: () => controller.showBootstrapDialog(context),
), ),
), ),
}, },