mirror of
https://gitlab.com/famedly/fluffychat.git
synced 2025-01-11 18:22:49 +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…
Reference in New Issue
Block a user