From 077aac9b1ab36df811ced05b52932e669809bbf6 Mon Sep 17 00:00:00 2001 From: sspanak Date: Wed, 19 Jun 2024 16:26:52 +0300 Subject: [PATCH] inactive virtual keys are now properly displayed as disabled --- .../sspanak/tt9/ime/CommandHandler.java | 2 +- .../sspanak/tt9/ime/MainViewHandler.java | 9 +++++++ .../github/sspanak/tt9/ime/VoiceHandler.java | 12 ++++++++- .../tt9/ui/main/keys/SoftBackspaceKey.java | 6 ++++- .../tt9/ui/main/keys/SoftFilterKey.java | 9 +++++++ .../tt9/ui/main/keys/SoftInputModeKey.java | 8 ++++++ .../sspanak/tt9/ui/main/keys/SoftKey.java | 9 ++++--- .../tt9/ui/main/keys/SoftKeyAddWord.java | 27 +++++++++++++++++++ .../tt9/ui/main/keys/SoftKeyNextLanguage.java | 23 ++++++++++++++++ .../sspanak/tt9/ui/main/keys/SoftOkKey.java | 9 +++++++ app/src/main/res/layout/main_numpad.xml | 4 +-- 11 files changed, 110 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyAddWord.java create mode 100644 app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyNextLanguage.java diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java index 6596e4fb..79ddad65 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java @@ -70,7 +70,7 @@ abstract public class CommandHandler extends VoiceHandler { public void addWord() { - if (mInputMode.isNumeric() || voiceInputOps.isListening()) { + if (voiceInputOps.isListening()) { return; } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java index 7f251fd9..8aa5c534 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java @@ -2,6 +2,7 @@ package io.github.sspanak.tt9.ime; import androidx.annotation.Nullable; +import io.github.sspanak.tt9.ime.modes.ModeABC; import io.github.sspanak.tt9.ime.voice.VoiceInputOps; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.preferences.settings.SettingsStore; @@ -12,6 +13,10 @@ abstract public class MainViewHandler extends HotkeyHandler { return mInputMode.getTextCase(); } + public boolean isInputModeABC() { + return mInputMode.getClass().equals(ModeABC.class); + } + public boolean isInputModeNumeric() { return mInputMode.is123(); } @@ -28,6 +33,10 @@ abstract public class MainViewHandler extends HotkeyHandler { return mInputMode.is123() && inputType.isPhoneNumber(); } + public boolean isVoiceInputActive() { + return voiceInputOps != null && voiceInputOps.isListening(); + } + public boolean isVoiceInputMissing() { return !(new VoiceInputOps(this, null, null, null)).isAvailable(); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/VoiceHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/VoiceHandler.java index 70ea4c06..dfa6bfa9 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/VoiceHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/VoiceHandler.java @@ -57,6 +57,9 @@ abstract class VoiceHandler extends TypingHandler { private void onVoiceInputStarted() { + if (!mainView.isCommandPaletteShown()) { + mainView.render(); // disable the function keys + } statusBar.setText(voiceInputOps); } @@ -64,13 +67,16 @@ abstract class VoiceHandler extends TypingHandler { private void onVoiceInputStopped(String text) { onText(text, false); resetStatus(); + if (!mainView.isCommandPaletteShown()) { + mainView.render(); // re-enable the function keys + } } private void onVoiceInputError(VoiceInputError error) { if (error.isIrrelevantToUser()) { Logger.i(LOG_TAG, "Ignoring voice input. " + error.debugMessage); - resetStatus(); + resetStatus(); // re-enable the function keys } else { Logger.e(LOG_TAG, "Failed to listen. " + error.debugMessage); statusBar.setError(error.toString()); @@ -78,5 +84,9 @@ abstract class VoiceHandler extends TypingHandler { RequestPermissionDialog.show(this); } } + + if (!mainView.isCommandPaletteShown()) { + mainView.render(); // re-enable the function keys + } } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java index e2cb6528..e7a4d018 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java @@ -46,10 +46,14 @@ public class SoftBackspaceKey extends SoftKey { @Override protected String getTitle() { + if (tt9 != null) { + setEnabled(!tt9.isVoiceInputActive()); + } + if (Characters.noEmojiSupported()) { return "Del"; } - return LanguageKind.isRTL(tt9.getLanguage()) ? "⌦" : "⌫"; + return LanguageKind.isRTL(tt9 != null ? tt9.getLanguage() : null) ? "⌦" : "⌫"; } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftFilterKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftFilterKey.java index ffcb8d2e..a77c22ec 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftFilterKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftFilterKey.java @@ -39,4 +39,13 @@ public class SoftFilterKey extends SoftKey { protected String getSubTitle() { return "FLTR"; } + + + @Override + public void render() { + super.render(); + if (tt9 != null) { + setEnabled(!tt9.isInputModeNumeric() && !tt9.isInputModeABC() && !tt9.isVoiceInputActive()); + } + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftInputModeKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftInputModeKey.java index 3525d028..b39a2dd0 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftInputModeKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftInputModeKey.java @@ -33,4 +33,12 @@ public class SoftInputModeKey extends SoftKey { protected boolean handleRelease() { return validateTT9Handler() && tt9.onKeyNextInputMode(false); } + + @Override + public void render() { + super.render(); + if (tt9 != null) { + setEnabled(!tt9.isVoiceInputActive()); + } + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java index 869e07c3..2a413f2a 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java @@ -149,9 +149,7 @@ public class SoftKey extends androidx.appcompat.widget.AppCompatButton implement int keyId = getId(); - if (keyId == R.id.soft_key_add_word) { tt9.addWord(); return true; } if (keyId == R.id.soft_key_command_palette) return tt9.onKeyCommandPalette(false); - if (keyId == R.id.soft_key_language) return tt9.onKeyNextLanguage(false); if (keyId == R.id.soft_key_settings) { tt9.showSettings(); return true; } if (keyId == R.id.soft_key_voice_input) { tt9.toggleVoiceInput(); return true; } @@ -167,6 +165,12 @@ public class SoftKey extends androidx.appcompat.widget.AppCompatButton implement return true; } + @Override + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + setTextColor(getTextColors().withAlpha(enabled ? 255 : 80)); + } + /** * getTitle * Generates the name of the key, for example: "OK", "Backspace", "1", etc... @@ -186,7 +190,6 @@ public class SoftKey extends androidx.appcompat.widget.AppCompatButton implement return null; } - /** * render * Sets the key label using "getTitle()" and "getSubtitle()" or if they both diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyAddWord.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyAddWord.java new file mode 100644 index 00000000..7c00517a --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyAddWord.java @@ -0,0 +1,27 @@ +package io.github.sspanak.tt9.ui.main.keys; + +import android.content.Context; +import android.util.AttributeSet; + +public class SoftKeyAddWord extends SoftKey { + public SoftKeyAddWord(Context context) { super(context); } + public SoftKeyAddWord(Context context, AttributeSet attrs) { super(context, attrs); } + public SoftKeyAddWord(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } + + @Override + protected boolean handleRelease() { + if (validateTT9Handler()) { + tt9.addWord(); + return true; + } + return false; + } + + @Override + public void render() { + super.render(); + if (tt9 != null) { + setEnabled(!tt9.isVoiceInputActive()); + } + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyNextLanguage.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyNextLanguage.java new file mode 100644 index 00000000..d487e219 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyNextLanguage.java @@ -0,0 +1,23 @@ +package io.github.sspanak.tt9.ui.main.keys; + +import android.content.Context; +import android.util.AttributeSet; + +public class SoftKeyNextLanguage extends SoftKey { + public SoftKeyNextLanguage(Context context) { super(context); } + public SoftKeyNextLanguage(Context context, AttributeSet attrs) { super(context, attrs); } + public SoftKeyNextLanguage(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } + + @Override + protected boolean handleRelease() { + return validateTT9Handler() && tt9.onKeyNextLanguage(false); + } + + @Override + public void render() { + super.render(); + if (tt9 != null) { + setEnabled(!tt9.isInputModeNumeric() && !tt9.isVoiceInputActive()); + } + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftOkKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftOkKey.java index 8a952c3a..abb3f10b 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftOkKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftOkKey.java @@ -29,4 +29,13 @@ public class SoftOkKey extends SoftKey { return false; } + + + @Override + public void render() { + super.render(); + if (tt9 != null) { + setEnabled(!tt9.isVoiceInputActive()); + } + } } diff --git a/app/src/main/res/layout/main_numpad.xml b/app/src/main/res/layout/main_numpad.xml index 3190b1c3..b04e1992 100644 --- a/app/src/main/res/layout/main_numpad.xml +++ b/app/src/main/res/layout/main_numpad.xml @@ -143,7 +143,7 @@ android:layoutDirection="ltr" tools:ignore="HardcodedText"> - -