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
This commit is contained in:
Wale Ogunwale
2016-05-07 16:40:45 -07:00
parent b8dd0c3786
commit a5434dd987

View File

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