summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Andrii Kulian <akulian@google.com> 2018-08-02 01:17:42 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-08-02 01:17:42 +0000
commit3d3bd67f8186aecd5ff9cc3d6a9ccd4e41e65c9a (patch)
treef2b4099297a99cafed2cbd5c361c9e09aa03df62
parent8f299037474ce5e754c18f29f76b4c7d623479c0 (diff)
parent3b388800b57b533260aabd9924f58a9180ae9ede (diff)
Merge changes I87c5ad3f,I09b32c8f
* changes: Fix 2 input issues. Clear calling id in dontOverrideDisplayInfo.
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java4
-rw-r--r--services/core/java/com/android/server/wm/InputMonitor.java3
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java54
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);
}
}