From a5434dd987ca976d677e5e247e35ccca529338d2 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Sat, 7 May 2016 16:40:45 -0700 Subject: Don't include IME in app screenshot while in multi-window mode We don't screenshot the IME in multi-window mode because the frame of the IME might not overlap with that of the app. E.g. IME target app at the top in split-screen mode and the IME at the bottom overlapping with the bottom app. Bug: 28446505 Change-Id: Iae4f7eafa582779a4cf2aba3d83c4d9f76a4ccca --- .../com/android/server/wm/WindowManagerService.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 5a394d03f3ab..be888fed80bc 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6150,12 +6150,19 @@ public class WindowManagerService extends IWindowManager.Stub WindowState appWin = null; - boolean appIsImTarget; + boolean includeImeInScreenshot; synchronized(mWindowMap) { - appIsImTarget = mInputMethodTarget != null - && mInputMethodTarget.mAppToken != null - && mInputMethodTarget.mAppToken.appToken != null - && mInputMethodTarget.mAppToken.appToken.asBinder() == appToken; + final AppWindowToken imeTargetAppToken = + mInputMethodTarget != null ? mInputMethodTarget.mAppToken : null; + // We only include the Ime in the screenshot if the app we are screenshoting is the IME + // target and isn't in multi-window mode. We don't screenshot the IME in multi-window + // mode because the frame of the IME might not overlap with that of the app. + // E.g. IME target app at the top in split-screen mode and the IME at the bottom + // overlapping with the bottom app. + includeImeInScreenshot = imeTargetAppToken != null + && imeTargetAppToken.appToken != null + && imeTargetAppToken.appToken.asBinder() == appToken + && !mInputMethodTarget.isInMultiWindowMode(); } final int aboveAppLayer = (mPolicy.windowTypeToLayerLw(TYPE_APPLICATION) + 1) @@ -6174,7 +6181,7 @@ public class WindowManagerService extends IWindowManager.Stub continue; } if (ws.mIsImWindow) { - if (!appIsImTarget) { + if (!includeImeInScreenshot) { continue; } } else if (ws.mIsWallpaper) { -- cgit v1.2.3-59-g8ed1b