Loading services/core/java/com/android/server/fingerprint/FingerprintService.java +38 −23 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe private static final int FINGERPRINT_ACQUIRED_GOOD = 0; Handler mHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { switch (msg.what) { case MSG_USER_SWITCHING: Loading Loading @@ -273,7 +274,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe Slog.w(TAG, "enroll: no fingeprintd!"); return; } stopPendingOperations(); stopPendingOperations(true); mEnrollClient = new ClientMonitor(token, receiver, groupId, restricted); final int timeout = (int) (ENROLLMENT_TIMEOUT_MS / MS_PER_SEC); try { Loading Loading @@ -314,17 +315,23 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe return 0; } private void stopPendingOperations() { private void stopPendingOperations(boolean initiatedByClient) { if (mEnrollClient != null) { stopEnrollment(mEnrollClient.token, true); stopEnrollment(mEnrollClient.token, initiatedByClient); } if (mAuthClient != null) { stopAuthentication(mAuthClient.token, true); stopAuthentication(mAuthClient.token, initiatedByClient); } // mRemoveClient is allowed to continue } void stopEnrollment(IBinder token, boolean notify) { /** * Stop enrollment in progress and inform client if they initiated it. * * @param token token for client * @param initiatedByClient if this call is the result of client action (e.g. calling cancel) */ void stopEnrollment(IBinder token, boolean initiatedByClient) { IFingerprintDaemon daemon = getFingerprintDaemon(); if (daemon == null) { Slog.w(TAG, "stopEnrollment: no fingeprintd!"); Loading @@ -332,6 +339,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } final ClientMonitor client = mEnrollClient; if (client == null || client.token != token) return; if (initiatedByClient) { try { int result = daemon.cancelEnrollment(); if (result != 0) { Loading @@ -340,7 +348,6 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } catch (RemoteException e) { Slog.e(TAG, "stopEnrollment failed", e); } if (notify) { client.sendError(FingerprintManager.FINGERPRINT_ERROR_CANCELED); } removeClient(mEnrollClient); Loading @@ -353,7 +360,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe Slog.w(TAG, "startAuthentication: no fingeprintd!"); return; } stopPendingOperations(); stopPendingOperations(true); mAuthClient = new ClientMonitor(token, receiver, groupId, restricted); if (inLockoutMode()) { Slog.v(TAG, "In lockout mode; disallowing authentication"); Loading @@ -373,7 +380,13 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } } void stopAuthentication(IBinder token, boolean notify) { /** * Stop authentication in progress and inform client if they initiated it. * * @param token token for client * @param initiatedByClient if this call is the result of client action (e.g. calling cancel) */ void stopAuthentication(IBinder token, boolean initiatedByClient) { IFingerprintDaemon daemon = getFingerprintDaemon(); if (daemon == null) { Slog.w(TAG, "stopAuthentication: no fingeprintd!"); Loading @@ -381,6 +394,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } final ClientMonitor client = mAuthClient; if (client == null || client.token != token) return; if (initiatedByClient) { try { int result = daemon.cancelAuthentication(); if (result != 0) { Loading @@ -389,7 +403,6 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } catch (RemoteException e) { Slog.e(TAG, "stopAuthentication failed", e); } if (notify) { client.sendError(FingerprintManager.FINGERPRINT_ERROR_CANCELED); } removeClient(mAuthClient); Loading Loading @@ -485,12 +498,14 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe receiver = null; } @Override public void binderDied() { token = null; removeClient(this); receiver = null; } @Override protected void finalize() throws Throwable { try { if (token != null) { Loading Loading
services/core/java/com/android/server/fingerprint/FingerprintService.java +38 −23 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe private static final int FINGERPRINT_ACQUIRED_GOOD = 0; Handler mHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { switch (msg.what) { case MSG_USER_SWITCHING: Loading Loading @@ -273,7 +274,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe Slog.w(TAG, "enroll: no fingeprintd!"); return; } stopPendingOperations(); stopPendingOperations(true); mEnrollClient = new ClientMonitor(token, receiver, groupId, restricted); final int timeout = (int) (ENROLLMENT_TIMEOUT_MS / MS_PER_SEC); try { Loading Loading @@ -314,17 +315,23 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe return 0; } private void stopPendingOperations() { private void stopPendingOperations(boolean initiatedByClient) { if (mEnrollClient != null) { stopEnrollment(mEnrollClient.token, true); stopEnrollment(mEnrollClient.token, initiatedByClient); } if (mAuthClient != null) { stopAuthentication(mAuthClient.token, true); stopAuthentication(mAuthClient.token, initiatedByClient); } // mRemoveClient is allowed to continue } void stopEnrollment(IBinder token, boolean notify) { /** * Stop enrollment in progress and inform client if they initiated it. * * @param token token for client * @param initiatedByClient if this call is the result of client action (e.g. calling cancel) */ void stopEnrollment(IBinder token, boolean initiatedByClient) { IFingerprintDaemon daemon = getFingerprintDaemon(); if (daemon == null) { Slog.w(TAG, "stopEnrollment: no fingeprintd!"); Loading @@ -332,6 +339,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } final ClientMonitor client = mEnrollClient; if (client == null || client.token != token) return; if (initiatedByClient) { try { int result = daemon.cancelEnrollment(); if (result != 0) { Loading @@ -340,7 +348,6 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } catch (RemoteException e) { Slog.e(TAG, "stopEnrollment failed", e); } if (notify) { client.sendError(FingerprintManager.FINGERPRINT_ERROR_CANCELED); } removeClient(mEnrollClient); Loading @@ -353,7 +360,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe Slog.w(TAG, "startAuthentication: no fingeprintd!"); return; } stopPendingOperations(); stopPendingOperations(true); mAuthClient = new ClientMonitor(token, receiver, groupId, restricted); if (inLockoutMode()) { Slog.v(TAG, "In lockout mode; disallowing authentication"); Loading @@ -373,7 +380,13 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } } void stopAuthentication(IBinder token, boolean notify) { /** * Stop authentication in progress and inform client if they initiated it. * * @param token token for client * @param initiatedByClient if this call is the result of client action (e.g. calling cancel) */ void stopAuthentication(IBinder token, boolean initiatedByClient) { IFingerprintDaemon daemon = getFingerprintDaemon(); if (daemon == null) { Slog.w(TAG, "stopAuthentication: no fingeprintd!"); Loading @@ -381,6 +394,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } final ClientMonitor client = mAuthClient; if (client == null || client.token != token) return; if (initiatedByClient) { try { int result = daemon.cancelAuthentication(); if (result != 0) { Loading @@ -389,7 +403,6 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } catch (RemoteException e) { Slog.e(TAG, "stopAuthentication failed", e); } if (notify) { client.sendError(FingerprintManager.FINGERPRINT_ERROR_CANCELED); } removeClient(mAuthClient); Loading Loading @@ -485,12 +498,14 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe receiver = null; } @Override public void binderDied() { token = null; removeClient(this); receiver = null; } @Override protected void finalize() throws Throwable { try { if (token != null) { Loading