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

@ -434,6 +434,8 @@ class _ChatState extends State<_Chat> {
// always filter out edit and reaction relationships
!{RelationshipTypes.Edit, RelationshipTypes.Reaction}
.contains(e.relationshipType) &&
// always filter out m.key.* events
!e.type.startsWith('m.key.verification.') &&
// if a reaction has been redacted we also want it to appear in the timeline
e.type != EventTypes.Reaction &&
// if we enabled to hide all redacted events, don't show those

View file

@ -222,7 +222,7 @@ class _ChatEncryptionSettingsState extends State<ChatEncryptionSettings> {
},
child: ListTile(
title: Text(
'${deviceKeys[i].deviceDisplayName ?? L10n.of(context).unknownDevice} - ${deviceKeys[i].deviceId}',
'${deviceKeys[i].deviceDisplayName ?? L10n.of(context).unknownDevice}',
style: TextStyle(
color: deviceKeys[i].blocked
? Colors.red
@ -231,12 +231,7 @@ class _ChatEncryptionSettingsState extends State<ChatEncryptionSettings> {
: Colors.orange),
),
subtitle: Text(
deviceKeys[i].ed25519Key.beautified,
style: TextStyle(
color: Theme.of(context)
.textTheme
.bodyText2
.color),
'${L10n.of(context).deviceId}: ${deviceKeys[i].deviceId}',
),
),
),

View file

@ -208,8 +208,13 @@ class _KeyVerificationPageState extends State<KeyVerificationPage> {
body = Column(
children: <Widget>[
Container(
child: Text(compareText, style: TextStyle(fontSize: 20)),
margin: EdgeInsets.only(left: 8.0, right: 8.0),
alignment: Alignment.center,
child: Text(
compareText,
style: TextStyle(fontSize: 20),
textAlign: TextAlign.center,
),
padding: const EdgeInsets.all(16.0),
),
Container(height: 10),
Text.rich(
@ -221,14 +226,20 @@ class _KeyVerificationPageState extends State<KeyVerificationPage> {
);
buttons.add(RaisedButton(
color: Theme.of(context).primaryColor,
elevation: 5,
elevation: 7,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
textColor: Colors.white,
child: Text(L10n.of(context).theyMatch),
onPressed: () => widget.request.acceptSas(),
));
buttons.add(RaisedButton(
textColor: Theme.of(context).primaryColor,
elevation: 5,
elevation: 7,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
color: Colors.white,
child: Text(L10n.of(context).theyDontMatch),
onPressed: () => widget.request.rejectSas(),
@ -258,7 +269,10 @@ class _KeyVerificationPageState extends State<KeyVerificationPage> {
);
buttons.add(RaisedButton(
color: Theme.of(context).primaryColor,
elevation: 5,
elevation: 7,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
textColor: Colors.white,
child: Text(L10n.of(context).close),
onPressed: () => Navigator.of(context).pop(),
@ -276,7 +290,10 @@ class _KeyVerificationPageState extends State<KeyVerificationPage> {
);
buttons.add(RaisedButton(
color: Theme.of(context).primaryColor,
elevation: 5,
elevation: 7,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6),
),
textColor: Colors.white,
child: Text(L10n.of(context).close),
onPressed: () => Navigator.of(context).pop(),
@ -294,10 +311,11 @@ class _KeyVerificationPageState extends State<KeyVerificationPage> {
?.deviceKeys[widget.request.deviceId]
?.deviceDisplayName ??
'';
bottom = PreferredSize(
bottom = Container(
alignment: Alignment.center,
padding: EdgeInsets.all(16.0),
child: Text('$deviceName (${widget.request.deviceId})',
style: TextStyle(color: Theme.of(context).textTheme.caption.color)),
preferredSize: Size(0.0, 20.0),
);
}
return Scaffold(
@ -305,24 +323,29 @@ class _KeyVerificationPageState extends State<KeyVerificationPage> {
title: ListTile(
leading: Avatar(profile?.avatarUrl, otherName),
contentPadding: EdgeInsets.zero,
title: Text(L10n.of(context).verifyTitle),
isThreeLine: otherName != widget.request.userId,
subtitle: Column(
title: Text(L10n.of(context).verifyTitle, maxLines: 1),
subtitle: Row(
children: <Widget>[
Text(otherName),
Text(otherName, maxLines: 1),
if (otherName != widget.request.userId)
Text(widget.request.userId),
Text(' -> ' + widget.request.userId, maxLines: 1),
],
crossAxisAlignment: CrossAxisAlignment.start,
),
),
elevation: 0,
bottom: bottom,
),
extendBody: true,
extendBodyBehindAppBar: true,
body: Center(
child: body,
body: SafeArea(
child: Column(
children: [
Expanded(
child: Center(
child: body,
),
),
bottom,
],
),
),
persistentFooterButtons: buttons.isEmpty ? null : buttons,
);