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
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index 41a3eaca..e5a5e98 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -463,20 +463,34 @@
* @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();
}
/**