From 532c7999c52ed41bcc83461608044b799b6317d2 Mon Sep 17 00:00:00 2001 From: Phil Weaver Date: Mon, 29 Aug 2016 15:59:03 -0700 Subject: [PATCH] Stop double notifying a11y about Toasts. TalkBack was speaking all Toasts twice because we were sending both NOTIFICATION and a WINDOW_STATE_CHANGE events when Toasts were displayed. Stop sending the WINDOW_STATE_CHANGE event for toasts. Bug: 30570188 Change-Id: I26c6dc50350dfd4daf2a706b94fadcf5d1e03557 --- core/java/android/view/ViewRootImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 7494b94ce7138..931bced4f8478 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2172,7 +2172,12 @@ public final class ViewRootImpl implements ViewParent, } if (changedVisibility || regainedFocus) { - host.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + // Toasts are presented as notifications - don't present them as windows as well + boolean isToast = (mWindowAttributes == null) ? false + : (mWindowAttributes.type == WindowManager.LayoutParams.TYPE_TOAST); + if (!isToast) { + host.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + } } mFirst = false;