diff options
| author | 2018-08-02 01:17:42 +0000 | |
|---|---|---|
| committer | 2018-08-02 01:17:42 +0000 | |
| commit | 3d3bd67f8186aecd5ff9cc3d6a9ccd4e41e65c9a (patch) | |
| tree | f2b4099297a99cafed2cbd5c361c9e09aa03df62 | |
| parent | 8f299037474ce5e754c18f29f76b4c7d623479c0 (diff) | |
| parent | 3b388800b57b533260aabd9924f58a9180ae9ede (diff) | |
Merge changes I87c5ad3f,I09b32c8f
* changes:
Fix 2 input issues.
Clear calling id in dontOverrideDisplayInfo.
3 files changed, 36 insertions, 25 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 218fcb7a998c..b21fd917583e 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<DisplayContent.DisplayChildWindowCo // {@link DisplayContent} ready for use. mDisplayReady = true; - mInputMonitor = new InputMonitor(service, mDisplayId); + // TODO(b/112081256): Use independent InputMonitor. + mInputMonitor = isDefaultDisplay ? new InputMonitor(service, mDisplayId) + : mService.getDefaultDisplayContentLocked().mInputMonitor; } boolean isReady() { diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java index d53a21b96250..c4beb553e0ec 100644 --- a/services/core/java/com/android/server/wm/InputMonitor.java +++ b/services/core/java/com/android/server/wm/InputMonitor.java @@ -399,7 +399,8 @@ final class InputMonitor { this.inDrag = inDrag; wallpaperController = mService.mRoot.mWallpaperController; - mService.mRoot.getDisplayContent(mDisplayId).forAllWindows(this, + // TODO(b/112081256): Use independent InputMonitor for each display. + mService.mRoot/*.getDisplayContent(mDisplayId)*/.forAllWindows(this, true /* traverseTopToBottom */); if (mAddWallpaperInputConsumerHandle) { // No visible wallpaper found, add the wallpaper input consumer at the end. diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 9b792e3f2d13..f4035e06f676 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6082,23 +6082,26 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void createInputConsumer(IBinder token, String name, InputChannel inputChannel) { synchronized (mWindowMap) { - mRoot.forAllDisplays(dc -> { - 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."); - } - // 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 */); + 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 */); + } + } finally { + Binder.restoreCallingIdentity(token); } } |