add autocomplete

master
dfsek 1 year ago
parent 58b8884542
commit 42f5b4f359
  1. 18
      8vim/src/main/java/inc/flide/vim8/keyboardActionListners/KeypadActionListener.java
  2. 2
      8vim/src/main/java/inc/flide/vim8/views/mainKeyboard/MainKeyboardView.java
  3. 17
      8vim/src/main/java/inc/flide/vim8/views/mainKeyboard/XpadView.java
  4. 8
      8vim/src/main/res/raw/completion_actions.xml

@ -12,6 +12,9 @@ import inc.flide.vim8.structures.FingerPosition;
import inc.flide.vim8.structures.KeyboardAction;
import inc.flide.vim8.preferences.SharedPreferenceHelper;
import inc.flide.vim8.structures.CustomKeycode;
import inc.flide.vim8.views.mainKeyboard.MainKeyboardView;
import io.vavr.collection.List;
import io.vavr.collection.Stream;
public class KeypadActionListener {
@ -39,7 +42,20 @@ public class KeypadActionListener {
}
public void handleCompetion(KeyboardAction keyboardAction) {
onText("COMPLETION " + keyboardAction.getCompletionIndex());
List<String> completions = MainKeyboardView.completions.get(getLastWord()).getOrElse(List.empty());
if(completions.size() > keyboardAction.getCompletionIndex()) {
onText(completions.get(keyboardAction.getCompletionIndex()));
}
}
public String getLastWord() {
CharSequence textBeforeCursor = mainInputMethodService.getCurrentInputConnection().getTextBeforeCursor(20, 0);
if(textBeforeCursor == null) return "";
return Stream.ofAll(textBeforeCursor.chars().boxed())
.foldLeft("", (run, c) -> {
if(Character.isWhitespace(c)) return "";
return run + ((char) c.intValue());
});
}
public void handleInputKey(int keyCode, int keyFlags) {

@ -63,7 +63,7 @@ public class MainKeyboardView extends ConstraintLayout {
Log.i("Corpus", "Parsing corpus...");
try {
completions = Stream.ofAll(new BufferedReader(new StringReader(IOUtils.toString(context.getAssets().open("corpus.8vim"), Charset.defaultCharset()))).lines())
.map(s -> Tuple(s.substring(0, s.indexOf(':')), s.substring(s.indexOf(':'))))
.map(s -> Tuple(s.substring(0, s.indexOf(':')), s.substring(s.indexOf(':') + 1)))
.foldLeft(HashMap.empty(), (run, tup) -> run.put(tup._1(), API.List(tup._2()), io.vavr.collection.List::appendAll));
Log.i("Corpus", "Done.");
} catch (IOException e) {

@ -27,6 +27,8 @@ import inc.flide.vim8.geometry.Dimension;
import inc.flide.vim8.keyboardActionListners.MainKeypadActionListener;
import inc.flide.vim8.preferences.SharedPreferenceHelper;
import inc.flide.vim8.structures.FingerPosition;
import io.vavr.collection.List;
import io.vavr.control.Option;
public class XpadView extends View {
private final Random rnd = new Random();
@ -346,18 +348,25 @@ public class XpadView extends View {
int iconCenterX = (int) Math.max(sectorLineBounds.left, 0);
int iconCenterY = centerYValue;
canvas.drawText("completion 1", iconCenterX, iconCenterY, foregroundPaint);
String lastWord = actionListener.getLastWord();
List<String> completions = MainKeyboardView.completions.get(lastWord).getOrElse(List.empty());
String completion1 = completions.size() > 0 ? completions.get(0) : "";
String completion2 = completions.size() > 1 ? completions.get(1) : "";
String completion3 = completions.size() > 2 ? completions.get(2) : "";
String completion4 = completions.size() > 3 ? completions.get(3) : "";
canvas.drawText(completion1, iconCenterX, iconCenterY, foregroundPaint);
iconCenterX = (int) Math.min(sectorLineBounds.right, canvas.getWidth());
canvas.drawText("completion 2", iconCenterX, iconCenterY, foregroundPaint);
canvas.drawText(completion2, iconCenterX, iconCenterY, foregroundPaint);
iconCenterX = centerXValue;
iconCenterY = (int) Math.min(sectorLineBounds.bottom, canvas.getHeight());
canvas.drawText("completion 3", iconCenterX, iconCenterY, foregroundPaint);
canvas.drawText(completion3, iconCenterX, iconCenterY, foregroundPaint);
iconCenterY = (int) Math.max(sectorLineBounds.top, 0);
canvas.drawText("completion 4", iconCenterX, iconCenterY, foregroundPaint);
canvas.drawText(completion4, iconCenterX, iconCenterY, foregroundPaint);
}
private void setupSectorIcons(int centreXValue, int centreYValue, Canvas canvas) {

@ -3,22 +3,22 @@
<keyboardAction>
<keyboardActionType>INPUT_COMPLETE</keyboardActionType>
<movementSequence>INSIDE_CIRCLE;TOP;INSIDE_CIRCLE;</movementSequence>
<completion>0</completion>
<completion>3</completion>
</keyboardAction>
<keyboardAction>
<keyboardActionType>INPUT_COMPLETE</keyboardActionType>
<movementSequence>INSIDE_CIRCLE;BOTTOM;INSIDE_CIRCLE;</movementSequence>
<completion>1</completion>
<completion>2</completion>
</keyboardAction>
<keyboardAction>
<keyboardActionType>INPUT_COMPLETE</keyboardActionType>
<movementSequence>INSIDE_CIRCLE;LEFT;INSIDE_CIRCLE;</movementSequence>
<completion>2</completion>
<completion>0</completion>
</keyboardAction>
<keyboardAction>
<keyboardActionType>INPUT_COMPLETE</keyboardActionType>
<movementSequence>INSIDE_CIRCLE;RIGHT;INSIDE_CIRCLE;</movementSequence>
<completion>3</completion>
<completion>1</completion>
</keyboardAction>
</keyboardActionMap>
</keyboardData>
Loading…
Cancel
Save