Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b01c6135 authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

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
parent be255041
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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),
+19 −8
Original line number Diff line number Diff line
@@ -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);
}

int register_android_view_VerifiedKeyEvent(JNIEnv* env) {
    jclass clazz = FindClassOrDie(env, "android/view/VerifiedKeyEvent");
    gVerifiedKeyEventClassInfo.clazz = MakeGlobalRefOrDie(env, clazz);

    static jmethodID constructor = GetMethodIDOrDie(env, clazz, "<init>", "(IJIIIJIIIII)V");
    gVerifiedKeyEventClassInfo.constructor =
            GetMethodIDOrDie(env, clazz, "<init>", "(IJIIIJIIIII)V");

    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;
    return OK;
}

} // namespace android
+20 −8
Original line number Diff line number Diff line
@@ -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);
}

int register_android_view_VerifiedMotionEvent(JNIEnv* env) {
    jclass clazz = FindClassOrDie(env, "android/view/VerifiedMotionEvent");
    gVerifiedMotionEventClassInfo.clazz = MakeGlobalRefOrDie(env, clazz);

    static jmethodID constructor = GetMethodIDOrDie(env, clazz, "<init>", "(IJIIFFIJIII)V");
    gVerifiedMotionEventClassInfo.constructor =
            GetMethodIDOrDie(env, clazz, "<init>", "(IJIIFFIJIII)V");

    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;
    return OK;
}

} // namespace android