5package org.qtproject.qt.android;
7import android.content.Context;
8import android.os.Build;
9import android.view.WindowMetrics;
10import android.view.inputmethod.BaseInputConnection;
11import android.view.inputmethod.CompletionInfo;
12import android.view.inputmethod.ExtractedText;
13import android.view.inputmethod.ExtractedTextRequest;
14import android.view.inputmethod.InputMethodManager;
15import android.view.KeyEvent;
16import android.graphics.Rect;
17import android.app.Activity;
18import android.util.DisplayMetrics;
22 public int partialEndOffset;
23 public int partialStartOffset;
24 public int selectionEnd;
25 public int selectionStart;
26 public int startOffset;
30class QtNativeInputConnection
32 static native
boolean beginBatchEdit();
33 static native
boolean endBatchEdit();
34 static native
boolean commitText(String
text,
int newCursorPosition);
35 static native
boolean commitCompletion(String
text,
int position);
36 static native
boolean deleteSurroundingText(
int leftLength,
int rightLength);
37 static native
boolean finishComposingText();
38 static native
int getCursorCapsMode(
int reqModes);
39 static native QtExtractedText getExtractedText(
int hintMaxChars,
int hintMaxLines,
int flags);
43 static native
boolean setComposingText(String
text,
int newCursorPosition);
44 static native
boolean setComposingRegion(
int start,
int end);
45 static native
boolean setSelection(
int start,
int end);
46 static native
boolean selectAll();
47 static native
boolean cut();
48 static native
boolean copy();
49 static native
boolean copyURL();
50 static native
boolean paste();
51 static native
boolean updateCursorPosition();
54class HideKeyboardRunnable
implements Runnable {
55 private long m_hideTimeStamp =
System.nanoTime();
60 Activity
activity = QtNative.activity();
62 activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(
r);
65 if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
66 DisplayMetrics
metrics =
new DisplayMetrics();
68 screenHeight =
metrics.heightPixels;
70 final WindowMetrics maximumWindowMetrics =
activity.getWindowManager().getMaximumWindowMetrics();
71 screenHeight = maximumWindowMetrics.getBounds().height();
73 final int kbHeight = screenHeight -
r.bottom;
75 QtNative.activityDelegate().setKeyboardVisibility(
false, m_hideTimeStamp);
81 private static final int ID_SELECT_ALL = android.R.id.selectAll;
82 private static final int ID_CUT = android.R.id.cut;
83 private static final int ID_COPY = android.R.id.copy;
84 private static final int ID_PASTE = android.R.id.paste;
85 private static final int ID_COPY_URL = android.R.id.copyUrl;
86 private static final int ID_SWITCH_INPUT_METHOD = android.R.id.switchInputMethod;
87 private static final int ID_ADD_TO_DICTIONARY = android.R.id.addToDictionary;
91 private void setClosing(
boolean closing)
94 m_view.postDelayed(
new HideKeyboardRunnable(), 100);
102 super(targetView,
true);
110 return QtNativeInputConnection.beginBatchEdit();
117 return QtNativeInputConnection.endBatchEdit();
124 return QtNativeInputConnection.commitCompletion(
text.getText().toString(),
text.getPosition());
131 return QtNativeInputConnection.commitText(
text.toString(), newCursorPosition);
138 return QtNativeInputConnection.deleteSurroundingText(leftLength, rightLength);
146 return QtNativeInputConnection.finishComposingText();
152 return QtNativeInputConnection.getCursorCapsMode(reqModes);
158 QtExtractedText qExtractedText = QtNativeInputConnection.getExtractedText(
request.hintMaxChars,
161 if (qExtractedText ==
null)
164 ExtractedText extractedText =
new ExtractedText();
165 extractedText.partialEndOffset = qExtractedText.partialEndOffset;
166 extractedText.partialStartOffset = qExtractedText.partialStartOffset;
167 extractedText.selectionEnd = qExtractedText.selectionEnd;
168 extractedText.selectionStart = qExtractedText.selectionStart;
169 extractedText.startOffset = qExtractedText.startOffset;
170 extractedText.text = qExtractedText.text;
171 return extractedText;
176 return QtNativeInputConnection.getSelectedText(
flags);
182 return QtNativeInputConnection.getTextAfterCursor(
length,
flags);
188 return QtNativeInputConnection.getTextBeforeCursor(
length,
flags);
196 return QtNativeInputConnection.selectAll();
198 return QtNativeInputConnection.copy();
200 return QtNativeInputConnection.copyURL();
202 return QtNativeInputConnection.cut();
204 return QtNativeInputConnection.paste();
206 case ID_SWITCH_INPUT_METHOD:
207 InputMethodManager imm = (InputMethodManager)m_view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
209 imm.showInputMethodPicker();
213 case ID_ADD_TO_DICTIONARY:
224 return super.performContextMenuAction(
id);
234 if (
event.getKeyCode() == KeyEvent.KEYCODE_ENTER && m_view !=
null) {
236 switch (m_view.m_imeOptions) {
237 case android.view.inputmethod.EditorInfo.IME_ACTION_NEXT:
238 fakeEvent =
new KeyEvent(
event.getDownTime(),
239 event.getEventTime(),
241 KeyEvent.KEYCODE_TAB,
242 event.getRepeatCount(),
243 event.getMetaState());
244 return super.sendKeyEvent(fakeEvent);
246 case android.view.inputmethod.EditorInfo.IME_ACTION_PREVIOUS:
247 fakeEvent =
new KeyEvent(
event.getDownTime(),
248 event.getEventTime(),
250 KeyEvent.KEYCODE_TAB,
251 event.getRepeatCount(),
252 KeyEvent.META_SHIFT_ON);
253 return super.sendKeyEvent(fakeEvent);
255 case android.view.inputmethod.EditorInfo.IME_FLAG_NO_ENTER_ACTION:
264 return super.sendKeyEvent(
event);
271 return QtNativeInputConnection.setComposingText(
text.toString(), newCursorPosition);
278 return QtNativeInputConnection.setComposingRegion(
start,
end);
285 return QtNativeInputConnection.setSelection(
start,
end);
boolean setKeyboardVisibility(boolean visibility, long timeStamp)
void hideSoftwareKeyboard()
static QtActivityDelegate activityDelegate()
Q_CORE_EXPORT QtJniTypes::Activity activity()
auto run(QThreadPool *pool, Function &&f, Args &&...args)
constexpr OutputIterator copy(InputIterator first, InputIterator last, OutputIterator dest)
GLenum GLuint GLenum GLsizei length
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
QNetworkRequest request(url)