Ensure that ghosted view is attached when calculating its matrix.
This CL ensures that the ghosted view is attached to a ViewGroup before calculating the matrix of that view. It could happen that the view would be detached after the animation was started, which would then crash SysUI when calling GhostView.calculateMatrix. I tested this CL manually by first reproducing this b/202668591 by detaching ghostedView from its parent after the animation started, and then confirmed that this fix prevents the animation from crashing. Test: Manual Bug: 202668591 Fixes: 202668591 Change-Id: I7bf0bedb4860a00f1c44cac9258ff5dc753fb355
This commit is contained in:
@@ -209,8 +209,13 @@ open class GhostedViewLaunchAnimatorController(
|
||||
val heightRatio = state.height.toFloat() / ghostedViewState.height
|
||||
val scale = min(widthRatio, heightRatio)
|
||||
|
||||
if (ghostedView.parent is ViewGroup) {
|
||||
// Recalculate the matrix in case the ghosted view moved. We ensure that the ghosted
|
||||
// view is still attached to a ViewGroup, otherwise calculateMatrix will throw.
|
||||
GhostView.calculateMatrix(ghostedView, launchContainer, ghostViewMatrix)
|
||||
}
|
||||
|
||||
launchContainer.getLocationOnScreen(launchContainerLocation)
|
||||
GhostView.calculateMatrix(ghostedView, launchContainer, ghostViewMatrix)
|
||||
ghostViewMatrix.postScale(
|
||||
scale, scale,
|
||||
ghostedViewState.centerX - launchContainerLocation[0],
|
||||
|
||||
Reference in New Issue
Block a user