From 32d79ead15b43b9117d6b27dfcce3a09bc226cc1 Mon Sep 17 00:00:00 2001 From: Karalix Date: Mon, 16 Nov 2020 16:44:32 +0100 Subject: [PATCH] Add unicode wildcards for equivalent latin characters in contact search. --- .../securesms/database/RecipientDatabase.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java index 0f8763e57..640aed18b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java @@ -2600,12 +2600,72 @@ public class RecipientDatabase extends Database { pattern.append("["); pattern.append(point.toLowerCase()); pattern.append(point.toUpperCase()); + pattern.append(getAccentuatedCharRegex(point.toLowerCase())); pattern.append("]"); } return "*" + pattern.toString() + "*"; } + private static @NonNull String getAccentuatedCharRegex(@NonNull String query) { + switch (query) { + case "a" : + return "À-Åà-åĀ-ąǍǎǞ-ǡǺ-ǻȀ-ȃȦȧȺɐ-ɒḀḁẚẠ-ặ"; + case "b" : + return "ßƀ-ƅɃɓḂ-ḇ"; + case "c" : + return "çÇĆ-čƆ-ƈȻȼɔḈḉ"; + case "d" : + return "ÐðĎ-đƉ-ƍȡɖɗḊ-ḓ"; + case "e" : + return "È-Ëè-ëĒ-ěƎ-ƐǝȄ-ȇȨȩɆɇɘ-ɞḔ-ḝẸ-ệ"; + case "f" : + return "ƑƒḞḟ"; + case "g" : + return "Ĝ-ģƓǤ-ǧǴǵḠḡ"; + case "h" : + return "Ĥ-ħƕǶȞȟḢ-ḫẖ"; + case "i" : + return "Ì-Ïì-ïĨ-ıƖƗǏǐȈ-ȋɨɪḬ-ḯỈ-ị"; + case "j" : + return "ĴĵǰȷɈɉɟ"; + case "k" : + return "Ķ-ĸƘƙǨǩḰ-ḵ"; + case "l" : + return "Ĺ-łƚȴȽɫ-ɭḶ-ḽ"; + case "m" : + return "Ɯɯ-ɱḾ-ṃ"; + case "n" : + return "ÑñŃ-ŋƝƞǸǹȠȵɲ-ɴṄ-ṋ"; + case "o" : + return "Ò-ÖØò-öøŌ-őƟ-ơǑǒǪ-ǭǾǿȌ-ȏȪ-ȱṌ-ṓỌ-ợ"; + case "p" : + return "ƤƥṔ-ṗ"; + case "q" : + return ""; + case "r" : + return "Ŕ-řƦȐ-ȓɌɍṘ-ṟ"; + case "s" : + return "Ś-šƧƨȘșȿṠ-ṩ"; + case "t" : + return "Ţ-ŧƫ-ƮȚțȾṪ-ṱẗ"; + case "u" : + return "Ù-Üù-üŨ-ųƯ-ƱǓ-ǜȔ-ȗɄṲ-ṻỤ-ự"; + case "v" : + return "ƲɅṼ-ṿ"; + case "w" : + return "ŴŵẀ-ẉẘ"; + case "x" : + return "Ẋ-ẍ"; + case "y" : + return "ÝýÿŶ-ŸƔƳƴȲȳɎɏẎẏỲ-ỹỾỿẙ"; + case "z" : + return "Ź-žƵƶɀẐ-ẕ"; + default : + return ""; + } + } + public @NonNull List getRecipientsForMultiDeviceSync() { String subquery = "SELECT " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID + " FROM " + ThreadDatabase.TABLE_NAME; String selection = REGISTERED + " = ? AND " +