Loading services/core/jni/com_android_server_input_InputManagerService.cpp +17 −17 Original line number Original line Diff line number Diff line Loading @@ -724,18 +724,19 @@ nsecs_t NativeInputManager::notifyANR(const sp<InputApplicationHandle>& inputApp JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token)); jobject tokenObj = javaObjectForIBinder(env, token); ScopedLocalRef<jstring> reasonObj(env, env->NewStringUTF(reason.c_str())); jstring reasonObj = env->NewStringUTF(reason.c_str()); jlong newTimeout = env->CallLongMethod(mServiceObj, jlong newTimeout = env->CallLongMethod(mServiceObj, gServiceClassInfo.notifyANR, tokenObj.get(), gServiceClassInfo.notifyANR, tokenObj, reasonObj.get()); reasonObj); if (checkAndClearExceptionFromCallback(env, "notifyANR")) { if (checkAndClearExceptionFromCallback(env, "notifyANR")) { newTimeout = 0; // abort dispatch newTimeout = 0; // abort dispatch } else { } else { assert(newTimeout >= 0); assert(newTimeout >= 0); } } env->DeleteLocalRef(reasonObj); return newTimeout; return newTimeout; } } Loading @@ -747,10 +748,10 @@ void NativeInputManager::notifyInputChannelBroken(const sp<IBinder>& token) { JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token)); jobject tokenObj = javaObjectForIBinder(env, token); if (tokenObj.get()) { if (tokenObj) { env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyInputChannelBroken, env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyInputChannelBroken, tokenObj.get()); tokenObj); checkAndClearExceptionFromCallback(env, "notifyInputChannelBroken"); checkAndClearExceptionFromCallback(env, "notifyInputChannelBroken"); } } } } Loading @@ -764,10 +765,10 @@ void NativeInputManager::notifyFocusChanged(const sp<IBinder>& oldToken, JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); ScopedLocalRef<jobject> oldTokenObj(env, javaObjectForIBinder(env, oldToken)); jobject oldTokenObj = javaObjectForIBinder(env, oldToken); ScopedLocalRef<jobject> newTokenObj(env, javaObjectForIBinder(env, newToken)); jobject newTokenObj = javaObjectForIBinder(env, newToken); env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyFocusChanged, env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyFocusChanged, oldTokenObj.get(), newTokenObj.get()); oldTokenObj, newTokenObj); checkAndClearExceptionFromCallback(env, "notifyFocusChanged"); checkAndClearExceptionFromCallback(env, "notifyFocusChanged"); } } Loading Loading @@ -1140,13 +1141,13 @@ nsecs_t NativeInputManager::interceptKeyBeforeDispatching( JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); // Token may be null // Token may be null ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token)); jobject tokenObj = javaObjectForIBinder(env, token); jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); if (keyEventObj) { if (keyEventObj) { jlong delayMillis = env->CallLongMethod(mServiceObj, jlong delayMillis = env->CallLongMethod(mServiceObj, gServiceClassInfo.interceptKeyBeforeDispatching, gServiceClassInfo.interceptKeyBeforeDispatching, tokenObj.get(), keyEventObj, policyFlags); tokenObj, keyEventObj, policyFlags); bool error = checkAndClearExceptionFromCallback(env, "interceptKeyBeforeDispatching"); bool error = checkAndClearExceptionFromCallback(env, "interceptKeyBeforeDispatching"); android_view_KeyEvent_recycle(env, keyEventObj); android_view_KeyEvent_recycle(env, keyEventObj); env->DeleteLocalRef(keyEventObj); env->DeleteLocalRef(keyEventObj); Loading Loading @@ -1174,12 +1175,12 @@ bool NativeInputManager::dispatchUnhandledKey(const sp<IBinder>& token, JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); // Note: tokenObj may be null. // Note: tokenObj may be null. ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token)); jobject tokenObj = javaObjectForIBinder(env, token); jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); if (keyEventObj) { if (keyEventObj) { jobject fallbackKeyEventObj = env->CallObjectMethod(mServiceObj, jobject fallbackKeyEventObj = env->CallObjectMethod(mServiceObj, gServiceClassInfo.dispatchUnhandledKey, gServiceClassInfo.dispatchUnhandledKey, tokenObj.get(), keyEventObj, policyFlags); tokenObj, keyEventObj, policyFlags); if (checkAndClearExceptionFromCallback(env, "dispatchUnhandledKey")) { if (checkAndClearExceptionFromCallback(env, "dispatchUnhandledKey")) { fallbackKeyEventObj = nullptr; fallbackKeyEventObj = nullptr; } } Loading Loading @@ -1224,9 +1225,8 @@ void NativeInputManager::onPointerDownOutsideFocus(const sp<IBinder>& touchedTok ATRACE_CALL(); ATRACE_CALL(); JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); ScopedLocalRef<jobject> touchedTokenObj(env, javaObjectForIBinder(env, touchedToken)); jobject touchedTokenObj = javaObjectForIBinder(env, touchedToken); env->CallVoidMethod(mServiceObj, gServiceClassInfo.onPointerDownOutsideFocus, env->CallVoidMethod(mServiceObj, gServiceClassInfo.onPointerDownOutsideFocus, touchedTokenObj); touchedTokenObj.get()); checkAndClearExceptionFromCallback(env, "onPointerDownOutsideFocus"); checkAndClearExceptionFromCallback(env, "onPointerDownOutsideFocus"); } } Loading Loading
services/core/jni/com_android_server_input_InputManagerService.cpp +17 −17 Original line number Original line Diff line number Diff line Loading @@ -724,18 +724,19 @@ nsecs_t NativeInputManager::notifyANR(const sp<InputApplicationHandle>& inputApp JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token)); jobject tokenObj = javaObjectForIBinder(env, token); ScopedLocalRef<jstring> reasonObj(env, env->NewStringUTF(reason.c_str())); jstring reasonObj = env->NewStringUTF(reason.c_str()); jlong newTimeout = env->CallLongMethod(mServiceObj, jlong newTimeout = env->CallLongMethod(mServiceObj, gServiceClassInfo.notifyANR, tokenObj.get(), gServiceClassInfo.notifyANR, tokenObj, reasonObj.get()); reasonObj); if (checkAndClearExceptionFromCallback(env, "notifyANR")) { if (checkAndClearExceptionFromCallback(env, "notifyANR")) { newTimeout = 0; // abort dispatch newTimeout = 0; // abort dispatch } else { } else { assert(newTimeout >= 0); assert(newTimeout >= 0); } } env->DeleteLocalRef(reasonObj); return newTimeout; return newTimeout; } } Loading @@ -747,10 +748,10 @@ void NativeInputManager::notifyInputChannelBroken(const sp<IBinder>& token) { JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token)); jobject tokenObj = javaObjectForIBinder(env, token); if (tokenObj.get()) { if (tokenObj) { env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyInputChannelBroken, env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyInputChannelBroken, tokenObj.get()); tokenObj); checkAndClearExceptionFromCallback(env, "notifyInputChannelBroken"); checkAndClearExceptionFromCallback(env, "notifyInputChannelBroken"); } } } } Loading @@ -764,10 +765,10 @@ void NativeInputManager::notifyFocusChanged(const sp<IBinder>& oldToken, JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); ScopedLocalRef<jobject> oldTokenObj(env, javaObjectForIBinder(env, oldToken)); jobject oldTokenObj = javaObjectForIBinder(env, oldToken); ScopedLocalRef<jobject> newTokenObj(env, javaObjectForIBinder(env, newToken)); jobject newTokenObj = javaObjectForIBinder(env, newToken); env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyFocusChanged, env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyFocusChanged, oldTokenObj.get(), newTokenObj.get()); oldTokenObj, newTokenObj); checkAndClearExceptionFromCallback(env, "notifyFocusChanged"); checkAndClearExceptionFromCallback(env, "notifyFocusChanged"); } } Loading Loading @@ -1140,13 +1141,13 @@ nsecs_t NativeInputManager::interceptKeyBeforeDispatching( JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); // Token may be null // Token may be null ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token)); jobject tokenObj = javaObjectForIBinder(env, token); jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); if (keyEventObj) { if (keyEventObj) { jlong delayMillis = env->CallLongMethod(mServiceObj, jlong delayMillis = env->CallLongMethod(mServiceObj, gServiceClassInfo.interceptKeyBeforeDispatching, gServiceClassInfo.interceptKeyBeforeDispatching, tokenObj.get(), keyEventObj, policyFlags); tokenObj, keyEventObj, policyFlags); bool error = checkAndClearExceptionFromCallback(env, "interceptKeyBeforeDispatching"); bool error = checkAndClearExceptionFromCallback(env, "interceptKeyBeforeDispatching"); android_view_KeyEvent_recycle(env, keyEventObj); android_view_KeyEvent_recycle(env, keyEventObj); env->DeleteLocalRef(keyEventObj); env->DeleteLocalRef(keyEventObj); Loading Loading @@ -1174,12 +1175,12 @@ bool NativeInputManager::dispatchUnhandledKey(const sp<IBinder>& token, JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); // Note: tokenObj may be null. // Note: tokenObj may be null. ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token)); jobject tokenObj = javaObjectForIBinder(env, token); jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent); if (keyEventObj) { if (keyEventObj) { jobject fallbackKeyEventObj = env->CallObjectMethod(mServiceObj, jobject fallbackKeyEventObj = env->CallObjectMethod(mServiceObj, gServiceClassInfo.dispatchUnhandledKey, gServiceClassInfo.dispatchUnhandledKey, tokenObj.get(), keyEventObj, policyFlags); tokenObj, keyEventObj, policyFlags); if (checkAndClearExceptionFromCallback(env, "dispatchUnhandledKey")) { if (checkAndClearExceptionFromCallback(env, "dispatchUnhandledKey")) { fallbackKeyEventObj = nullptr; fallbackKeyEventObj = nullptr; } } Loading Loading @@ -1224,9 +1225,8 @@ void NativeInputManager::onPointerDownOutsideFocus(const sp<IBinder>& touchedTok ATRACE_CALL(); ATRACE_CALL(); JNIEnv* env = jniEnv(); JNIEnv* env = jniEnv(); ScopedLocalRef<jobject> touchedTokenObj(env, javaObjectForIBinder(env, touchedToken)); jobject touchedTokenObj = javaObjectForIBinder(env, touchedToken); env->CallVoidMethod(mServiceObj, gServiceClassInfo.onPointerDownOutsideFocus, env->CallVoidMethod(mServiceObj, gServiceClassInfo.onPointerDownOutsideFocus, touchedTokenObj); touchedTokenObj.get()); checkAndClearExceptionFromCallback(env, "onPointerDownOutsideFocus"); checkAndClearExceptionFromCallback(env, "onPointerDownOutsideFocus"); } } Loading