From f8d44247461b427d96f4ae554f4feab041cb603d Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 9 Aug 2023 13:45:42 -0500 Subject: [PATCH] Do not block UI thread while searching --- .../com/cheogram/android/EmojiSearch.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/cheogram/java/com/cheogram/android/EmojiSearch.java b/src/cheogram/java/com/cheogram/android/EmojiSearch.java index f08f0a61daf37942d978ca98050728c8b5b43792..72f22cc616b058240651fd721d4e1631ee876de5 100644 --- a/src/cheogram/java/com/cheogram/android/EmojiSearch.java +++ b/src/cheogram/java/com/cheogram/android/EmojiSearch.java @@ -1,6 +1,6 @@ package com.cheogram.android; -import android.util.Log; +import android.app.Activity; import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Spannable; @@ -35,6 +35,7 @@ import org.json.JSONObject; import eu.siacs.conversations.R; import eu.siacs.conversations.databinding.EmojiSearchRowBinding; +import eu.siacs.conversations.utils.ReplacingSerialSingleThreadExecutor; public class EmojiSearch { protected final Set emoji = new TreeSet<>(); @@ -95,7 +96,7 @@ public class EmojiSearch { return lst; } - public EmojiSearchAdapter makeAdapter(Context context) { + public EmojiSearchAdapter makeAdapter(Activity context) { return new EmojiSearchAdapter(context); } @@ -197,7 +198,9 @@ public class EmojiSearch { } public class EmojiSearchAdapter extends ArrayAdapter { - public EmojiSearchAdapter(Context context) { + ReplacingSerialSingleThreadExecutor executor = new ReplacingSerialSingleThreadExecutor("EmojiSearchAdapter"); + + public EmojiSearchAdapter(Activity context) { super(context, 0); } @@ -218,9 +221,14 @@ public class EmojiSearch { } public void search(final String q) { - clear(); - addAll(find(q)); - notifyDataSetChanged(); + executor.execute(() -> { + final List results = find(q); + ((Activity) getContext()).runOnUiThread(() -> { + clear(); + addAll(results); + notifyDataSetChanged(); + }); + }); } } }