JNIEnv* env = jniEnv();
- jobject tokenObj = javaObjectForIBinder(env, token);
- jstring reasonObj = env->NewStringUTF(reason.c_str());
+ ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token));
+ ScopedLocalRef<jstring> reasonObj(env, env->NewStringUTF(reason.c_str()));
jlong newTimeout = env->CallLongMethod(mServiceObj,
- gServiceClassInfo.notifyANR, tokenObj,
- reasonObj);
+ gServiceClassInfo.notifyANR, tokenObj.get(),
+ reasonObj.get());
if (checkAndClearExceptionFromCallback(env, "notifyANR")) {
newTimeout = 0; // abort dispatch
} else {
assert(newTimeout >= 0);
}
- env->DeleteLocalRef(reasonObj);
return newTimeout;
}
JNIEnv* env = jniEnv();
- jobject tokenObj = javaObjectForIBinder(env, token);
- if (tokenObj) {
+ ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token));
+ if (tokenObj.get()) {
env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyInputChannelBroken,
- tokenObj);
+ tokenObj.get());
checkAndClearExceptionFromCallback(env, "notifyInputChannelBroken");
}
}
JNIEnv* env = jniEnv();
- jobject oldTokenObj = javaObjectForIBinder(env, oldToken);
- jobject newTokenObj = javaObjectForIBinder(env, newToken);
+ ScopedLocalRef<jobject> oldTokenObj(env, javaObjectForIBinder(env, oldToken));
+ ScopedLocalRef<jobject> newTokenObj(env, javaObjectForIBinder(env, newToken));
env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyFocusChanged,
- oldTokenObj, newTokenObj);
+ oldTokenObj.get(), newTokenObj.get());
checkAndClearExceptionFromCallback(env, "notifyFocusChanged");
}
JNIEnv* env = jniEnv();
// Token may be null
- jobject tokenObj = javaObjectForIBinder(env, token);
+ ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token));
jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent);
if (keyEventObj) {
jlong delayMillis = env->CallLongMethod(mServiceObj,
gServiceClassInfo.interceptKeyBeforeDispatching,
- tokenObj, keyEventObj, policyFlags);
+ tokenObj.get(), keyEventObj, policyFlags);
bool error = checkAndClearExceptionFromCallback(env, "interceptKeyBeforeDispatching");
android_view_KeyEvent_recycle(env, keyEventObj);
env->DeleteLocalRef(keyEventObj);
JNIEnv* env = jniEnv();
// Note: tokenObj may be null.
- jobject tokenObj = javaObjectForIBinder(env, token);
+ ScopedLocalRef<jobject> tokenObj(env, javaObjectForIBinder(env, token));
jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent);
if (keyEventObj) {
jobject fallbackKeyEventObj = env->CallObjectMethod(mServiceObj,
gServiceClassInfo.dispatchUnhandledKey,
- tokenObj, keyEventObj, policyFlags);
+ tokenObj.get(), keyEventObj, policyFlags);
if (checkAndClearExceptionFromCallback(env, "dispatchUnhandledKey")) {
fallbackKeyEventObj = nullptr;
}
ATRACE_CALL();
JNIEnv* env = jniEnv();
- jobject touchedTokenObj = javaObjectForIBinder(env, touchedToken);
- env->CallVoidMethod(mServiceObj, gServiceClassInfo.onPointerDownOutsideFocus, touchedTokenObj);
+ ScopedLocalRef<jobject> touchedTokenObj(env, javaObjectForIBinder(env, touchedToken));
+ env->CallVoidMethod(mServiceObj, gServiceClassInfo.onPointerDownOutsideFocus,
+ touchedTokenObj.get());
checkAndClearExceptionFromCallback(env, "onPointerDownOutsideFocus");
}