From 11bc17e766fd905a523b00f257790313cbe77714 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 24 Mar 2025 16:08:31 +0530 Subject: [PATCH 1/5] Separate util method to check if me is assigned --- mobile/lib/ui/viewer/people/people_util.dart | 18 ++++++++++++++++++ .../ui/viewer/people/save_or_edit_person.dart | 17 ++--------------- 2 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 mobile/lib/ui/viewer/people/people_util.dart diff --git a/mobile/lib/ui/viewer/people/people_util.dart b/mobile/lib/ui/viewer/people/people_util.dart new file mode 100644 index 0000000000..55ac269a4d --- /dev/null +++ b/mobile/lib/ui/viewer/people/people_util.dart @@ -0,0 +1,18 @@ + + +import "package:photos/core/configuration.dart"; +import "package:photos/services/machine_learning/face_ml/person/person_service.dart"; + +Future isMeAssigned() async { + final personEntities = await PersonService.instance.getPersons(); + final currentUserEmail = Configuration.instance.getEmail(); + + bool isAssigned = false; + for (final personEntity in personEntities) { + if (personEntity.data.email == currentUserEmail) { + isAssigned = true; + break; + } + } + return isAssigned; + } \ No newline at end of file diff --git a/mobile/lib/ui/viewer/people/save_or_edit_person.dart b/mobile/lib/ui/viewer/people/save_or_edit_person.dart index 5e543f7ef4..2d4ddd10cd 100644 --- a/mobile/lib/ui/viewer/people/save_or_edit_person.dart +++ b/mobile/lib/ui/viewer/people/save_or_edit_person.dart @@ -35,6 +35,7 @@ import "package:photos/ui/sharing/user_avator_widget.dart"; import "package:photos/ui/viewer/file/no_thumbnail_widget.dart"; import "package:photos/ui/viewer/gallery/hooks/pick_person_avatar.dart"; import "package:photos/ui/viewer/people/link_email_screen.dart"; +import "package:photos/ui/viewer/people/people_util.dart"; import "package:photos/ui/viewer/people/person_clusters_page.dart"; import "package:photos/ui/viewer/people/person_row_item.dart"; import "package:photos/ui/viewer/search/result/person_face_widget.dart"; @@ -845,7 +846,7 @@ class _EmailSectionState extends State<_EmailSection> { Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: FutureBuilder( - future: _isMeAssigned(), + future: isMeAssigned(), builder: (context, snapshot) { if (snapshot.hasData) { final isMeAssigned = snapshot.data!; @@ -963,20 +964,6 @@ class _EmailSectionState extends State<_EmailSection> { } } - Future _isMeAssigned() async { - final personEntities = await PersonService.instance.getPersons(); - final currentUserEmail = Configuration.instance.getEmail(); - - bool isAssigned = false; - for (final personEntity in personEntities) { - if (personEntity.data.email == currentUserEmail) { - isAssigned = true; - break; - } - } - return isAssigned; - } - void _updateEmailField(String? newEmail) { final saveOrEditPersonState = context.findAncestorStateOfType<_SaveOrEditPersonState>()!; From ce681d83daae12e0dc284d48e9dba4ed0486ebe5 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 24 Mar 2025 16:32:21 +0530 Subject: [PATCH 2/5] Add "this is me" to link email screen --- .../ui/viewer/people/link_email_screen.dart | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/mobile/lib/ui/viewer/people/link_email_screen.dart b/mobile/lib/ui/viewer/people/link_email_screen.dart index 2a647754d1..a12e19077f 100644 --- a/mobile/lib/ui/viewer/people/link_email_screen.dart +++ b/mobile/lib/ui/viewer/people/link_email_screen.dart @@ -13,6 +13,7 @@ import "package:photos/models/ml/face/person.dart"; import "package:photos/services/account/user_service.dart"; import "package:photos/services/machine_learning/face_ml/person/person_service.dart"; import 'package:photos/theme/ente_theme.dart'; +import "package:photos/ui/common/loading_widget.dart"; import 'package:photos/ui/components/buttons/button_widget.dart'; import 'package:photos/ui/components/captioned_text_widget.dart'; import "package:photos/ui/components/dialog_widget.dart"; @@ -22,6 +23,7 @@ import 'package:photos/ui/components/menu_section_title.dart'; import 'package:photos/ui/components/models/button_type.dart'; import "package:photos/ui/components/text_input_widget.dart"; import 'package:photos/ui/sharing/user_avator_widget.dart'; +import "package:photos/ui/viewer/people/people_util.dart"; import "package:photos/utils/dialog_util.dart"; import "package:photos/utils/person_contact_linking_util.dart"; import "package:photos/utils/share_util.dart"; @@ -118,6 +120,71 @@ class _LinkEmailScreen extends State { autoCorrect: false, ), ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: FutureBuilder( + future: isMeAssigned(), + builder: (context, snapshot) { + if (snapshot.hasData) { + final isMeAssigned = snapshot.data!; + if (!isMeAssigned) { + return Column( + children: [ + const SizedBox(height: 16), + const MenuSectionTitle( + title: "assign yourself", + ), + ButtonWidget( + buttonType: ButtonType.neutral, + labelText: context.l10n.thisIsMeExclamation, + onTap: () async { + try { + final userEmail = + Configuration.instance.getEmail(); + if (userEmail == null) { + throw AssertionError("User email is null"); + } + final result = await linkEmailToPerson( + userEmail, + widget.personID!, + context, + ); + if (!result) { + _textController.clear(); + return; + } + Navigator.of(context).pop(userEmail); + } catch (e) { + await showGenericErrorDialog( + context: context, + error: e, + ); + _logger.severe( + "Failed to link email to person", + e, + ); + } + }, + ), + ], + ); + } else { + return const SizedBox.shrink(); + } + } else if (snapshot.hasError) { + _logger.severe( + "Error getting isMeAssigned", + snapshot.error, + ); + return const RepaintBoundary( + child: EnteLoadingWidget(), + ); + } else { + return const SizedBox.shrink(); + } + }, + ), + ), const SizedBox(height: 16), Expanded( child: Padding( From 76b9c3033245aa88d934d23f7dab58eea90c5bae Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Mon, 24 Mar 2025 16:34:58 +0530 Subject: [PATCH 3/5] error log --- mobile/lib/ui/viewer/people/link_email_screen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/lib/ui/viewer/people/link_email_screen.dart b/mobile/lib/ui/viewer/people/link_email_screen.dart index a12e19077f..db47e052d6 100644 --- a/mobile/lib/ui/viewer/people/link_email_screen.dart +++ b/mobile/lib/ui/viewer/people/link_email_screen.dart @@ -160,7 +160,7 @@ class _LinkEmailScreen extends State { error: e, ); _logger.severe( - "Failed to link email to person", + "Failed to link user email to person", e, ); } From bf7e10eab6d0ef99530409dc8fdcae47839c16f9 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Wed, 26 Mar 2025 12:17:57 +0530 Subject: [PATCH 4/5] Make own email stickied at top --- mobile/lib/ui/viewer/people/link_email_screen.dart | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mobile/lib/ui/viewer/people/link_email_screen.dart b/mobile/lib/ui/viewer/people/link_email_screen.dart index db47e052d6..951734109b 100644 --- a/mobile/lib/ui/viewer/people/link_email_screen.dart +++ b/mobile/lib/ui/viewer/people/link_email_screen.dart @@ -315,9 +315,7 @@ class _LinkEmailScreen extends State { List _getContacts() { final userEmailsToAviod = PersonService.instance.emailToPartialPersonDataMapCache.keys.toSet(); - final ownerEmail = Configuration.instance.getEmail(); final relevantUsers = UserService.instance.getRelevantContacts() - ..add(User(email: ownerEmail!)) ..removeWhere( (user) => userEmailsToAviod.contains(user.email), ); @@ -326,6 +324,12 @@ class _LinkEmailScreen extends State { (a, b) => (a.email).compareTo(b.email), ); + final ownerEmail = Configuration.instance.getEmail(); + if (ownerEmail != null && !userEmailsToAviod.contains(ownerEmail)) { + relevantUsers.insert(0, User(email: ownerEmail)); + _selectedEmail = ownerEmail; + } + return relevantUsers; } From 9ab55ed1e49404efc711bbf2bb0eccc33032835d Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Wed, 26 Mar 2025 12:23:38 +0530 Subject: [PATCH 5/5] Remove "this is me" button --- .../ui/viewer/people/link_email_screen.dart | 67 ------------------- 1 file changed, 67 deletions(-) diff --git a/mobile/lib/ui/viewer/people/link_email_screen.dart b/mobile/lib/ui/viewer/people/link_email_screen.dart index 951734109b..37aa85882a 100644 --- a/mobile/lib/ui/viewer/people/link_email_screen.dart +++ b/mobile/lib/ui/viewer/people/link_email_screen.dart @@ -13,7 +13,6 @@ import "package:photos/models/ml/face/person.dart"; import "package:photos/services/account/user_service.dart"; import "package:photos/services/machine_learning/face_ml/person/person_service.dart"; import 'package:photos/theme/ente_theme.dart'; -import "package:photos/ui/common/loading_widget.dart"; import 'package:photos/ui/components/buttons/button_widget.dart'; import 'package:photos/ui/components/captioned_text_widget.dart'; import "package:photos/ui/components/dialog_widget.dart"; @@ -23,7 +22,6 @@ import 'package:photos/ui/components/menu_section_title.dart'; import 'package:photos/ui/components/models/button_type.dart'; import "package:photos/ui/components/text_input_widget.dart"; import 'package:photos/ui/sharing/user_avator_widget.dart'; -import "package:photos/ui/viewer/people/people_util.dart"; import "package:photos/utils/dialog_util.dart"; import "package:photos/utils/person_contact_linking_util.dart"; import "package:photos/utils/share_util.dart"; @@ -120,71 +118,6 @@ class _LinkEmailScreen extends State { autoCorrect: false, ), ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: FutureBuilder( - future: isMeAssigned(), - builder: (context, snapshot) { - if (snapshot.hasData) { - final isMeAssigned = snapshot.data!; - if (!isMeAssigned) { - return Column( - children: [ - const SizedBox(height: 16), - const MenuSectionTitle( - title: "assign yourself", - ), - ButtonWidget( - buttonType: ButtonType.neutral, - labelText: context.l10n.thisIsMeExclamation, - onTap: () async { - try { - final userEmail = - Configuration.instance.getEmail(); - if (userEmail == null) { - throw AssertionError("User email is null"); - } - final result = await linkEmailToPerson( - userEmail, - widget.personID!, - context, - ); - if (!result) { - _textController.clear(); - return; - } - Navigator.of(context).pop(userEmail); - } catch (e) { - await showGenericErrorDialog( - context: context, - error: e, - ); - _logger.severe( - "Failed to link user email to person", - e, - ); - } - }, - ), - ], - ); - } else { - return const SizedBox.shrink(); - } - } else if (snapshot.hasError) { - _logger.severe( - "Error getting isMeAssigned", - snapshot.error, - ); - return const RepaintBoundary( - child: EnteLoadingWidget(), - ); - } else { - return const SizedBox.shrink(); - } - }, - ), - ), const SizedBox(height: 16), Expanded( child: Padding(