Loading core/java/android/accessibilityservice/AccessibilityServiceInfo.java +13 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.accessibilityservice; import static android.content.pm.PackageManager.FEATURE_FINGERPRINT; import android.annotation.IntDef; import android.content.ComponentName; import android.content.Context; Loading Loading @@ -50,8 +52,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import static android.content.pm.PackageManager.FEATURE_FINGERPRINT; /** * This class describes an {@link AccessibilityService}. The system notifies an * {@link AccessibilityService} for {@link android.view.accessibility.AccessibilityEvent}s Loading Loading @@ -409,6 +409,15 @@ public class AccessibilityServiceInfo implements Parcelable { */ public int flags; /** * Whether or not the service has crashed and is awaiting restart. Only valid from {@link * android.view.accessibility.AccessibilityManager#getEnabledAccessibilityServiceList(int)}, * because that is populated from the internal list of running services. * * @hide */ public boolean crashed; /** * The component name the accessibility service. */ Loading Loading @@ -757,6 +766,7 @@ public class AccessibilityServiceInfo implements Parcelable { parcel.writeInt(feedbackType); parcel.writeLong(notificationTimeout); parcel.writeInt(flags); parcel.writeInt(crashed ? 1 : 0); parcel.writeParcelable(mComponentName, flagz); parcel.writeParcelable(mResolveInfo, 0); parcel.writeString(mSettingsActivityName); Loading @@ -773,6 +783,7 @@ public class AccessibilityServiceInfo implements Parcelable { feedbackType = parcel.readInt(); notificationTimeout = parcel.readLong(); flags = parcel.readInt(); crashed = parcel.readInt() != 0; mComponentName = parcel.readParcelable(this.getClass().getClassLoader()); mResolveInfo = parcel.readParcelable(null); mSettingsActivityName = parcel.readString(); Loading packages/SettingsLib/src/com/android/settingslib/accessibility/AccessibilityUtils.java +14 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.accessibilityservice.AccessibilityServiceInfo; import android.content.ComponentName; import android.content.Context; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.os.UserHandle; Loading Loading @@ -50,6 +51,19 @@ public class AccessibilityUtils { return getEnabledServicesFromSettings(context, UserHandle.myUserId()); } 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; if (TextUtils.equals(serviceInfo.packageName, packageName) && TextUtils.equals(serviceInfo.name, serviceName)) { return accessibilityServiceInfo.crashed; } } return false; } /** * @return the set of enabled accessibility services for {@param userId}. If there are no * services, it returns the unmodifiable {@link Collections#emptySet()}. Loading services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +5 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ final int mId; final AccessibilityServiceInfo mAccessibilityServiceInfo; protected final AccessibilityServiceInfo mAccessibilityServiceInfo; // Lock must match the one used by AccessibilityManagerService protected final Object mLock; Loading Loading @@ -340,6 +340,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ } } public int getCapabilities() { return mAccessibilityServiceInfo.getCapabilities(); } int getRelevantEventTypes() { return (mUsesAccessibilityCache ? AccessibilityCache.CACHE_CRITICAL_EVENTS_MASK : 0) | mEventTypes; Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +8 −8 Original line number Diff line number Diff line Loading @@ -621,7 +621,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub for (int i = 0; i < serviceCount; ++i) { final AccessibilityServiceConnection service = services.get(i); if ((service.mFeedbackType & feedbackType) != 0) { result.add(service.mAccessibilityServiceInfo); result.add(service.getServiceInfo()); } } return result; Loading Loading @@ -1874,7 +1874,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final int serviceCount = userState.mBoundServices.size(); for (int i = 0; i < serviceCount; i++) { AccessibilityServiceConnection service = userState.mBoundServices.get(i); if ((service.mAccessibilityServiceInfo.getCapabilities() if ((service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_PERFORM_GESTURES) != 0) { userState.mIsPerformGesturesEnabled = true; return; Loading @@ -1888,7 +1888,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub for (int i = 0; i < serviceCount; i++) { AccessibilityServiceConnection service = userState.mBoundServices.get(i); if (service.mRequestFilterKeyEvents && (service.mAccessibilityServiceInfo.getCapabilities() && (service.getCapabilities() & AccessibilityServiceInfo .CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS) != 0) { userState.mIsFilterKeyEventsEnabled = true; Loading Loading @@ -2124,7 +2124,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // Starting in JB-MR2 we request an accessibility service to declare // certain capabilities in its meta-data to allow it to enable the // corresponding features. if ((service.mAccessibilityServiceInfo.getCapabilities() if ((service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION) != 0) { return true; } Loading Loading @@ -3446,22 +3446,22 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } public boolean canRetrieveWindowContentLocked(AbstractAccessibilityServiceConnection service) { return (service.mAccessibilityServiceInfo.getCapabilities() return (service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT) != 0; } public boolean canControlMagnification(AbstractAccessibilityServiceConnection service) { return (service.mAccessibilityServiceInfo.getCapabilities() return (service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_CONTROL_MAGNIFICATION) != 0; } public boolean canPerformGestures(AccessibilityServiceConnection service) { return (service.mAccessibilityServiceInfo.getCapabilities() return (service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_PERFORM_GESTURES) != 0; } public boolean canCaptureFingerprintGestures(AccessibilityServiceConnection service) { return (service.mAccessibilityServiceInfo.getCapabilities() return (service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES) != 0; } Loading services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java +8 −1 Original line number Diff line number Diff line Loading @@ -165,7 +165,14 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect } } public void initializeService() { @Override public AccessibilityServiceInfo getServiceInfo() { // Update crashed data mAccessibilityServiceInfo.crashed = mWasConnectedAndDied; return mAccessibilityServiceInfo; } private void initializeService() { IAccessibilityServiceClient serviceInterface = null; synchronized (mLock) { UserState userState = mUserStateWeakReference.get(); Loading Loading
core/java/android/accessibilityservice/AccessibilityServiceInfo.java +13 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.accessibilityservice; import static android.content.pm.PackageManager.FEATURE_FINGERPRINT; import android.annotation.IntDef; import android.content.ComponentName; import android.content.Context; Loading Loading @@ -50,8 +52,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import static android.content.pm.PackageManager.FEATURE_FINGERPRINT; /** * This class describes an {@link AccessibilityService}. The system notifies an * {@link AccessibilityService} for {@link android.view.accessibility.AccessibilityEvent}s Loading Loading @@ -409,6 +409,15 @@ public class AccessibilityServiceInfo implements Parcelable { */ public int flags; /** * Whether or not the service has crashed and is awaiting restart. Only valid from {@link * android.view.accessibility.AccessibilityManager#getEnabledAccessibilityServiceList(int)}, * because that is populated from the internal list of running services. * * @hide */ public boolean crashed; /** * The component name the accessibility service. */ Loading Loading @@ -757,6 +766,7 @@ public class AccessibilityServiceInfo implements Parcelable { parcel.writeInt(feedbackType); parcel.writeLong(notificationTimeout); parcel.writeInt(flags); parcel.writeInt(crashed ? 1 : 0); parcel.writeParcelable(mComponentName, flagz); parcel.writeParcelable(mResolveInfo, 0); parcel.writeString(mSettingsActivityName); Loading @@ -773,6 +783,7 @@ public class AccessibilityServiceInfo implements Parcelable { feedbackType = parcel.readInt(); notificationTimeout = parcel.readLong(); flags = parcel.readInt(); crashed = parcel.readInt() != 0; mComponentName = parcel.readParcelable(this.getClass().getClassLoader()); mResolveInfo = parcel.readParcelable(null); mSettingsActivityName = parcel.readString(); Loading
packages/SettingsLib/src/com/android/settingslib/accessibility/AccessibilityUtils.java +14 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.accessibilityservice.AccessibilityServiceInfo; import android.content.ComponentName; import android.content.Context; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.res.Configuration; import android.content.res.Resources; import android.os.UserHandle; Loading Loading @@ -50,6 +51,19 @@ public class AccessibilityUtils { return getEnabledServicesFromSettings(context, UserHandle.myUserId()); } 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; if (TextUtils.equals(serviceInfo.packageName, packageName) && TextUtils.equals(serviceInfo.name, serviceName)) { return accessibilityServiceInfo.crashed; } } return false; } /** * @return the set of enabled accessibility services for {@param userId}. If there are no * services, it returns the unmodifiable {@link Collections#emptySet()}. Loading
services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java +5 −1 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ final int mId; final AccessibilityServiceInfo mAccessibilityServiceInfo; protected final AccessibilityServiceInfo mAccessibilityServiceInfo; // Lock must match the one used by AccessibilityManagerService protected final Object mLock; Loading Loading @@ -340,6 +340,10 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ } } public int getCapabilities() { return mAccessibilityServiceInfo.getCapabilities(); } int getRelevantEventTypes() { return (mUsesAccessibilityCache ? AccessibilityCache.CACHE_CRITICAL_EVENTS_MASK : 0) | mEventTypes; Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +8 −8 Original line number Diff line number Diff line Loading @@ -621,7 +621,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub for (int i = 0; i < serviceCount; ++i) { final AccessibilityServiceConnection service = services.get(i); if ((service.mFeedbackType & feedbackType) != 0) { result.add(service.mAccessibilityServiceInfo); result.add(service.getServiceInfo()); } } return result; Loading Loading @@ -1874,7 +1874,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final int serviceCount = userState.mBoundServices.size(); for (int i = 0; i < serviceCount; i++) { AccessibilityServiceConnection service = userState.mBoundServices.get(i); if ((service.mAccessibilityServiceInfo.getCapabilities() if ((service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_PERFORM_GESTURES) != 0) { userState.mIsPerformGesturesEnabled = true; return; Loading @@ -1888,7 +1888,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub for (int i = 0; i < serviceCount; i++) { AccessibilityServiceConnection service = userState.mBoundServices.get(i); if (service.mRequestFilterKeyEvents && (service.mAccessibilityServiceInfo.getCapabilities() && (service.getCapabilities() & AccessibilityServiceInfo .CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS) != 0) { userState.mIsFilterKeyEventsEnabled = true; Loading Loading @@ -2124,7 +2124,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // Starting in JB-MR2 we request an accessibility service to declare // certain capabilities in its meta-data to allow it to enable the // corresponding features. if ((service.mAccessibilityServiceInfo.getCapabilities() if ((service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION) != 0) { return true; } Loading Loading @@ -3446,22 +3446,22 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } public boolean canRetrieveWindowContentLocked(AbstractAccessibilityServiceConnection service) { return (service.mAccessibilityServiceInfo.getCapabilities() return (service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT) != 0; } public boolean canControlMagnification(AbstractAccessibilityServiceConnection service) { return (service.mAccessibilityServiceInfo.getCapabilities() return (service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_CONTROL_MAGNIFICATION) != 0; } public boolean canPerformGestures(AccessibilityServiceConnection service) { return (service.mAccessibilityServiceInfo.getCapabilities() return (service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_PERFORM_GESTURES) != 0; } public boolean canCaptureFingerprintGestures(AccessibilityServiceConnection service) { return (service.mAccessibilityServiceInfo.getCapabilities() return (service.getCapabilities() & AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES) != 0; } Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityServiceConnection.java +8 −1 Original line number Diff line number Diff line Loading @@ -165,7 +165,14 @@ class AccessibilityServiceConnection extends AbstractAccessibilityServiceConnect } } public void initializeService() { @Override public AccessibilityServiceInfo getServiceInfo() { // Update crashed data mAccessibilityServiceInfo.crashed = mWasConnectedAndDied; return mAccessibilityServiceInfo; } private void initializeService() { IAccessibilityServiceClient serviceInterface = null; synchronized (mLock) { UserState userState = mUserStateWeakReference.get(); Loading