From e74fb95f98f2cc9fb6588c35ebbc6c9fabb2837f Mon Sep 17 00:00:00 2001 From: SerpentSpirale Date: Fri, 6 Aug 2021 23:47:09 +0200 Subject: [PATCH] Introduce toggling system for all keyboards --- .../net/kdt/pojavlaunch/BaseMainActivity.java | 31 +++++------ .../net/kdt/pojavlaunch/MainActivity.java | 2 +- .../customcontrols/TouchCharInput.java | 51 +++++++++++++------ 3 files changed, 52 insertions(+), 32 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java index 79cc1f83c..cd8a8b23a 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java @@ -883,22 +883,23 @@ public class BaseMainActivity extends LoggableActivity { // Catch back as Esc keycode at another place sendKeyPress(LWJGLGLFWKeycode.GLFW_KEY_ESCAPE); } - - public void hideKeyboard() { - try { - getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); - if (getCurrentFocus() != null && getCurrentFocus().getWindowToken() != null) { - ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow((this).getCurrentFocus().getWindowToken(), 0); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - public void showKeyboard() { - ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); - minecraftGLView.requestFocusFromTouch(); - minecraftGLView.requestFocus(); + + /** + * Toggle on and off the soft keyboard, depending of the state + * The condition is prone to errors if the keyboard is being hidden without the consent + * of the current TouchCharInput + */ + public void switchKeyboardState(){ + if(touchCharInput.hasFocus()){ + touchCharInput.clear(); + touchCharInput.disable(); + + }else{ + InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); + touchCharInput.enable(); + touchCharInput.postDelayed(() -> imm.showSoftInput(touchCharInput, InputMethodManager.SHOW_IMPLICIT), 200); + } } protected void setRightOverride(boolean val) { diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java index f63c0dd98..eb82165a5 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -63,7 +63,7 @@ public class MainActivity extends BaseMainActivity { for(int keycode : button.getProperties().keycodes){ switch (keycode) { case ControlData.SPECIALBTN_KEYBOARD: - showKeyboard(); + switchKeyboardState(); break; case ControlData.SPECIALBTN_TOGGLECTRL: diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/TouchCharInput.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/TouchCharInput.java index fb10be65a..905a48473 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/TouchCharInput.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/TouchCharInput.java @@ -1,20 +1,14 @@ package net.kdt.pojavlaunch.customcontrols; import android.content.Context; -import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; import android.view.KeyEvent; -import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputConnection; -import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.view.inputmethod.EditorInfoCompat; -import androidx.core.view.inputmethod.InputConnectionCompat; -import androidx.core.view.inputmethod.InputContentInfoCompat; import net.kdt.pojavlaunch.BaseMainActivity; import net.kdt.pojavlaunch.LWJGLGLFWKeycode; @@ -38,13 +32,13 @@ public class TouchCharInput extends androidx.appcompat.widget.AppCompatEditText setup(); } - private boolean isClearingText = false; + private boolean isDoingInternalChanges = false; TextWatcher mTextWatcher = new TextWatcher() { //TODO Engineer a more performant system @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - if(isClearingText) return; + if(isDoingInternalChanges) return; for(int j=0; j