diff options
Diffstat (limited to 'services/java/com/android/server/AccessibilityManagerService.java')
-rw-r--r-- | services/java/com/android/server/AccessibilityManagerService.java | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/services/java/com/android/server/AccessibilityManagerService.java b/services/java/com/android/server/AccessibilityManagerService.java index c205fc0..55007ba 100644 --- a/services/java/com/android/server/AccessibilityManagerService.java +++ b/services/java/com/android/server/AccessibilityManagerService.java @@ -323,15 +323,22 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub */ private void notifyAccessibilityServicesDelayedLocked(AccessibilityEvent event, boolean isDefault) { - for (int i = 0, count = mServices.size(); i < count; i++) { - Service service = mServices.get(i); + try { + for (int i = 0, count = mServices.size(); i < count; i++) { + Service service = mServices.get(i); - if (service.mIsDefault == isDefault) { - if (canDispathEventLocked(service, event, mHandledFeedbackTypes)) { - mHandledFeedbackTypes |= service.mFeedbackType; - notifyAccessibilityServiceDelayedLocked(service, event); + if (service.mIsDefault == isDefault) { + if (canDispathEventLocked(service, event, mHandledFeedbackTypes)) { + mHandledFeedbackTypes |= service.mFeedbackType; + notifyAccessibilityServiceDelayedLocked(service, event); + } } } + } catch (IndexOutOfBoundsException oobe) { + // An out of bounds exception can happen if services are going away + // as the for loop is running. If that happens, just bail because + // there are no more services to notify. + return; } } @@ -368,6 +375,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub * @param event The event. */ private void tryRecycleLocked(AccessibilityEvent event) { + if (event == null) { + return; + } int eventType = event.getEventType(); List<Service> services = mServices; @@ -378,7 +388,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub return; } } - event.recycle(); } |