Give accessibility focus to the alerts.
This commit is contained in:
parent
71a2a4d31a
commit
6c942a7575
|
@ -20,6 +20,8 @@ import android.graphics.drawable.Drawable
|
||||||
import android.text.InputType
|
import android.text.InputType
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.view.accessibility.AccessibilityEvent
|
||||||
|
import android.view.accessibility.AccessibilityNodeInfo
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.annotation.AttrRes
|
import androidx.annotation.AttrRes
|
||||||
|
@ -28,6 +30,7 @@ import androidx.annotation.DrawableRes
|
||||||
import androidx.appcompat.widget.SearchView
|
import androidx.appcompat.widget.SearchView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.graphics.drawable.DrawableCompat
|
import androidx.core.graphics.drawable.DrawableCompat
|
||||||
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.transition.ChangeBounds
|
import androidx.transition.ChangeBounds
|
||||||
import androidx.transition.Fade
|
import androidx.transition.Fade
|
||||||
|
@ -97,6 +100,14 @@ fun View.setAttributeBackground(@AttrRes attributeId: Int) {
|
||||||
setBackgroundResource(attribute.resourceId)
|
setBackgroundResource(attribute.resourceId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inspired from https://stackoverflow.com/a/64597532/1472514. Safer to call the 2 available API.
|
||||||
|
*/
|
||||||
|
fun View.giveAccessibilityFocus() {
|
||||||
|
ViewCompat.performAccessibilityAction(this, AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null)
|
||||||
|
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED)
|
||||||
|
}
|
||||||
|
|
||||||
fun ViewGroup.animateLayoutChange(animationDuration: Long, transitionComplete: (() -> Unit)? = null) {
|
fun ViewGroup.animateLayoutChange(animationDuration: Long, transitionComplete: (() -> Unit)? = null) {
|
||||||
val transition = TransitionSet().apply {
|
val transition = TransitionSet().apply {
|
||||||
ordering = TransitionSet.ORDERING_SEQUENTIAL
|
ordering = TransitionSet.ORDERING_SEQUENTIAL
|
||||||
|
|
|
@ -24,6 +24,7 @@ import android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import com.tapadoo.alerter.Alerter
|
import com.tapadoo.alerter.Alerter
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
|
import im.vector.app.core.extensions.giveAccessibilityFocus
|
||||||
import im.vector.app.core.platform.VectorBaseActivity
|
import im.vector.app.core.platform.VectorBaseActivity
|
||||||
import im.vector.app.core.resources.StringProvider
|
import im.vector.app.core.resources.StringProvider
|
||||||
import im.vector.app.core.utils.isAnimationEnabled
|
import im.vector.app.core.utils.isAnimationEnabled
|
||||||
|
@ -286,7 +287,7 @@ class PopupAlertManager @Inject constructor(
|
||||||
currentIsDismissed()
|
currentIsDismissed()
|
||||||
}
|
}
|
||||||
.setOnShowListener {
|
.setOnShowListener {
|
||||||
handleAccessibility(activity)
|
handleAccessibility(activity, animate)
|
||||||
}
|
}
|
||||||
.enableSwipeToDismiss()
|
.enableSwipeToDismiss()
|
||||||
.enableInfiniteDuration(true)
|
.enableInfiniteDuration(true)
|
||||||
|
@ -304,7 +305,7 @@ class PopupAlertManager @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
/* a11y */
|
/* a11y */
|
||||||
private fun handleAccessibility(activity: Activity) {
|
private fun handleAccessibility(activity: Activity, giveFocus: Boolean) {
|
||||||
activity.window.decorView.findViewById<View>(R.id.llAlertBackground)?.let { alertView ->
|
activity.window.decorView.findViewById<View>(R.id.llAlertBackground)?.let { alertView ->
|
||||||
alertView.importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_YES
|
alertView.importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_YES
|
||||||
|
|
||||||
|
@ -318,6 +319,11 @@ class PopupAlertManager @Inject constructor(
|
||||||
Alerter.hide()
|
Alerter.hide()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// And give focus to the alert right now, only for first display, i.e. when there is an animation.
|
||||||
|
if (giveFocus) {
|
||||||
|
alertView.giveAccessibilityFocus()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue