Loading core/java/android/hardware/fingerprint/FingerprintManager.java +12 −9 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.CancellationSignal; import android.os.CancellationSignal.OnCancelListener; import android.os.Handler; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.Looper; import android.os.PowerManager; import android.os.RemoteException; Loading Loading @@ -757,20 +758,22 @@ public class FingerprintManager { new IFingerprintServiceLockoutResetCallback.Stub() { @Override public void onLockoutReset(long deviceId) throws RemoteException { public void onLockoutReset(long deviceId, IRemoteCallback serverCallback) throws RemoteException { try { final PowerManager.WakeLock wakeLock = powerManager.newWakeLock( PowerManager.PARTIAL_WAKE_LOCK, "lockoutResetCallback"); wakeLock.acquire(); mHandler.post(new Runnable() { @Override public void run() { mHandler.post(() -> { try { callback.onLockoutReset(); } finally { wakeLock.release(); } } }); } finally { serverCallback.sendResult(null /* data */); } } }); } catch (RemoteException e) { Loading core/java/android/hardware/fingerprint/IFingerprintServiceLockoutResetCallback.aidl +6 −3 Original line number Diff line number Diff line Loading @@ -17,14 +17,17 @@ package android.hardware.fingerprint; import android.hardware.fingerprint.Fingerprint; import android.os.Bundle; import android.os.IRemoteCallback; import android.os.UserHandle; /** * Callback when lockout period expired and clients are allowed to authenticate again. * @hide */ interface IFingerprintServiceLockoutResetCallback { oneway interface IFingerprintServiceLockoutResetCallback { /** Method is synchronous so wakelock is held when this is called from a WAKEUP alarm. */ void onLockoutReset(long deviceId); /** * A wakelock will be held until the reciever calls back into {@param callback} */ void onLockoutReset(long deviceId, IRemoteCallback callback); } services/core/java/com/android/server/fingerprint/FingerprintService.java +18 −1 Original line number Diff line number Diff line Loading @@ -32,11 +32,14 @@ import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback; import android.os.Binder; import android.os.Bundle; import android.os.DeadObjectException; import android.os.Environment; import android.os.Handler; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.RemoteException; import android.os.SELinux; import android.os.ServiceManager; Loading Loading @@ -625,17 +628,28 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe private class FingerprintServiceLockoutResetMonitor { private static final long WAKELOCK_TIMEOUT_MS = 2000; private final IFingerprintServiceLockoutResetCallback mCallback; private final WakeLock mWakeLock; public FingerprintServiceLockoutResetMonitor( IFingerprintServiceLockoutResetCallback callback) { mCallback = callback; mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "lockout reset callback"); } public void sendLockoutReset() { if (mCallback != null) { try { mCallback.onLockoutReset(mHalDeviceId); mWakeLock.acquire(WAKELOCK_TIMEOUT_MS); mCallback.onLockoutReset(mHalDeviceId, new IRemoteCallback.Stub() { @Override public void sendResult(Bundle data) throws RemoteException { mWakeLock.release(); } }); } catch (DeadObjectException e) { Slog.w(TAG, "Death object while invoking onLockoutReset: ", e); mHandler.post(mRemoveCallbackRunnable); Loading @@ -648,6 +662,9 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe private final Runnable mRemoveCallbackRunnable = new Runnable() { @Override public void run() { if (mWakeLock.isHeld()) { mWakeLock.release(); } removeLockoutResetCallback(FingerprintServiceLockoutResetMonitor.this); } }; Loading Loading
core/java/android/hardware/fingerprint/FingerprintManager.java +12 −9 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.CancellationSignal; import android.os.CancellationSignal.OnCancelListener; import android.os.Handler; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.Looper; import android.os.PowerManager; import android.os.RemoteException; Loading Loading @@ -757,20 +758,22 @@ public class FingerprintManager { new IFingerprintServiceLockoutResetCallback.Stub() { @Override public void onLockoutReset(long deviceId) throws RemoteException { public void onLockoutReset(long deviceId, IRemoteCallback serverCallback) throws RemoteException { try { final PowerManager.WakeLock wakeLock = powerManager.newWakeLock( PowerManager.PARTIAL_WAKE_LOCK, "lockoutResetCallback"); wakeLock.acquire(); mHandler.post(new Runnable() { @Override public void run() { mHandler.post(() -> { try { callback.onLockoutReset(); } finally { wakeLock.release(); } } }); } finally { serverCallback.sendResult(null /* data */); } } }); } catch (RemoteException e) { Loading
core/java/android/hardware/fingerprint/IFingerprintServiceLockoutResetCallback.aidl +6 −3 Original line number Diff line number Diff line Loading @@ -17,14 +17,17 @@ package android.hardware.fingerprint; import android.hardware.fingerprint.Fingerprint; import android.os.Bundle; import android.os.IRemoteCallback; import android.os.UserHandle; /** * Callback when lockout period expired and clients are allowed to authenticate again. * @hide */ interface IFingerprintServiceLockoutResetCallback { oneway interface IFingerprintServiceLockoutResetCallback { /** Method is synchronous so wakelock is held when this is called from a WAKEUP alarm. */ void onLockoutReset(long deviceId); /** * A wakelock will be held until the reciever calls back into {@param callback} */ void onLockoutReset(long deviceId, IRemoteCallback callback); }
services/core/java/com/android/server/fingerprint/FingerprintService.java +18 −1 Original line number Diff line number Diff line Loading @@ -32,11 +32,14 @@ import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.hardware.fingerprint.IFingerprintServiceLockoutResetCallback; import android.os.Binder; import android.os.Bundle; import android.os.DeadObjectException; import android.os.Environment; import android.os.Handler; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.RemoteException; import android.os.SELinux; import android.os.ServiceManager; Loading Loading @@ -625,17 +628,28 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe private class FingerprintServiceLockoutResetMonitor { private static final long WAKELOCK_TIMEOUT_MS = 2000; private final IFingerprintServiceLockoutResetCallback mCallback; private final WakeLock mWakeLock; public FingerprintServiceLockoutResetMonitor( IFingerprintServiceLockoutResetCallback callback) { mCallback = callback; mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "lockout reset callback"); } public void sendLockoutReset() { if (mCallback != null) { try { mCallback.onLockoutReset(mHalDeviceId); mWakeLock.acquire(WAKELOCK_TIMEOUT_MS); mCallback.onLockoutReset(mHalDeviceId, new IRemoteCallback.Stub() { @Override public void sendResult(Bundle data) throws RemoteException { mWakeLock.release(); } }); } catch (DeadObjectException e) { Slog.w(TAG, "Death object while invoking onLockoutReset: ", e); mHandler.post(mRemoveCallbackRunnable); Loading @@ -648,6 +662,9 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe private final Runnable mRemoveCallbackRunnable = new Runnable() { @Override public void run() { if (mWakeLock.isHeld()) { mWakeLock.release(); } removeLockoutResetCallback(FingerprintServiceLockoutResetMonitor.this); } }; Loading