diff options
3 files changed, 30 insertions, 19 deletions
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java index 9e486d544195..b4e119e52fb7 100644 --- a/core/java/android/accessibilityservice/AccessibilityService.java +++ b/core/java/android/accessibilityservice/AccessibilityService.java @@ -52,6 +52,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; +import static android.content.pm.PackageManager.FEATURE_FINGERPRINT; + /** * Accessibility services should only be used to assist users with disabilities in using * Android devices and apps. They run in the background and receive callbacks by the system @@ -618,7 +620,8 @@ public abstract class AccessibilityService extends Service { */ @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public final @Nullable FingerprintGestureController getFingerprintGestureController() { - if (mFingerprintGestureController == null) { + if ((mFingerprintGestureController == null) + && getPackageManager().hasSystemFeature(FEATURE_FINGERPRINT)) { FingerprintManager fingerprintManager = getSystemService(FingerprintManager.class); if ((fingerprintManager != null) && fingerprintManager.isHardwareDetected()) { AccessibilityServiceInfo info = getServiceInfo(); diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index e135ffdf9b13..19d1a7d899c9 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -47,6 +47,8 @@ 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 @@ -1042,8 +1044,7 @@ public class AccessibilityServiceInfo implements Parcelable { new CapabilityInfo(CAPABILITY_CAN_PERFORM_GESTURES, R.string.capability_title_canPerformGestures, R.string.capability_desc_canPerformGestures)); - if ((context == null) - || context.getSystemService(FingerprintManager.class).isHardwareDetected()) { + if ((context == null) || fingerprintAvailable(context)) { sAvailableCapabilityInfos.put(CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES, new CapabilityInfo(CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES, R.string.capability_title_canCaptureFingerprintGestures, @@ -1053,6 +1054,10 @@ public class AccessibilityServiceInfo implements Parcelable { return sAvailableCapabilityInfos; } + private static boolean fingerprintAvailable(Context context) { + return context.getPackageManager().hasSystemFeature(FEATURE_FINGERPRINT) + && context.getSystemService(FingerprintManager.class).isHardwareDetected(); + } /** * @hide */ diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index d1042b810c5f..44afe1dbf4df 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -2006,23 +2006,26 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private void updateFingerprintGestureHandling(UserState userState) { final List<Service> services; synchronized (mLock) { - // Only create the controller when a service wants to use the feature services = userState.mBoundServices; - int numServices = services.size(); - for (int i = 0; i < numServices; i++) { - if (services.get(i).isCapturingFingerprintGestures()) { - final long identity = Binder.clearCallingIdentity(); - IFingerprintService service = null; - try { - service = IFingerprintService.Stub.asInterface( - ServiceManager.getService(Context.FINGERPRINT_SERVICE)); - } finally { - Binder.restoreCallingIdentity(identity); - } - if (service != null) { - mFingerprintGestureDispatcher = new FingerprintGestureDispatcher( - service, mLock); - break; + if ((mFingerprintGestureDispatcher == null) + && mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) { + // Only create the controller when a service wants to use the feature + int numServices = services.size(); + for (int i = 0; i < numServices; i++) { + if (services.get(i).isCapturingFingerprintGestures()) { + final long identity = Binder.clearCallingIdentity(); + IFingerprintService service = null; + try { + service = IFingerprintService.Stub.asInterface( + ServiceManager.getService(Context.FINGERPRINT_SERVICE)); + } finally { + Binder.restoreCallingIdentity(identity); + } + if (service != null) { + mFingerprintGestureDispatcher = new FingerprintGestureDispatcher( + service, mLock); + break; + } } } } |