diff options
| author | 2020-03-12 15:33:51 -0700 | |
|---|---|---|
| committer | 2020-03-12 16:45:27 -0700 | |
| commit | 689a1b0f83a8f6427d3086edf320def39ac33aa8 (patch) | |
| tree | c9f9947fda62d61a9154087d953196d82c7f0340 | |
| parent | 28ab493385d3b3875bfe0fd4b24633b633f85bb8 (diff) | |
Explicitly exclude IME from Task Snapshots
In Q we built a mechanism for excluding layers from snapshots for
excluding the IME from TaskSnapshots, but somehow we never
ended up using it. I guess instead we were relying on
reparenting or timing. Whatever we were relying on is somehow no longer
working. Seems best to fix it with explicit exclusion so we don't
have some hidden dependency.
Bug: 148953305
Test: Open IME. Enter recents.
Change-Id: Iea2541ba3a1943e9137d6681b2a6f876bb63a392
| -rw-r--r-- | core/java/android/view/SurfaceControl.java | 2 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/TaskSnapshotController.java | 14 |
2 files changed, 13 insertions, 3 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 25f5609d9922..c87808b113f6 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -1960,7 +1960,7 @@ public final class SurfaceControl implements Parcelable { * @hide */ public static ScreenshotGraphicBuffer captureLayersExcluding(SurfaceControl layer, - Rect sourceCrop, float frameScale, SurfaceControl[] exclude) { + Rect sourceCrop, float frameScale, int format, SurfaceControl[] exclude) { final IBinder displayToken = SurfaceControl.getInternalDisplayToken(); long[] nativeExcludeObjects = new long[exclude.length]; for (int i = 0; i < exclude.length; i++) { diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java index f83b0522846c..0f5cafe9e4e6 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotController.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java @@ -352,9 +352,19 @@ class TaskSnapshotController { } task.getBounds(mTmpRect); mTmpRect.offsetTo(0, 0); + + SurfaceControl[] excludeLayers; + final WindowState imeWindow = task.getDisplayContent().mInputMethodWindow; + if (imeWindow != null) { + excludeLayers = new SurfaceControl[1]; + excludeLayers[0] = imeWindow.getSurfaceControl(); + } else { + excludeLayers = new SurfaceControl[0]; + } final SurfaceControl.ScreenshotGraphicBuffer screenshotBuffer = - SurfaceControl.captureLayers( - task.getSurfaceControl(), mTmpRect, scaleFraction, pixelFormat); + SurfaceControl.captureLayersExcluding( + task.getSurfaceControl(), mTmpRect, scaleFraction, + pixelFormat, excludeLayers); if (outTaskSize != null) { outTaskSize.x = mTmpRect.width(); outTaskSize.y = mTmpRect.height(); |