mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 17:29:32 +01:00
Improve emoji sticker suggestions.
There was a bug around some emoji being marked as 'obsolete' and therefore not being found. I also made a change so that you can use skin variations of emoji and still find emoji tagged with the default yellow version of it. Fixes #9471
This commit is contained in:
@@ -4,14 +4,20 @@ import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiUtil;
|
||||
import org.thoughtcrime.securesms.database.AttachmentDatabase;
|
||||
import org.thoughtcrime.securesms.database.CursorList;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.StickerDatabase;
|
||||
import org.thoughtcrime.securesms.database.StickerDatabase.StickerRecordReader;
|
||||
import org.thoughtcrime.securesms.database.model.StickerPackRecord;
|
||||
import org.thoughtcrime.securesms.database.model.StickerRecord;
|
||||
import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public final class StickerSearchRepository {
|
||||
|
||||
private final StickerDatabase stickerDatabase;
|
||||
@@ -22,15 +28,22 @@ public final class StickerSearchRepository {
|
||||
this.attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
||||
}
|
||||
|
||||
public void searchByEmoji(@NonNull String emoji, @NonNull Callback<CursorList<StickerRecord>> callback) {
|
||||
public void searchByEmoji(@NonNull String emoji, @NonNull Callback<List<StickerRecord>> callback) {
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
Cursor cursor = stickerDatabase.getStickersByEmoji(emoji);
|
||||
String searchEmoji = EmojiUtil.getCanonicalRepresentation(emoji);
|
||||
List<StickerRecord> out = new ArrayList<>();
|
||||
Set<String> possible = EmojiUtil.getAllRepresentations(searchEmoji);
|
||||
|
||||
if (cursor != null) {
|
||||
callback.onResult(new CursorList<>(cursor, new StickerModelBuilder()));
|
||||
} else {
|
||||
callback.onResult(CursorList.emptyList());
|
||||
for (String candidate : possible) {
|
||||
try (StickerRecordReader reader = new StickerRecordReader(stickerDatabase.getStickersByEmoji(candidate))) {
|
||||
StickerRecord record = null;
|
||||
while ((record = reader.getNext()) != null) {
|
||||
out.add(record);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
callback.onResult(out);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -49,14 +62,7 @@ public final class StickerSearchRepository {
|
||||
private static class StickerModelBuilder implements CursorList.ModelBuilder<StickerRecord> {
|
||||
@Override
|
||||
public StickerRecord build(@NonNull Cursor cursor) {
|
||||
return new StickerDatabase.StickerRecordReader(cursor).getCurrent();
|
||||
}
|
||||
}
|
||||
|
||||
private static class StickerPackModelBuilder implements CursorList.ModelBuilder<StickerPackRecord> {
|
||||
@Override
|
||||
public StickerPackRecord build(@NonNull Cursor cursor) {
|
||||
return new StickerDatabase.StickerPackRecordReader(cursor).getCurrent();
|
||||
return new StickerRecordReader(cursor).getCurrent();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user