"Users first" instead of "People first" everywhere

This commit is contained in:
Serge Tarkovski
2026-02-09 17:34:18 +02:00
parent c4f5c7b171
commit 68bb031bb6
2 changed files with 21 additions and 20 deletions
+12 -11
View File
@@ -48,7 +48,7 @@ class _ContactsScreenState extends State<ContactsScreen>
String _searchQuery = ''; String _searchQuery = '';
ContactSortOption _sortOption = ContactSortOption.lastSeen; ContactSortOption _sortOption = ContactSortOption.lastSeen;
bool _showUnreadOnly = false; bool _showUnreadOnly = false;
bool _prioritizePeople = true; bool _prioritizeUsers = true;
ContactTypeFilter _typeFilter = ContactTypeFilter.all; ContactTypeFilter _typeFilter = ContactTypeFilter.all;
final ContactGroupStore _groupStore = ContactGroupStore(); final ContactGroupStore _groupStore = ContactGroupStore();
List<ContactGroup> _groups = []; List<ContactGroup> _groups = [];
@@ -353,7 +353,7 @@ class _ContactsScreenState extends State<ContactsScreen>
sortOption: _sortOption, sortOption: _sortOption,
typeFilter: _typeFilter, typeFilter: _typeFilter,
showUnreadOnly: _showUnreadOnly, showUnreadOnly: _showUnreadOnly,
prioritizePeople: _prioritizePeople, prioritizeUsers: _prioritizeUsers,
onSortChanged: (value) { onSortChanged: (value) {
setState(() { setState(() {
_sortOption = value; _sortOption = value;
@@ -369,9 +369,9 @@ class _ContactsScreenState extends State<ContactsScreen>
_showUnreadOnly = value; _showUnreadOnly = value;
}); });
}, },
onPrioritizePeopleChanged: (value) { onPrioritizeUsersChanged: (value) {
setState(() { setState(() {
_prioritizePeople = value; _prioritizeUsers = value;
}); });
}, },
onNewGroup: () => _showGroupEditor(context, connector.contacts), onNewGroup: () => _showGroupEditor(context, connector.contacts),
@@ -554,18 +554,19 @@ class _ContactsScreenState extends State<ContactsScreen>
}).toList(); }).toList();
} }
// Apply sorting within groups if prioritizing people // Apply "users first" partitioning: separate users from other node types,
if (_prioritizePeople) { // sort each partition, then combine with users on top
// Separate people (advTypeChat) from others if (_prioritizeUsers) {
final people = filtered.where((c) => c.type == advTypeChat).toList(); // Separate users (advTypeChat) from others
final users = filtered.where((c) => c.type == advTypeChat).toList();
final others = filtered.where((c) => c.type != advTypeChat).toList(); final others = filtered.where((c) => c.type != advTypeChat).toList();
// Sort each group separately // Sort each group separately
_applySorting(people, connector); _applySorting(users, connector);
_applySorting(others, connector); _applySorting(others, connector);
// Combine: people first, then others // Combine: users first, then others
filtered = [...people, ...others]; filtered = [...users, ...others];
} else { } else {
_applySorting(filtered, connector); _applySorting(filtered, connector);
} }
+9 -9
View File
@@ -99,17 +99,17 @@ const int _actionFilterRepeaters = 6;
const int _actionFilterRooms = 7; const int _actionFilterRooms = 7;
const int _actionToggleUnreadOnly = 8; const int _actionToggleUnreadOnly = 8;
const int _actionNewGroup = 9; const int _actionNewGroup = 9;
const int _actionTogglePrioritizePeople = 10; const int _actionTogglePrioritizeUsers = 10;
class ContactsFilterMenu extends StatelessWidget { class ContactsFilterMenu extends StatelessWidget {
final ContactSortOption sortOption; final ContactSortOption sortOption;
final ContactTypeFilter typeFilter; final ContactTypeFilter typeFilter;
final bool showUnreadOnly; final bool showUnreadOnly;
final bool prioritizePeople; final bool prioritizeUsers;
final ValueChanged<ContactSortOption> onSortChanged; final ValueChanged<ContactSortOption> onSortChanged;
final ValueChanged<ContactTypeFilter> onTypeFilterChanged; final ValueChanged<ContactTypeFilter> onTypeFilterChanged;
final ValueChanged<bool> onUnreadOnlyChanged; final ValueChanged<bool> onUnreadOnlyChanged;
final ValueChanged<bool> onPrioritizePeopleChanged; final ValueChanged<bool> onPrioritizeUsersChanged;
final VoidCallback onNewGroup; final VoidCallback onNewGroup;
const ContactsFilterMenu({ const ContactsFilterMenu({
@@ -117,11 +117,11 @@ class ContactsFilterMenu extends StatelessWidget {
required this.sortOption, required this.sortOption,
required this.typeFilter, required this.typeFilter,
required this.showUnreadOnly, required this.showUnreadOnly,
required this.prioritizePeople, required this.prioritizeUsers,
required this.onSortChanged, required this.onSortChanged,
required this.onTypeFilterChanged, required this.onTypeFilterChanged,
required this.onUnreadOnlyChanged, required this.onUnreadOnlyChanged,
required this.onPrioritizePeopleChanged, required this.onPrioritizeUsersChanged,
required this.onNewGroup, required this.onNewGroup,
}); });
@@ -150,9 +150,9 @@ class ContactsFilterMenu extends StatelessWidget {
checked: sortOption == ContactSortOption.name, checked: sortOption == ContactSortOption.name,
), ),
SortFilterMenuOption( SortFilterMenuOption(
value: _actionTogglePrioritizePeople, value: _actionTogglePrioritizeUsers,
label: l10n.listFilter_usersFirst, label: l10n.listFilter_usersFirst,
checked: prioritizePeople, checked: prioritizeUsers,
), ),
], ],
), ),
@@ -202,8 +202,8 @@ class ContactsFilterMenu extends StatelessWidget {
case _actionSortLastSeen: case _actionSortLastSeen:
onSortChanged(ContactSortOption.lastSeen); onSortChanged(ContactSortOption.lastSeen);
break; break;
case _actionTogglePrioritizePeople: case _actionTogglePrioritizeUsers:
onPrioritizePeopleChanged(!prioritizePeople); onPrioritizeUsersChanged(!prioritizeUsers);
break; break;
case _actionFilterAll: case _actionFilterAll:
onTypeFilterChanged(ContactTypeFilter.all); onTypeFilterChanged(ContactTypeFilter.all);