From 42a30cffe12b6737ac2fcfefa0e34ad2466d463d Mon Sep 17 00:00:00 2001 From: Prabir Pradhan Date: Thu, 8 Jun 2023 19:28:03 +0000 Subject: [PATCH] Use a strongly typed Uid in WindowInfo Bug: 286428012 Test: presubmit Change-Id: I5a0c7ad9cf18d8c484c9f04644e1cab4077cf994 --- core/jni/android_hardware_input_InputWindowHandle.cpp | 10 +++++----- .../com_android_server_input_InputManagerService.cpp | 9 +++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/core/jni/android_hardware_input_InputWindowHandle.cpp b/core/jni/android_hardware_input_InputWindowHandle.cpp index 416d991bd64ce..d6c9f92cd8cdc 100644 --- a/core/jni/android_hardware_input_InputWindowHandle.cpp +++ b/core/jni/android_hardware_input_InputWindowHandle.cpp @@ -163,10 +163,9 @@ bool NativeInputWindowHandle::updateInfo() { mInfo.touchOcclusionMode = static_cast( env->GetIntField(obj, gInputWindowHandleClassInfo.touchOcclusionMode)); - mInfo.ownerPid = env->GetIntField(obj, - gInputWindowHandleClassInfo.ownerPid); - mInfo.ownerUid = env->GetIntField(obj, - gInputWindowHandleClassInfo.ownerUid); + mInfo.ownerPid = env->GetIntField(obj, gInputWindowHandleClassInfo.ownerPid); + mInfo.ownerUid = gui::Uid{ + static_cast(env->GetIntField(obj, gInputWindowHandleClassInfo.ownerUid))}; mInfo.packageName = getStringField(env, obj, gInputWindowHandleClassInfo.packageName, ""); mInfo.displayId = env->GetIntField(obj, gInputWindowHandleClassInfo.displayId); @@ -309,7 +308,8 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.touchOcclusionMode, static_cast(windowInfo.touchOcclusionMode)); env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.ownerPid, windowInfo.ownerPid); - env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.ownerUid, windowInfo.ownerUid); + env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.ownerUid, + windowInfo.ownerUid.val()); ScopedLocalRef packageName(env, env->NewStringUTF(windowInfo.packageName.data())); env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.packageName, packageName.get()); diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index 1e502e17b00eb..b1f84d3d0c366 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -356,7 +356,7 @@ public: void setPointerCapture(const PointerCaptureRequest& request) override; void notifyDropWindow(const sp& token, float x, float y) override; void notifyDeviceInteraction(int32_t deviceId, nsecs_t timestamp, - const std::set& uids) override; + const std::set& uids) override; /* --- PointerControllerPolicyInterface implementation --- */ @@ -969,7 +969,7 @@ void NativeInputManager::notifyDropWindow(const sp& token, float x, flo } void NativeInputManager::notifyDeviceInteraction(int32_t deviceId, nsecs_t timestamp, - const std::set& uids) { + const std::set& uids) { static const bool ENABLE_INPUT_DEVICE_USAGE_METRICS = sysprop::InputProperties::enable_input_device_usage_metrics().value_or(true); if (!ENABLE_INPUT_DEVICE_USAGE_METRICS) return; @@ -1864,7 +1864,8 @@ static jboolean nativeSetInTouchMode(JNIEnv* env, jobject nativeImplObj, jboolea jint pid, jint uid, jboolean hasPermission, jint displayId) { NativeInputManager* im = getNativeInputManager(env, nativeImplObj); - return im->getInputManager()->getDispatcher().setInTouchMode(inTouchMode, pid, uid, + return im->getInputManager()->getDispatcher().setInTouchMode(inTouchMode, pid, + gui::Uid{static_cast(uid)}, hasPermission, displayId); } @@ -1880,7 +1881,7 @@ static jint nativeInjectInputEvent(JNIEnv* env, jobject nativeImplObj, jobject i jint timeoutMillis, jint policyFlags) { NativeInputManager* im = getNativeInputManager(env, nativeImplObj); - const std::optional targetUid = injectIntoUid ? std::make_optional(uid) : std::nullopt; + const auto targetUid = injectIntoUid ? std::make_optional(uid) : std::nullopt; // static_cast is safe because the value was already checked at the Java layer InputEventInjectionSync mode = static_cast(syncMode);