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

Commit e4d1976c authored by Kevin Chyn's avatar Kevin Chyn Committed by Android (Google) Code Review
Browse files

Merge "Fix AuthController crash"

parents 8df61181 4f0e5060
Loading
Loading
Loading
Loading
+70 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.hardware.fingerprint;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.MANAGE_FINGERPRINT;
import static android.Manifest.permission.USE_BIOMETRIC;
import static android.Manifest.permission.USE_BIOMETRIC_INTERNAL;
import static android.Manifest.permission.USE_FINGERPRINT;

import android.annotation.NonNull;
@@ -684,6 +685,75 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
        return hasEnrolledFingerprints(userId);
    }

    /**
     * @hide
     */
    @RequiresPermission(USE_BIOMETRIC_INTERNAL)
    public boolean isUdfps() {
        if (mService == null) {
            Slog.w(TAG, "isUdfps: no fingerprint service");
            return false;
        }

        try {
            return mService.isUdfps();
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
        return false;
    }

    /**
     * @hide
     */
    @RequiresPermission(USE_BIOMETRIC_INTERNAL)
    public void setUdfpsOverlayController(IUdfpsOverlayController controller) {
        if (mService == null) {
            Slog.w(TAG, "setUdfpsOverlayController: no fingerprint service");
            return;
        }

        try {
            mService.setUdfpsOverlayController(controller);
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
    }

    /**
     * @hide
     */
    @RequiresPermission(USE_BIOMETRIC_INTERNAL)
    public void onFingerDown(int x, int y, float minor, float major) {
        if (mService == null) {
            Slog.w(TAG, "onFingerDown: no fingerprint service");
            return;
        }

        try {
            mService.onFingerDown(x, y, minor, major);
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
    }

    /**
     * @hide
     */
    @RequiresPermission(USE_BIOMETRIC_INTERNAL)
    public void onFingerUp() {
        if (mService == null) {
            Slog.w(TAG, "onFingerDown: no fingerprint service");
            return;
        }

        try {
            mService.onFingerUp();
        } catch (RemoteException e) {
            e.rethrowFromSystemServer();
        }
    }

    /**
     * Determine if there is at least one fingerprint enrolled.
     *
+2 −2
Original line number Diff line number Diff line
@@ -114,8 +114,8 @@ interface IFingerprintService {
    // Notifies about a finger leaving the sensor area.
    void onFingerUp();

    // Returns whether the specified sensor is an under-display fingerprint sensor (UDFPS).
    boolean isUdfps(int sensorId);
    // Returns whether the sensor is an under-display fingerprint sensor (UDFPS).
    boolean isUdfps();

    // Sets the controller for managing the UDFPS overlay.
    void setUdfpsOverlayController(in IUdfpsOverlayController controller);
+6 −22
Original line number Diff line number Diff line
@@ -246,11 +246,6 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
        IActivityTaskManager getActivityTaskManager() {
            return ActivityTaskManager.getService();
        }

        IFingerprintService getFingerprintService() {
            return IFingerprintService.Stub.asInterface(
                    ServiceManager.getService(Context.FINGERPRINT_SERVICE));
        }
    }

    @Inject
@@ -276,23 +271,12 @@ public class AuthController extends SystemUI implements CommandQueue.Callbacks,
        mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
        mActivityTaskManager = mInjector.getActivityTaskManager();

        if (mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
            IFingerprintService fingerprintService = mInjector.getFingerprintService();
            if (fingerprintService == null) {
                Log.e(TAG, "FEATURE_FINGERPRINT is available, but FingerprintService is null");
            } else {
                boolean isUdfps = false;
                try {
        final FingerprintManager fpm = mContext.getSystemService(FingerprintManager.class);
        if (fpm != null && fpm.isHardwareDetected()) {
            // TODO(b/160024833): Enumerate through all of the sensors and check whether
            //  at least one of them is UDFPS.
                    isUdfps = fingerprintService.isUdfps(0 /* sensorId */);
                } catch (RemoteException e) {
                    Log.w(TAG, "Unable to check whether the sensor is a UDFPS", e);
                }
                if (isUdfps) {
                    mUdfpsController = new UdfpsController(mContext, fingerprintService,
                            mWindowManager);
                }
            if (fpm.isUdfps()) {
                mUdfpsController = new UdfpsController(mContext, mWindowManager);
            }
        }

+7 −19
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.IFingerprintService;
import android.hardware.fingerprint.IUdfpsOverlayController;
import android.os.Handler;
@@ -44,7 +45,7 @@ class UdfpsController {
    private static final String TAG = "UdfpsController";

    private final Context mContext;
    private final IFingerprintService mFingerprintService;
    private final FingerprintManager mFingerprintManager;
    private final WindowManager mWindowManager;
    private final Handler mHandler;

@@ -94,10 +95,9 @@ class UdfpsController {
        }
    };

    UdfpsController(Context context, IFingerprintService fingerprintService,
            WindowManager windowManager) {
    UdfpsController(Context context, WindowManager windowManager) {
        mContext = context;
        mFingerprintService = fingerprintService;
        mFingerprintManager = context.getSystemService(FingerprintManager.class);
        mWindowManager = windowManager;
        mHandler = new Handler(Looper.getMainLooper());
        start();
@@ -133,11 +133,7 @@ class UdfpsController {
        mHbmEnableCommand = mContext.getResources().getString(R.string.udfps_hbm_enable_command);
        mHbmDisableCommand = mContext.getResources().getString(R.string.udfps_hbm_disable_command);

        try {
            mFingerprintService.setUdfpsOverlayController(new UdfpsOverlayController());
        } catch (RemoteException e) {
            Log.e(TAG, "start | failed to set UDFPS controller", e);
        }
        mFingerprintManager.setUdfpsOverlayController(new UdfpsOverlayController());
        mIsOverlayShowing = false;
    }

@@ -175,19 +171,11 @@ class UdfpsController {
            Log.e(TAG, "onFingerDown | failed to enable HBM: " + e.getMessage());
        }
        mView.onFingerDown();
        try {
            mFingerprintService.onFingerDown(x, y, minor, major);
        } catch (RemoteException e) {
            Log.e(TAG, "onFingerDown | failed to propagate onFingerDown", e);
        }
        mFingerprintManager.onFingerDown(x, y, minor, major);
    }

    private void onFingerUp() {
        try {
            mFingerprintService.onFingerUp();
        } catch (RemoteException e) {
            Log.e(TAG, "onFingeUp | failed to propagate onFingerUp", e);
        }
        mFingerprintManager.onFingerUp();
        mView.onFingerUp();
        try {
            FileWriter fw = new FileWriter(mHbmPath);
+5 −1
Original line number Diff line number Diff line
@@ -213,6 +213,10 @@ public class FingerprintService extends SystemService {

            final long token = Binder.clearCallingIdentity();
            try {
                if (mFingerprint21 == null) {
                    Slog.e(TAG, "No HAL");
                    return false;
                }
                return mFingerprint21.isHardwareDetected();
            } finally {
                Binder.restoreCallingIdentity(token);
@@ -313,7 +317,7 @@ public class FingerprintService extends SystemService {
        }

        @Override
        public boolean isUdfps(int sensorId) {
        public boolean isUdfps() {
            Utils.checkPermission(getContext(), USE_BIOMETRIC_INTERNAL);
            return mFingerprint21.isUdfps();
        }