diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 218fcb7a998c2..b21fd917583e1 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -801,7 +801,9 @@ class DisplayContent extends WindowContainer { - dc.getInputMonitor().createInputConsumer(token, name, inputChannel, + // TODO(b/112049699): Fix this for multiple displays. There is only one inputChannel + // here to accept the return value. + DisplayContent display = mRoot.getDisplayContent(Display.DEFAULT_DISPLAY); + if (display != null) { + display.getInputMonitor().createInputConsumer(token, name, inputChannel, Binder.getCallingPid(), Binder.getCallingUserHandle()); - }); + } } } @Override public boolean destroyInputConsumer(String name) { synchronized (mWindowMap) { - AtomicBoolean retValue = new AtomicBoolean(true); - mRoot.forAllDisplays(dc -> { - if (!dc.getInputMonitor().destroyInputConsumer(name)) { - retValue.set(false); - } - }); - return retValue.get(); + // TODO(b/112049699): Fix this for multiple displays. For consistency with + // createInputConsumer above. + DisplayContent display = mRoot.getDisplayContent(Display.DEFAULT_DISPLAY); + if (display != null) { + return display.getInputMonitor().destroyInputConsumer(name); + } + return false; } } @@ -7090,19 +7093,24 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void dontOverrideDisplayInfo(int displayId) { - synchronized (mWindowMap) { - final DisplayContent dc = getDisplayContentOrCreate(displayId); - if (dc == null) { - throw new IllegalArgumentException( - "Trying to register a non existent display."); + final long token = Binder.clearCallingIdentity(); + try { + synchronized (mWindowMap) { + final DisplayContent dc = getDisplayContentOrCreate(displayId); + if (dc == null) { + throw new IllegalArgumentException( + "Trying to register a non existent display."); + } + // We usually set the override info in DisplayManager so that we get consistent + // values when displays are changing. However, we don't do this for displays that + // serve as containers for ActivityViews because we don't want letter-/pillar-boxing + // during resize. + dc.mShouldOverrideDisplayConfiguration = false; + mDisplayManagerInternal.setDisplayInfoOverrideFromWindowManager(displayId, + null /* info */); } - // We usually set the override info in DisplayManager so that we get consistent - // values when displays are changing. However, we don't do this for displays that - // serve as containers for ActivityViews because we don't want letter-/pillar-boxing - // during resize. - dc.mShouldOverrideDisplayConfiguration = false; - mDisplayManagerInternal.setDisplayInfoOverrideFromWindowManager(displayId, - null /* info */); + } finally { + Binder.restoreCallingIdentity(token); } }