From bb1b9ea8a488eec833b0be18c45dae8505876042 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Wed, 19 Oct 2011 17:10:14 -0700 Subject: [PATCH] AccessibilityServiceInfo does not report properly the feedback type. Since the feedback type is an integer the bits of which correspond to a given feedback type, the AccessibilityNodeInfo#feedbackTypeToString should return a string representation of all feedback types. The current implementation incorrectly assumes that the argument had only one flag set. Note that this is a new ICS API and we would like to have this fixed. bug:5486933 Change-Id: I5e461c385e199cce4c3054907ff0acf5e9d92afc --- .../AccessibilityServiceInfo.java | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index 41a3eacaafc62..e5a5e986e7041 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -463,20 +463,34 @@ public class AccessibilityServiceInfo implements Parcelable { * @return The string representation. */ public static String feedbackTypeToString(int feedbackType) { - switch (feedbackType) { - case FEEDBACK_AUDIBLE: - return "FEEDBACK_AUDIBLE"; - case FEEDBACK_HAPTIC: - return "FEEDBACK_HAPTIC"; - case FEEDBACK_GENERIC: - return "FEEDBACK_GENERIC"; - case FEEDBACK_SPOKEN: - return "FEEDBACK_SPOKEN"; - case FEEDBACK_VISUAL: - return "FEEDBACK_VISUAL"; - default: - return null; + StringBuilder builder = new StringBuilder(); + builder.append("["); + while (feedbackType > 0) { + final int feedbackTypeFlag = 1 << Integer.numberOfTrailingZeros(feedbackType); + feedbackType &= ~feedbackTypeFlag; + if (builder.length() > 1) { + builder.append(", "); + } + switch (feedbackTypeFlag) { + case FEEDBACK_AUDIBLE: + builder.append("FEEDBACK_AUDIBLE"); + break; + case FEEDBACK_HAPTIC: + builder.append("FEEDBACK_HAPTIC"); + break; + case FEEDBACK_GENERIC: + builder.append("FEEDBACK_GENERIC"); + break; + case FEEDBACK_SPOKEN: + builder.append("FEEDBACK_SPOKEN"); + break; + case FEEDBACK_VISUAL: + builder.append("FEEDBACK_VISUAL"); + break; + } } + builder.append("]"); + return builder.toString(); } /**