static jobjectArray nativeGetEvents(JNIEnv *env, jobject clazz, jlong ptr, jcharArray charsArray) { NativeKeyCharacterMap* map = reinterpret_cast<NativeKeyCharacterMap*>(ptr); jchar* chars = env->GetCharArrayElements(charsArray, NULL); if (!chars) { return NULL; } jsize numChars = env->GetArrayLength(charsArray); Vector<KeyEvent> events; jobjectArray result = NULL; if (map->getMap()->getEvents(map->getDeviceId(), chars, size_t(numChars), events)) { result = env->NewObjectArray(jsize(events.size()), gKeyEventClassInfo.clazz, NULL); if (result) { for (size_t i = 0; i < events.size(); i++) { jobject keyEventObj = android_view_KeyEvent_fromNative(env, &events.itemAt(i)); if (!keyEventObj) break; // threw OOM exception env->SetObjectArrayElement(result, jsize(i), keyEventObj); env->DeleteLocalRef(keyEventObj); } } } env->ReleaseCharArrayElements(charsArray, chars, JNI_ABORT); return result; }
/////////////////////////////////////////////////////////////////////////////// // // Interprets the data in this array as that of a matrix of size (is,js), // where is<=isize() and js<=jsize(), and re-sizes the matrix to be of size // (isize(),jsize()). Elements that were previously out of range are // filled with zeroes. // /////////////////////////////////////////////////////////////////////////////// bool Matrix::repackFrom(int is, int js) { if(is > isize() || js > jsize()) return(false); int i,j; i = isize()-1; while(i>=is) { for(j=jsize()-1; j>=0; --j) { val(i,j) = 0.0; } --i; } while(i>=0) { j = jsize()-1; while(j>=js) { val(i,j) = 0.0; --j; } while(j>=0) { val(i,j) = x[i*js + j]; --j; } --i; } return true; }
static jobject getExtractedText(JNIEnv *env, jobject /*thiz*/, int hintMaxChars, int hintMaxLines, jint flags) { if (!m_androidInputContext) return 0; const QAndroidInputContext::ExtractedText &extractedText = m_androidInputContext->getExtractedText(hintMaxChars, hintMaxLines, flags); #ifdef QT_DEBUG_ANDROID_IM_PROTOCOL qDebug() << "@@@ GETEX" << hintMaxChars << hintMaxLines << QString::fromLatin1("0x") + QString::number(flags,16) << extractedText.text << "partOff:" << extractedText.partialStartOffset << extractedText.partialEndOffset << "sel:" << extractedText.selectionStart << extractedText.selectionEnd << "offset:" << extractedText.startOffset; #endif jobject object = env->NewObject(m_extractedTextClass, m_classConstructorMethodID); env->SetIntField(object, m_partialStartOffsetFieldID, extractedText.partialStartOffset); env->SetIntField(object, m_partialEndOffsetFieldID, extractedText.partialEndOffset); env->SetIntField(object, m_selectionStartFieldID, extractedText.selectionStart); env->SetIntField(object, m_selectionEndFieldID, extractedText.selectionEnd); env->SetIntField(object, m_startOffsetFieldID, extractedText.startOffset); env->SetObjectField(object, m_textFieldID, env->NewString(reinterpret_cast<const jchar *>(extractedText.text.constData()), jsize(extractedText.text.length()))); return object; }
jclass findClass(const QString &className, JNIEnv *env) { return static_cast<jclass>(env->CallObjectMethod(m_classLoaderObject, m_loadClassMethodID, env->NewString(reinterpret_cast<const jchar *>(className.constData()), jsize(className.length())))); }
static jintArray childIdListForAccessibleObject(JNIEnv *env, jobject /*thiz*/, jint objectId) { QAccessibleInterface *iface = interfaceFromId(objectId); if (iface) { jintArray jArray = env->NewIntArray(jsize(iface->childCount())); for (int i = 0; i < iface->childCount(); ++i) { QAccessibleInterface *child = iface->child(i); if (child) { QAccessible::Id ifaceId = QAccessible::uniqueId(child); jint jid = ifaceId; env->SetIntArrayRegion(jArray, i, 1, &jid); } } return jArray; } return env->NewIntArray(jsize(0)); }
static jstring getTextBeforeCursor(JNIEnv *env, jobject /*thiz*/, jint length, jint flags) { if (!m_androidInputContext) return 0; const QString &text = m_androidInputContext->getTextBeforeCursor(length, flags); #ifdef QT_DEBUG_ANDROID_IM_PROTOCOL qDebug() << "@@@ GETB" << length << text; #endif return env->NewString(reinterpret_cast<const jchar *>(text.constData()), jsize(text.length())); }
/** * Constructs an immutable string contents accessor. */ explicit Contents(const String& str) : m_str(str), m_text(!str.get() ? NULL : str.m_env.GetStringUTFChars(str.get(), NULL)), m_length(m_text ? jsize(::std::strlen(m_text)) : 0) {}