summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/qandroidinputcontext.cpp
diff options
context:
space:
mode:
authorBartlomiej Moskal <[email protected]>2024-09-18 09:00:17 +0200
committerBartlomiej Moskal <[email protected]>2024-10-02 11:24:31 +0000
commitdbd5af6231c9182ef370eca2e06c485591d715b9 (patch)
tree83e3e011f20bd6670fee3ff8f6f0da38880c9e99 /src/plugins/platforms/android/qandroidinputcontext.cpp
parent44149f9d8b62b5343a5d06628b0c9588f035ccc2 (diff)
Android: Override new methods in InputConnection
InputConnection interface got new method like [0]replaceText and some overloaded (setComposingText, setComposingRegion and commitText) that need to be override by QtInputConnection [0]https://developer.android.com/reference/android/view/inputmethod/InputConnection#replaceText(int,%20int,%20java.lang.CharSequence,%20int,%20android.view.inputmethod.TextAttribute) Task-number: QTBUG-120238 Pick-to: 6.8 6.7 Change-Id: I72a35ff6bf8cdc10d782b24efb6c99b92b33926d Reviewed-by: Assam Boudjelthia <[email protected]>
Diffstat (limited to 'src/plugins/platforms/android/qandroidinputcontext.cpp')
-rw-r--r--src/plugins/platforms/android/qandroidinputcontext.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp
index 62212ff63d7..24742160bf9 100644
--- a/src/plugins/platforms/android/qandroidinputcontext.cpp
+++ b/src/plugins/platforms/android/qandroidinputcontext.cpp
@@ -137,6 +137,23 @@ static jboolean finishComposingText(JNIEnv */*env*/, jobject /*thiz*/)
return res;
}
+static jboolean replaceText(JNIEnv *env, jobject /*thiz*/, jint start, jint end, jstring text, jint newCursorPosition)
+{
+ if (!m_androidInputContext)
+ return JNI_FALSE;
+
+ jboolean isCopy;
+ const jchar *jstr = env->GetStringChars(text, &isCopy);
+ QString str(reinterpret_cast<const QChar *>(jstr), env->GetStringLength(text));
+ env->ReleaseStringChars(text, jstr);
+
+ qCDebug(lcQpaInputMethods) << "@@@ REPLACE" << start << end << str << newCursorPosition;
+ jboolean res = JNI_FALSE;
+ runOnQtThread([&]{res = m_androidInputContext->replaceText(start, end, str, newCursorPosition);});
+
+ return res;
+}
+
static jint getCursorCapsMode(JNIEnv */*env*/, jobject /*thiz*/, jint reqModes)
{
if (!m_androidInputContext)
@@ -336,6 +353,7 @@ static JNINativeMethod methods[] = {
{"getSelectedText", "(I)Ljava/lang/String;", (void *)getSelectedText},
{"getTextAfterCursor", "(II)Ljava/lang/String;", (void *)getTextAfterCursor},
{"getTextBeforeCursor", "(II)Ljava/lang/String;", (void *)getTextBeforeCursor},
+ {"replaceText", "(IILjava/lang/String;I)Z", (void *)replaceText},
{"setComposingText", "(Ljava/lang/String;I)Z", (void *)setComposingText},
{"setComposingRegion", "(II)Z", (void *)setComposingRegion},
{"setSelection", "(II)Z", (void *)setSelection},
@@ -1123,6 +1141,21 @@ jboolean QAndroidInputContext::finishComposingText()
return JNI_TRUE;
}
+/*
+ Android docs say: This behaves like calling finishComposingText(), setSelection(start, end)
+ and then commitText(text, newCursorPosition, textAttribute)
+ https://developer.android.com/reference/android/view/inputmethod/InputConnection#replaceText(int,%20int,%20java.lang.CharSequence,%20int,%20android.view.inputmethod.TextAttribute)
+*/
+jboolean QAndroidInputContext::replaceText(jint start, jint end, const QString text, jint newCursorPosition)
+{
+ if (!finishComposingText())
+ return JNI_FALSE;
+ if (!setSelection(start, end))
+ return JNI_FALSE;
+
+ return commitText(text, newCursorPosition);
+}
+
void QAndroidInputContext::reportFullscreenMode(jboolean enabled)
{
m_fullScreenMode = enabled;