From f74e5ccbe5cedf3d7cd905b8dd638d14b3ff40bb Mon Sep 17 00:00:00 2001 From: Rhed Jao Date: Wed, 1 Apr 2020 11:21:36 +0800 Subject: Fix a11y service targeting sdk version doesn't update The accessibility service connection uses old service info to create connection while the system is trying to rebind the enabled services after packages finished updated. The root cause is we always reloaded the installed service info after the a11y services were rebound. To fix this issue, always reloads the installed service info before rebinds the services. Bug: 152817355 Test: All a11y related cts tests Change-Id: Iab424940fc47b5a5f44096d67dc7bdfe2d43c5be --- .../android/server/accessibility/AccessibilityManagerService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 1b180e3357d7..0cb2881ecbea 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -414,7 +414,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub && component.getPackageName().equals(packageName)) || userState.mCrashedServices.removeIf(component -> component != null && component.getPackageName().equals(packageName)); - if (reboundAService) { + // Reloads the installed services info to make sure the rebound service could + // get a new one. + userState.mInstalledServices.clear(); + final boolean configurationChanged = + readConfigurationForUserStateLocked(userState); + if (reboundAService || configurationChanged) { onUserStateChangedLocked(userState); } migrateAccessibilityButtonSettingsIfNecessaryLocked(userState, packageName); -- cgit v1.2.3-59-g8ed1b