From f9316fe69e29c5811c7b113d1bc92088be445fdf Mon Sep 17 00:00:00 2001 From: Siarhei Vishniakou Date: Tue, 14 Jun 2022 10:50:46 -0700 Subject: [PATCH] Send vector to hasKeys Update the usage of hasKeys to send a vector instead of raw array. Bug: 228005926 Test: m Change-Id: If3c193ef838d46aee15b800ea68364ae1fca0c46 --- ...droid_server_input_InputManagerService.cpp | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index c018d96407fe4..2cd6cf3670c5c 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -1548,27 +1548,32 @@ static jint nativeGetSwitchState(JNIEnv* env, jobject nativeImplObj, jint device sw); } +static std::vector getIntArray(JNIEnv* env, jintArray arr) { + int32_t* a = env->GetIntArrayElements(arr, nullptr); + jsize size = env->GetArrayLength(arr); + std::vector vec(a, a + size); + env->ReleaseIntArrayElements(arr, a, 0); + return vec; +} + static jboolean nativeHasKeys(JNIEnv* env, jobject nativeImplObj, jint deviceId, jint sourceMask, jintArray keyCodes, jbooleanArray outFlags) { NativeInputManager* im = getNativeInputManager(env, nativeImplObj); - int32_t* codes = env->GetIntArrayElements(keyCodes, nullptr); + const std::vector codes = getIntArray(env, keyCodes); uint8_t* flags = env->GetBooleanArrayElements(outFlags, nullptr); - jsize numCodes = env->GetArrayLength(keyCodes); + jsize numCodes = env->GetArrayLength(outFlags); jboolean result; - if (numCodes == env->GetArrayLength(keyCodes)) { - if (im->getInputManager()->getReader().hasKeys(deviceId, uint32_t(sourceMask), numCodes, - codes, flags)) { - result = JNI_TRUE; - } else { - result = JNI_FALSE; - } + if (numCodes != codes.size()) { + return JNI_FALSE; + } + if (im->getInputManager()->getReader().hasKeys(deviceId, uint32_t(sourceMask), codes, flags)) { + result = JNI_TRUE; } else { result = JNI_FALSE; } env->ReleaseBooleanArrayElements(outFlags, flags, 0); - env->ReleaseIntArrayElements(keyCodes, codes, 0); return result; }