mirror of
				https://gitlab.com/famedly/fluffychat.git
				synced 2025-10-31 12:07:24 +01:00 
			
		
		
		
	fix: Bootstrap hint
This commit is contained in:
		
							parent
							
								
									55803d1d3f
								
							
						
					
					
						commit
						8651b37d81
					
				| @ -91,6 +91,7 @@ class _BootstrapDialogState extends State<BootstrapDialog> { | ||||
|           style: TextStyle( | ||||
|             fontSize: 18, | ||||
|             wordSpacing: 38, | ||||
|             fontFamily: 'monospace', | ||||
|           ), | ||||
|         ), | ||||
|       ); | ||||
| @ -129,8 +130,8 @@ class _BootstrapDialogState extends State<BootstrapDialog> { | ||||
|               _recoveryKeyInputError ?? L10n.of(context).pleaseEnterSecurityKey; | ||||
|           body = PlatformInfos.isCupertinoStyle | ||||
|               ? CupertinoTextField( | ||||
|                   minLines: 2, | ||||
|                   maxLines: 2, | ||||
|                   minLines: 1, | ||||
|                   maxLines: 1, | ||||
|                   autofocus: true, | ||||
|                   autocorrect: false, | ||||
|                   autofillHints: _recoveryKeyInputLoading | ||||
| @ -139,46 +140,22 @@ class _BootstrapDialogState extends State<BootstrapDialog> { | ||||
|                   controller: _recoveryKeyTextEditingController, | ||||
|                 ) | ||||
|               : TextField( | ||||
|                   minLines: 2, | ||||
|                   maxLines: 2, | ||||
|                   minLines: 1, | ||||
|                   maxLines: 1, | ||||
|                   autofocus: true, | ||||
|                   autocorrect: false, | ||||
|                   autofillHints: _recoveryKeyInputLoading | ||||
|                       ? null | ||||
|                       : [AutofillHints.password], | ||||
|                   controller: _recoveryKeyTextEditingController, | ||||
|                   decoration: InputDecoration( | ||||
|                     border: UnderlineInputBorder(), | ||||
|                     filled: false, | ||||
|                     hintText: L10n.of(context).securityKey, | ||||
|                   ), | ||||
|                 ); | ||||
|           buttons.add(AdaptiveFlatButton( | ||||
|             textColor: Colors.red, | ||||
|             label: 'Lost security key', | ||||
|             onPressed: () async { | ||||
|               if (OkCancelResult.ok == | ||||
|                   await showOkCancelAlertDialog( | ||||
|                     context: context, | ||||
|                     useRootNavigator: false, | ||||
|                     title: L10n.of(context).securityKeyLost, | ||||
|                     message: L10n.of(context).wipeChatBackup, | ||||
|                     okLabel: L10n.of(context).ok, | ||||
|                     cancelLabel: L10n.of(context).cancel, | ||||
|                     isDestructiveAction: true, | ||||
|                   )) { | ||||
|                 _createBootstrap(true); | ||||
|               } | ||||
|             }, | ||||
|           )); | ||||
|           buttons.add(AdaptiveFlatButton( | ||||
|             label: L10n.of(context).transferFromAnotherDevice, | ||||
|             onPressed: () async { | ||||
|               final req = await Matrix.of(context) | ||||
|                   .client | ||||
|                   .userDeviceKeys[Matrix.of(context).client.userID] | ||||
|                   .startVerification(); | ||||
|               await KeyVerificationDialog(request: req).show(context); | ||||
|               Navigator.of(context, rootNavigator: false).pop(); | ||||
|             }, | ||||
|           )); | ||||
|           buttons.add(AdaptiveFlatButton( | ||||
|               label: L10n.of(context).next, | ||||
|               label: L10n.of(context).unlockChatBackup, | ||||
|               onPressed: () async { | ||||
|                 setState(() { | ||||
|                   _recoveryKeyInputError = null; | ||||
| @ -197,6 +174,35 @@ class _BootstrapDialogState extends State<BootstrapDialog> { | ||||
|                   setState(() => _recoveryKeyInputLoading = false); | ||||
|                 } | ||||
|               })); | ||||
|           buttons.add(AdaptiveFlatButton( | ||||
|             label: L10n.of(context).transferFromAnotherDevice, | ||||
|             onPressed: () async { | ||||
|               final req = await Matrix.of(context) | ||||
|                   .client | ||||
|                   .userDeviceKeys[Matrix.of(context).client.userID] | ||||
|                   .startVerification(); | ||||
|               await KeyVerificationDialog(request: req).show(context); | ||||
|               Navigator.of(context, rootNavigator: false).pop(); | ||||
|             }, | ||||
|           )); | ||||
|           buttons.add(AdaptiveFlatButton( | ||||
|             textColor: Colors.red, | ||||
|             label: L10n.of(context).securityKeyLost, | ||||
|             onPressed: () async { | ||||
|               if (OkCancelResult.ok == | ||||
|                   await showOkCancelAlertDialog( | ||||
|                     context: context, | ||||
|                     useRootNavigator: false, | ||||
|                     title: L10n.of(context).securityKeyLost, | ||||
|                     message: L10n.of(context).wipeChatBackup, | ||||
|                     okLabel: L10n.of(context).ok, | ||||
|                     cancelLabel: L10n.of(context).cancel, | ||||
|                     isDestructiveAction: true, | ||||
|                   )) { | ||||
|                 _createBootstrap(true); | ||||
|               } | ||||
|             }, | ||||
|           )); | ||||
|           break; | ||||
|         case BootstrapState.askWipeCrossSigning: | ||||
|           WidgetsBinding.instance.addPostFrameCallback( | ||||
|  | ||||
| @ -98,33 +98,44 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver { | ||||
|   StreamSubscription<html.Event> onFocusSub; | ||||
|   StreamSubscription<html.Event> onBlurSub; | ||||
| 
 | ||||
|   String _cachedPassword; | ||||
|   String get cachedPassword { | ||||
|     final tmp = _cachedPassword; | ||||
|     _cachedPassword = null; | ||||
|     return tmp; | ||||
|   } | ||||
| 
 | ||||
|   set cachedPassword(String p) => _cachedPassword = p; | ||||
| 
 | ||||
|   void _onUiaRequest(UiaRequest uiaRequest) async { | ||||
|     if (uiaRequest.state != UiaRequestState.waitForUser || | ||||
|         uiaRequest.nextStages.isEmpty) return; | ||||
|     final stage = uiaRequest.nextStages.first; | ||||
|     switch (stage) { | ||||
|       case AuthenticationTypes.password: | ||||
|         final input = await showTextInputDialog( | ||||
|           context: context, | ||||
|           title: L10n.of(context).pleaseEnterYourPassword, | ||||
|           okLabel: L10n.of(context).ok, | ||||
|           cancelLabel: L10n.of(context).cancel, | ||||
|           useRootNavigator: false, | ||||
|           textFields: [ | ||||
|             DialogTextField( | ||||
|               minLines: 1, | ||||
|               maxLines: 1, | ||||
|               obscureText: true, | ||||
|               hintText: '******', | ||||
|             ) | ||||
|           ], | ||||
|         ); | ||||
|         final input = cachedPassword ?? | ||||
|             (await showTextInputDialog( | ||||
|               context: context, | ||||
|               title: L10n.of(context).pleaseEnterYourPassword, | ||||
|               okLabel: L10n.of(context).ok, | ||||
|               cancelLabel: L10n.of(context).cancel, | ||||
|               useRootNavigator: false, | ||||
|               textFields: [ | ||||
|                 DialogTextField( | ||||
|                   minLines: 1, | ||||
|                   maxLines: 1, | ||||
|                   obscureText: true, | ||||
|                   hintText: '******', | ||||
|                 ) | ||||
|               ], | ||||
|             )) | ||||
|                 ?.single; | ||||
|         if (input?.isEmpty ?? true) return; | ||||
|         return uiaRequest.completeStage( | ||||
|           AuthenticationPassword( | ||||
|             session: uiaRequest.session, | ||||
|             user: client.userID, | ||||
|             password: input.single, | ||||
|             password: input, | ||||
|             identifier: AuthenticationUserIdentifier(user: client.userID), | ||||
|           ), | ||||
|         ); | ||||
|  | ||||
| @ -498,7 +498,7 @@ | ||||
|     "type": "text", | ||||
|     "placeholders": {} | ||||
|   }, | ||||
|   "pleaseEnterSecurityKey": "Please enter your security key", | ||||
|   "pleaseEnterSecurityKey": "Please enter your security key:", | ||||
|   "@pleaseEnterSecurityKey": { | ||||
|     "type": "text", | ||||
|     "placeholders": {} | ||||
| @ -2006,6 +2006,11 @@ | ||||
|       "unreadChats": {} | ||||
|     } | ||||
|   }, | ||||
|   "unlockChatBackup": "Unlock chat backup", | ||||
|   "@unlockChatBackup": { | ||||
|     "type": "text", | ||||
|     "placeholders": {} | ||||
|   }, | ||||
|   "yourPublicKey": "Your public key", | ||||
|   "@yourPublicKey": { | ||||
|     "type": "text", | ||||
|  | ||||
| @ -174,12 +174,8 @@ class _ChatListState extends State<ChatList> { | ||||
| 
 | ||||
|   final GlobalKey<DefaultAppBarSearchFieldState> _searchFieldKey = GlobalKey(); | ||||
| 
 | ||||
|   Future<List<ThirdPartyIdentifier>> _thirdPartyIdentifierFuture; | ||||
| 
 | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     _thirdPartyIdentifierFuture ??= | ||||
|         Matrix.of(context).client.requestThirdPartyIdentifiers(); | ||||
|     return StreamBuilder<Object>( | ||||
|         stream: Matrix.of(context).onShareContentChanged.stream, | ||||
|         builder: (_, __) { | ||||
|  | ||||
| @ -140,12 +140,7 @@ class _ContactsState extends State<Contacts> { | ||||
|                           color: Colors.grey, | ||||
|                         ), | ||||
|                         Center( | ||||
|                           child: RaisedButton( | ||||
|                             elevation: 7, | ||||
|                             color: Theme.of(context).scaffoldBackgroundColor, | ||||
|                             shape: RoundedRectangleBorder( | ||||
|                               borderRadius: BorderRadius.circular(6), | ||||
|                             ), | ||||
|                           child: OutlinedButton( | ||||
|                             child: Text( | ||||
|                               L10n.of(context).inviteContact, | ||||
|                               style: TextStyle( | ||||
|  | ||||
| @ -378,6 +378,34 @@ class _SettingsState extends State<Settings> { | ||||
|                         .textTheme | ||||
|                         .headline6 | ||||
|                         .color)), | ||||
|             actions: [ | ||||
|               FutureBuilder( | ||||
|                   future: crossSigningCachedFuture, | ||||
|                   builder: (context, snapshot) { | ||||
|                     final needsBootstrap = Matrix.of(context) | ||||
|                                 .client | ||||
|                                 .encryption | ||||
|                                 .crossSigning | ||||
|                                 .enabled == | ||||
|                             false || | ||||
|                         snapshot.data == false; | ||||
|                     final isUnknownSession = | ||||
|                         Matrix.of(context).client.isUnknownSession; | ||||
|                     final displayHeader = needsBootstrap || isUnknownSession; | ||||
|                     if (!displayHeader) return Container(); | ||||
|                     return TextButton.icon( | ||||
|                       icon: Icon(Icons.cloud, color: Colors.red), | ||||
|                       label: Text( | ||||
|                         L10n.of(context).chatBackup, | ||||
|                         style: TextStyle(color: Colors.red), | ||||
|                       ), | ||||
|                       onPressed: () async { | ||||
|                         await BootstrapDialog().show(context); | ||||
|                         AdaptivePageLayout.of(context).popUntilIsFirst(); | ||||
|                       }, | ||||
|                     ); | ||||
|                   }), | ||||
|             ], | ||||
|             backgroundColor: Theme.of(context).appBarTheme.color, | ||||
|             flexibleSpace: FlexibleSpaceBar( | ||||
|               background: ContentBanner(profile?.avatarUrl, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Christian Pauly
						Christian Pauly