summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/accessibilityservice/AccessibilityService.java5
-rw-r--r--core/java/android/accessibilityservice/AccessibilityServiceInfo.java9
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java35
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;
+ }
}
}
}