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

Commit f560f72d authored by Austin Delgado's avatar Austin Delgado
Browse files

Use ultrasonic onAcquired messages for UdfpsController callbacks

Ultrasonic devices do not depend on framework touches, so use onAcquired
messages for sending callbacks instead.

Bug: 300156541
Test: atest UdfpsControllerTest
Flag: EXEMPT bugfix
Change-Id: Ida6b726ebfebab918768f7894920e0b20f390309
parent ee79bc64
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.systemui.biometrics;

import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_GOOD;
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START;
import static android.view.MotionEvent.ACTION_DOWN;
import static android.view.MotionEvent.ACTION_MOVE;
import static android.view.MotionEvent.ACTION_UP;
@@ -1437,4 +1438,38 @@ public class UdfpsControllerTest extends SysuiTestCase {
        // THEN vibrate is used
        verify(mVibrator).performHapticFeedback(any(), eq(UdfpsController.LONG_PRESS));
    }

    @Test
    public void onAcquiredCalbacks() {
        runWithAllParams(
                this::ultrasonicCallbackOnAcquired);
    }

    public void ultrasonicCallbackOnAcquired(TestParams testParams) throws RemoteException{
        if (testParams.sensorProps.sensorType
                == FingerprintSensorProperties.TYPE_UDFPS_ULTRASONIC) {
            reset(mUdfpsView);

            UdfpsController.Callback callbackMock = mock(UdfpsController.Callback.class);
            mUdfpsController.addCallback(callbackMock);

            // GIVEN UDFPS overlay is showing
            mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, mOpticalProps.sensorId,
                    BiometricRequestConstants.REASON_AUTH_KEYGUARD,
                    mUdfpsOverlayControllerCallback);
            mFgExecutor.runAllReady();

            verify(mFingerprintManager).setUdfpsOverlayController(
                    mUdfpsOverlayControllerCaptor.capture());
            mUdfpsOverlayControllerCaptor.getValue().onAcquired(0, FINGERPRINT_ACQUIRED_START);
            mFgExecutor.runAllReady();

            verify(callbackMock).onFingerDown();

            mUdfpsOverlayControllerCaptor.getValue().onAcquired(0, FINGERPRINT_ACQUIRED_GOOD);
            mFgExecutor.runAllReady();

            verify(callbackMock).onFingerUp();
        }
    }
}
+29 −4
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.biometrics;
import static android.app.StatusBarManager.SESSION_BIOMETRIC_PROMPT;
import static android.app.StatusBarManager.SESSION_KEYGUARD;
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_GOOD;
import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_START;
import static android.hardware.biometrics.BiometricRequestConstants.REASON_AUTH_BP;
import static android.hardware.biometrics.BiometricRequestConstants.REASON_AUTH_KEYGUARD;
import static android.hardware.biometrics.BiometricRequestConstants.REASON_ENROLL_ENROLLING;
@@ -329,6 +330,22 @@ public class UdfpsController implements DozeReceiver, Dumpable {
                int sensorId,
                @BiometricFingerprintConstants.FingerprintAcquired int acquiredInfo
        ) {
            if (isUltrasonic()) {
                if (acquiredInfo == FINGERPRINT_ACQUIRED_START) {
                    mFgExecutor.execute(() -> {
                        for (Callback cb : mCallbacks) {
                            cb.onFingerDown();
                        }
                    });
                } else {
                    mFgExecutor.execute(() -> {
                        for (Callback cb : mCallbacks) {
                            cb.onFingerUp();
                        }
                    });
                }
            }

            if (BiometricFingerprintConstants.shouldDisableUdfpsDisplayMode(acquiredInfo)) {
                boolean acquiredGood = acquiredInfo == FINGERPRINT_ACQUIRED_GOOD;
                mFgExecutor.execute(() -> {
@@ -1024,6 +1041,10 @@ public class UdfpsController implements DozeReceiver, Dumpable {
        return mSensorProps.sensorType == FingerprintSensorProperties.TYPE_UDFPS_OPTICAL;
    }

    private boolean isUltrasonic() {
        return mSensorProps.sensorType == FingerprintSensorProperties.TYPE_UDFPS_ULTRASONIC;
    }

    public boolean isFingerDown() {
        return mOnFingerDown;
    }
@@ -1105,10 +1126,12 @@ public class UdfpsController implements DozeReceiver, Dumpable {
            }
        }

        if (isOptical()) {
            for (Callback cb : mCallbacks) {
                cb.onFingerDown();
            }
        }
    }

    private void onFingerUp(long requestId, @NonNull View view) {
        onFingerUp(
@@ -1143,10 +1166,12 @@ public class UdfpsController implements DozeReceiver, Dumpable {
        if (mOnFingerDown) {
            mFingerprintManager.onPointerUp(requestId, mSensorProps.sensorId, pointerId, x,
                    y, minor, major, orientation, time, gestureStart, isAod);
            if (isOptical()) {
                for (Callback cb : mCallbacks) {
                    cb.onFingerUp();
                }
            }
        }
        mOnFingerDown = false;
        unconfigureDisplay(view);
        cancelAodSendFingerUpAction();