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

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

Merge "Respond to lockout reset requests from the HAL." into sc-dev

parents be6088d1 c22eee96
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -149,7 +149,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
                    prop.supportsDetectInteraction, prop.halControlsPreview,
                    false /* resetLockoutRequiresChallenge */);
            final Sensor sensor = new Sensor(getTag() + "/" + sensorId, this, mContext, mHandler,
                    internalProp);
                    internalProp, lockoutResetDispatcher);

            mSensors.put(sensorId, sensor);
            Slog.d(getTag(), "Added: " + internalProp);
+17 −2
Original line number Diff line number Diff line
@@ -80,11 +80,26 @@ public class FaceResetLockoutClient extends HalClientMonitor<ISession> implement
    }

    void onLockoutCleared() {
        mLockoutCache.setLockoutModeForUser(getTargetUserId(), LockoutTracker.LOCKOUT_NONE);
        mLockoutResetDispatcher.notifyLockoutResetCallbacks(getSensorId());
        resetLocalLockoutStateToNone(getSensorId(), getTargetUserId(), mLockoutCache,
                mLockoutResetDispatcher);
        mCallback.onClientFinished(this, true /* success */);
    }

    /**
     * Reset the local lockout state and notify any listeners.
     *
     * This should only be called when the HAL sends a reset request directly to the
     * framework (i.e. time based reset, etc.). When the HAL is responding to a
     * resetLockout request from an instance of this client {@link #onLockoutCleared()} should
     * be used instead.
     */
    static void resetLocalLockoutStateToNone(int sensorId, int userId,
            @NonNull LockoutCache lockoutTracker,
            @NonNull LockoutResetDispatcher lockoutResetDispatcher) {
        lockoutTracker.setLockoutModeForUser(userId, LockoutTracker.LOCKOUT_NONE);
        lockoutResetDispatcher.notifyLockoutResetCallbacks(sensorId);
    }

    @Override
    public int getProtoEnum() {
        return BiometricsProto.CM_RESET_LOCKOUT;
+21 −8
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ import com.android.server.biometrics.sensors.HalClientMonitor;
import com.android.server.biometrics.sensors.Interruptable;
import com.android.server.biometrics.sensors.LockoutCache;
import com.android.server.biometrics.sensors.LockoutConsumer;
import com.android.server.biometrics.sensors.LockoutResetDispatcher;
import com.android.server.biometrics.sensors.RemovalConsumer;
import com.android.server.biometrics.sensors.StartUserClient;
import com.android.server.biometrics.sensors.StopUserClient;
@@ -124,10 +125,16 @@ public class Sensor {
        private final int mSensorId;
        private final int mUserId;
        @NonNull
        private final LockoutCache mLockoutCache;
        @NonNull
        private final LockoutResetDispatcher mLockoutResetDispatcher;
        @NonNull
        private final Callback mCallback;

        HalSessionCallback(@NonNull Context context, @NonNull Handler handler, @NonNull String tag,
                @NonNull UserAwareBiometricScheduler scheduler, int sensorId, int userId,
                @NonNull LockoutCache lockoutTracker,
                @NonNull LockoutResetDispatcher lockoutResetDispatcher,
                @NonNull Callback callback) {
            mContext = context;
            mHandler = handler;
@@ -135,6 +142,8 @@ public class Sensor {
            mScheduler = scheduler;
            mSensorId = sensorId;
            mUserId = userId;
            mLockoutCache = lockoutTracker;
            mLockoutResetDispatcher = lockoutResetDispatcher;
            mCallback = callback;
        }

@@ -327,13 +336,15 @@ public class Sensor {
            mHandler.post(() -> {
                final BaseClientMonitor client = mScheduler.getCurrentClient();
                if (!(client instanceof FaceResetLockoutClient)) {
                    Slog.e(mTag, "onLockoutCleared for non-resetLockout client: "
                            + Utils.getClientName(client));
                    return;
                }

                final FaceResetLockoutClient resetLockoutClient = (FaceResetLockoutClient) client;
                    Slog.d(mTag, "onLockoutCleared outside of resetLockout by HAL");
                    FaceResetLockoutClient.resetLocalLockoutStateToNone(mSensorId, mUserId,
                            mLockoutCache, mLockoutResetDispatcher);
                } else {
                    Slog.d(mTag, "onLockoutCleared after resetLockout");
                    final FaceResetLockoutClient resetLockoutClient =
                            (FaceResetLockoutClient) client;
                    resetLockoutClient.onLockoutCleared();
                }
            });
        }

@@ -465,7 +476,8 @@ public class Sensor {
    }

    Sensor(@NonNull String tag, @NonNull FaceProvider provider, @NonNull Context context,
            @NonNull Handler handler, @NonNull FaceSensorPropertiesInternal sensorProperties) {
            @NonNull Handler handler, @NonNull FaceSensorPropertiesInternal sensorProperties,
            @NonNull LockoutResetDispatcher lockoutResetDispatcher) {
        mTag = tag;
        mProvider = provider;
        mContext = context;
@@ -493,7 +505,8 @@ public class Sensor {
                        final int sensorId = mSensorProperties.sensorId;

                        final HalSessionCallback resultController = new HalSessionCallback(mContext,
                                mHandler, mTag, mScheduler, sensorId, newUserId, callback);
                                mHandler, mTag, mScheduler, sensorId, newUserId, mLockoutCache,
                                lockoutResetDispatcher, callback);

                        final StartUserClient.UserStartedCallback<ISession> userStartedCallback =
                                (userIdStarted, newSession) -> {
+1 −1
Original line number Diff line number Diff line
@@ -159,7 +159,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
                            prop.sensorLocations[0].sensorLocationY,
                            prop.sensorLocations[0].sensorRadius);
            final Sensor sensor = new Sensor(getTag() + "/" + sensorId, this, mContext, mHandler,
                    internalProp, gestureAvailabilityDispatcher);
                    internalProp, lockoutResetDispatcher, gestureAvailabilityDispatcher);

            mSensors.put(sensorId, sensor);
            Slog.d(getTag(), "Added: " + internalProp);
+17 −2
Original line number Diff line number Diff line
@@ -80,11 +80,26 @@ class FingerprintResetLockoutClient extends HalClientMonitor<ISession> implement
    }

    void onLockoutCleared() {
        mLockoutCache.setLockoutModeForUser(getTargetUserId(), LockoutTracker.LOCKOUT_NONE);
        mLockoutResetDispatcher.notifyLockoutResetCallbacks(getSensorId());
        resetLocalLockoutStateToNone(getSensorId(), getTargetUserId(), mLockoutCache,
                mLockoutResetDispatcher);
        mCallback.onClientFinished(this, true /* success */);
    }

    /**
     * Reset the local lockout state and notify any listeners.
     *
     * This should only be called when the HAL sends a reset request directly to the
     * framework (i.e. time based reset, etc.). When the HAL is responding to a
     * resetLockout request from an instance of this client {@link #onLockoutCleared()} should
     * be used instead.
     */
    static void resetLocalLockoutStateToNone(int sensorId, int userId,
            @NonNull LockoutCache lockoutTracker,
            @NonNull LockoutResetDispatcher lockoutResetDispatcher) {
        lockoutTracker.setLockoutModeForUser(userId, LockoutTracker.LOCKOUT_NONE);
        lockoutResetDispatcher.notifyLockoutResetCallbacks(sensorId);
    }

    @Override
    public int getProtoEnum() {
        return BiometricsProto.CM_RESET_LOCKOUT;
Loading