[client,android] Fix keyboard ui issues

Set inputType to system keyboard, otherwise keyboard can be opened with last used input type (eg. numeric)
Fix keyboard/modifiers panel opening, when keyboard stuck in other app
Hide zoom controls when keyboard is opened
This commit is contained in:
weoses
2023-08-02 05:23:52 -04:00
committed by akallabeth
parent 45ee30da5e
commit 8f1ba61553
2 changed files with 42 additions and 16 deletions

View File

@@ -36,6 +36,8 @@ import android.os.Message;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.text.InputType;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
@@ -47,6 +49,7 @@ import android.view.ViewConfiguration;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.ZoomControls;
@@ -550,17 +553,17 @@ public class SessionActivity extends AppCompatActivity
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
private void hideSoftInput()
private void setSoftInputState(boolean state)
{
InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if (mgr.isActive())
if (state)
{
mgr.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
mgr.showSoftInput(sessionView, InputMethodManager.SHOW_FORCED);
}
else
{
mgr.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
mgr.hideSoftInputFromWindow(sessionView.getWindowToken(), 0);
}
}
@@ -568,11 +571,10 @@ public class SessionActivity extends AppCompatActivity
private void showKeyboard(final boolean showSystemKeyboard, final boolean showExtendedKeyboard)
{
// no matter what we are doing ... hide the zoom controls
// TODO: this is not working correctly as hiding the keyboard issues a
// onScrollChange notification showing the control again ...
uiHandler.removeMessages(UIHandler.HIDE_ZOOMCONTROLS);
if (zoomControls.getVisibility() == View.VISIBLE)
zoomControls.hide();
// i think check for "preference_key_ui_hide_zoom_controls" preference should be there
uiHandler.removeMessages(UIHandler.SHOW_ZOOMCONTROLS);
uiHandler.sendEmptyMessage(UIHandler.HIDE_ZOOMCONTROLS);
InputMethodManager mgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
@@ -581,7 +583,7 @@ public class SessionActivity extends AppCompatActivity
// hide extended keyboard
keyboardView.setVisibility(View.GONE);
// show system keyboard
mgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
setSoftInputState(true);
// show modifiers keyboard
modifiersKeyboardView.setVisibility(View.VISIBLE);
@@ -589,7 +591,7 @@ public class SessionActivity extends AppCompatActivity
else if (showExtendedKeyboard)
{
// hide system keyboard
hideSoftInput();
setSoftInputState(false);
// show extended keyboard
keyboardView.setKeyboard(specialkeysKeyboard);
@@ -599,7 +601,7 @@ public class SessionActivity extends AppCompatActivity
else
{
// hide both
hideSoftInput();
setSoftInputState(false);
keyboardView.setVisibility(View.GONE);
modifiersKeyboardView.setVisibility(View.GONE);
@@ -1095,10 +1097,15 @@ public class SessionActivity extends AppCompatActivity
{
zoomControls.setIsZoomInEnabled(!sessionView.isAtMaxZoom());
zoomControls.setIsZoomOutEnabled(!sessionView.isAtMinZoom());
if (!ApplicationSettingsActivity.getHideZoomControls(this) &&
zoomControls.getVisibility() != View.VISIBLE)
zoomControls.show();
resetZoomControlsAutoHideTimeout();
if (sysKeyboardVisible || extKeyboardVisible)
return;
if (!ApplicationSettingsActivity.getHideZoomControls(this))
{
uiHandler.sendEmptyMessage(UIHandler.SHOW_ZOOMCONTROLS);
resetZoomControlsAutoHideTimeout();
}
}
// ****************************************************************************
@@ -1249,6 +1256,7 @@ public class SessionActivity extends AppCompatActivity
public static final int SHOW_DIALOG = 5;
public static final int GRAPHICS_CHANGED = 6;
public static final int SCROLLING_REQUESTED = 7;
public static final int SHOW_ZOOMCONTROLS = 8;
UIHandler()
{
@@ -1279,7 +1287,15 @@ public class SessionActivity extends AppCompatActivity
}
case HIDE_ZOOMCONTROLS:
{
zoomControls.hide();
if (zoomControls.isShown())
zoomControls.hide();
break;
}
case SHOW_ZOOMCONTROLS:
{
if (!zoomControls.isShown())
zoomControls.show();
break;
}
case SEND_MOVE_EVENT:

View File

@@ -18,12 +18,15 @@ import android.graphics.Matrix;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.text.InputType;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import com.freerdp.freerdpcore.application.SessionState;
import com.freerdp.freerdpcore.utils.DoubleGestureDetector;
@@ -408,4 +411,11 @@ public class SessionView extends View
return true;
}
}
@Override public InputConnection onCreateInputConnection(EditorInfo outAttrs)
{
super.onCreateInputConnection(outAttrs);
outAttrs.inputType = InputType.TYPE_CLASS_TEXT;
return null;
}
}