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

Commit dc661b7c authored by Diya Bera's avatar Diya Bera Committed by Automerger Merge Worker
Browse files

Merge "Start fingerprint user client on reboot" into udc-dev am: a539a7f3...

Merge "Start fingerprint user client on reboot" into udc-dev am: a539a7f3 am: 234c0b36 am: c6ba9326

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



Change-Id: Ie1e39f96e96a7921a31436cf0b47d828baa26edc
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents d67eaa84 c6ba9326
Loading
Loading
Loading
Loading
+97 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.biometrics.sensors;

import android.app.IActivityManager;
import android.app.SynchronousUserSwitchObserver;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Slog;
import android.util.SparseArray;

/**
 * Keep track of the sensors that is supported by the HAL.
 * @param <T> T is either face sensor or fingerprint sensor.
 */
public class SensorList<T> {
    private static final String TAG = "SensorList";
    private final SparseArray<T> mSensors;
    private final IActivityManager mActivityManager;

    public SensorList(IActivityManager activityManager) {
        mSensors = new SparseArray<T>();
        mActivityManager = activityManager;
    }

    /**
     * Adding sensor to the map with the sensor id as key. Also, starts a session if the user Id is
     * NULL.
     */
    public void addSensor(int sensorId, T sensor, int sessionUserId,
            SynchronousUserSwitchObserver userSwitchObserver) {
        mSensors.put(sensorId, sensor);
        registerUserSwitchObserver(sessionUserId, userSwitchObserver);
    }

    private void registerUserSwitchObserver(int sessionUserId,
            SynchronousUserSwitchObserver userSwitchObserver) {
        try {
            mActivityManager.registerUserSwitchObserver(userSwitchObserver,
                    TAG);
            if (sessionUserId == UserHandle.USER_NULL) {
                userSwitchObserver.onUserSwitching(UserHandle.USER_SYSTEM);
            }
        } catch (RemoteException e) {
            Slog.e(TAG, "Unable to register user switch observer");
        }
    }

    /**
     * Returns the sensor corresponding to the key at a specific position.
     */
    public T valueAt(int position) {
        return mSensors.valueAt(position);
    }

    /**
     * Returns the sensor associated with sensorId as key.
     */
    public T get(int sensorId) {
        return mSensors.get(sensorId);
    }

    /**
     * Returns the sensorId at the specified position.
     */
    public int keyAt(int position) {
        return mSensors.keyAt(position);
    }

    /**
     * Returns the number of sensors added.
     */
    public int size() {
        return mSensors.size();
    }

    /**
     * Returns true if a sensor exists for the specified sensorId.
     */
    public boolean contains(int sensorId) {
        return mSensors.contains(sensorId);
    }
}
+61 −51
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.app.SynchronousUserSwitchObserver;
import android.app.TaskStackListener;
import android.content.Context;
import android.content.pm.UserInfo;
@@ -41,9 +42,9 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.Slog;
import android.util.SparseArray;
import android.util.proto.ProtoOutputStream;
import android.view.Surface;

@@ -62,6 +63,7 @@ import com.android.server.biometrics.sensors.ClientMonitorCompositeCallback;
import com.android.server.biometrics.sensors.InvalidationRequesterClient;
import com.android.server.biometrics.sensors.LockoutResetDispatcher;
import com.android.server.biometrics.sensors.PerformanceTracker;
import com.android.server.biometrics.sensors.SensorList;
import com.android.server.biometrics.sensors.face.FaceUtils;
import com.android.server.biometrics.sensors.face.ServiceProvider;
import com.android.server.biometrics.sensors.face.UsageStats;
@@ -86,7 +88,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {

    @NonNull
    @VisibleForTesting
    final SparseArray<Sensor> mSensors; // Map of sensors that this HAL supports
    final SensorList<Sensor> mFaceSensors;
    @NonNull
    private final Context mContext;
    @NonNull
@@ -117,8 +119,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
        @Override
        public void onTaskStackChanged() {
            mHandler.post(() -> {
                for (int i = 0; i < mSensors.size(); i++) {
                    final BaseClientMonitor client = mSensors.valueAt(i).getScheduler()
                for (int i = 0; i < mFaceSensors.size(); i++) {
                    final BaseClientMonitor client = mFaceSensors.valueAt(i).getScheduler()
                            .getCurrentClient();
                    if (!(client instanceof AuthenticationClient)) {
                        Slog.e(getTag(), "Task stack changed for client: " + client);
@@ -133,7 +135,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
                            && !client.isAlreadyDone()) {
                        Slog.e(getTag(), "Stopping background authentication,"
                                + " currentClient: " + client);
                        mSensors.valueAt(i).getScheduler().cancelAuthenticationOrDetection(
                        mFaceSensors.valueAt(i).getScheduler().cancelAuthenticationOrDetection(
                                client.getToken(), client.getRequestId());
                    }
                }
@@ -150,7 +152,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
        mContext = context;
        mBiometricStateCallback = biometricStateCallback;
        mHalInstanceName = halInstanceName;
        mSensors = new SparseArray<>();
        mFaceSensors = new SensorList<>(ActivityManager.getService());
        mHandler = new Handler(Looper.getMainLooper());
        mUsageStats = new UsageStats(context);
        mLockoutResetDispatcher = lockoutResetDispatcher;
@@ -178,8 +180,15 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
                    false /* resetLockoutRequiresChallenge */);
            final Sensor sensor = new Sensor(getTag() + "/" + sensorId, this, mContext, mHandler,
                    internalProp, lockoutResetDispatcher, mBiometricContext);

            mSensors.put(sensorId, sensor);
            final int userId = sensor.getLazySession().get() == null ? UserHandle.USER_NULL :
                    sensor.getLazySession().get().getUserId();
            mFaceSensors.addSensor(sensorId, sensor, userId,
                    new SynchronousUserSwitchObserver() {
                        @Override
                        public void onUserSwitching(int newUserId) {
                            scheduleInternalCleanup(sensorId, newUserId, null /* callback */);
                        }
                    });
            Slog.d(getTag(), "Added: " + internalProp);
        }
    }
@@ -223,8 +232,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
            Slog.e(getTag(), "Unable to linkToDeath", e);
        }

        for (int i = 0; i < mSensors.size(); i++) {
            final int sensorId = mSensors.keyAt(i);
        for (int i = 0; i < mFaceSensors.size(); i++) {
            final int sensorId = mFaceSensors.keyAt(i);
            scheduleLoadAuthenticatorIds(sensorId);
            scheduleInternalCleanup(sensorId, ActivityManager.getCurrentUser(),
                    null /* callback */);
@@ -234,20 +243,20 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
    }

    private void scheduleForSensor(int sensorId, @NonNull BaseClientMonitor client) {
        if (!mSensors.contains(sensorId)) {
        if (!mFaceSensors.contains(sensorId)) {
            throw new IllegalStateException("Unable to schedule client: " + client
                    + " for sensor: " + sensorId);
        }
        mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client);
        mFaceSensors.get(sensorId).getScheduler().scheduleClientMonitor(client);
    }

    private void scheduleForSensor(int sensorId, @NonNull BaseClientMonitor client,
            ClientMonitorCallback callback) {
        if (!mSensors.contains(sensorId)) {
        if (!mFaceSensors.contains(sensorId)) {
            throw new IllegalStateException("Unable to schedule client: " + client
                    + " for sensor: " + sensorId);
        }
        mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client, callback);
        mFaceSensors.get(sensorId).getScheduler().scheduleClientMonitor(client, callback);
    }

    private void scheduleLoadAuthenticatorIds(int sensorId) {
@@ -259,12 +268,12 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
    private void scheduleLoadAuthenticatorIdsForUser(int sensorId, int userId) {
        mHandler.post(() -> {
            final FaceGetAuthenticatorIdClient client = new FaceGetAuthenticatorIdClient(
                    mContext, mSensors.get(sensorId).getLazySession(), userId,
                    mContext, mFaceSensors.get(sensorId).getLazySession(), userId,
                    mContext.getOpPackageName(), sensorId,
                    createLogger(BiometricsProtoEnums.ACTION_UNKNOWN,
                            BiometricsProtoEnums.CLIENT_UNKNOWN),
                    mBiometricContext,
                    mSensors.get(sensorId).getAuthenticatorIds());
                    mFaceSensors.get(sensorId).getAuthenticatorIds());

            scheduleForSensor(sensorId, client);
        });
@@ -283,15 +292,15 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {

    @Override
    public boolean containsSensor(int sensorId) {
        return mSensors.contains(sensorId);
        return mFaceSensors.contains(sensorId);
    }

    @NonNull
    @Override
    public List<FaceSensorPropertiesInternal> getSensorProperties() {
        final List<FaceSensorPropertiesInternal> props = new ArrayList<>();
        for (int i = 0; i < mSensors.size(); ++i) {
            props.add(mSensors.valueAt(i).getSensorProperties());
        for (int i = 0; i < mFaceSensors.size(); ++i) {
            props.add(mFaceSensors.valueAt(i).getSensorProperties());
        }
        return props;
    }
@@ -299,7 +308,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
    @NonNull
    @Override
    public FaceSensorPropertiesInternal getSensorProperties(int sensorId) {
        return mSensors.get(sensorId).getSensorProperties();
        return mFaceSensors.get(sensorId).getSensorProperties();
    }

    @NonNull
@@ -318,11 +327,11 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
            @NonNull IInvalidationCallback callback) {
        mHandler.post(() -> {
            final FaceInvalidationClient client = new FaceInvalidationClient(mContext,
                    mSensors.get(sensorId).getLazySession(), userId, sensorId,
                    mFaceSensors.get(sensorId).getLazySession(), userId, sensorId,
                    createLogger(BiometricsProtoEnums.ACTION_UNKNOWN,
                            BiometricsProtoEnums.CLIENT_UNKNOWN),
                    mBiometricContext,
                    mSensors.get(sensorId).getAuthenticatorIds(), callback);
                    mFaceSensors.get(sensorId).getAuthenticatorIds(), callback);
            scheduleForSensor(sensorId, client);
        });
    }
@@ -335,7 +344,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {

    @Override
    public long getAuthenticatorId(int sensorId, int userId) {
        return mSensors.get(sensorId).getAuthenticatorIds().getOrDefault(userId, 0L);
        return mFaceSensors.get(sensorId).getAuthenticatorIds().getOrDefault(userId, 0L);
    }

    @Override
@@ -348,7 +357,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
            @NonNull IFaceServiceReceiver receiver, String opPackageName) {
        mHandler.post(() -> {
            final FaceGenerateChallengeClient client = new FaceGenerateChallengeClient(mContext,
                    mSensors.get(sensorId).getLazySession(), token,
                    mFaceSensors.get(sensorId).getLazySession(), token,
                    new ClientMonitorCallbackConverter(receiver), userId, opPackageName, sensorId,
                    createLogger(BiometricsProtoEnums.ACTION_UNKNOWN,
                            BiometricsProtoEnums.CLIENT_UNKNOWN),
@@ -362,7 +371,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
            @NonNull String opPackageName, long challenge) {
        mHandler.post(() -> {
            final FaceRevokeChallengeClient client = new FaceRevokeChallengeClient(mContext,
                    mSensors.get(sensorId).getLazySession(), token, userId, opPackageName, sensorId,
                    mFaceSensors.get(sensorId).getLazySession(), token, userId,
                    opPackageName, sensorId,
                    createLogger(BiometricsProtoEnums.ACTION_UNKNOWN,
                            BiometricsProtoEnums.CLIENT_UNKNOWN),
                    mBiometricContext, challenge);
@@ -377,10 +387,10 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
            @Nullable Surface previewSurface, boolean debugConsent) {
        final long id = mRequestCounter.incrementAndGet();
        mHandler.post(() -> {
            final int maxTemplatesPerUser = mSensors.get(
            final int maxTemplatesPerUser = mFaceSensors.get(
                    sensorId).getSensorProperties().maxEnrollmentsPerUser;
            final FaceEnrollClient client = new FaceEnrollClient(mContext,
                    mSensors.get(sensorId).getLazySession(), token,
                    mFaceSensors.get(sensorId).getLazySession(), token,
                    new ClientMonitorCallbackConverter(receiver), userId, hardwareAuthToken,
                    opPackageName, id, FaceUtils.getInstance(sensorId), disabledFeatures,
                    ENROLL_TIMEOUT_SEC, previewSurface, sensorId,
@@ -406,7 +416,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
    @Override
    public void cancelEnrollment(int sensorId, @NonNull IBinder token, long requestId) {
        mHandler.post(() ->
                mSensors.get(sensorId).getScheduler().cancelEnrollment(token, requestId));
                mFaceSensors.get(sensorId).getScheduler().cancelEnrollment(token, requestId));
    }

    @Override
@@ -419,7 +429,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
        mHandler.post(() -> {
            final boolean isStrongBiometric = Utils.isStrongBiometric(sensorId);
            final FaceDetectClient client = new FaceDetectClient(mContext,
                    mSensors.get(sensorId).getLazySession(),
                    mFaceSensors.get(sensorId).getLazySession(),
                    token, id, callback, options,
                    createLogger(BiometricsProtoEnums.ACTION_AUTHENTICATE, statsClient),
                    mBiometricContext, isStrongBiometric);
@@ -431,7 +441,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {

    @Override
    public void cancelFaceDetect(int sensorId, @NonNull IBinder token, long requestId) {
        mHandler.post(() -> mSensors.get(sensorId).getScheduler()
        mHandler.post(() -> mFaceSensors.get(sensorId).getScheduler()
                .cancelAuthenticationOrDetection(token, requestId));
    }

@@ -446,12 +456,12 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
            final int sensorId = options.getSensorId();
            final boolean isStrongBiometric = Utils.isStrongBiometric(sensorId);
            final FaceAuthenticationClient client = new FaceAuthenticationClient(
                    mContext, mSensors.get(sensorId).getLazySession(), token, requestId, callback,
                    operationId, restricted, options, cookie,
                    mContext, mFaceSensors.get(sensorId).getLazySession(), token, requestId,
                    callback, operationId, restricted, options, cookie,
                    false /* requireConfirmation */,
                    createLogger(BiometricsProtoEnums.ACTION_AUTHENTICATE, statsClient),
                    mBiometricContext, isStrongBiometric,
                    mUsageStats, mSensors.get(sensorId).getLockoutCache(),
                    mUsageStats, mFaceSensors.get(sensorId).getLockoutCache(),
                    allowBackgroundAuthentication, Utils.getCurrentStrength(sensorId));
            scheduleForSensor(sensorId, client, new ClientMonitorCallback() {
                @Override
@@ -486,7 +496,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {

    @Override
    public void cancelAuthentication(int sensorId, @NonNull IBinder token, long requestId) {
        mHandler.post(() -> mSensors.get(sensorId).getScheduler()
        mHandler.post(() -> mFaceSensors.get(sensorId).getScheduler()
                .cancelAuthenticationOrDetection(token, requestId));
    }

@@ -514,13 +524,13 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
            int userId, @NonNull IFaceServiceReceiver receiver, @NonNull String opPackageName) {
        mHandler.post(() -> {
            final FaceRemovalClient client = new FaceRemovalClient(mContext,
                    mSensors.get(sensorId).getLazySession(), token,
                    mFaceSensors.get(sensorId).getLazySession(), token,
                    new ClientMonitorCallbackConverter(receiver), faceIds, userId,
                    opPackageName, FaceUtils.getInstance(sensorId), sensorId,
                    createLogger(BiometricsProtoEnums.ACTION_REMOVE,
                            BiometricsProtoEnums.CLIENT_UNKNOWN),
                    mBiometricContext,
                    mSensors.get(sensorId).getAuthenticatorIds());
                    mFaceSensors.get(sensorId).getAuthenticatorIds());
            scheduleForSensor(sensorId, client, mBiometricStateCallback);
        });
    }
@@ -529,12 +539,12 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
    public void scheduleResetLockout(int sensorId, int userId, @NonNull byte[] hardwareAuthToken) {
        mHandler.post(() -> {
            final FaceResetLockoutClient client = new FaceResetLockoutClient(
                    mContext, mSensors.get(sensorId).getLazySession(), userId,
                    mContext, mFaceSensors.get(sensorId).getLazySession(), userId,
                    mContext.getOpPackageName(), sensorId,
                    createLogger(BiometricsProtoEnums.ACTION_UNKNOWN,
                            BiometricsProtoEnums.CLIENT_UNKNOWN),
                    mBiometricContext, hardwareAuthToken,
                    mSensors.get(sensorId).getLockoutCache(), mLockoutResetDispatcher,
                    mFaceSensors.get(sensorId).getLockoutCache(), mLockoutResetDispatcher,
                    Utils.getCurrentStrength(sensorId));

            scheduleForSensor(sensorId, client);
@@ -553,7 +563,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
                return;
            }
            final FaceSetFeatureClient client = new FaceSetFeatureClient(mContext,
                    mSensors.get(sensorId).getLazySession(), token,
                    mFaceSensors.get(sensorId).getLazySession(), token,
                    new ClientMonitorCallbackConverter(receiver), userId,
                    mContext.getOpPackageName(), sensorId,
                    BiometricLogger.ofUnknown(mContext), mBiometricContext,
@@ -573,7 +583,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
                return;
            }
            final FaceGetFeatureClient client = new FaceGetFeatureClient(mContext,
                    mSensors.get(sensorId).getLazySession(), token, callback, userId,
                    mFaceSensors.get(sensorId).getLazySession(), token, callback, userId,
                    mContext.getOpPackageName(), sensorId, BiometricLogger.ofUnknown(mContext),
                    mBiometricContext);
            scheduleForSensor(sensorId, client);
@@ -583,7 +593,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
    @Override
    public void startPreparedClient(int sensorId, int cookie) {
        mHandler.post(() -> {
            mSensors.get(sensorId).getScheduler().startPreparedClient(cookie);
            mFaceSensors.get(sensorId).getScheduler().startPreparedClient(cookie);
        });
    }

@@ -599,13 +609,13 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
        mHandler.post(() -> {
            final FaceInternalCleanupClient client =
                    new FaceInternalCleanupClient(mContext,
                            mSensors.get(sensorId).getLazySession(), userId,
                            mFaceSensors.get(sensorId).getLazySession(), userId,
                            mContext.getOpPackageName(), sensorId,
                            createLogger(BiometricsProtoEnums.ACTION_ENUMERATE,
                                    BiometricsProtoEnums.CLIENT_UNKNOWN),
                            mBiometricContext,
                            FaceUtils.getInstance(sensorId),
                            mSensors.get(sensorId).getAuthenticatorIds());
                            mFaceSensors.get(sensorId).getAuthenticatorIds());
            if (favorHalEnrollments) {
                client.setFavorHalEnrollments();
            }
@@ -622,8 +632,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
    @Override
    public void dumpProtoState(int sensorId, @NonNull ProtoOutputStream proto,
            boolean clearSchedulerBuffer) {
        if (mSensors.contains(sensorId)) {
            mSensors.get(sensorId).dumpProtoState(sensorId, proto, clearSchedulerBuffer);
        if (mFaceSensors.contains(sensorId)) {
            mFaceSensors.get(sensorId).dumpProtoState(sensorId, proto, clearSchedulerBuffer);
        }
    }

@@ -672,7 +682,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
        pw.println(mBiometricContext.getAuthSessionCoordinator());
        pw.println("---AuthSessionCoordinator logs end  ---");

        mSensors.get(sensorId).getScheduler().dump(pw);
        mFaceSensors.get(sensorId).getScheduler().dump(pw);
        mUsageStats.print(pw);
    }

@@ -680,7 +690,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
    @Override
    public ITestSession createTestSession(int sensorId, @NonNull ITestSessionCallback callback,
            @NonNull String opPackageName) {
        return mSensors.get(sensorId).createTestSession(callback);
        return mFaceSensors.get(sensorId).createTestSession(callback);
    }

    @Override
@@ -692,9 +702,9 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
        Slog.e(getTag(), "HAL died");
        mHandler.post(() -> {
            mDaemon = null;
            for (int i = 0; i < mSensors.size(); i++) {
                final Sensor sensor = mSensors.valueAt(i);
                final int sensorId = mSensors.keyAt(i);
            for (int i = 0; i < mFaceSensors.size(); i++) {
                final Sensor sensor = mFaceSensors.valueAt(i);
                final int sensorId = mFaceSensors.keyAt(i);
                PerformanceTracker.getInstanceForSensorId(sensorId).incrementHALDeathCount();
                sensor.onBinderDied();
            }
@@ -708,7 +718,7 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
    @Override
    public void scheduleWatchdog(int sensorId) {
        Slog.d(getTag(), "Starting watchdog for face");
        final BiometricScheduler biometricScheduler = mSensors.get(sensorId).getScheduler();
        final BiometricScheduler biometricScheduler = mFaceSensors.get(sensorId).getScheduler();
        if (biometricScheduler == null) {
            return;
        }
+0 −17
Original line number Diff line number Diff line
@@ -18,9 +18,6 @@ package com.android.server.biometrics.sensors.face.aidl;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.SynchronousUserSwitchObserver;
import android.app.UserSwitchObserver;
import android.content.Context;
import android.content.pm.UserInfo;
import android.hardware.biometrics.BiometricsProtoEnums;
@@ -94,14 +91,6 @@ public class Sensor {
    @NonNull private final Supplier<AidlSession> mLazySession;
    @Nullable private AidlSession mCurrentSession;

    private final UserSwitchObserver mUserSwitchObserver = new SynchronousUserSwitchObserver() {
        @Override
        public void onUserSwitching(int newUserId) {
            mProvider.scheduleInternalCleanup(
                    mSensorProperties.sensorId, newUserId, null /* callback */);
        }
    };

    @VisibleForTesting
    public static class HalSessionCallback extends ISessionCallback.Stub {
        /**
@@ -558,12 +547,6 @@ public class Sensor {
        mLockoutCache = new LockoutCache();
        mAuthenticatorIds = new HashMap<>();
        mLazySession = () -> mCurrentSession != null ? mCurrentSession : null;

        try {
            ActivityManager.getService().registerUserSwitchObserver(mUserSwitchObserver, mTag);
        } catch (RemoteException e) {
            Slog.e(mTag, "Unable to register user switch observer");
        }
    }

    @NonNull Supplier<AidlSession> getLazySession() {
Loading