Fix leakage of input window handle on removed display
While the display is alive, the handles are set from SurfaceControl
indirectly. But when removing display, there is no path to inform
InputDispatcher to clean up the handles.
The change uses the legacy method to set empty handles directly for
the removed display.
Bug: 126141550
Test: manual - Create virtual display with system decoration support.
Close the display and check "dumpsys input" that there should
not have records in the removed display.
Change-Id: I9087f41ff3acb8990cfb71fed43450230ebe0cc6
This commit is contained in:
@@ -1452,6 +1452,11 @@ public class InputManagerService extends IInputManager.Stub
|
||||
nativeSetFocusedDisplay(mPtr, displayId);
|
||||
}
|
||||
|
||||
/** Clean up input window handles of the given display. */
|
||||
public void onDisplayRemoved(int displayId) {
|
||||
nativeSetInputWindows(mPtr, null /* windowHandles */, displayId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void requestPointerCapture(IBinder windowToken, boolean enabled) {
|
||||
if (mFocusedWindow == null || mFocusedWindow.asBinder() != windowToken) {
|
||||
|
||||
@@ -168,6 +168,7 @@ final class InputMonitor {
|
||||
|
||||
void onDisplayRemoved() {
|
||||
mHandler.removeCallbacks(mUpdateInputWindows);
|
||||
mService.mInputManager.onDisplayRemoved(mDisplayId);
|
||||
mDisplayRemoved = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user