From 7a300456a31a9d4fe23e7496915d6d30fe70e847 Mon Sep 17 00:00:00 2001 From: otsmr Date: Tue, 20 May 2025 22:59:29 +0200 Subject: [PATCH] fix #166 --- lib/src/localization/app_de.arb | 4 +-- .../generated/app_localizations_de.dart | 4 +-- .../views/camera/share_image_editor_view.dart | 18 +++++++++- lib/src/views/camera/share_image_view.dart | 34 +++++++------------ 4 files changed, 33 insertions(+), 27 deletions(-) diff --git a/lib/src/localization/app_de.arb b/lib/src/localization/app_de.arb index 00c7720..90c585d 100644 --- a/lib/src/localization/app_de.arb +++ b/lib/src/localization/app_de.arb @@ -8,7 +8,7 @@ "onboardingE2eBody": "Genieße durch die Ende-zu-Ende-Verschlüsselung die Gewissheit, dass nur du und deine Freunde die geteilten Momente sehen können.", "onboardingFocusTitle": "Fokussiere dich auf das Teilen von Momenten", "onboardingFocusBody": "Verabschiede dich von süchtig machenden Funktionen! twonly wurde für das Teilen von Momenten ohne nutzlose Ablenkungen oder Werbung entwickelt.", - "onboardingSendTwonliesTitle": "Twonlies senden", + "onboardingSendTwonliesTitle": "twonlies senden", "onboardingSendTwonliesBody": "Teile Momente sicher mit deinem Partner. twonly stellt sicher, dass nur dein Partner sie öffnen kann, sodass deine Momente mit deinem Partner eine two(o)nly Sache bleiben!", "onboardingNotProductTitle": "Du bist nicht das Produkt!", "onboardingNotProductBody": "twonly finanziert sich durch eine geringe monatliche Gebühr und nicht durch den Verkauf deiner Daten.", @@ -35,7 +35,7 @@ "shareImagedEditorSavedImage": "Gespeichert", "shareImagedSelectAll": "Alle auswählen", "shareImageAllUsers": "Alle Kontakte", - "shareImageAllTwonlyWarning": "Twonlies können nur an verifizierte Kontakte gesendet werden!", + "shareImageAllTwonlyWarning": "twonlies können nur an verifizierte Kontakte gesendet werden!", "shareImageSearchAllContacts": "Alle Kontakte durchsuchen", "@shareImageSearchAllContacts": {}, "shareImageUserNotVerified": "Benutzer ist nicht verifiziert", diff --git a/lib/src/localization/generated/app_localizations_de.dart b/lib/src/localization/generated/app_localizations_de.dart index dbc655a..4d1a256 100644 --- a/lib/src/localization/generated/app_localizations_de.dart +++ b/lib/src/localization/generated/app_localizations_de.dart @@ -33,7 +33,7 @@ class AppLocalizationsDe extends AppLocalizations { String get onboardingFocusBody => 'Verabschiede dich von süchtig machenden Funktionen! twonly wurde für das Teilen von Momenten ohne nutzlose Ablenkungen oder Werbung entwickelt.'; @override - String get onboardingSendTwonliesTitle => 'Twonlies senden'; + String get onboardingSendTwonliesTitle => 'twonlies senden'; @override String get onboardingSendTwonliesBody => 'Teile Momente sicher mit deinem Partner. twonly stellt sicher, dass nur dein Partner sie öffnen kann, sodass deine Momente mit deinem Partner eine two(o)nly Sache bleiben!'; @@ -126,7 +126,7 @@ class AppLocalizationsDe extends AppLocalizations { String get shareImageAllUsers => 'Alle Kontakte'; @override - String get shareImageAllTwonlyWarning => 'Twonlies können nur an verifizierte Kontakte gesendet werden!'; + String get shareImageAllTwonlyWarning => 'twonlies können nur an verifizierte Kontakte gesendet werden!'; @override String get shareImageUserNotVerified => 'Benutzer ist nicht verifiziert'; diff --git a/lib/src/views/camera/share_image_editor_view.dart b/lib/src/views/camera/share_image_editor_view.dart index 0017a1f..1df6970 100644 --- a/lib/src/views/camera/share_image_editor_view.dart +++ b/lib/src/views/camera/share_image_editor_view.dart @@ -1,3 +1,4 @@ +import 'dart:collection'; import 'dart:io'; import 'dart:async'; import 'package:camera/camera.dart'; @@ -58,6 +59,7 @@ class _ShareImageEditorView extends State { double tabDownPostion = 0; bool sendingOrLoadingImage = true; bool isDisposed = false; + HashSet selectedUserIds = HashSet(); double widthRatio = 1, heightRatio = 1, pixelRatio = 1; VideoPlayerController? videoController; @@ -105,6 +107,18 @@ class _ShareImageEditorView extends State { super.dispose(); } + void updateStatus(int userId, bool checked) { + if (checked) { + if (_isRealTwonly) { + selectedUserIds.clear(); + } + selectedUserIds.add(userId); + } else { + selectedUserIds.remove(userId); + } + setState(() {}); + } + Future updateAsync(int userId) async { if (sendNextMediaToUserName != null) return; Contact? contact = await twonlyDatabase.contactsDao @@ -241,6 +255,7 @@ class _ShareImageEditorView extends State { if (_isRealTwonly) { maxShowTime = 12; } + selectedUserIds = HashSet(); setState(() {}); }, ), @@ -308,7 +323,8 @@ class _ShareImageEditorView extends State { imageBytesFuture: imageBytes, isRealTwonly: _isRealTwonly, maxShowTime: maxShowTime, - preselectedUser: widget.sendTo, + selectedUserIds: selectedUserIds, + updateStatus: updateStatus, videoFilePath: widget.videoFilePath, mirrorVideo: widget.mirrorVideo, ), diff --git a/lib/src/views/camera/share_image_view.dart b/lib/src/views/camera/share_image_view.dart index ad93be3..4c5c488 100644 --- a/lib/src/views/camera/share_image_view.dart +++ b/lib/src/views/camera/share_image_view.dart @@ -24,7 +24,8 @@ class ShareImageView extends StatefulWidget { required this.isRealTwonly, required this.mirrorVideo, required this.maxShowTime, - this.preselectedUser, + required this.selectedUserIds, + required this.updateStatus, required this.videoFilePath, this.enableVideoAudio}); final Future imageBytesFuture; @@ -32,8 +33,9 @@ class ShareImageView extends StatefulWidget { final bool mirrorVideo; final int maxShowTime; final XFile? videoFilePath; - final Contact? preselectedUser; + final HashSet selectedUserIds; final bool? enableVideoAudio; + final Function(int, bool) updateStatus; @override State createState() => _ShareImageView(); @@ -47,7 +49,6 @@ class _ShareImageView extends State { Uint8List? imageBytes; bool sendingImage = false; bool hideArchivedUsers = true; - final HashSet _selectedUserIds = HashSet(); final TextEditingController searchUserName = TextEditingController(); bool showRealTwonlyWarning = false; late StreamSubscription> contactSub; @@ -57,10 +58,6 @@ class _ShareImageView extends State { void initState() { super.initState(); - if (widget.preselectedUser != null) { - _selectedUserIds.add(widget.preselectedUser!.userId); - } - Stream> allContacts = twonlyDatabase.contactsDao.watchContactsForShareView(); @@ -129,7 +126,7 @@ class _ShareImageView extends State { .where((x) => !x.archived || !hideArchivedUsers || - _selectedUserIds.contains(x.userId)) + widget.selectedUserIds.contains(x.userId)) .toList()); return; } @@ -151,14 +148,7 @@ class _ShareImageView extends State { } } showRealTwonlyWarning = false; - if (checked) { - if (widget.isRealTwonly) { - _selectedUserIds.clear(); - } - _selectedUserIds.add(userId); - } else { - _selectedUserIds.remove(userId); - } + widget.updateStatus(userId, checked); setState(() {}); } @@ -193,7 +183,7 @@ class _ShareImageView extends State { if (_pinnedContacs.isNotEmpty) const SizedBox(height: 10), BestFriendsSelector( users: _pinnedContacs, - selectedUserIds: _selectedUserIds, + selectedUserIds: widget.selectedUserIds, isRealTwonly: widget.isRealTwonly, updateStatus: updateStatus, title: context.lang.shareImagePinnedContacts, @@ -201,7 +191,7 @@ class _ShareImageView extends State { const SizedBox(height: 10), BestFriendsSelector( users: _bestFriends, - selectedUserIds: _selectedUserIds, + selectedUserIds: widget.selectedUserIds, isRealTwonly: widget.isRealTwonly, updateStatus: updateStatus, title: context.lang.shareImageBestFriends, @@ -250,7 +240,7 @@ class _ShareImageView extends State { Expanded( child: UserList( List.from(_otherUsers), - selectedUserIds: _selectedUserIds, + selectedUserIds: widget.selectedUserIds, isRealTwonly: widget.isRealTwonly, updateStatus: updateStatus, ), @@ -278,7 +268,7 @@ class _ShareImageView extends State { ) : FaIcon(FontAwesomeIcons.solidPaperPlane), onPressed: () async { - if (imageBytes == null || _selectedUserIds.isEmpty) { + if (imageBytes == null || widget.selectedUserIds.isEmpty) { return; } @@ -298,7 +288,7 @@ class _ShareImageView extends State { }); sendMediaFile( - _selectedUserIds.toList(), + widget.selectedUserIds.toList(), imageBytes!, widget.isRealTwonly, widget.maxShowTime, @@ -322,7 +312,7 @@ class _ShareImageView extends State { EdgeInsets.symmetric(vertical: 10, horizontal: 30), ), backgroundColor: WidgetStateProperty.all( - imageBytes == null || _selectedUserIds.isEmpty + imageBytes == null || widget.selectedUserIds.isEmpty ? Theme.of(context).colorScheme.secondary : Theme.of(context).colorScheme.primary, )),