summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Robert Carr <racarr@google.com> 2020-03-12 15:33:51 -0700
committer Robert Carr <racarr@google.com> 2020-03-12 16:45:27 -0700
commit689a1b0f83a8f6427d3086edf320def39ac33aa8 (patch)
treec9f9947fda62d61a9154087d953196d82c7f0340
parent28ab493385d3b3875bfe0fd4b24633b633f85bb8 (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.java2
-rw-r--r--services/core/java/com/android/server/wm/TaskSnapshotController.java14
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();