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

Commit c48148a8 authored by Diya Bera's avatar Diya Bera
Browse files

Handling power press messages sent from the HAL

Test: Manually checked behavior when power is pressed for:
Biometric Prompt: an error is shown
Keyguard authentication: nothing happens
Fingerprint Enrollment: an acquired message is displayed
atest FingerprintAuthenticationClientTest FingerprintEnrollClientTest
Bug: 265202141

Change-Id: I842115fae9f25387c7d8d5b494336b3fe10c2cb0
parent 64cb8020
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -149,6 +149,13 @@ public final class SensorOverlays {
        }
    }

    /**
     * Returns if the sensor is side fps.
     */
    public boolean isSfps() {
        return mSidefpsController.isPresent();
    }

    /**
     * Consumer for a biometric overlay controller.
     *
+8 −2
Original line number Diff line number Diff line
@@ -236,8 +236,14 @@ class FingerprintAuthenticationClient extends AuthenticationClient<AidlSession>

    @Override
    public void onError(int errorCode, int vendorCode) {
        if (errorCode == BiometricFingerprintConstants.FINGERPRINT_ERROR_VENDOR
                && vendorCode == BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED
                && mSensorOverlays.isSfps()) {
            super.onError(BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED,
                    0 /* vendorCode */);
        } else {
            super.onError(errorCode, vendorCode);

        }
        if (errorCode == BiometricFingerprintConstants.FINGERPRINT_ERROR_BAD_CALIBRATION) {
            BiometricNotificationUtils.showBadCalibrationNotification(getContext());
        }
+9 −5
Original line number Diff line number Diff line
@@ -146,8 +146,15 @@ class FingerprintEnrollClient extends EnrollClient<AidlSession> implements Udfps
            }
        });
        mCallback.onBiometricAction(BiometricStateListener.ACTION_SENSOR_TOUCH);
        if (acquiredInfo == BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_VENDOR
                && vendorCode == BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED
                && mSensorOverlays.isSfps()) {
            super.onAcquired(BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED,
                    0 /* vendorCode */);
        } else {
            super.onAcquired(acquiredInfo, vendorCode);
        }
    }

    @Override
    public void onError(int errorCode, int vendorCode) {
@@ -266,8 +273,5 @@ class FingerprintEnrollClient extends EnrollClient<AidlSession> implements Udfps
    }

    @Override
    public void onPowerPressed() {
        onAcquired(BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED,
                0 /* vendorCode */);
    }
    public void onPowerPressed() { }
}
+11 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.content.ComponentName;
import android.hardware.biometrics.BiometricFingerprintConstants;
import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.common.ICancellationSignal;
import android.hardware.biometrics.common.OperationContext;
@@ -364,6 +365,16 @@ public class FingerprintAuthenticationClientTest {
        showHideOverlay(c -> c.onLockoutPermanent());
    }

    @Test
    public void testPowerPressForwardsErrorMessage() throws RemoteException {
        final FingerprintAuthenticationClient client = createClient();

        client.onError(BiometricFingerprintConstants.FINGERPRINT_ERROR_VENDOR,
                BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED);

        verify(mClientMonitorCallbackConverter).onError(anyInt(), anyInt(),
                eq(BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED), eq(0));
    }
    private void showHideOverlay(Consumer<FingerprintAuthenticationClient> block)
            throws RemoteException {
        final FingerprintAuthenticationClient client = createClient();
+5 −5
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.server.biometrics.sensors.fingerprint.aidl;

import static android.hardware.biometrics.BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED;

import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -29,6 +27,7 @@ import static org.mockito.Mockito.same;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.hardware.biometrics.BiometricFingerprintConstants;
import android.hardware.biometrics.common.OperationContext;
import android.hardware.biometrics.fingerprint.ISession;
import android.hardware.biometrics.fingerprint.PointerContext;
@@ -276,11 +275,12 @@ public class FingerprintEnrollClientTest {
    @Test
    public void testPowerPressForwardsAcquireMessage() throws RemoteException {
        final FingerprintEnrollClient client = createClient();
        client.start(mCallback);
        client.onPowerPressed();

        client.onAcquired(BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_VENDOR,
                BiometricFingerprintConstants.BIOMETRIC_ERROR_POWER_PRESSED);

        verify(mClientMonitorCallbackConverter).onAcquired(anyInt(),
                eq(FINGERPRINT_ACQUIRED_POWER_PRESSED), anyInt());
                eq(BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_POWER_PRESSED), eq(0));
    }

    private void showHideOverlay(Consumer<FingerprintEnrollClient> block)