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() {
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;
while ((groupRecord = reader.getNext()) != null) {
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? {
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? {

Wyświetl plik

@ -281,16 +281,18 @@ private static final String[] GROUP_PROJECTION = {
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[] queryArgs;
String caseInsensitiveQuery = SqlUtil.buildCaseInsensitiveGlobPattern(inputQuery);
if (includeInactive) {
query = TITLE + " LIKE ? AND (" + ACTIVE + " = ? OR " + RECIPIENT_ID + " IN (SELECT " + ThreadDatabase.RECIPIENT_ID + " FROM " + ThreadDatabase.TABLE_NAME + "))";
queryArgs = new String[]{"%" + constraint + "%", "1"};
query = TITLE + " GLOB ? AND (" + ACTIVE + " = ? OR " + RECIPIENT_ID + " IN (SELECT " + ThreadDatabase.RECIPIENT_ID + " FROM " + ThreadDatabase.TABLE_NAME + "))";
queryArgs = SqlUtil.buildArgs(caseInsensitiveQuery, 1);
} else {
query = TITLE + " LIKE ? AND " + ACTIVE + " = ?";
queryArgs = new String[]{"%" + constraint + "%", "1"};
query = TITLE + " GLOB ? AND " + ACTIVE + " = ?";
queryArgs = SqlUtil.buildArgs(caseInsensitiveQuery, 1);
}
if (excludeV1) {

Wyświetl plik

@ -120,7 +120,7 @@ class CameraContactsRepository {
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;
while ((groupRecord = reader.getNext()) != null) {
RecipientId recipientId = recipientDatabase.getOrInsertFromGroupId(groupRecord.getId());

Wyświetl plik

@ -168,7 +168,7 @@ public class SearchRepository {
}
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) {
recipientIds.add(record.getRecipientId());
}