Fix dialog accessibility issues.

This CL fixes some accessibility issues that would happen with dialogs
launched by the DialogLaunchAnimator. See bugs for more info.

Bug: 204944038
Bug: 208951968
Bug: 208951526
Fixes: 204944038
Fixes: 208951968
Fixes: 208951526
Test: Manual
Change-Id: I35b12a6e2bb2c4ae8556178fb634deb963457db6
This commit is contained in:
Jordan Demeulenaere
2021-12-15 12:28:44 +01:00
parent 7339a87bf3
commit 42c17888e8
2 changed files with 20 additions and 3 deletions

View File

@@ -299,6 +299,13 @@ private class AnimatedDialog(
fullscreenTransparentBackground.setOnClickListener { dialog.dismiss() }
dialogContentWithBackground.isClickable = true
// Make sure the transparent and dialog backgrounds are not focusable by accessibility
// features.
fullscreenTransparentBackground.importantForAccessibility =
View.IMPORTANT_FOR_ACCESSIBILITY_NO
dialogContentWithBackground.importantForAccessibility =
View.IMPORTANT_FOR_ACCESSIBILITY_NO
fullscreenTransparentBackground.addView(
dialogContentWithBackground,
FrameLayout.LayoutParams(
@@ -342,8 +349,10 @@ private class AnimatedDialog(
?.color
?.defaultColor ?: Color.BLACK
// Make the background view invisible until we start the animation.
dialogContentWithBackground.visibility = View.INVISIBLE
// Make the background view invisible until we start the animation. We use the transition
// visibility like GhostView does so that we don't mess up with the accessibility tree (see
// b/204944038#comment17).
dialogContentWithBackground.setTransitionVisibility(View.INVISIBLE)
// Make sure the dialog is visible instantly and does not do any window animation.
window.attributes.windowAnimations = R.style.Animation_LaunchAnimation

View File

@@ -186,7 +186,11 @@ open class GhostedViewLaunchAnimatorController(
// Making the ghost view invisible will make the ghosted view visible, so order is
// important here.
ghostView.visibility = View.INVISIBLE
ghostedView.visibility = View.INVISIBLE
// Make the ghosted view invisible again. We use the transition visibility like
// GhostView does so that we don't mess up with the accessibility tree (see
// b/204944038#comment17).
ghostedView.setTransitionVisibility(View.INVISIBLE)
backgroundView.visibility = View.INVISIBLE
}
return
@@ -257,6 +261,10 @@ open class GhostedViewLaunchAnimatorController(
GhostView.removeGhost(ghostedView)
launchContainerOverlay.remove(backgroundView)
// Make sure that the view is considered VISIBLE by accessibility by first making it
// INVISIBLE then VISIBLE (see b/204944038#comment17 for more info).
ghostedView.visibility = View.INVISIBLE
ghostedView.visibility = View.VISIBLE
ghostedView.invalidate()
}