Merge "Prevent the decor view to be visible again after exit animation finish." into sc-dev

This commit is contained in:
Wei Sheng Shih
2021-03-31 12:56:38 +00:00
committed by Android (Google) Code Review

View File

@@ -382,14 +382,16 @@ public class StartingSurfaceDrawer {
Slog.v(TAG, "Removing splash screen window for task: " + taskId); Slog.v(TAG, "Removing splash screen window for task: " + taskId);
} }
if (record.mContentView != null) { if (record.mContentView != null) {
final HandleExitFinish exitFinish = new HandleExitFinish(record.mDecorView);
if (leash != null || playRevealAnimation) { if (leash != null || playRevealAnimation) {
mSplashscreenContentDrawer.applyExitAnimation(record.mContentView, mSplashscreenContentDrawer.applyExitAnimation(record.mContentView,
leash, frame, record.isEarlyExit(), exitFinish); leash, frame, record.isEarlyExit(),
() -> removeWindowInner(record.mDecorView, true));
} else { } else {
// TODO(183004107) Always hide decorView when playRevealAnimation is enabled
// from TaskOrganizerController#removeStartingWindow
// the SplashScreenView has been copied to client, skip default exit // the SplashScreenView has been copied to client, skip default exit
// animation // animation
exitFinish.run(); removeWindowInner(record.mDecorView, false);
} }
} }
} }
@@ -403,23 +405,13 @@ public class StartingSurfaceDrawer {
} }
} }
private static class HandleExitFinish implements Runnable { private void removeWindowInner(View decorView, boolean hideView) {
private View mDecorView; if (hideView) {
decorView.setVisibility(View.GONE);
HandleExitFinish(View decorView) {
mDecorView = decorView;
} }
final WindowManager wm = decorView.getContext().getSystemService(WindowManager.class);
@Override
public void run() {
if (mDecorView == null) {
return;
}
final WindowManager wm = mDecorView.getContext().getSystemService(WindowManager.class);
if (wm != null) { if (wm != null) {
wm.removeView(mDecorView); wm.removeView(decorView);
}
mDecorView = null;
} }
} }