1
0
Fork 0

SuggestionBar code cleanup

This commit is contained in:
sspanak 2024-03-30 16:47:43 +02:00 committed by Dimo Karaivanov
parent 680b22eda1
commit f13297f6b9
4 changed files with 23 additions and 22 deletions

View file

@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
import java.util.ArrayList; import java.util.ArrayList;
import io.github.sspanak.tt9.ime.helpers.TextField; import io.github.sspanak.tt9.ime.helpers.TextField;
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
import io.github.sspanak.tt9.ui.tray.SuggestionsBar; import io.github.sspanak.tt9.ui.tray.SuggestionsBar;
import io.github.sspanak.tt9.util.ConsumerCompat; import io.github.sspanak.tt9.util.ConsumerCompat;
@ -19,11 +20,11 @@ public class SuggestionOps {
@NonNull private TextField textField; @NonNull private TextField textField;
SuggestionOps(@NonNull TypingHandler tt9, View mainView, @NonNull ConsumerCompat<String> onDelayedAccept) { SuggestionOps(@NonNull SettingsStore settings, View mainView, @NonNull ConsumerCompat<String> onDelayedAccept, @NonNull Runnable onSuggestionClick) {
delayedAcceptHandler = new Handler(Looper.getMainLooper()); delayedAcceptHandler = new Handler(Looper.getMainLooper());
this.onDelayedAccept = onDelayedAccept; this.onDelayedAccept = onDelayedAccept;
suggestionBar = new SuggestionsBar(tt9, mainView); suggestionBar = new SuggestionsBar(settings, mainView, onSuggestionClick);
textField = new TextField(null, null); textField = new TextField(null, null);
} }

View file

@ -42,7 +42,7 @@ public abstract class TypingHandler extends KeyPadHandler {
@Override @Override
protected void createSuggestionBar(View mainView) { protected void createSuggestionBar(View mainView) {
suggestionOps = new SuggestionOps(this, mainView, this::onAcceptSuggestionsDelayed); suggestionOps = new SuggestionOps(settings, mainView, this::onAcceptSuggestionsDelayed, this::onOK);
} }
@Override @Override

View file

@ -12,8 +12,10 @@ import androidx.recyclerview.widget.RecyclerView;
import java.util.List; import java.util.List;
import io.github.sspanak.tt9.util.ConsumerCompat;
public class SuggestionsAdapter extends RecyclerView.Adapter<SuggestionsAdapter.ViewHolder> { public class SuggestionsAdapter extends RecyclerView.Adapter<SuggestionsAdapter.ViewHolder> {
private final SuggestionsBar suggestionsBar; private final ConsumerCompat<Integer> onItemClick;
private final int layout; private final int layout;
private final int textViewResourceId; private final int textViewResourceId;
private final LayoutInflater mInflater; private final LayoutInflater mInflater;
@ -24,8 +26,8 @@ public class SuggestionsAdapter extends RecyclerView.Adapter<SuggestionsAdapter.
private int selectedIndex = 0; private int selectedIndex = 0;
public SuggestionsAdapter(Context context, SuggestionsBar suggestionBar, int layout, int textViewResourceId, List<String> suggestions) { public SuggestionsAdapter(Context context, ConsumerCompat<Integer> onItemClick, int layout, int textViewResourceId, List<String> suggestions) {
this.suggestionsBar = suggestionBar; this.onItemClick = onItemClick;
this.layout = layout; this.layout = layout;
this.textViewResourceId = textViewResourceId; this.textViewResourceId = textViewResourceId;
this.mInflater = LayoutInflater.from(context); this.mInflater = LayoutInflater.from(context);
@ -45,7 +47,7 @@ public class SuggestionsAdapter extends RecyclerView.Adapter<SuggestionsAdapter.
holder.suggestionItem.setText(mSuggestions.get(position)); holder.suggestionItem.setText(mSuggestions.get(position));
holder.suggestionItem.setTextColor(colorDefault); holder.suggestionItem.setTextColor(colorDefault);
holder.suggestionItem.setBackgroundColor(selectedIndex == position ? colorHighlight : Color.TRANSPARENT); holder.suggestionItem.setBackgroundColor(selectedIndex == position ? colorHighlight : Color.TRANSPARENT);
holder.suggestionItem.setOnClickListener(v -> suggestionsBar.onItemClick(holder.getAdapterPosition())); holder.suggestionItem.setOnClickListener(v -> onItemClick.accept(holder.getAdapterPosition()));
} }

View file

@ -18,7 +18,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.ime.AbstractHandler;
import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.preferences.settings.SettingsStore;
public class SuggestionsBar { public class SuggestionsBar {
@ -26,18 +25,17 @@ public class SuggestionsBar {
protected int selectedIndex = 0; protected int selectedIndex = 0;
private boolean isDarkThemeEnabled = false; private boolean isDarkThemeEnabled = false;
private final Runnable onItemClick;
private final RecyclerView mView; private final RecyclerView mView;
private final AbstractHandler tt9; private final SettingsStore settings;
private SuggestionsAdapter mSuggestionsAdapter; private SuggestionsAdapter mSuggestionsAdapter;
private final Handler alternativeScrollingHandler = new Handler(); private final Handler alternativeScrollingHandler = new Handler();
private final int suggestionScrollingDelay;
public SuggestionsBar(AbstractHandler tt9, View mainView) { public SuggestionsBar(@NonNull SettingsStore settings, @NonNull View mainView, @NonNull Runnable onItemClick) {
this.tt9 = tt9; this.onItemClick = onItemClick;
this.settings = settings;
suggestionScrollingDelay = tt9.getSettings().getSuggestionScrollingDelay();
mView = mainView.findViewById(R.id.suggestions_bar); mView = mainView.findViewById(R.id.suggestions_bar);
if (mView != null) { if (mView != null) {
@ -65,14 +63,14 @@ public class SuggestionsBar {
private void initDataAdapter(Context context) { private void initDataAdapter(Context context) {
mSuggestionsAdapter = new SuggestionsAdapter( mSuggestionsAdapter = new SuggestionsAdapter(
context, context,
this, this::handleItemClick,
tt9.getSettings().isMainLayoutNumpad() ? R.layout.suggestion_list_numpad : R.layout.suggestion_list, settings.isMainLayoutNumpad() ? R.layout.suggestion_list_numpad : R.layout.suggestion_list,
R.id.suggestion_list_item, R.id.suggestion_list_item,
suggestions suggestions
); );
mView.setAdapter(mSuggestionsAdapter); mView.setAdapter(mSuggestionsAdapter);
setDarkTheme(tt9.getSettings().getDarkTheme()); setDarkTheme(settings.getDarkTheme());
} }
@ -165,8 +163,8 @@ public class SuggestionsBar {
mSuggestionsAdapter.notifyItemChanged(oldIndex); mSuggestionsAdapter.notifyItemChanged(oldIndex);
mSuggestionsAdapter.notifyItemChanged(selectedIndex); mSuggestionsAdapter.notifyItemChanged(selectedIndex);
if (suggestionScrollingDelay > 0) { if (settings.getSuggestionScrollingDelay() > 0) {
alternativeScrollingHandler.postDelayed(() -> mView.scrollToPosition(selectedIndex), suggestionScrollingDelay); alternativeScrollingHandler.postDelayed(() -> mView.scrollToPosition(selectedIndex), settings.getSuggestionScrollingDelay());
} else { } else {
mView.scrollToPosition(selectedIndex); mView.scrollToPosition(selectedIndex);
} }
@ -246,11 +244,11 @@ public class SuggestionsBar {
/** /**
* onItemClick * handleItemClick
* Passes through suggestion selected using the touchscreen. * Passes through suggestion selected using the touchscreen.
*/ */
public void onItemClick(int position) { private void handleItemClick(int position) {
selectedIndex = position; selectedIndex = position;
tt9.onOK(); onItemClick.run();
} }
} }