Loading services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +24 −0 Original line number Diff line number Diff line Loading @@ -363,7 +363,31 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi public void scheduleRemove(int sensorId, @NonNull IBinder token, @NonNull IFingerprintServiceReceiver receiver, int fingerId, int userId, @NonNull String opPackageName) { mHandler.post(() -> { final IFingerprint daemon = getHalInstance(); if (daemon == null) { Slog.e(getTag(), "Null daemon during remove, sensorId: " + sensorId); // If this happens, we need to send HW_UNAVAILABLE after the scheduler gets to // this operation. We should not send the callback yet, since the scheduler may // be processing something else. return; } try { if (!mSensors.get(sensorId).hasSessionForUser(userId)) { createNewSessionWithoutHandler(daemon, sensorId, userId); } final FingerprintRemovalClient client = new FingerprintRemovalClient(mContext, mSensors.get(sensorId).getLazySession(), token, new ClientMonitorCallbackConverter(receiver), fingerId, userId, opPackageName, FingerprintUtils.getInstance(), sensorId, mSensors.get(sensorId).getAuthenticatorIds()); mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client); } catch (RemoteException e) { Slog.e(getTag(), "Remote exception when scheduling remove", e); } }); } @Override Loading services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 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.fingerprint.aidl; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.fingerprint.ISession; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.RemovalClient; import java.util.Map; /** * Fingerprint-specific removal client supporting the * {@link android.hardware.biometrics.fingerprint.IFingerprint} interface. */ public class FingerprintRemovalClient extends RemovalClient<ISession> { private static final String TAG = "FingerprintRemovalClient"; public FingerprintRemovalClient(@NonNull Context context, @NonNull LazyDaemon<ISession> lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int biometricId, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map<Integer, Long> authenticatorIds) { super(context, lazyDaemon, token, listener, biometricId, userId, owner, utils, sensorId, authenticatorIds, BiometricsProtoEnums.MODALITY_FINGERPRINT); } @Override protected void startHalOperation() { try { final int[] ids = new int[] {mBiometricId}; getFreshDaemon().removeEnrollments(mSequentialId, ids); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting remove", e); mCallback.onClientFinished(this, false /* success */); } } } services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java +8 −0 Original line number Diff line number Diff line Loading @@ -43,7 +43,9 @@ import com.android.server.biometrics.sensors.fingerprint.GestureAvailabilityDisp import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Maintains the state of a single sensor within an instance of the Loading @@ -56,6 +58,7 @@ class Sensor { @NonNull private final FingerprintSensorPropertiesInternal mSensorProperties; @NonNull private final BiometricScheduler mScheduler; @NonNull private final LockoutCache mLockoutCache; @NonNull private final Map<Integer, Long> mAuthenticatorIds; @Nullable private Session mCurrentSession; // TODO: Death recipient @NonNull private final ClientMonitor.LazyDaemon<ISession> mLazySession; Loading Loading @@ -85,6 +88,7 @@ class Sensor { mSensorProperties = sensorProperties; mScheduler = new BiometricScheduler(tag, gestureAvailabilityDispatcher); mLockoutCache = new LockoutCache(); mAuthenticatorIds = new HashMap<>(); mLazySession = () -> mCurrentSession != null ? mCurrentSession.mSession : null; } Loading Loading @@ -291,4 +295,8 @@ class Sensor { @NonNull LockoutCache getLockoutCache() { return mLockoutCache; } @NonNull Map<Integer, Long> getAuthenticatorIds() { return mAuthenticatorIds; } } Loading
services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java +24 −0 Original line number Diff line number Diff line Loading @@ -363,7 +363,31 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi public void scheduleRemove(int sensorId, @NonNull IBinder token, @NonNull IFingerprintServiceReceiver receiver, int fingerId, int userId, @NonNull String opPackageName) { mHandler.post(() -> { final IFingerprint daemon = getHalInstance(); if (daemon == null) { Slog.e(getTag(), "Null daemon during remove, sensorId: " + sensorId); // If this happens, we need to send HW_UNAVAILABLE after the scheduler gets to // this operation. We should not send the callback yet, since the scheduler may // be processing something else. return; } try { if (!mSensors.get(sensorId).hasSessionForUser(userId)) { createNewSessionWithoutHandler(daemon, sensorId, userId); } final FingerprintRemovalClient client = new FingerprintRemovalClient(mContext, mSensors.get(sensorId).getLazySession(), token, new ClientMonitorCallbackConverter(receiver), fingerId, userId, opPackageName, FingerprintUtils.getInstance(), sensorId, mSensors.get(sensorId).getAuthenticatorIds()); mSensors.get(sensorId).getScheduler().scheduleClientMonitor(client); } catch (RemoteException e) { Slog.e(getTag(), "Remote exception when scheduling remove", e); } }); } @Override Loading
services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintRemovalClient.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 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.fingerprint.aidl; import android.annotation.NonNull; import android.content.Context; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.biometrics.fingerprint.ISession; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; import com.android.server.biometrics.sensors.BiometricUtils; import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter; import com.android.server.biometrics.sensors.RemovalClient; import java.util.Map; /** * Fingerprint-specific removal client supporting the * {@link android.hardware.biometrics.fingerprint.IFingerprint} interface. */ public class FingerprintRemovalClient extends RemovalClient<ISession> { private static final String TAG = "FingerprintRemovalClient"; public FingerprintRemovalClient(@NonNull Context context, @NonNull LazyDaemon<ISession> lazyDaemon, @NonNull IBinder token, @NonNull ClientMonitorCallbackConverter listener, int biometricId, int userId, @NonNull String owner, @NonNull BiometricUtils utils, int sensorId, @NonNull Map<Integer, Long> authenticatorIds) { super(context, lazyDaemon, token, listener, biometricId, userId, owner, utils, sensorId, authenticatorIds, BiometricsProtoEnums.MODALITY_FINGERPRINT); } @Override protected void startHalOperation() { try { final int[] ids = new int[] {mBiometricId}; getFreshDaemon().removeEnrollments(mSequentialId, ids); } catch (RemoteException e) { Slog.e(TAG, "Remote exception when requesting remove", e); mCallback.onClientFinished(this, false /* success */); } } }
services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/Sensor.java +8 −0 Original line number Diff line number Diff line Loading @@ -43,7 +43,9 @@ import com.android.server.biometrics.sensors.fingerprint.GestureAvailabilityDisp import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Maintains the state of a single sensor within an instance of the Loading @@ -56,6 +58,7 @@ class Sensor { @NonNull private final FingerprintSensorPropertiesInternal mSensorProperties; @NonNull private final BiometricScheduler mScheduler; @NonNull private final LockoutCache mLockoutCache; @NonNull private final Map<Integer, Long> mAuthenticatorIds; @Nullable private Session mCurrentSession; // TODO: Death recipient @NonNull private final ClientMonitor.LazyDaemon<ISession> mLazySession; Loading Loading @@ -85,6 +88,7 @@ class Sensor { mSensorProperties = sensorProperties; mScheduler = new BiometricScheduler(tag, gestureAvailabilityDispatcher); mLockoutCache = new LockoutCache(); mAuthenticatorIds = new HashMap<>(); mLazySession = () -> mCurrentSession != null ? mCurrentSession.mSession : null; } Loading Loading @@ -291,4 +295,8 @@ class Sensor { @NonNull LockoutCache getLockoutCache() { return mLockoutCache; } @NonNull Map<Integer, Long> getAuthenticatorIds() { return mAuthenticatorIds; } }