From 83ca480941b3dd635b62347008fc8d7859d82002 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 12 Apr 2013 15:10:52 -0700 Subject: [PATCH] Fixing issue where accessibility was reporting items behind an open folder. (Bug 8331717) Change-Id: Ibaec4144ee911c6d784737cf56a4fc8a1dad2886 --- src/com/android/launcher2/DragLayer.java | 26 ++++++++++++++++++++++++ src/com/android/launcher2/Launcher.java | 9 ++++++++ 2 files changed, 35 insertions(+) diff --git a/src/com/android/launcher2/DragLayer.java b/src/com/android/launcher2/DragLayer.java index a819cb7a6a..fccc1a6043 100644 --- a/src/com/android/launcher2/DragLayer.java +++ b/src/com/android/launcher2/DragLayer.java @@ -34,6 +34,7 @@ import android.view.ViewGroup; import android.view.ViewParent; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager; +import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.DecelerateInterpolator; import android.view.animation.Interpolator; import android.widget.FrameLayout; @@ -221,6 +222,31 @@ public class DragLayer extends FrameLayout implements ViewGroup.OnHierarchyChang } } + @Override + public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) { + Folder currentFolder = mLauncher.getWorkspace().getOpenFolder(); + if (currentFolder != null) { + if (child == currentFolder) { + return super.onRequestSendAccessibilityEvent(child, event); + } + // Skip propagating onRequestSendAccessibilityEvent all for other children + // when a folder is open + return false; + } + return super.onRequestSendAccessibilityEvent(child, event); + } + + @Override + public void addChildrenForAccessibility(ArrayList childrenForAccessibility) { + Folder currentFolder = mLauncher.getWorkspace().getOpenFolder(); + if (currentFolder != null) { + // Only add the folder as a child for accessibility when it is open + childrenForAccessibility.add(currentFolder); + } else { + super.addChildrenForAccessibility(childrenForAccessibility); + } + } + @Override public boolean onHoverEvent(MotionEvent ev) { // If we've received this, we've already done the necessary handling diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index b2c36ee078..2bc51d386a 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -2287,6 +2287,11 @@ public final class Launcher extends Activity } folder.animateOpen(); growAndFadeOutFolderIcon(folderIcon); + + // Notify the accessibility manager that this folder "window" has appeared and occluded + // the workspace items + folder.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); + getDragLayer().sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED); } public void closeFolder() { @@ -2311,6 +2316,10 @@ public final class Launcher extends Activity shrinkAndFadeInFolderIcon(fi); } folder.animateClosed(); + + // Notify the accessibility manager that this folder "window" has disappeard and no + // longer occludeds the workspace items + getDragLayer().sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); } public boolean onLongClick(View v) {