diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java index 0e74884a773..d8a2f50cb93 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java @@ -116,7 +116,6 @@ abstract class QtActivityDelegateBase if (newFocus instanceof QtEditText) { final QtWindow newWindow = (QtWindow) newFocus.getParent(); QtWindow.windowFocusChanged(true, newWindow.getId()); - m_inputDelegate.setFocusedView((QtEditText) newFocus); } else { int id = -1; if (oldFocus instanceof QtEditText) { @@ -124,7 +123,6 @@ abstract class QtActivityDelegateBase id = oldWindow.getId(); } QtWindow.windowFocusChanged(false, id); - m_inputDelegate.setFocusedView(null); } } diff --git a/src/android/jar/src/org/qtproject/qt/android/QtInputConnection.java b/src/android/jar/src/org/qtproject/qt/android/QtInputConnection.java index 845f7c5e8d3..399a9b7600a 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtInputConnection.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtInputConnection.java @@ -104,6 +104,7 @@ class QtInputConnection extends BaseInputConnection void onSetClosing(boolean closing); void onHideKeyboardRunnableDone(boolean visibility, long hideTimeStamp); void onSendKeyEventDefaultCase(); + void onEditTextChanged(QtEditText editText); } private final QtEditText m_view; diff --git a/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java index 3a879776c2a..6a18d4931bd 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java @@ -117,6 +117,7 @@ class QtInputDelegate implements QtInputConnection.QtInputConnectionListener, Qt return; m_currentEditText.setEditTextOptions(enterKeyType, inputHints); + m_currentEditText.requestFocus(); m_currentEditText.postDelayed(() -> { m_imm.showSoftInput(m_currentEditText, 0, new ResultReceiver(new Handler()) { @@ -241,6 +242,11 @@ class QtInputDelegate implements QtInputConnection.QtInputConnectionListener, Qt public void onSendKeyEventDefaultCase() { hideSoftwareKeyboard(); } + + @Override + public void onEditTextChanged(QtEditText editText) { + setFocusedView(editText); + } // QtInputConnectionListener methods boolean isKeyboardVisible() @@ -283,7 +289,6 @@ class QtInputDelegate implements QtInputConnection.QtInputConnectionListener, Qt // Hiding the keyboard clears the immersive mode, so we need to set it again. if (!visibility) m_keyboardVisibilityListener.onKeyboardVisibilityChange(); - } void setFocusedView(QtEditText currentEditText) diff --git a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java index 3b8fe4b1e96..e844a57987a 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java @@ -19,6 +19,7 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { private QtWindow m_parentWindow; private GestureDetector m_gestureDetector; private final QtEditText m_editText; + private final QtInputConnection.QtInputConnectionListener m_inputConnectionListener; private static native void setSurface(int windowId, Surface surface); static native void windowFocusChanged(boolean hasFocus, int id); @@ -29,6 +30,7 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { super(context); setId(View.generateViewId()); m_editText = new QtEditText(context, listener); + m_inputConnectionListener = listener; setParent(parentWindow); setFocusableInTouchMode(true); addView(m_editText, new QtLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, @@ -65,7 +67,9 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { @Override public boolean onTouchEvent(MotionEvent event) { - m_editText.requestFocus(); + if (m_editText != null && m_inputConnectionListener != null) + m_inputConnectionListener.onEditTextChanged(m_editText); + event.setLocation(event.getX() + getX(), event.getY() + getY()); QtInputDelegate.sendTouchEvent(event, getId()); m_gestureDetector.onTouchEvent(event);