summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vishnu Nair <vishnun@google.com> 2020-12-07 13:43:15 -0800
committer Vishnu Nair <vishnun@google.com> 2020-12-09 00:14:27 +0000
commit88fbccf1816bfddc4a1d8b236f746099ada9dc7b (patch)
treecac8e58c89f8fd3c5912f130321599fcf2141f76
parent55fc541c000eadc9623340a019eec782fbb17eeb (diff)
Apply detached task transactions on animation cleanup
If the task is detached while being animated by recents, the animation leash may not be cleaned up properly. If the leash draws a shadow, this would result in a translucent layer on screen that cannot be dismissed. The leash was not being cleaned up because when the task is detached, it will use its own transaction instead of its DC transaction and its transaction is not reachable. Bug: 172932178 Test: while dragging app to recents, adb shell am force-stop <package>, drag back to home Change-Id: Id84319c8ab224c11c6f9ab623b949bba61c761fd
-rw-r--r--services/core/java/com/android/server/wm/RecentsAnimationController.java9
1 files changed, 7 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java
index 5da668c8c361..d3b0e63e7f61 100644
--- a/services/core/java/com/android/server/wm/RecentsAnimationController.java
+++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java
@@ -763,7 +763,7 @@ public class RecentsAnimationController implements DeathRecipient {
taskAdapter.mTask.dontAnimateDimExit();
}
removeAnimation(taskAdapter);
- taskAdapter.maybeApplyFinishBounds();
+ taskAdapter.onCleanup();
}
for (int i = mPendingWallpaperAnimations.size() - 1; i >= 0; i--) {
@@ -987,14 +987,19 @@ public class RecentsAnimationController implements DeathRecipient {
return mTarget;
}
- void maybeApplyFinishBounds() {
+ void onCleanup() {
if (!mFinishBounds.isEmpty()) {
+ // Apply any pending bounds changes
final SurfaceControl taskSurface = mTask.getSurfaceControl();
mTask.getPendingTransaction()
.setPosition(taskSurface, mFinishBounds.left, mFinishBounds.top)
.setWindowCrop(taskSurface, mFinishBounds.width(), mFinishBounds.height())
.apply();
mFinishBounds.setEmpty();
+ } else {
+ // Apply the task's pending transaction in case it is detached and its transaction
+ // is not reachable.
+ mTask.getPendingTransaction().apply();
}
}