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

Commit 803b2379 authored by Joe Bolinger's avatar Joe Bolinger Committed by Automerger Merge Worker
Browse files

Merge "Respond to lockout reset requests from the HAL." into sc-dev am: 7f40c4b4

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14519690

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


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


    void onLockoutCleared() {
    void onLockoutCleared() {
        mLockoutCache.setLockoutModeForUser(getTargetUserId(), LockoutTracker.LOCKOUT_NONE);
        resetLocalLockoutStateToNone(getSensorId(), getTargetUserId(), mLockoutCache,
        mLockoutResetDispatcher.notifyLockoutResetCallbacks(getSensorId());
                mLockoutResetDispatcher);
        mCallback.onClientFinished(this, true /* success */);
        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
    @Override
    public int getProtoEnum() {
    public int getProtoEnum() {
        return BiometricsProto.CM_RESET_LOCKOUT;
        return BiometricsProto.CM_RESET_LOCKOUT;
+21 −8
Original line number Original line 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.Interruptable;
import com.android.server.biometrics.sensors.LockoutCache;
import com.android.server.biometrics.sensors.LockoutCache;
import com.android.server.biometrics.sensors.LockoutConsumer;
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.RemovalConsumer;
import com.android.server.biometrics.sensors.StartUserClient;
import com.android.server.biometrics.sensors.StartUserClient;
import com.android.server.biometrics.sensors.StopUserClient;
import com.android.server.biometrics.sensors.StopUserClient;
@@ -124,10 +125,16 @@ public class Sensor {
        private final int mSensorId;
        private final int mSensorId;
        private final int mUserId;
        private final int mUserId;
        @NonNull
        @NonNull
        private final LockoutCache mLockoutCache;
        @NonNull
        private final LockoutResetDispatcher mLockoutResetDispatcher;
        @NonNull
        private final Callback mCallback;
        private final Callback mCallback;


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


@@ -327,13 +336,15 @@ public class Sensor {
            mHandler.post(() -> {
            mHandler.post(() -> {
                final BaseClientMonitor client = mScheduler.getCurrentClient();
                final BaseClientMonitor client = mScheduler.getCurrentClient();
                if (!(client instanceof FaceResetLockoutClient)) {
                if (!(client instanceof FaceResetLockoutClient)) {
                    Slog.e(mTag, "onLockoutCleared for non-resetLockout client: "
                    Slog.d(mTag, "onLockoutCleared outside of resetLockout by HAL");
                            + Utils.getClientName(client));
                    FaceResetLockoutClient.resetLocalLockoutStateToNone(mSensorId, mUserId,
                    return;
                            mLockoutCache, mLockoutResetDispatcher);
                }
                } else {

                    Slog.d(mTag, "onLockoutCleared after resetLockout");
                final FaceResetLockoutClient resetLockoutClient = (FaceResetLockoutClient) client;
                    final FaceResetLockoutClient resetLockoutClient =
                            (FaceResetLockoutClient) client;
                    resetLockoutClient.onLockoutCleared();
                    resetLockoutClient.onLockoutCleared();
                }
            });
            });
        }
        }


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


    Sensor(@NonNull String tag, @NonNull FaceProvider provider, @NonNull Context context,
    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;
        mTag = tag;
        mProvider = provider;
        mProvider = provider;
        mContext = context;
        mContext = context;
@@ -493,7 +505,8 @@ public class Sensor {
                        final int sensorId = mSensorProperties.sensorId;
                        final int sensorId = mSensorProperties.sensorId;


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


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


    void onLockoutCleared() {
    void onLockoutCleared() {
        mLockoutCache.setLockoutModeForUser(getTargetUserId(), LockoutTracker.LOCKOUT_NONE);
        resetLocalLockoutStateToNone(getSensorId(), getTargetUserId(), mLockoutCache,
        mLockoutResetDispatcher.notifyLockoutResetCallbacks(getSensorId());
                mLockoutResetDispatcher);
        mCallback.onClientFinished(this, true /* success */);
        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
    @Override
    public int getProtoEnum() {
    public int getProtoEnum() {
        return BiometricsProto.CM_RESET_LOCKOUT;
        return BiometricsProto.CM_RESET_LOCKOUT;
Loading