diff --git a/src/android/jar/src/org/qtproject/qt/android/QtEditText.java b/src/android/jar/src/org/qtproject/qt/android/QtEditText.java index 3aaa51e4b52..45248872423 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtEditText.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtEditText.java @@ -47,17 +47,13 @@ class QtEditText extends View private final int ImhUrlCharactersOnly = 0x400000; private final int ImhLatinOnly = 0x800000; - private QtInputConnectionListener m_qtInputConnectionListener; + private final QtInputConnectionListener m_qtInputConnectionListener; - public QtEditText(Context context) + public QtEditText(Context context, QtInputConnectionListener listener) { super(context); setFocusable(true); setFocusableInTouchMode(true); - } - - public void setQtInputConnectionListener(QtInputConnectionListener listener) - { m_qtInputConnectionListener = listener; } 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 b7cab8c1411..206b0248770 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtInputDelegate.java @@ -21,7 +21,7 @@ import android.view.inputmethod.InputMethodManager; import org.qtproject.qt.android.QtInputConnection.QtInputConnectionListener; /** @noinspection FieldCanBeLocal*/ -class QtInputDelegate { +class QtInputDelegate implements QtInputConnection.QtInputConnectionListener { // keyboard methods public static native void keyDown(int key, int unicode, int modifier, boolean autoRepeat); @@ -83,31 +83,31 @@ class QtInputDelegate { } private final KeyboardVisibilityListener m_keyboardVisibilityListener; - private final QtInputConnectionListener m_inputConnectionListener; QtInputDelegate(Activity activity, KeyboardVisibilityListener listener) { this.m_keyboardVisibilityListener = listener; m_imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); - m_inputConnectionListener = new QtInputConnectionListener() { - @Override - public void onSetClosing(boolean closing) { - if (!closing) - setKeyboardVisibility(true, System.nanoTime()); - } - - @Override - public void onHideKeyboardRunnableDone(boolean visibility, long hideTimeStamp) { - setKeyboardVisibility(visibility, hideTimeStamp); - } - - @Override - public void onSendKeyEventDefaultCase() { - hideSoftwareKeyboard(); - } - }; } + // QtInputConnectionListener methods + @Override + public void onSetClosing(boolean closing) { + if (!closing) + setKeyboardVisibility(true, System.nanoTime()); + } + + @Override + public void onHideKeyboardRunnableDone(boolean visibility, long hideTimeStamp) { + setKeyboardVisibility(visibility, hideTimeStamp); + } + + @Override + public void onSendKeyEventDefaultCase() { + hideSoftwareKeyboard(); + } + // QtInputConnectionListener methods + public boolean isKeyboardVisible() { return m_keyboardIsVisible; @@ -172,9 +172,6 @@ class QtInputDelegate { void setFocusedView(QtEditText currentEditText) { m_currentEditText = currentEditText; - // TODO rather set the listener when creating the edit text - if (m_currentEditText != null) - m_currentEditText.setQtInputConnectionListener(m_inputConnectionListener); } public void showSoftwareKeyboard(Activity activity, QtLayout layout, 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 e5551f0d3df..bac06f7f566 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java @@ -26,11 +26,11 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { private static native void setSurface(int windowId, Surface surface); static native void windowFocusChanged(boolean hasFocus, int id); - public QtWindow(Context context, QtWindow parentWindow) + public QtWindow(Context context, QtWindow parentWindow, QtInputDelegate delegate) { super(context); setId(View.generateViewId()); - m_editText = new QtEditText(context); + m_editText = new QtEditText(context, delegate); setParent(parentWindow); setFocusableInTouchMode(true); diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp index e4d7b4c7ec8..e47281664d9 100644 --- a/src/plugins/platforms/android/qandroidplatformwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp @@ -57,7 +57,8 @@ QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window) m_nativeQtWindow = QJniObject::construct( QNativeInterface::QAndroidApplication::context(), - m_nativeParentQtWindow); + m_nativeParentQtWindow, + QtAndroid::qtInputDelegate()); m_nativeViewId = m_nativeQtWindow.callMethod("getId"); if (window->isTopLevel())