From 1d16706ab3c74fed364d448da1bd5142eb65bcf0 Mon Sep 17 00:00:00 2001 From: Krille Fear Date: Sun, 10 Oct 2021 12:11:39 +0200 Subject: [PATCH] feat: Nicer verification dialog --- assets/verification.png | Bin 0 -> 5123 bytes lib/pages/key_verification_dialog.dart | 115 +++++++++++++------------ lib/widgets/matrix.dart | 22 +---- 3 files changed, 61 insertions(+), 76 deletions(-) create mode 100644 assets/verification.png diff --git a/assets/verification.png b/assets/verification.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc99798841a9cf4c6237f4fea4fb951793689d4 GIT binary patch literal 5123 zcmV+e6#VOnP)$!E84FQ=7$-XlOKSTKmkJ-PM&0m6V*twYY~-uW!OVac`Xld7-1VHCkWa&{b7Y zaXdRC^XBBxut6GFu@BrkCo}72bw$N7{l>=5j@H&lZ3F_0uCA`1n~g>T20Sr7;hw93 znjRC&%9ku*#zsAR@%b0n2YdFgFZSfwsnBz^hwc4rFWcU|jV*h!oJC9uA0Z48 zlfnnfN=r{+$=JDb=f7zqClFSPHLa$)`it1es0Yp+ot=@vY}Ph*;EONV!2SCySirLn z9X!PBwhoq;oijohrbR_RczVT(!`r&HWoaYnBO2=KpD8Msd-1Vf|Hjdw>2p%pwyoXl z)TvWUuK4cT@7VJ@cCgH}bjSaVHk8aS?y=Xrt?4_pWbfu%^vPxkH^7HsJ}j z_St9I!2<`G(s1<15msNfo`p{g{ZWWhQhSYheT$||jDpEvFlMBt^*VOjVPUML*}^wv zO2?HeSNL+}ykE#nO}&jx zi}A768_gRMX3XrTx1hFqIXidm92;-A@WT&m)ykEQ*EdEc53iCf!9NC;T>q>&<4}MK-&CkibN_stxUKrwrQ+3VOD0 z-~L~+9(GJn1({|j8; z)Suqq#EBDZYWQS+4ZMi~9sK$Y8=m7vo{*4$>iN{^VgZ9EQ~(wh7YD6zAKj3eC~1ZVLwK4Bb+S9 zv@B|K2M0<3;3%TRRUUl=M!j(}C1g@UhiL-fJ1Kl8U*g({w9N|{viQC?p^$dlxF@y&Ak25@P)@O7XiT7QqF;g1OP#YL%aV2 zem_9T{&`>FE013e0stx>?w>q6@$Sgr&eqoG;bh0`zJT1jYG>_=-QGY80LGSHQoG$A z;ShkvjT^U88W&AXQ?CF3NTZKuG&VHY9$NpAsY(+7bqfG_2&*e9k2nMXl{WAt^6iV! zA!<52#r`Q#05HaQMs8O24M&u3cxWis|Al7pQlkKP@--+?0N~!I;ubt>d7Gsz1z*gF zou-*;$H5W+AhHY3;jCd(qhZU?25^Zc0OLde$`+Rn8-xr--P&i@yn_!YuoSEgarPaE zX=~R6z%?2-ZsgCYTf6oRN7RoP);oV1;K_F&)Yh&EfNKzAxTdP=fDXX}_<%BLf$k7j zzJt-W_FzXNsZjt>Mi0+HHdkF#m#Qpo) z0H}Jj34{>1+5~>`@yD6~hz!(9rVw%+Qoi7W7zv;JX#i9`chj?+!qU_v02phk<=_wi zF$y~P+W@F~*zIFafK4B!eL27RsuBQN0`A_u8yv zAn_7Fn?Ny&Hu};44DS2yzQ^+pxmyD8+xzdmCtE>K#U^lCbj*NQJU(w5fY|jF%WE9x zC&ni*lit8y`Q7jMfxjv59gdYXwfq`?>;SIxeB|DL`>nTlf<RRK$Pjc#m!Fe+Es&;QTU$FnXU4QR_T9JN zjd@R$p24}ernAHU9EHf6lb@5zek^0RguV5~n>=6wvkMLc#Ju_X8x8@*F*h%dzcFeO zfY0~t9d29xRfjX^4|18 z`rEwx{1KK$>?xf04A?7R389%_w5FtZcQEPw(h}JfNK{N z`R2UAnon;&4L*2r2!Zov03ZZ&5)=9NFi)#N07ei(42_0OV#EY^(}38>DCRHul)Qt} zV`9C&27^Z%KAQGN556}8uz%k^$HvfEJ5V|$jE9Q1SuBaPDU(_NsC2wPR!3ZeYjF>6 z0aeeL?+C%mN>3lot)K4G03Zeszx{sqZp8}#ig@!lP!yN|HJHM}g=PdBs{vwBwY>!u zQowE>z&cKY4`J|S0A7FXH8whBt`Y@+W>N<&9LUMc;(;MT>;HK2@3SEI@3HRV8mef9 zx41CBz_A4RG61K(`G$1o5ylixd<8iQ00oBRWoO@TssL7TOpMGRp8Wg4010I8?OwqH zfTE4~4fkXs@fCs-8rJo2h`4@ZV<)~`TK1%%o4fMwt3?3dD1hD4OkmGI2_R?*5R;XYv6 zr#FArjG2;TJ_~57*f}X=|8I0F0I!1Cb(W|N<#q$a; zad%-`yD9}>Jhi8-wUytqxTxrY*ENHhOr~{|In*0^v?c)ZY!9>;vc~#cIxamWwO0%e zp(X&qYY(Y@S?L+Ke6Aa4)azR~cRyk(cZF&Kpse=5dx?$ga5gZrKgB~I$xIz89V-|A zz9s`d6cAGYB+8A7` zqsbM)5&$Mc4x*>SQw}751ppR5N~kerePAH~YY0gN@SuvN%L1OdMeXV6{mrpdU0LbS z`Nwqk3Po#ka{=j?VpF6v0r0(jlv6n>BI1Fq#TKgz1UA&wbr40`71>g$0^o1XpsnyV4}0L^U;jdv|h@iBem;T$$G!9c7f4=i?<+mh}a5G?N-ay|J2C=9W5Ob zk`iX!8?HhjIhRmLdcP36zzAKxr-w6?IZb_Le80_R3)jgBR;x9EDv*PFfA-87ra>HF z%_kc_`k2@IlOwjawLK1F1SNCAPE~_2oc#KvBgY}8eVfe|rjs+;+uMIxkehdfRGL8A z3DgGY`K0O<78G3F*}3ykof3fHL#QV_Cw)i=Cnt(gk6^q2=G|9ceuW#_(1(kP7o6+r z>iW4(Nq}w&9sxXvXhh|*r}#!jgJ;0W_Eh;&-e>4L7 z^7!c$EB->+LSZ=!Hpfs7Kow64-Nuw(RZ($Va+hu}vB_*+P1QW{650${-5xa$j7pzw6blrG|*=VfG%g(;;Y#)ap z$SpsCKY)i6A==J<3s_49N9?E(Tbi0yk$V{j5*ut-S0_sH%0L6^E;4gaT}D3e=^3|G zquNOcLxW*)(cF1w$cV&Kx22@=P<3}{U*!O#Vnf^n?doY~Us7Crsk5VFqc*a>E)9Bp zLdDW$A5V*l9&mP{=450to3)Mm8SV?rZ7c+MHZqQ3xpFQ*!C6w#F#{`VYWLY%Ta&br z6v2jo@+Re_W#1st;b?z4DuTecgt#~<_YGLj@eKGjkbagpigch7XZez{zay#||Fbr7 z5;>Yo22(w%oh8psyz7c&5f>f9Nf!Es2CiQ2dH;RxSp#_$ { @override Widget build(BuildContext context) { + User user; + final directChatId = + widget.request.client.getDirectChatFromUserId(widget.request.userId); + if (directChatId != null) { + user = widget.request.client + .getRoomById(directChatId) + ?.getUserByMXIDSync(widget.request.userId); + } + final displayName = + user?.calcDisplayname() ?? widget.request.userId.localpart; + var title = Text(L10n.of(context).verifyTitle); Widget body; final buttons = []; switch (widget.request.state) { @@ -153,33 +164,68 @@ class _KeyVerificationPageState extends State { )); break; case KeyVerificationState.askAccept: - body = Container( - margin: EdgeInsets.only(left: 8.0, right: 8.0), - child: Text( - L10n.of(context).askVerificationRequest(widget.request.userId), - style: TextStyle(fontSize: 20)), + title = Text(L10n.of(context).newVerificationRequest); + body = Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row(children: [ + if (!PlatformInfos.isCupertinoStyle) + Avatar(user?.avatarUrl, displayName), + SizedBox(width: 12), + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: PlatformInfos.isCupertinoStyle + ? CrossAxisAlignment.center + : CrossAxisAlignment.start, + children: [ + Text( + displayName, + style: TextStyle(fontSize: 16), + ), + Text( + '${widget.request.userId} - ${widget.request.deviceId}', + style: TextStyle( + fontWeight: FontWeight.w300, + fontSize: 14, + ), + ), + ], + ), + ), + ]), + const SizedBox(height: 16), + Image.asset('assets/verification.png', fit: BoxFit.contain), + const SizedBox(height: 16), + Text( + L10n.of(context).askVerificationRequest(displayName), + ) + ], ); - buttons.add(AdaptiveFlatButton( - label: L10n.of(context).accept, - onPressed: () => widget.request.acceptVerification(), - )); buttons.add(AdaptiveFlatButton( label: L10n.of(context).reject, + textColor: Colors.red, onPressed: () { widget.request.rejectVerification().then((_) { Navigator.of(context, rootNavigator: false).pop(); }); }, )); + buttons.add(AdaptiveFlatButton( + label: L10n.of(context).accept, + onPressed: () => widget.request.acceptVerification(), + )); break; case KeyVerificationState.waitingAccept: body = Column( mainAxisSize: MainAxisSize.min, children: [ + Image.asset('assets/verification.png', fit: BoxFit.contain), + const SizedBox(height: 16), PlatformInfos.isCupertinoStyle ? CupertinoActivityIndicator() : CircularProgressIndicator(), - SizedBox(height: 10), + const SizedBox(height: 16), Text( L10n.of(context).waitingPartnerAcceptRequest, textAlign: TextAlign.center, @@ -308,58 +354,13 @@ class _KeyVerificationPageState extends State { break; } body ??= Text('ERROR: Unknown state ' + widget.request.state.toString()); - final otherName = profile?.displayName ?? widget.request.userId; - var bottom; - if (widget.request.deviceId != null) { - final deviceName = widget - .request - .client - .userDeviceKeys[widget.request.userId] - ?.deviceKeys[widget.request.deviceId] - ?.deviceDisplayName ?? - ''; - 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)), - ); - } - final userNameTitle = Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - otherName, - maxLines: 1, - style: TextStyle( - color: otherName.color, - fontWeight: FontWeight.bold, - ), - ), - if (otherName != widget.request.userId) - Text( - ' - ' + widget.request.userId, - maxLines: 1, - style: TextStyle( - fontStyle: FontStyle.italic, - ), - ), - ], - ); - final title = Text(L10n.of(context).verifyTitle); final content = SingleChildScrollView( scrollDirection: Axis.vertical, child: Column( mainAxisSize: MainAxisSize.min, children: [ - if (PlatformInfos.isCupertinoStyle) ...[ - SizedBox(height: 8), - Center(child: userNameTitle), - SizedBox(height: 12), - ], + SizedBox(height: 16), body, - if (bottom != null) bottom, ], ), ); diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index 0275c561..90a2bbf2 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -406,25 +406,9 @@ class MatrixState extends State with WidgetsBindingObserver { } hidPopup = true; }; - if (await showOkCancelAlertDialog( - useRootNavigator: false, - context: navigatorContext, - title: L10n.of(widget.context).newVerificationRequest, - message: - L10n.of(widget.context).askVerificationRequest(request.userId), - okLabel: L10n.of(widget.context).ok, - cancelLabel: L10n.of(widget.context).cancel, - ) == - OkCancelResult.ok) { - request.onUpdate = null; - hidPopup = true; - await request.acceptVerification(); - await KeyVerificationDialog(request: request).show(navigatorContext); - } else { - request.onUpdate = null; - hidPopup = true; - await request.rejectVerification(); - } + request.onUpdate = null; + hidPopup = true; + await KeyVerificationDialog(request: request).show(navigatorContext); }); onLoginStateChanged[name] ??= c.onLoginStateChanged.stream.listen((state) { final loggedInWithMultipleClients = widget.clients.length > 1;