Fix case-insensitive queries for groups with non-ASCII characters.

Fixes #11464
fork-5.53.8
Greyson Parrelli 2022-03-29 17:30:53 -04:00 zatwierdzone przez Cody Henthorne
rodzic 77ea2deada
commit 14849d6e45
5 zmienionych plików z 11 dodań i 9 usunięć

Wyświetl plik

@ -231,7 +231,7 @@ public class ContactsCursorLoader extends AbstractContactsCursorLoader {
private Cursor getGroupsCursor() { private Cursor getGroupsCursor() {
MatrixCursor groupContacts = ContactsCursorRows.createMatrixCursor(); MatrixCursor groupContacts = ContactsCursorRows.createMatrixCursor();
try (GroupDatabase.Reader reader = SignalDatabase.groups().getGroupsFilteredByTitle(getFilter(), flagSet(mode, DisplayMode.FLAG_INACTIVE_GROUPS), hideGroupsV1(mode), !smsEnabled(mode))) { try (GroupDatabase.Reader reader = SignalDatabase.groups().queryGroupsByTitle(getFilter(), flagSet(mode, DisplayMode.FLAG_INACTIVE_GROUPS), hideGroupsV1(mode), !smsEnabled(mode))) {
GroupDatabase.GroupRecord groupRecord; GroupDatabase.GroupRecord groupRecord;
while ((groupRecord = reader.getNext()) != null) { while ((groupRecord = reader.getNext()) != null) {
groupContacts.addRow(ContactsCursorRows.forGroup(groupRecord)); groupContacts.addRow(ContactsCursorRows.forGroup(groupRecord));

Wyświetl plik

@ -35,7 +35,7 @@ open class ContactSearchPagedDataSourceRepository(
} }
open fun getGroupContacts(section: ContactSearchConfiguration.Section.Groups, query: String?): Cursor? { open fun getGroupContacts(section: ContactSearchConfiguration.Section.Groups, query: String?): Cursor? {
return SignalDatabase.groups.getGroupsFilteredByTitle(query ?: "", section.includeInactive, !section.includeV1, !section.includeMms).cursor return SignalDatabase.groups.queryGroupsByTitle(query ?: "", section.includeInactive, !section.includeV1, !section.includeMms).cursor
} }
open fun getRecents(section: ContactSearchConfiguration.Section.Recents): Cursor? { open fun getRecents(section: ContactSearchConfiguration.Section.Recents): Cursor? {

Wyświetl plik

@ -281,16 +281,18 @@ private static final String[] GROUP_PROJECTION = {
return noMetadata && noMembers; return noMetadata && noMembers;
} }
public Reader getGroupsFilteredByTitle(String constraint, boolean includeInactive, boolean excludeV1, boolean excludeMms) { public Reader queryGroupsByTitle(String inputQuery, boolean includeInactive, boolean excludeV1, boolean excludeMms) {
String query; String query;
String[] queryArgs; String[] queryArgs;
String caseInsensitiveQuery = SqlUtil.buildCaseInsensitiveGlobPattern(inputQuery);
if (includeInactive) { if (includeInactive) {
query = TITLE + " LIKE ? AND (" + ACTIVE + " = ? OR " + RECIPIENT_ID + " IN (SELECT " + ThreadDatabase.RECIPIENT_ID + " FROM " + ThreadDatabase.TABLE_NAME + "))"; query = TITLE + " GLOB ? AND (" + ACTIVE + " = ? OR " + RECIPIENT_ID + " IN (SELECT " + ThreadDatabase.RECIPIENT_ID + " FROM " + ThreadDatabase.TABLE_NAME + "))";
queryArgs = new String[]{"%" + constraint + "%", "1"}; queryArgs = SqlUtil.buildArgs(caseInsensitiveQuery, 1);
} else { } else {
query = TITLE + " LIKE ? AND " + ACTIVE + " = ?"; query = TITLE + " GLOB ? AND " + ACTIVE + " = ?";
queryArgs = new String[]{"%" + constraint + "%", "1"}; queryArgs = SqlUtil.buildArgs(caseInsensitiveQuery, 1);
} }
if (excludeV1) { if (excludeV1) {

Wyświetl plik

@ -120,7 +120,7 @@ class CameraContactsRepository {
List<Recipient> recipients = new ArrayList<>(); List<Recipient> recipients = new ArrayList<>();
try (GroupDatabase.Reader reader = groupDatabase.getGroupsFilteredByTitle(query, false, true, true)) { try (GroupDatabase.Reader reader = groupDatabase.queryGroupsByTitle(query, false, true, true)) {
GroupDatabase.GroupRecord groupRecord; GroupDatabase.GroupRecord groupRecord;
while ((groupRecord = reader.getNext()) != null) { while ((groupRecord = reader.getNext()) != null) {
RecipientId recipientId = recipientDatabase.getOrInsertFromGroupId(groupRecord.getId()); RecipientId recipientId = recipientDatabase.getOrInsertFromGroupId(groupRecord.getId());

Wyświetl plik

@ -168,7 +168,7 @@ public class SearchRepository {
} }
GroupDatabase.GroupRecord record; GroupDatabase.GroupRecord record;
try (GroupDatabase.Reader reader = SignalDatabase.groups().getGroupsFilteredByTitle(query, true, false, false)) { try (GroupDatabase.Reader reader = SignalDatabase.groups().queryGroupsByTitle(query, true, false, false)) {
while ((record = reader.getNext()) != null) { while ((record = reader.getNext()) != null) {
recipientIds.add(record.getRecipientId()); recipientIds.add(record.getRecipientId());
} }