feat: Improved encryption UI

This commit is contained in:
Christian Pauly 2020-11-22 11:46:31 +01:00
commit f235f9de24
7 changed files with 128 additions and 77 deletions

View file

@ -1,21 +1,16 @@
import 'package:famedlysdk/famedlysdk.dart';
import 'package:famedlysdk/encryption.dart';
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
import 'package:fluffychat/components/message_content.dart';
import 'package:fluffychat/components/reply_content.dart';
import 'package:fluffychat/utils/date_time_extension.dart';
import 'package:fluffychat/utils/event_extension.dart';
import 'package:fluffychat/utils/string_color.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
import '../adaptive_page_layout.dart';
import '../avatar.dart';
import '../matrix.dart';
import '../message_reactions.dart';
import 'state_message.dart';
import '../../views/key_verification.dart';
import '../../utils/app_route.dart';
class Message extends StatelessWidget {
final Event event;
@ -40,36 +35,6 @@ class Message extends StatelessWidget {
/// of touchscreen.
static bool useMouse = false;
void _verifyOrRequestKey(BuildContext context) async {
final client = Matrix.of(context).client;
if (client.isUnknownSession && client.encryption.crossSigning.enabled) {
final req =
await client.userDeviceKeys[client.userID].startVerification();
req.onUpdate = () async {
if (req.state == KeyVerificationState.done) {
for (var i = 0; i < 12; i++) {
if (await client.encryption.keyManager.isCached()) {
break;
}
await Future.delayed(Duration(seconds: 1));
}
final timeline = await event.room.getTimeline();
timeline.requestKeys();
timeline.cancelSubscriptions();
}
};
await Navigator.of(context).push(
AppRoute.defaultRoute(
context,
KeyVerificationView(request: req),
),
);
} else {
await SimpleDialogs(context).tryRequestWithLoadingDialog(
event.getDisplayEvent(timeline).requestKey());
}
}
@override
Widget build(BuildContext context) {
if (![EventTypes.Message, EventTypes.Sticker, EventTypes.Encrypted]
@ -161,20 +126,6 @@ class Message extends StatelessWidget {
displayEvent,
textColor: textColor,
),
if (displayEvent.type == EventTypes.Encrypted &&
displayEvent.messageType == MessageTypes.BadEncrypted &&
displayEvent.content['can_request_session'] == true)
RaisedButton(
color: color.withAlpha(100),
child: Text(
client.isUnknownSession &&
client.encryption.crossSigning.enabled
? L10n.of(context).verify
: L10n.of(context).requestPermission,
style: TextStyle(color: textColor),
),
onPressed: () => _verifyOrRequestKey(context),
),
SizedBox(height: 4),
Opacity(
opacity: 0,