From d9ec9f66b4c0ef6d1ba0e1c1c15109d5c75ff5d3 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Tue, 24 Nov 2020 15:49:27 +0100 Subject: [PATCH] feat: Annoy user with dialog to add a recovery method --- lib/components/matrix.dart | 37 ++++++++++++++++++++++++++++++++++++ lib/config/setting_keys.dart | 1 + lib/views/login.dart | 20 ++++++------------- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/lib/components/matrix.dart b/lib/components/matrix.dart index 113678cf..8801dc87 100644 --- a/lib/components/matrix.dart +++ b/lib/components/matrix.dart @@ -5,10 +5,13 @@ import 'dart:convert'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:famedlysdk/encryption.dart'; import 'package:famedlysdk/famedlysdk.dart'; +import 'package:fluffychat/utils/app_route.dart'; import 'package:fluffychat/utils/firebase_controller.dart'; import 'package:fluffychat/utils/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/sentry_controller.dart'; +import 'package:fluffychat/views/settings_3pid.dart'; +import 'package:flushbar/flushbar.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -87,6 +90,7 @@ class MatrixState extends State { var initLoginState = client.onLoginStateChanged.stream.first; try { client.init(); + final firstLoginState = await initLoginState; if (firstLoginState == LoginState.logged) { if (PlatformInfos.isMobile) { @@ -96,6 +100,39 @@ class MatrixState extends State { ); } } + final storeItem = null; //await store.getItem(SettingKeys.showNoPid); + final configOptionMissing = storeItem == null || storeItem.isEmpty; + if (configOptionMissing || (!configOptionMissing && storeItem == '1')) { + if (configOptionMissing) { + await store.setItem(SettingKeys.showNoPid, '0'); + } + await Matrix.of(context) + .client + .requestThirdPartyIdentifiers() + .then((l) { + if (l.isEmpty) { + Flushbar( + title: L10n.of(context).warning, + message: L10n.of(context).noPasswordRecoveryDescription, + mainButton: RaisedButton( + elevation: 7, + color: Theme.of(context).scaffoldBackgroundColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(6), + ), + child: Text(L10n.of(context).passwordRecovery), + onPressed: () => Navigator.of(context).push( + AppRoute.defaultRoute( + context, + Settings3PidView(), + ), + ), + ), + flushbarStyle: FlushbarStyle.FLOATING, + ).show(context); + } + }).catchError((_) => null); + } } catch (e, s) { client.onLoginStateChanged.sink.addError(e, s); SentryController.captureException(e, s); diff --git a/lib/config/setting_keys.dart b/lib/config/setting_keys.dart index 08c8ecb2..474dda94 100644 --- a/lib/config/setting_keys.dart +++ b/lib/config/setting_keys.dart @@ -9,5 +9,6 @@ abstract class SettingKeys { static const String amoledEnabled = 'amoled_enabled'; static const String codeLanguage = 'code_language'; static const String showNoGoogle = 'chat.fluffy.show_no_google'; + static const String showNoPid = 'chat.fluffy.show_no_pid'; static const String databasePassword = 'database-password'; } diff --git a/lib/views/login.dart b/lib/views/login.dart index e1d8345f..e6874fcf 100644 --- a/lib/views/login.dart +++ b/lib/views/login.dart @@ -7,8 +7,8 @@ import 'package:fluffychat/components/dialogs/simple_dialogs.dart'; import 'package:fluffychat/components/matrix.dart'; import 'package:fluffychat/utils/app_route.dart'; import 'package:fluffychat/utils/firebase_controller.dart'; +import 'package:fluffychat/utils/sentry_controller.dart'; import 'package:flushbar/flushbar_helper.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -57,19 +57,11 @@ class _LoginState extends State { setState(() => passwordError = exception.toString()); return setState(() => loading = false); } - if (!kIsWeb) { - try { - await FirebaseController.setupFirebase( - matrix, - matrix.widget.clientName, - ); - } catch (exception) { - await matrix.client.logout(); - matrix.clean(); - setState(() => passwordError = exception.toString()); - return setState(() => loading = false); - } - } + await FirebaseController.setupFirebase( + matrix, + matrix.widget.clientName, + ).catchError(SentryController.captureException); + setState(() => loading = false); await Navigator.of(context).pushAndRemoveUntil( AppRoute.defaultRoute(context, ChatListView()), (r) => false);