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

Commit a8e084c6 authored by Kevin Chyn's avatar Kevin Chyn
Browse files

8/n: Move acquire message ignoring to face subclasses

This removes part of the dependency on the Constants interface.
The Constants dependency will eventually be removed.

Bug: 157790417
Test: Face enroll, face auth (lockscreen + BiometricPromptDemo),
      messages in the ignore list are ignored

Change-Id: I6d89f90064867bc2648934a37c390a8d90341f84
parent 3cd9d71c
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -310,4 +310,13 @@ public class Utils {
    static int removeBiometricBits(@Authenticators.Types int authenticators) {
        return authenticators & ~Authenticators.BIOMETRIC_MIN_STRENGTH;
    }

    public static boolean listContains(int[] haystack, int needle) {
        for (int i = 0; i < haystack.length; i++) {
            if (haystack[i] == needle) {
                return true;
            }
        }
        return false;
    }
}
+9 −28
Original line number Diff line number Diff line
@@ -146,32 +146,6 @@ public abstract class ClientMonitor extends LoggableMonitor implements IBinder.D
    public abstract boolean onEnumerationResult(
            BiometricAuthenticator.Identifier identifier, int remaining);

    public int[] getAcquireIgnorelist() {
        return new int[0];
    }
    public int[] getAcquireVendorIgnorelist() {
        return new int[0];
    }

    private boolean blacklistContains(int acquiredInfo, int vendorCode) {
        if (acquiredInfo == mConstants.acquireVendorCode()) {
            for (int i = 0; i < getAcquireVendorIgnorelist().length; i++) {
                if (getAcquireVendorIgnorelist()[i] == vendorCode) {
                    if (DEBUG) Slog.v(getLogTag(), "Ignoring vendor message: " + vendorCode);
                    return true;
                }
            }
        } else {
            for (int i = 0; i < getAcquireIgnorelist().length; i++) {
                if (getAcquireIgnorelist()[i] == acquiredInfo) {
                    if (DEBUG) Slog.v(getLogTag(), "Ignoring message: " + acquiredInfo);
                    return true;
                }
            }
        }
        return false;
    }

    public boolean isAlreadyDone() {
        return mAlreadyDone;
    }
@@ -183,10 +157,17 @@ public abstract class ClientMonitor extends LoggableMonitor implements IBinder.D
     * @return true if client should be removed
     */
    public boolean onAcquired(int acquiredInfo, int vendorCode) {
        // Default is to always send acquire messages to clients.
        return onAcquiredInternal(acquiredInfo, vendorCode, true /* shouldSend */);
    }

    protected final boolean onAcquiredInternal(int acquiredInfo, int vendorCode,
            boolean shouldSend) {
        super.logOnAcquired(mContext, acquiredInfo, vendorCode, getTargetUserId());
        if (DEBUG) Slog.v(getLogTag(), "Acquired: " + acquiredInfo + " " + vendorCode);
        if (DEBUG) Slog.v(getLogTag(), "Acquired: " + acquiredInfo + " " + vendorCode
                + ", shouldSend: " + shouldSend);
        try {
            if (mListener != null && !blacklistContains(acquiredInfo, vendorCode)) {
            if (mListener != null && shouldSend) {
                mListener.onAcquired(mSensorId, acquiredInfo, vendorCode);
            }
            return false; // acquisition continues...
+0 −2
Original line number Diff line number Diff line
@@ -31,6 +31,4 @@ public interface Constants {
    /** Integers for MetricsLogger.action() */
    int actionBiometricAuth();
    int actionBiometricEnroll();

    int acquireVendorCode();
}
 No newline at end of file
+13 −5
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.os.IBinder;
import android.os.UserHandle;

import com.android.internal.R;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.sensors.AuthenticationClient;
import com.android.server.biometrics.sensors.BiometricServiceBase;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
@@ -152,16 +153,22 @@ class FaceAuthenticationClient extends AuthenticationClient {
        return super.onError(error, vendorCode);
    }

    @Override
    public int[] getAcquireIgnorelist() {
    private int[] getAcquireIgnorelist() {
        return isBiometricPrompt() ? mBiometricPromptIgnoreList : mKeyguardIgnoreList;
    }

    @Override
    public int[] getAcquireVendorIgnorelist() {
    private int[] getAcquireVendorIgnorelist() {
        return isBiometricPrompt() ? mBiometricPromptIgnoreListVendor : mKeyguardIgnoreListVendor;
    }

    private boolean shouldSend(int acquireInfo, int vendorCode) {
        if (acquireInfo == FaceManager.FACE_ACQUIRED_VENDOR) {
            return !Utils.listContains(getAcquireVendorIgnorelist(), vendorCode);
        } else {
            return !Utils.listContains(getAcquireIgnorelist(), acquireInfo);
        }
    }

    @Override
    public boolean onAcquired(int acquireInfo, int vendorCode) {

@@ -205,6 +212,7 @@ class FaceAuthenticationClient extends AuthenticationClient {
                    UserHandle.CURRENT);
        }

        return super.onAcquired(acquireInfo, vendorCode);
        final boolean shouldSend = shouldSend(acquireInfo, vendorCode);
        return onAcquiredInternal(acquireInfo, vendorCode, shouldSend);
    }
}
+0 −5
Original line number Diff line number Diff line
@@ -66,9 +66,4 @@ public class FaceConstants implements Constants {
    public int actionBiometricEnroll() {
        return MetricsProto.MetricsEvent.ACTION_FACE_ENROLL;
    }

    @Override
    public int acquireVendorCode() {
        return FaceManager.FACE_ACQUIRED_VENDOR;
    }
}
Loading