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

Commit 6afa1c78 authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Android (Google) Code Review
Browse files

Merge "Make LockoutResetCallback oneway"

parents 6aef541c 57e2f4db
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -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;
@@ -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) {
+6 −3
Original line number Diff line number Diff line
@@ -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);
}
+18 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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);
            }
        };