From 936645000f49e9f50e29d2d6f0b9d3e0d12e14c8 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Fri, 10 Mar 2023 02:54:06 +0000 Subject: [PATCH] Workaround to force show TaskFragment while back gesture animating. Unlike Task and ActivityRecord, the TaskFragment won't show it's surface during animating, and the surface can be hide after close transition in Transitions#setupStartState. Bug: 271599041 Test: verify the TaskFragment can show during back gesture animation. Change-Id: I9a3d56d3e6c0cc9f735d82f99fd1fc04c329d690 --- .../android/server/wm/BackNavigationController.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java index f9f972c20ac64..b67bc62e52f1c 100644 --- a/services/core/java/com/android/server/wm/BackNavigationController.java +++ b/services/core/java/com/android/server/wm/BackNavigationController.java @@ -862,8 +862,16 @@ class BackNavigationController { WindowContainer target, boolean isOpen) { final BackWindowAnimationAdaptor adaptor = new BackWindowAnimationAdaptor(target, isOpen); - target.startAnimation(target.getPendingTransaction(), adaptor, false /* hidden */, - ANIMATION_TYPE_PREDICT_BACK); + final SurfaceControl.Transaction pt = target.getPendingTransaction(); + target.startAnimation(pt, adaptor, false /* hidden */, ANIMATION_TYPE_PREDICT_BACK); + // Workaround to show TaskFragment which can be hide in Transitions and won't show + // during isAnimating. + if (isOpen && target.asActivityRecord() != null) { + final TaskFragment fragment = target.asActivityRecord().getTaskFragment(); + if (fragment != null) { + pt.show(fragment.mSurfaceControl); + } + } return adaptor; }