Even better animator race guards

Stephen Paul Weber created

Change summary

src/cheogram/java/com/cheogram/android/EmojiSearch.java           |  3 
src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 10 
2 files changed, 10 insertions(+), 3 deletions(-)

Detailed changes

src/cheogram/java/com/cheogram/android/EmojiSearch.java 🔗

@@ -291,13 +291,14 @@ public class EmojiSearch {
 			});
 		}
 
-		public void search(final Activity activity, final String q) {
+		public void search(final Activity activity, final RecyclerView view, final String q) {
 			executor.execute(() -> {
 				final List<Emoji> results = find(q);
 				try {
 					// Acquire outside so to not block UI thread
 					doingUpdate.acquire();
 					activity.runOnUiThread(() -> {
+						try { view.getItemAnimator().endAnimations(); } catch (final Exception e) {  }
 						submitList(results, () -> {
 							activity.runOnUiThread(() -> doingUpdate.release());
 						});

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java 🔗

@@ -1623,6 +1623,13 @@ public class ConversationFragment extends XmppFragment
                     return adapter;
                 }
 
+                @Override
+                protected void onViewHidden() {
+                    if (getRecyclerView() == null) return;
+                    try { getRecyclerView().getItemAnimator().endAnimations(); } catch (final Exception e) { }
+                    super.onViewHidden();
+                }
+
                 @Override
                 protected void onQuery(@Nullable CharSequence query) {
                     if (!activity.xmppConnectionService.getBooleanPreference("message_autocomplete", R.bool.message_autocomplete)) return;
@@ -1630,8 +1637,7 @@ public class ConversationFragment extends XmppFragment
                     emojiDebounce.removeCallbacksAndMessages(null);
                     emojiDebounce.postDelayed(() -> {
                         if (getRecyclerView() == null) return;
-                        try { getRecyclerView().getItemAnimator().endAnimations(); } catch (final Exception e) {  }
-                        adapter.search(activity, query.toString());
+                        adapter.search(activity, getRecyclerView(), query.toString());
                     }, 100L);
                 }
             })