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:
Riddle Hsu
2019-02-25 15:21:38 +08:00
parent ddc0fa5155
commit 3f2de7479c
2 changed files with 6 additions and 0 deletions

View File

@@ -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) {

View File

@@ -168,6 +168,7 @@ final class InputMonitor {
void onDisplayRemoved() {
mHandler.removeCallbacks(mUpdateInputWindows);
mService.mInputManager.onDisplayRemoved(mDisplayId);
mDisplayRemoved = true;
}