5package org.qtproject.qt.android;
7import android.content.Context;
8import android.os.Build;
9import android.util.Log;
10import android.view.WindowMetrics;
11import android.view.inputmethod.BaseInputConnection;
12import android.view.inputmethod.CompletionInfo;
13import android.view.inputmethod.ExtractedText;
14import android.view.inputmethod.ExtractedTextRequest;
15import android.view.inputmethod.InputMethodManager;
16import android.view.KeyEvent;
17import android.graphics.Rect;
18import android.app.Activity;
19import android.util.DisplayMetrics;
23 public int partialEndOffset;
24 public int partialStartOffset;
25 public int selectionEnd;
26 public int selectionStart;
27 public int startOffset;
31class QtNativeInputConnection
33 static native
boolean beginBatchEdit();
34 static native
boolean endBatchEdit();
35 static native
boolean commitText(String
text,
int newCursorPosition);
36 static native
boolean commitCompletion(String
text,
int position);
37 static native
boolean deleteSurroundingText(
int leftLength,
int rightLength);
38 static native
boolean finishComposingText();
39 static native
int getCursorCapsMode(
int reqModes);
40 static native QtExtractedText getExtractedText(
int hintMaxChars,
int hintMaxLines,
int flags);
41 static native String getSelectedText(
int flags);
42 static native String getTextAfterCursor(
int length,
int flags);
43 static native String getTextBeforeCursor(
int length,
int flags);
44 static native
boolean setComposingText(String
text,
int newCursorPosition);
45 static native
boolean setComposingRegion(
int start,
int end);
46 static native
boolean setSelection(
int start,
int end);
47 static native
boolean selectAll();
48 static native
boolean cut();
49 static native
boolean copy();
50 static native
boolean copyURL();
51 static native
boolean paste();
52 static native
boolean updateCursorPosition();
53 static native
void reportFullscreenMode(
boolean enabled);
54 static native
boolean fullscreenMode();
57class QtInputConnection
extends BaseInputConnection
59 private static final int ID_SELECT_ALL = android.R.id.selectAll;
60 private static final int ID_CUT = android.R.id.cut;
61 private static final int ID_COPY = android.R.id.copy;
62 private static final int ID_PASTE = android.R.id.paste;
63 private static final int ID_COPY_URL = android.R.id.copyUrl;
64 private static final int ID_SWITCH_INPUT_METHOD = android.R.id.switchInputMethod;
65 private static final int ID_ADD_TO_DICTIONARY = android.R.id.addToDictionary;
67 private static final String QtTAG =
"QtInputConnection";
69 private final QtInputConnectionListener m_qtInputConnectionListener;
71 class HideKeyboardRunnable
implements Runnable {
75 Activity
activity = QtNative.activity();
76 if (activity ==
null) {
77 Log.w(QtTAG,
"HideKeyboardRunnable: The activity reference is null");
82 activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(
r);
85 if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
86 DisplayMetrics
metrics =
new DisplayMetrics();
88 screenHeight =
metrics.heightPixels;
90 final WindowMetrics maximumWindowMetrics =
activity.getWindowManager().getMaximumWindowMetrics();
91 screenHeight = maximumWindowMetrics.getBounds().height();
93 final int kbHeight = screenHeight -
r.bottom;
95 m_qtInputConnectionListener.onHideKeyboardRunnableDone(
false,
System.nanoTime());
105 private final QtEditText m_view;
106 private final InputMethodManager m_imm;
108 private void setClosing(
boolean closing)
111 m_view.postDelayed(
new HideKeyboardRunnable(), 100);
113 m_qtInputConnectionListener.onSetClosing(
false);
118 super(targetView,
true);
120 m_imm = (InputMethodManager)m_view.getContext().getSystemService(
121 Context.INPUT_METHOD_SERVICE);
122 m_qtInputConnectionListener = listener;
125 public void restartImmInput()
127 if (QtNativeInputConnection.fullscreenMode()) {
129 m_imm.restartInput(m_view);
135 public boolean beginBatchEdit()
138 return QtNativeInputConnection.beginBatchEdit();
142 public boolean reportFullscreenMode (
boolean enabled)
144 QtNativeInputConnection.reportFullscreenMode(
enabled);
147 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
154 public boolean endBatchEdit()
157 return QtNativeInputConnection.endBatchEdit();
161 public boolean commitCompletion(CompletionInfo
text)
164 return QtNativeInputConnection.commitCompletion(
text.getText().toString(),
text.getPosition());
168 public boolean commitText(CharSequence
text,
int newCursorPosition)
172 return QtNativeInputConnection.commitText(
text.toString(), newCursorPosition);
176 public boolean deleteSurroundingText(
int leftLength,
int rightLength)
179 return QtNativeInputConnection.deleteSurroundingText(leftLength, rightLength);
183 public boolean finishComposingText()
187 return QtNativeInputConnection.finishComposingText();
191 public int getCursorCapsMode(
int reqModes)
193 return QtNativeInputConnection.getCursorCapsMode(reqModes);
197 public ExtractedText getExtractedText(ExtractedTextRequest
request,
int flags)
199 QtExtractedText qExtractedText = QtNativeInputConnection.getExtractedText(
request.hintMaxChars,
202 if (qExtractedText ==
null)
205 ExtractedText extractedText =
new ExtractedText();
206 extractedText.partialEndOffset = qExtractedText.partialEndOffset;
207 extractedText.partialStartOffset = qExtractedText.partialStartOffset;
208 extractedText.selectionEnd = qExtractedText.selectionEnd;
209 extractedText.selectionStart = qExtractedText.selectionStart;
210 extractedText.startOffset = qExtractedText.startOffset;
211 extractedText.text = qExtractedText.text;
212 return extractedText;
215 public CharSequence getSelectedText(
int flags)
217 return QtNativeInputConnection.getSelectedText(
flags);
221 public CharSequence getTextAfterCursor(
int length,
int flags)
223 return QtNativeInputConnection.getTextAfterCursor(
length,
flags);
227 public CharSequence getTextBeforeCursor(
int length,
int flags)
229 return QtNativeInputConnection.getTextBeforeCursor(
length,
flags);
233 public boolean performContextMenuAction(
int id)
238 return QtNativeInputConnection.selectAll();
241 return QtNativeInputConnection.copy();
244 return QtNativeInputConnection.copyURL();
247 return QtNativeInputConnection.cut();
250 return QtNativeInputConnection.paste();
251 case ID_SWITCH_INPUT_METHOD:
253 m_imm.showInputMethodPicker();
256 case ID_ADD_TO_DICTIONARY:
267 return super.performContextMenuAction(
id);
276 finishComposingText();
277 if (
event.getKeyCode() ==
KeyEvent.KEYCODE_ENTER && m_view !=
null) {
279 switch (m_view.m_imeOptions) {
280 case android.view.inputmethod.EditorInfo.IME_ACTION_NEXT:
282 event.getEventTime(),
285 event.getRepeatCount(),
286 event.getMetaState());
287 return super.sendKeyEvent(fakeEvent);
288 case android.view.inputmethod.EditorInfo.IME_ACTION_PREVIOUS:
290 event.getEventTime(),
293 event.getRepeatCount(),
295 return super.sendKeyEvent(fakeEvent);
296 case android.view.inputmethod.EditorInfo.IME_FLAG_NO_ENTER_ACTION:
300 m_qtInputConnectionListener.onSendKeyEventDefaultCase();
304 return super.sendKeyEvent(
event);
308 public boolean setComposingText(CharSequence
text,
int newCursorPosition)
311 return QtNativeInputConnection.setComposingText(
text.toString(), newCursorPosition);
315 public boolean setComposingRegion(
int start,
int end)
318 return QtNativeInputConnection.setComposingRegion(
start,
end);
322 public boolean setSelection(
int start,
int end)
325 return QtNativeInputConnection.setSelection(
start,
end);
Q_CORE_EXPORT QtJniTypes::Activity activity()
GLenum GLuint GLenum GLsizei length
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
QNetworkRequest request(url)