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

Commit ab0b82ae authored by Joe Bolinger's avatar Joe Bolinger Committed by Android (Google) Code Review
Browse files

Merge changes from topic "user-id-again" into sc-dev

* changes:
  Add userId parameter to all uses of challenge client.
  Cache challenge response in Face10 implementation.
parents f849b0b7 72c34460
Loading
Loading
Loading
Loading
+19 −62
Original line number Diff line number Diff line
@@ -69,8 +69,6 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
    private static final int MSG_SET_FEATURE_COMPLETED = 107;
    private static final int MSG_CHALLENGE_GENERATED = 108;
    private static final int MSG_FACE_DETECTED = 109;
    private static final int MSG_CHALLENGE_INTERRUPTED = 110;
    private static final int MSG_CHALLENGE_INTERRUPT_FINISHED = 111;
    private static final int MSG_AUTHENTICATION_FRAME = 112;
    private static final int MSG_ENROLLMENT_FRAME = 113;

@@ -102,8 +100,8 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan

        @Override // binder call
        public void onAuthenticationSucceeded(Face face, int userId, boolean isStrongBiometric) {
            mHandler.obtainMessage(MSG_AUTHENTICATION_SUCCEEDED, userId, isStrongBiometric ? 1 : 0,
                    face).sendToTarget();
            mHandler.obtainMessage(MSG_AUTHENTICATION_SUCCEEDED, userId,
                    isStrongBiometric ? 1 : 0, face).sendToTarget();
        }

        @Override // binder call
@@ -142,21 +140,11 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
        }

        @Override
        public void onChallengeGenerated(int sensorId, long challenge) {
            mHandler.obtainMessage(MSG_CHALLENGE_GENERATED, sensorId, 0, challenge)
        public void onChallengeGenerated(int sensorId, int userId, long challenge) {
            mHandler.obtainMessage(MSG_CHALLENGE_GENERATED, sensorId, userId, challenge)
                    .sendToTarget();
        }

        @Override
        public void onChallengeInterrupted(int sensorId) {
            mHandler.obtainMessage(MSG_CHALLENGE_INTERRUPTED, sensorId).sendToTarget();
        }

        @Override
        public void onChallengeInterruptFinished(int sensorId) {
            mHandler.obtainMessage(MSG_CHALLENGE_INTERRUPT_FINISHED, sensorId).sendToTarget();
        }

        @Override
        public void onAuthenticationFrame(FaceAuthenticationFrame frame) {
            mHandler.obtainMessage(MSG_AUTHENTICATION_FRAME, frame).sendToTarget();
@@ -434,16 +422,14 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
     *
     * @see com.android.server.locksettings.LockSettingsService
     *
     * TODO(b/171335732): should take userId
     *
     * @hide
     */
    @RequiresPermission(MANAGE_BIOMETRIC)
    public void generateChallenge(int sensorId, GenerateChallengeCallback callback) {
    public void generateChallenge(int sensorId, int userId, GenerateChallengeCallback callback) {
        if (mService != null) {
            try {
                mGenerateChallengeCallback = callback;
                mService.generateChallenge(mToken, sensorId, 0 /* userId */, mServiceReceiver,
                mService.generateChallenge(mToken, sensorId, userId, mServiceReceiver,
                        mContext.getOpPackageName());
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
@@ -452,12 +438,13 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
    }

    /**
     * Same as {@link #generateChallenge(int, GenerateChallengeCallback)}, but assumes the first
     * enumerated sensor.
     * Same as {@link #generateChallenge(int, int, GenerateChallengeCallback)}, but assumes the
     * first enumerated sensor.
     *
     * @hide
     */
    @RequiresPermission(MANAGE_BIOMETRIC)
    public void generateChallenge(GenerateChallengeCallback callback) {
    public void generateChallenge(int userId, GenerateChallengeCallback callback) {
        final List<FaceSensorPropertiesInternal> faceSensorProperties =
                getSensorPropertiesInternal();
        if (faceSensorProperties.isEmpty()) {
@@ -466,7 +453,7 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
        }

        final int sensorId = faceSensorProperties.get(0).sensorId;
        generateChallenge(sensorId, callback);
        generateChallenge(sensorId, userId, callback);
    }

    /**
@@ -1120,25 +1107,16 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
    }

    /**
     * Callback structure provided to {@link #generateChallenge(int, GenerateChallengeCallback)}.
     * Callback structure provided to {@link #generateChallenge(int, int,
     * GenerateChallengeCallback)}.
     *
     * @hide
     */
    public interface GenerateChallengeCallback {
        /**
         * Invoked when a challenge has been generated.
         */
        void onGenerateChallengeResult(int sensorId, long challenge);

        /**
         * Invoked if the challenge has not been revoked and a subsequent caller/owner invokes
         * {@link #generateChallenge(int, GenerateChallengeCallback)}, but
         */
        default void onChallengeInterrupted(int sensorId) {}

        /**
         * Invoked when the interrupting client has finished (e.g. revoked its challenge).
         */
        default void onChallengeInterruptFinished(int sensorId) {}
        void onGenerateChallengeResult(int sensorId, int userId, long challenge);
    }

    private class OnEnrollCancelListener implements OnCancelListener {
@@ -1212,18 +1190,13 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
                    args.recycle();
                    break;
                case MSG_CHALLENGE_GENERATED:
                    sendChallengeGenerated(msg.arg1 /* sensorId */, (long) msg.obj /* challenge */);
                    sendChallengeGenerated(msg.arg1 /* sensorId */, msg.arg2 /* userId */,
                            (long) msg.obj /* challenge */);
                    break;
                case MSG_FACE_DETECTED:
                    sendFaceDetected(msg.arg1 /* sensorId */, msg.arg2 /* userId */,
                            (boolean) msg.obj /* isStrongBiometric */);
                    break;
                case MSG_CHALLENGE_INTERRUPTED:
                    sendChallengeInterrupted((int) msg.obj /* sensorId */);
                    break;
                case MSG_CHALLENGE_INTERRUPT_FINISHED:
                    sendChallengeInterruptFinished((int) msg.obj /* sensorId */);
                    break;
                case MSG_AUTHENTICATION_FRAME:
                    sendAuthenticationFrame((FaceAuthenticationFrame) msg.obj /* frame */);
                    break;
@@ -1251,11 +1224,11 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
        mGetFeatureCallback.onCompleted(success, features, featureState);
    }

    private void sendChallengeGenerated(int sensorId, long challenge) {
    private void sendChallengeGenerated(int sensorId, int userId, long challenge) {
        if (mGenerateChallengeCallback == null) {
            return;
        }
        mGenerateChallengeCallback.onGenerateChallengeResult(sensorId, challenge);
        mGenerateChallengeCallback.onGenerateChallengeResult(sensorId, userId, challenge);
    }

    private void sendFaceDetected(int sensorId, int userId, boolean isStrongBiometric) {
@@ -1266,22 +1239,6 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
        mFaceDetectionCallback.onFaceDetected(sensorId, userId, isStrongBiometric);
    }

    private void sendChallengeInterrupted(int sensorId) {
        if (mGenerateChallengeCallback == null) {
            Slog.e(TAG, "sendChallengeInterrupted, callback null");
            return;
        }
        mGenerateChallengeCallback.onChallengeInterrupted(sensorId);
    }

    private void sendChallengeInterruptFinished(int sensorId) {
        if (mGenerateChallengeCallback == null) {
            Slog.e(TAG, "sendChallengeInterruptFinished, callback null");
            return;
        }
        mGenerateChallengeCallback.onChallengeInterruptFinished(sensorId);
    }

    private void sendRemovedResult(Face face, int remaining) {
        if (mRemovalCallback == null) {
            return;
+2 −11
Original line number Diff line number Diff line
@@ -72,17 +72,8 @@ public class FaceServiceReceiver extends IFaceServiceReceiver.Stub {
    }

    @Override
    public void onChallengeGenerated(int sensorId, long challenge) throws RemoteException {

    }

    @Override
    public void onChallengeInterrupted(int sensorId) throws RemoteException {

    }

    @Override
    public void onChallengeInterruptFinished(int sensorId) throws RemoteException {
    public void onChallengeGenerated(int sensorId, int userId, long challenge)
            throws RemoteException {

    }

+1 −3
Original line number Diff line number Diff line
@@ -33,9 +33,7 @@ oneway interface IFaceServiceReceiver {
    void onRemoved(in Face face, int remaining);
    void onFeatureSet(boolean success, int feature);
    void onFeatureGet(boolean success, in int[] features, in boolean[] featureState);
    void onChallengeGenerated(int sensorId, long challenge);
    void onChallengeInterrupted(int sensorId);
    void onChallengeInterruptFinished(int sensorId);
    void onChallengeGenerated(int sensorId, int userId, long challenge);
    void onAuthenticationFrame(in FaceAuthenticationFrame frame);
    void onEnrollmentFrame(in FaceEnrollFrame frame);
}
+10 −6
Original line number Diff line number Diff line
@@ -475,10 +475,13 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
    }

    /**
     * Callbacks for generate challenge operations.
     *
     * @hide
     */
    public interface GenerateChallengeCallback {
        void onChallengeGenerated(int sensorId, long challenge);
        /** Called when a challenged has been generated. */
        void onChallengeGenerated(int sensorId, int userId, long challenge);
    }

    /**
@@ -1124,7 +1127,8 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
                    sendRemovedResult((Fingerprint) msg.obj, msg.arg1 /* remaining */);
                    break;
                case MSG_CHALLENGE_GENERATED:
                    sendChallengeGenerated(msg.arg1 /* sensorId */, (long) msg.obj /* challenge */);
                    sendChallengeGenerated(msg.arg1 /* sensorId */, msg.arg2 /* userId */,
                            (long) msg.obj /* challenge */);
                    break;
                case MSG_FINGERPRINT_DETECTED:
                    sendFingerprintDetected(msg.arg1 /* sensorId */, msg.arg2 /* userId */,
@@ -1233,12 +1237,12 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
        }
    }

    private void sendChallengeGenerated(int sensorId, long challenge) {
    private void sendChallengeGenerated(int sensorId, int userId, long challenge) {
        if (mGenerateChallengeCallback == null) {
            Slog.e(TAG, "sendChallengeGenerated, callback null");
            return;
        }
        mGenerateChallengeCallback.onChallengeGenerated(sensorId, challenge);
        mGenerateChallengeCallback.onChallengeGenerated(sensorId, userId, challenge);
    }

    private void sendFingerprintDetected(int sensorId, int userId, boolean isStrongBiometric) {
@@ -1454,8 +1458,8 @@ public class FingerprintManager implements BiometricAuthenticator, BiometricFing
        }

        @Override // binder call
        public void onChallengeGenerated(int sensorId, long challenge) {
            mHandler.obtainMessage(MSG_CHALLENGE_GENERATED, sensorId, 0, challenge)
        public void onChallengeGenerated(int sensorId, int userId, long challenge) {
            mHandler.obtainMessage(MSG_CHALLENGE_GENERATED, sensorId, userId, challenge)
                    .sendToTarget();
        }

+2 −1
Original line number Diff line number Diff line
@@ -61,7 +61,8 @@ public class FingerprintServiceReceiver extends IFingerprintServiceReceiver.Stub
    }

    @Override
    public void onChallengeGenerated(int sensorId, long challenge) throws RemoteException {
    public void onChallengeGenerated(int sensorId, int userId, long challenge)
            throws RemoteException {

    }

Loading