Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7917a2f0 authored by Phil Weaver's avatar Phil Weaver
Browse files

Verify fingerprint exists before using it

The process will crash if we try to obtain a FingerprintManager
on a device that doesn't implement one. Verify that the feature
exists before trying.

Bug: 34923693
Test: Ran A11y unit tests and a11y fingerprint cts.
Change-Id: I48ad1c2c9c0c5739d8b1826c3c53bb817078e6cf
parent ab9b0024
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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();
+7 −2
Original line number Diff line number Diff line
@@ -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
     */
+19 −16
Original line number Diff line number Diff line
@@ -1991,8 +1991,10 @@ 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;
            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()) {
@@ -2012,6 +2014,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
                    }
                }
            }
        }
        if (mFingerprintGestureDispatcher != null) {
            mFingerprintGestureDispatcher.updateClientList(services);
        }