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

Commit 5beafc74 authored by Alec Foster's avatar Alec Foster Committed by Android (Google) Code Review
Browse files

Merge changes from topic "P24UDFPSGlowOnAcquiredStart" into main

* changes:
  Ignore empty messages in FingerprintCallback
  Use ultrasonic onAcquired messages for UdfpsController callbacks
parents 387fc74a c8445a48
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -189,7 +189,7 @@ public class FingerprintCallback {
            mEnrollmentCallback.onAcquired(acquireInfo == FINGERPRINT_ACQUIRED_GOOD);
        }
        final String msg = getAcquiredString(context, acquireInfo, vendorCode);
        if (msg == null) {
        if (msg == null || msg.isEmpty()) {
            return;
        }
        // emulate HAL 2.1 behavior and send real acquiredInfo
+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();