From 0dd5b944efd13668b92ea058afc7604d4802fe6c Mon Sep 17 00:00:00 2001 From: Casey Burkhardt Date: Tue, 28 Mar 2017 15:01:01 -0700 Subject: [PATCH] Fix AccessibilityManager returning duplicate services Prevents AccessibilityManagerService from providing duplicate accessibility service records to clients calling getEnabledAccessibilityServiceList if a service contains more than one feedback flag. Bug: 36493113 Test: Behavioral CTS test Change-Id: I2f836e15fdd70543bc8aa9a5602330b0b6846fec --- .../AccessibilityManagerService.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index acaae7b298dda..1aa4c8811ec54 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -584,17 +584,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { result = mEnabledServicesForFeedbackTempList; result.clear(); List services = userState.mBoundServices; - while (feedbackType != 0) { - final int feedbackTypeBit = (1 << Integer.numberOfTrailingZeros(feedbackType)); - feedbackType &= ~feedbackTypeBit; - final int serviceCount = services.size(); - for (int i = 0; i < serviceCount; i++) { - Service service = services.get(i); - // Don't report the UIAutomation (fake service) - if (!sFakeAccessibilityServiceComponentName.equals(service.mComponentName) - && (service.mFeedbackType & feedbackTypeBit) != 0) { - result.add(service.mAccessibilityServiceInfo); - } + for (int serviceCount = services.size(), i = 0; i < serviceCount; ++i) { + Service service = services.get(i); + // Don't report the UIAutomation (fake service) + if (!sFakeAccessibilityServiceComponentName.equals(service.mComponentName) + && (service.mFeedbackType & feedbackType) != 0) { + result.add(service.mAccessibilityServiceInfo); } } }