From 059525a88e49e730d3216a746ad27a841a4c8ef5 Mon Sep 17 00:00:00 2001 From: Prabir Pradhan Date: Tue, 13 Jun 2023 19:52:19 +0000 Subject: [PATCH] Use a strongly typed Pid in WindowInfo Bug: 286428012 Test: presubmit Change-Id: If096044eff2f42068ce0c50035307ac0751326d2 --- ...droid_hardware_input_InputWindowHandle.cpp | 5 +++-- ...droid_server_input_InputManagerService.cpp | 20 +++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/core/jni/android_hardware_input_InputWindowHandle.cpp b/core/jni/android_hardware_input_InputWindowHandle.cpp index d6c9f92cd8cdc..eb5f2977e2216 100644 --- a/core/jni/android_hardware_input_InputWindowHandle.cpp +++ b/core/jni/android_hardware_input_InputWindowHandle.cpp @@ -163,7 +163,7 @@ bool NativeInputWindowHandle::updateInfo() { mInfo.touchOcclusionMode = static_cast( env->GetIntField(obj, gInputWindowHandleClassInfo.touchOcclusionMode)); - mInfo.ownerPid = env->GetIntField(obj, gInputWindowHandleClassInfo.ownerPid); + mInfo.ownerPid = gui::Pid{env->GetIntField(obj, gInputWindowHandleClassInfo.ownerPid)}; mInfo.ownerUid = gui::Uid{ static_cast(env->GetIntField(obj, gInputWindowHandleClassInfo.ownerUid))}; mInfo.packageName = getStringField(env, obj, gInputWindowHandleClassInfo.packageName, ""); @@ -307,7 +307,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.ownerPid, + windowInfo.ownerPid.val()); env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.ownerUid, windowInfo.ownerUid.val()); ScopedLocalRef packageName(env, env->NewStringUTF(windowInfo.packageName.data())); diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index b1f84d3d0c366..c065cb5f4ebe8 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -279,7 +279,7 @@ public: base::Result> createInputChannel(const std::string& name); base::Result> createInputMonitor(int32_t displayId, const std::string& name, - int32_t pid); + gui::Pid pid); status_t removeInputChannel(const sp& connectionToken); status_t pilferPointers(const sp& token); @@ -330,9 +330,9 @@ public: void notifyConfigurationChanged(nsecs_t when) override; // ANR-related callbacks -- start void notifyNoFocusedWindowAnr(const std::shared_ptr& handle) override; - void notifyWindowUnresponsive(const sp& token, std::optional pid, + void notifyWindowUnresponsive(const sp& token, std::optional pid, const std::string& reason) override; - void notifyWindowResponsive(const sp& token, std::optional pid) override; + void notifyWindowResponsive(const sp& token, std::optional pid) override; // ANR-related callbacks -- end void notifyInputChannelBroken(const sp& token) override; void notifyFocusChanged(const sp& oldToken, const sp& newToken) override; @@ -541,7 +541,7 @@ base::Result> NativeInputManager::createInputChann } base::Result> NativeInputManager::createInputMonitor( - int32_t displayId, const std::string& name, int32_t pid) { + int32_t displayId, const std::string& name, gui::Pid pid) { ATRACE_CALL(); return mInputManager->getDispatcher().createInputMonitor(displayId, name, pid); } @@ -885,7 +885,7 @@ void NativeInputManager::notifyNoFocusedWindowAnr( } void NativeInputManager::notifyWindowUnresponsive(const sp& token, - std::optional pid, + std::optional pid, const std::string& reason) { #if DEBUG_INPUT_DISPATCHER_POLICY ALOGD("notifyWindowUnresponsive"); @@ -899,12 +899,12 @@ void NativeInputManager::notifyWindowUnresponsive(const sp& token, ScopedLocalRef reasonObj(env, env->NewStringUTF(reason.c_str())); env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyWindowUnresponsive, tokenObj, - pid.value_or(0), pid.has_value(), reasonObj.get()); + pid.value_or(gui::Pid{0}).val(), pid.has_value(), reasonObj.get()); checkAndClearExceptionFromCallback(env, "notifyWindowUnresponsive"); } void NativeInputManager::notifyWindowResponsive(const sp& token, - std::optional pid) { + std::optional pid) { #if DEBUG_INPUT_DISPATCHER_POLICY ALOGD("notifyWindowResponsive"); #endif @@ -916,7 +916,7 @@ void NativeInputManager::notifyWindowResponsive(const sp& token, jobject tokenObj = javaObjectForIBinder(env, token); env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyWindowResponsive, tokenObj, - pid.value_or(0), pid.has_value()); + pid.value_or(gui::Pid{0}).val(), pid.has_value()); checkAndClearExceptionFromCallback(env, "notifyWindowResponsive"); } @@ -1819,7 +1819,7 @@ static jobject nativeCreateInputMonitor(JNIEnv* env, jobject nativeImplObj, jint std::string name = nameChars.c_str(); base::Result> inputChannel = - im->createInputMonitor(displayId, name, pid); + im->createInputMonitor(displayId, name, gui::Pid{pid}); if (!inputChannel.ok()) { std::string message = inputChannel.error().message(); @@ -1864,7 +1864,7 @@ 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, + return im->getInputManager()->getDispatcher().setInTouchMode(inTouchMode, gui::Pid{pid}, gui::Uid{static_cast(uid)}, hasPermission, displayId); }