diff --git a/lib/ui/settings/account_section_widget.dart b/lib/ui/settings/account_section_widget.dart index ed7c3ddc9..fe4350898 100644 --- a/lib/ui/settings/account_section_widget.dart +++ b/lib/ui/settings/account_section_widget.dart @@ -1,14 +1,14 @@ import 'package:ente_auth/app/view/app.dart'; -import 'package:ente_auth/core/configuration.dart'; import 'package:ente_auth/l10n/l10n.dart'; import 'package:ente_auth/locale.dart'; import 'package:ente_auth/services/local_authentication_service.dart'; +import 'package:ente_auth/services/user_service.dart'; import 'package:ente_auth/theme/ente_theme.dart'; import 'package:ente_auth/ui/account/change_email_dialog.dart'; +import 'package:ente_auth/ui/account/delete_account_page.dart'; import 'package:ente_auth/ui/account/password_entry_page.dart'; -import 'package:ente_auth/ui/account/recovery_key_page.dart'; import 'package:ente_auth/ui/components/captioned_text_widget.dart'; import 'package:ente_auth/ui/components/expandable_menu_item_widget.dart'; import 'package:ente_auth/ui/components/menu_item_widget.dart'; @@ -17,7 +17,6 @@ import 'package:ente_auth/ui/settings/language_picker.dart'; import 'package:ente_auth/utils/dialog_util.dart'; import 'package:ente_auth/utils/navigation_util.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_sodium/flutter_sodium.dart'; class AccountSectionWidget extends StatelessWidget { AccountSectionWidget({Key? key}) : super(key: key); @@ -36,41 +35,6 @@ class AccountSectionWidget extends StatelessWidget { final l10n = context.l10n; List children = []; children.addAll([ - sectionOptionSpacing, - MenuItemWidget( - captionedTextWidget: CaptionedTextWidget( - title: l10n.recoveryKey, - ), - pressedColor: getEnteColorScheme(context).fillFaint, - trailingIcon: Icons.chevron_right_outlined, - trailingIconIsMuted: true, - onTap: () async { - final hasAuthenticated = await LocalAuthenticationService.instance - .requestLocalAuthentication( - context, - l10n.authToViewYourRecoveryKey, - ); - if (hasAuthenticated) { - String recoveryKey; - try { - recoveryKey = - Sodium.bin2hex(Configuration.instance.getRecoveryKey()); - } catch (e) { - showGenericErrorDialog(context: context); - return; - } - routeToPage( - context, - RecoveryKeyPage( - recoveryKey, - l10n.ok, - showAppBar: true, - onDone: () {}, - ), - ); - } - }, - ), sectionOptionSpacing, MenuItemWidget( captionedTextWidget: CaptionedTextWidget( @@ -148,9 +112,44 @@ class AccountSectionWidget extends StatelessWidget { }, ), sectionOptionSpacing, + MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: context.l10n.logout, + ), + pressedColor: getEnteColorScheme(context).fillFaint, + trailingIcon: Icons.chevron_right_outlined, + trailingIconIsMuted: true, + onTap: () async { + _onLogoutTapped(context); + }, + ), + sectionOptionSpacing, + MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: context.l10n.deleteAccount, + ), + pressedColor: getEnteColorScheme(context).fillFaint, + trailingIcon: Icons.chevron_right_outlined, + trailingIconIsMuted: true, + onTap: () async { + routeToPage(context, const DeleteAccountPage()); + }, + ), + sectionOptionSpacing, ]); return Column( children: children, ); } + void _onLogoutTapped(BuildContext context) { + showChoiceActionSheet( + context, + title: context.l10n.areYouSureYouWantToLogout, + firstButtonLabel: context.l10n.yesLogout, + isCritical: true, + firstButtonOnTap: () async { + await UserService.instance.logout(context); + }, + ); + } } diff --git a/lib/ui/settings/security_section_widget.dart b/lib/ui/settings/security_section_widget.dart index 426d03851..6e6847bb1 100644 --- a/lib/ui/settings/security_section_widget.dart +++ b/lib/ui/settings/security_section_widget.dart @@ -5,14 +5,18 @@ import 'package:ente_auth/l10n/l10n.dart'; import 'package:ente_auth/services/local_authentication_service.dart'; import 'package:ente_auth/services/user_service.dart'; import 'package:ente_auth/theme/ente_theme.dart'; +import 'package:ente_auth/ui/account/recovery_key_page.dart'; import 'package:ente_auth/ui/account/sessions_page.dart'; import 'package:ente_auth/ui/components/captioned_text_widget.dart'; import 'package:ente_auth/ui/components/expandable_menu_item_widget.dart'; import 'package:ente_auth/ui/components/menu_item_widget.dart'; import 'package:ente_auth/ui/components/toggle_switch_widget.dart'; import 'package:ente_auth/ui/settings/common_settings.dart'; +import 'package:ente_auth/utils/dialog_util.dart'; +import 'package:ente_auth/utils/navigation_util.dart'; import 'package:ente_auth/utils/toast_util.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_sodium/flutter_sodium.dart'; class SecuritySectionWidget extends StatefulWidget { const SecuritySectionWidget({Key? key}) : super(key: key); @@ -57,6 +61,41 @@ class _SecuritySectionWidgetState extends State { final l10n = context.l10n; final List children = []; children.addAll([ + sectionOptionSpacing, + MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: l10n.recoveryKey, + ), + pressedColor: getEnteColorScheme(context).fillFaint, + trailingIcon: Icons.chevron_right_outlined, + trailingIconIsMuted: true, + onTap: () async { + final hasAuthenticated = await LocalAuthenticationService.instance + .requestLocalAuthentication( + context, + l10n.authToViewYourRecoveryKey, + ); + if (hasAuthenticated) { + String recoveryKey; + try { + recoveryKey = + Sodium.bin2hex(Configuration.instance.getRecoveryKey()); + } catch (e) { + showGenericErrorDialog(context: context); + return; + } + routeToPage( + context, + RecoveryKeyPage( + recoveryKey, + l10n.ok, + showAppBar: true, + onDone: () {}, + ), + ); + } + }, + ), MenuItemWidget( captionedTextWidget: CaptionedTextWidget( title: l10n.lockscreen, diff --git a/lib/ui/settings_page.dart b/lib/ui/settings_page.dart index 74fd07eb4..3d36fb347 100644 --- a/lib/ui/settings_page.dart +++ b/lib/ui/settings_page.dart @@ -82,8 +82,6 @@ class SettingsPage extends StatelessWidget { const SocialSectionWidget(), sectionSpacing, const AboutSectionWidget(), - sectionSpacing, - const DangerSectionWidget(), const AppVersionWidget(), const SupportDevWidget(), const Padding(