Loading core/java/android/accessibilityservice/AccessibilityServiceInfo.java +1 −1 Original line number Diff line number Diff line Loading @@ -438,7 +438,7 @@ public class AccessibilityServiceInfo implements Parcelable { /** * Whether or not the service has crashed and is awaiting restart. Only valid from {@link * android.view.accessibility.AccessibilityManager#getEnabledAccessibilityServiceList(int)}, * android.view.accessibility.AccessibilityManager#getInstalledAccessibilityServiceList()}, * because that is populated from the internal list of running services. * * @hide Loading core/java/android/view/accessibility/AccessibilityManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -707,10 +707,10 @@ public final class AccessibilityManager { try { services = service.getEnabledAccessibilityServiceList(feedbackTypeFlags, userId); if (DEBUG) { Log.i(LOG_TAG, "Installed AccessibilityServices " + services); Log.i(LOG_TAG, "Enabled AccessibilityServices " + services); } } catch (RemoteException re) { Log.e(LOG_TAG, "Error while obtaining the installed AccessibilityServices. ", re); Log.e(LOG_TAG, "Error while obtaining the enabled AccessibilityServices. ", re); } if (mAccessibilityPolicy != null) { services = mAccessibilityPolicy.getEnabledAccessibilityServiceList( Loading packages/SettingsLib/src/com/android/settingslib/accessibility/AccessibilityUtils.java +14 −4 Original line number Diff line number Diff line Loading @@ -48,11 +48,21 @@ public class AccessibilityUtils { return getEnabledServicesFromSettings(context, UserHandle.myUserId()); } /** * Check if the accessibility service is crashed * * @param packageName The package name to check * @param serviceName The service name to check * @param installedServiceInfos The list of installed accessibility service * @return {@code true} if the accessibility service is crashed for the user. * {@code false} otherwise. */ public static boolean hasServiceCrashed(String packageName, String serviceName, List<AccessibilityServiceInfo> enabledServiceInfos) { for (int i = 0; i < enabledServiceInfos.size(); i++) { AccessibilityServiceInfo accessibilityServiceInfo = enabledServiceInfos.get(i); final ServiceInfo serviceInfo = enabledServiceInfos.get(i).getResolveInfo().serviceInfo; List<AccessibilityServiceInfo> installedServiceInfos) { for (int i = 0; i < installedServiceInfos.size(); i++) { final AccessibilityServiceInfo accessibilityServiceInfo = installedServiceInfos.get(i); final ServiceInfo serviceInfo = installedServiceInfos.get(i).getResolveInfo().serviceInfo; if (TextUtils.equals(serviceInfo.packageName, packageName) && TextUtils.equals(serviceInfo.name, serviceName)) { return accessibilityServiceInfo.crashed; Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +14 −4 Original line number Diff line number Diff line Loading @@ -366,9 +366,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub if (userId != mCurrentUserId) { return; } AccessibilityUserState userState = getUserStateLocked(userId); boolean reboundAService = userState.getBindingServicesLocked().removeIf( final AccessibilityUserState userState = getUserStateLocked(userId); final boolean reboundAService = userState.getBindingServicesLocked().removeIf( component -> component != null && component.getPackageName().equals(packageName)) || userState.mCrashedServices.removeIf(component -> component != null && component.getPackageName().equals(packageName)); if (reboundAService) { onUserStateChangedLocked(userState); Loading @@ -393,6 +395,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub if (compPkg.equals(packageName)) { it.remove(); userState.getBindingServicesLocked().remove(comp); userState.getCrashedServicesLocked().remove(comp); // Update the enabled services setting. persistComponentNamesToSettingLocked( Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, Loading Loading @@ -753,6 +756,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub userState.mEnabledServices.clear(); userState.mEnabledServices.add(service); userState.getBindingServicesLocked().clear(); userState.getCrashedServicesLocked().clear(); userState.mTouchExplorationGrantedServices.clear(); userState.mTouchExplorationGrantedServices.add(service); Loading Loading @@ -1178,6 +1182,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub AccessibilityServiceInfo accessibilityServiceInfo; try { accessibilityServiceInfo = new AccessibilityServiceInfo(resolveInfo, mContext); if (userState.mCrashedServices.contains(serviceInfo.getComponentName())) { // Restore the crashed attribute. accessibilityServiceInfo.crashed = true; } mTempAccessibilityServiceInfoList.add(accessibilityServiceInfo); } catch (XmlPullParserException | IOException xppe) { Slog.e(LOG_TAG, "Error while initializing AccessibilityServiceInfo", xppe); Loading Loading @@ -1418,8 +1426,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub continue; } // Wait for the binding if it is in process. if (userState.getBindingServicesLocked().contains(componentName)) { // Skip the component since it may be in process or crashed. if (userState.getBindingServicesLocked().contains(componentName) || userState.getCrashedServicesLocked().contains(componentName)) { continue; } if (userState.mEnabledServices.contains(componentName) Loading Loading @@ -2687,6 +2696,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } else if (mEnabledAccessibilityServicesUri.equals(uri)) { if (readEnabledAccessibilityServicesLocked(userState)) { userState.updateCrashedServicesIfNeededLocked(); onUserStateChangedLocked(userState); } } else if (mTouchExplorationGrantedAccessibilityServicesUri.equals(uri)) { Loading services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java +7 −9 Original line number Diff line number Diff line Loading @@ -62,9 +62,6 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect private final Handler mMainHandler; private boolean mWasConnectedAndDied; AccessibilityServiceConnection(AccessibilityUserState userState, Context context, ComponentName componentName, AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler, Loading Loading @@ -168,8 +165,6 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect @Override public AccessibilityServiceInfo getServiceInfo() { // Update crashed data mAccessibilityServiceInfo.crashed = mWasConnectedAndDied; return mAccessibilityServiceInfo; } Loading @@ -178,10 +173,13 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect synchronized (mLock) { AccessibilityUserState userState = mUserStateWeakReference.get(); if (userState == null) return; Set<ComponentName> bindingServices = userState.getBindingServicesLocked(); if (bindingServices.contains(mComponentName) || mWasConnectedAndDied) { final Set<ComponentName> bindingServices = userState.getBindingServicesLocked(); final Set<ComponentName> crashedServices = userState.getCrashedServicesLocked(); if (bindingServices.contains(mComponentName) || crashedServices.contains(mComponentName)) { bindingServices.remove(mComponentName); mWasConnectedAndDied = false; crashedServices.remove(mComponentName); mAccessibilityServiceInfo.crashed = false; serviceInterface = mServiceInterface; } // There's a chance that service is removed from enabled_accessibility_services setting Loading Loading @@ -271,7 +269,7 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect if (!isConnectedLocked()) { return; } mWasConnectedAndDied = true; mAccessibilityServiceInfo.crashed = true; AccessibilityUserState userState = mUserStateWeakReference.get(); if (userState != null) { userState.serviceDisconnectedLocked(this); Loading Loading
core/java/android/accessibilityservice/AccessibilityServiceInfo.java +1 −1 Original line number Diff line number Diff line Loading @@ -438,7 +438,7 @@ public class AccessibilityServiceInfo implements Parcelable { /** * Whether or not the service has crashed and is awaiting restart. Only valid from {@link * android.view.accessibility.AccessibilityManager#getEnabledAccessibilityServiceList(int)}, * android.view.accessibility.AccessibilityManager#getInstalledAccessibilityServiceList()}, * because that is populated from the internal list of running services. * * @hide Loading
core/java/android/view/accessibility/AccessibilityManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -707,10 +707,10 @@ public final class AccessibilityManager { try { services = service.getEnabledAccessibilityServiceList(feedbackTypeFlags, userId); if (DEBUG) { Log.i(LOG_TAG, "Installed AccessibilityServices " + services); Log.i(LOG_TAG, "Enabled AccessibilityServices " + services); } } catch (RemoteException re) { Log.e(LOG_TAG, "Error while obtaining the installed AccessibilityServices. ", re); Log.e(LOG_TAG, "Error while obtaining the enabled AccessibilityServices. ", re); } if (mAccessibilityPolicy != null) { services = mAccessibilityPolicy.getEnabledAccessibilityServiceList( Loading
packages/SettingsLib/src/com/android/settingslib/accessibility/AccessibilityUtils.java +14 −4 Original line number Diff line number Diff line Loading @@ -48,11 +48,21 @@ public class AccessibilityUtils { return getEnabledServicesFromSettings(context, UserHandle.myUserId()); } /** * Check if the accessibility service is crashed * * @param packageName The package name to check * @param serviceName The service name to check * @param installedServiceInfos The list of installed accessibility service * @return {@code true} if the accessibility service is crashed for the user. * {@code false} otherwise. */ public static boolean hasServiceCrashed(String packageName, String serviceName, List<AccessibilityServiceInfo> enabledServiceInfos) { for (int i = 0; i < enabledServiceInfos.size(); i++) { AccessibilityServiceInfo accessibilityServiceInfo = enabledServiceInfos.get(i); final ServiceInfo serviceInfo = enabledServiceInfos.get(i).getResolveInfo().serviceInfo; List<AccessibilityServiceInfo> installedServiceInfos) { for (int i = 0; i < installedServiceInfos.size(); i++) { final AccessibilityServiceInfo accessibilityServiceInfo = installedServiceInfos.get(i); final ServiceInfo serviceInfo = installedServiceInfos.get(i).getResolveInfo().serviceInfo; if (TextUtils.equals(serviceInfo.packageName, packageName) && TextUtils.equals(serviceInfo.name, serviceName)) { return accessibilityServiceInfo.crashed; Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +14 −4 Original line number Diff line number Diff line Loading @@ -366,9 +366,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub if (userId != mCurrentUserId) { return; } AccessibilityUserState userState = getUserStateLocked(userId); boolean reboundAService = userState.getBindingServicesLocked().removeIf( final AccessibilityUserState userState = getUserStateLocked(userId); final boolean reboundAService = userState.getBindingServicesLocked().removeIf( component -> component != null && component.getPackageName().equals(packageName)) || userState.mCrashedServices.removeIf(component -> component != null && component.getPackageName().equals(packageName)); if (reboundAService) { onUserStateChangedLocked(userState); Loading @@ -393,6 +395,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub if (compPkg.equals(packageName)) { it.remove(); userState.getBindingServicesLocked().remove(comp); userState.getCrashedServicesLocked().remove(comp); // Update the enabled services setting. persistComponentNamesToSettingLocked( Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, Loading Loading @@ -753,6 +756,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub userState.mEnabledServices.clear(); userState.mEnabledServices.add(service); userState.getBindingServicesLocked().clear(); userState.getCrashedServicesLocked().clear(); userState.mTouchExplorationGrantedServices.clear(); userState.mTouchExplorationGrantedServices.add(service); Loading Loading @@ -1178,6 +1182,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub AccessibilityServiceInfo accessibilityServiceInfo; try { accessibilityServiceInfo = new AccessibilityServiceInfo(resolveInfo, mContext); if (userState.mCrashedServices.contains(serviceInfo.getComponentName())) { // Restore the crashed attribute. accessibilityServiceInfo.crashed = true; } mTempAccessibilityServiceInfoList.add(accessibilityServiceInfo); } catch (XmlPullParserException | IOException xppe) { Slog.e(LOG_TAG, "Error while initializing AccessibilityServiceInfo", xppe); Loading Loading @@ -1418,8 +1426,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub continue; } // Wait for the binding if it is in process. if (userState.getBindingServicesLocked().contains(componentName)) { // Skip the component since it may be in process or crashed. if (userState.getBindingServicesLocked().contains(componentName) || userState.getCrashedServicesLocked().contains(componentName)) { continue; } if (userState.mEnabledServices.contains(componentName) Loading Loading @@ -2687,6 +2696,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } else if (mEnabledAccessibilityServicesUri.equals(uri)) { if (readEnabledAccessibilityServicesLocked(userState)) { userState.updateCrashedServicesIfNeededLocked(); onUserStateChangedLocked(userState); } } else if (mTouchExplorationGrantedAccessibilityServicesUri.equals(uri)) { Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java +7 −9 Original line number Diff line number Diff line Loading @@ -62,9 +62,6 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect private final Handler mMainHandler; private boolean mWasConnectedAndDied; AccessibilityServiceConnection(AccessibilityUserState userState, Context context, ComponentName componentName, AccessibilityServiceInfo accessibilityServiceInfo, int id, Handler mainHandler, Loading Loading @@ -168,8 +165,6 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect @Override public AccessibilityServiceInfo getServiceInfo() { // Update crashed data mAccessibilityServiceInfo.crashed = mWasConnectedAndDied; return mAccessibilityServiceInfo; } Loading @@ -178,10 +173,13 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect synchronized (mLock) { AccessibilityUserState userState = mUserStateWeakReference.get(); if (userState == null) return; Set<ComponentName> bindingServices = userState.getBindingServicesLocked(); if (bindingServices.contains(mComponentName) || mWasConnectedAndDied) { final Set<ComponentName> bindingServices = userState.getBindingServicesLocked(); final Set<ComponentName> crashedServices = userState.getCrashedServicesLocked(); if (bindingServices.contains(mComponentName) || crashedServices.contains(mComponentName)) { bindingServices.remove(mComponentName); mWasConnectedAndDied = false; crashedServices.remove(mComponentName); mAccessibilityServiceInfo.crashed = false; serviceInterface = mServiceInterface; } // There's a chance that service is removed from enabled_accessibility_services setting Loading Loading @@ -271,7 +269,7 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect if (!isConnectedLocked()) { return; } mWasConnectedAndDied = true; mAccessibilityServiceInfo.crashed = true; AccessibilityUserState userState = mUserStateWeakReference.get(); if (userState != null) { userState.serviceDisconnectedLocked(this); Loading