From 342ea1d3e58ad118e0181f79940ca1f06bbf05fb Mon Sep 17 00:00:00 2001 From: sspanak Date: Mon, 23 Sep 2024 11:49:05 +0300 Subject: [PATCH] fixed suggestion scrolling when a 'stem + ...' is displayed --- .../sspanak/tt9/ui/tray/SuggestionsBar.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java index 043d1408..bab3fd13 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java @@ -232,6 +232,11 @@ public class SuggestionsBar { selectedIndex = suggestions.size() - 1; } + if (containsStem() && selectedIndex == 0) { + scrollToSuggestion(increment); + return; + } + scrollToSuggestionOnScreen(oldIndex); } @@ -246,7 +251,21 @@ public class SuggestionsBar { mSuggestionsAdapter.notifyItemChanged(selectedIndex); if (settings.getSuggestionScrollingDelay() > 0) { - alternativeScrollingHandler.postDelayed(() -> mView.scrollToPosition(selectedIndex), settings.getSuggestionScrollingDelay()); + alternativeScrollingHandler.removeCallbacksAndMessages(null); + alternativeScrollingHandler.postDelayed(this::scrollToSelectedIndex, settings.getSuggestionScrollingDelay()); + } else { + scrollToSelectedIndex(); + } + } + + + /** + * Tells the adapter to scroll. Always call scrollToSuggestionOnScreen() first, + * to set the selected index in the adapter. + */ + private void scrollToSelectedIndex() { + if (containsStem() && selectedIndex == 1 && getSuggestion(1).length() < getSuggestion(suggestions.size() - 1).length()) { + mView.scrollToPosition(0); } else { mView.scrollToPosition(selectedIndex); }