From 640ad71198d76fd007bbeff47bf35782297b0ab6 Mon Sep 17 00:00:00 2001 From: Emil Kosz Date: Wed, 23 Oct 2024 22:43:31 +0200 Subject: [PATCH] A rather working version --- .../cfpi_fpsi/eu/titanboard/InputMethod.java | 2 + .../cfpi_fpsi/eu/titanboard/InputView.java | 30 +++++++++++ .../cfpi_fpsi/eu/titanboard/SymbolCycler.java | 3 ++ app/src/main/res/drawable/icon.xml | 20 ++------ app/src/main/res/layout/input.xml | 51 ++++++++++++++++++- app/src/main/res/values/styles.xml | 15 +++--- 6 files changed, 94 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/cfpi_fpsi/eu/titanboard/InputMethod.java b/app/src/main/java/cfpi_fpsi/eu/titanboard/InputMethod.java index 8c54a6c..5a4e401 100644 --- a/app/src/main/java/cfpi_fpsi/eu/titanboard/InputMethod.java +++ b/app/src/main/java/cfpi_fpsi/eu/titanboard/InputMethod.java @@ -35,6 +35,7 @@ import java.util.regex.Pattern; // TODO: Mode without the bottom input view, in case the user does not care about completions. // This will involve making a popup screen and a shortcut for changing languages. +/** @noinspection SizeReplaceableByIsEmpty*/ public class InputMethod extends InputMethodService { public MetaKeyManager mMetaKeyManager; public KeymapManager mKeymapManager; @@ -61,6 +62,7 @@ public class InputMethod extends InputMethodService { public void onInitializeInterface() { mInputView = (InputView) getLayoutInflater().inflate(R.layout.input, null); mInputView.updateStateText(); + mInputView.setSymbolsVisibility(false); } @Override diff --git a/app/src/main/java/cfpi_fpsi/eu/titanboard/InputView.java b/app/src/main/java/cfpi_fpsi/eu/titanboard/InputView.java index 550b8e5..5894b78 100644 --- a/app/src/main/java/cfpi_fpsi/eu/titanboard/InputView.java +++ b/app/src/main/java/cfpi_fpsi/eu/titanboard/InputView.java @@ -24,11 +24,16 @@ import android.content.Intent; import android.graphics.Paint; import android.util.AttributeSet; import android.widget.Button; +import android.widget.LinearLayout; import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.ArrayList; public class InputView extends RelativeLayout { private final InputMethod mInputMethod; private Button mStateButton; + private LinearLayout mSymbolsList; public InputView(Context context, AttributeSet attrs) { super(context, attrs, 0); @@ -39,6 +44,7 @@ public class InputView extends RelativeLayout { protected void onFinishInflate() { super.onFinishInflate(); mStateButton = findViewById(R.id.input_state); + mSymbolsList = findViewById(R.id.symbol_list); mStateButton.setOnClickListener(button -> { MetaKeyManager metaManager = mInputMethod.mMetaKeyManager; @@ -58,6 +64,30 @@ public class InputView extends RelativeLayout { }); } + public void setSymbolsVisibility(boolean state) { + mSymbolsList.setVisibility(state ? VISIBLE : GONE); + } + + public void setSymbols(ArrayList symbols, int index) { + for (int i = 0; i < mSymbolsList.getChildCount(); ++i) { + TextView view = (TextView) mSymbolsList.getChildAt(i); + view.setVisibility(GONE); + } + + if (symbols != null) { + for (int i = 0; i < Math.min(mSymbolsList.getChildCount(), symbols.size()); ++i) { + TextView view = (TextView) mSymbolsList.getChildAt(i); + view.setVisibility(VISIBLE); + view.setText(symbols.get(i)); + if (i == index) { + view.setTextAppearance(getContext(), R.style.InputViewSymbolSelected); + } else { + view.setTextAppearance(getContext(), R.style.InputViewSymbol); + } + } + } + } + public void updateStateText() { MetaKeyManager metaManager = mInputMethod.mMetaKeyManager; KeymapManager keymapManager = mInputMethod.mKeymapManager; diff --git a/app/src/main/java/cfpi_fpsi/eu/titanboard/SymbolCycler.java b/app/src/main/java/cfpi_fpsi/eu/titanboard/SymbolCycler.java index 964cd76..b294c81 100644 --- a/app/src/main/java/cfpi_fpsi/eu/titanboard/SymbolCycler.java +++ b/app/src/main/java/cfpi_fpsi/eu/titanboard/SymbolCycler.java @@ -52,11 +52,13 @@ public class SymbolCycler extends Handler { public void stopCycling() { hasCycled = false; + mInputMethod.mInputView.setSymbolsVisibility(false); removeCallbacks(mRunnable); } public void cycle() { if (!hasCycled) { + mInputMethod.mInputView.setSymbolsVisibility(true); mConn.deleteSurroundingText(mSymbols.get(0).length(), 0); hasCycled = true; } @@ -68,6 +70,7 @@ public class SymbolCycler extends Handler { } mConn.setComposingText(mSymbols.get(mIndex), 1); + mInputMethod.mInputView.setSymbols(mSymbols, mIndex); } private class SymbolCyclerRunnable implements Runnable { diff --git a/app/src/main/res/drawable/icon.xml b/app/src/main/res/drawable/icon.xml index 5361c3b..993ba6b 100644 --- a/app/src/main/res/drawable/icon.xml +++ b/app/src/main/res/drawable/icon.xml @@ -1,17 +1,3 @@ - - - - - - - - \ No newline at end of file + + + diff --git a/app/src/main/res/layout/input.xml b/app/src/main/res/layout/input.xml index a77209c..414b94a 100644 --- a/app/src/main/res/layout/input.xml +++ b/app/src/main/res/layout/input.xml @@ -5,6 +5,56 @@ android:layout_height="wrap_content" android:layout_gravity="bottom"> + + + + + + + + + + + + + + + + + + + +