Cache VerifiedInputEvent class references
Currently, the variables 'clazz' and 'constructor' are not stored properly. Cache them to make it consistent with all of the other jni code. This would also prevent a crash in checkjni for using deleted local reference (it's never made global in the current code). Bug: 134977432 Test: atest VerifyInputEventTest (run several times) Change-Id: Icef5271d915fce49b24d987923942fbdc4b6898b
This commit is contained in:
@@ -182,6 +182,8 @@ extern int register_android_view_KeyEvent(JNIEnv* env);
|
||||
extern int register_android_view_MotionEvent(JNIEnv* env);
|
||||
extern int register_android_view_PointerIcon(JNIEnv* env);
|
||||
extern int register_android_view_VelocityTracker(JNIEnv* env);
|
||||
extern int register_android_view_VerifiedKeyEvent(JNIEnv* env);
|
||||
extern int register_android_view_VerifiedMotionEvent(JNIEnv* env);
|
||||
extern int register_android_content_res_ObbScanner(JNIEnv* env);
|
||||
extern int register_android_content_res_Configuration(JNIEnv* env);
|
||||
extern int register_android_animation_PropertyValuesHolder(JNIEnv *env);
|
||||
@@ -1562,6 +1564,8 @@ static const RegJNIRec gRegJNI[] = {
|
||||
REG_JNI(register_android_view_MotionEvent),
|
||||
REG_JNI(register_android_view_PointerIcon),
|
||||
REG_JNI(register_android_view_VelocityTracker),
|
||||
REG_JNI(register_android_view_VerifiedKeyEvent),
|
||||
REG_JNI(register_android_view_VerifiedMotionEvent),
|
||||
|
||||
REG_JNI(register_android_content_res_ObbScanner),
|
||||
REG_JNI(register_android_content_res_Configuration),
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#define LOG_TAG "MotionEvent-JNI"
|
||||
#define LOG_TAG "VerifiedKey-JNI"
|
||||
|
||||
#include "android_view_VerifiedKeyEvent.h"
|
||||
#include <input/Input.h>
|
||||
@@ -22,18 +22,29 @@
|
||||
|
||||
namespace android {
|
||||
|
||||
static struct {
|
||||
jclass clazz;
|
||||
|
||||
jmethodID constructor;
|
||||
} gVerifiedKeyEventClassInfo;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
jobject android_view_VerifiedKeyEvent(JNIEnv* env, const VerifiedKeyEvent& event) {
|
||||
static jclass clazz = FindClassOrDie(env, "android/view/VerifiedKeyEvent");
|
||||
return env->NewObject(gVerifiedKeyEventClassInfo.clazz, gVerifiedKeyEventClassInfo.constructor,
|
||||
event.deviceId, event.eventTimeNanos, event.source, event.displayId,
|
||||
event.action, event.downTimeNanos, event.flags, event.keyCode,
|
||||
event.scanCode, event.metaState, event.repeatCount);
|
||||
}
|
||||
|
||||
static jmethodID constructor = GetMethodIDOrDie(env, clazz, "<init>", "(IJIIIJIIIII)V");
|
||||
int register_android_view_VerifiedKeyEvent(JNIEnv* env) {
|
||||
jclass clazz = FindClassOrDie(env, "android/view/VerifiedKeyEvent");
|
||||
gVerifiedKeyEventClassInfo.clazz = MakeGlobalRefOrDie(env, clazz);
|
||||
|
||||
jobject object =
|
||||
env->NewObject(clazz, constructor, event.deviceId, event.eventTimeNanos, event.source,
|
||||
event.displayId, event.action, event.downTimeNanos, event.flags,
|
||||
event.keyCode, event.scanCode, event.metaState, event.repeatCount);
|
||||
return object;
|
||||
gVerifiedKeyEventClassInfo.constructor =
|
||||
GetMethodIDOrDie(env, clazz, "<init>", "(IJIIIJIIIII)V");
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#define LOG_TAG "MotionEvent-JNI"
|
||||
#define LOG_TAG "VerifiedMotion-JNI"
|
||||
|
||||
#include "android_view_VerifiedMotionEvent.h"
|
||||
#include <input/Input.h>
|
||||
@@ -22,18 +22,30 @@
|
||||
|
||||
namespace android {
|
||||
|
||||
static struct {
|
||||
jclass clazz;
|
||||
|
||||
jmethodID constructor;
|
||||
} gVerifiedMotionEventClassInfo;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
jobject android_view_VerifiedMotionEvent(JNIEnv* env, const VerifiedMotionEvent& event) {
|
||||
static jclass clazz = FindClassOrDie(env, "android/view/VerifiedMotionEvent");
|
||||
return env->NewObject(gVerifiedMotionEventClassInfo.clazz,
|
||||
gVerifiedMotionEventClassInfo.constructor, event.deviceId,
|
||||
event.eventTimeNanos, event.source, event.displayId, event.rawX,
|
||||
event.rawY, event.actionMasked, event.downTimeNanos, event.flags,
|
||||
event.metaState, event.buttonState);
|
||||
}
|
||||
|
||||
static jmethodID constructor = GetMethodIDOrDie(env, clazz, "<init>", "(IJIIFFIJIII)V");
|
||||
int register_android_view_VerifiedMotionEvent(JNIEnv* env) {
|
||||
jclass clazz = FindClassOrDie(env, "android/view/VerifiedMotionEvent");
|
||||
gVerifiedMotionEventClassInfo.clazz = MakeGlobalRefOrDie(env, clazz);
|
||||
|
||||
jobject object =
|
||||
env->NewObject(clazz, constructor, event.deviceId, event.eventTimeNanos, event.source,
|
||||
event.displayId, event.rawX, event.rawY, event.actionMasked,
|
||||
event.downTimeNanos, event.flags, event.metaState, event.buttonState);
|
||||
return object;
|
||||
gVerifiedMotionEventClassInfo.constructor =
|
||||
GetMethodIDOrDie(env, clazz, "<init>", "(IJIIFFIJIII)V");
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
|
||||
Reference in New Issue
Block a user