[BugFix][Fingerprint]fix client was canceled by service by mistake

issue:
After the call of client A started in the lockout state returns,
after client B calls the fp service, A is dead,
a death notification will be sent to the service, and the service will stop clent B.

solution:
Each time onAuthentication sets a flag mAlreadyDone to true.
Judge this flag as true in binderDie, and keep the current
fingerprint operation to avoid affecting the current user

Signed-off-by: zhangyupeng1 <zhangyupeng1@xiaomi.com>
Change-Id: I56ce99505febbb48dc13ccfc3c2d120123da4fa3
Merged-In: I56ce99505febbb48dc13ccfc3c2d120123da4fa3
This commit is contained in:
zhangyupeng1
2020-07-23 21:56:37 +08:00
committed by Kevin Chyn
parent d09cf27486
commit ed1c9cae12
3 changed files with 8 additions and 0 deletions

View File

@@ -217,6 +217,9 @@ public abstract class AuthenticationClient extends ClientMonitor {
}
}
result = lockoutMode != LOCKOUT_NONE; // in a lockout mode
if(result) { // lockde out
mAlreadyDone = true;
}
}
} catch (RemoteException e) {
Slog.e(getLogTag(), "Remote exception", e);

View File

@@ -945,6 +945,7 @@ public abstract class BiometricServiceBase extends SystemService
if (!client.onError(getHalDeviceId(), errorCode, 0 /* vendorCode */)) {
Slog.w(getTag(), "Cannot send permanent lockout message to client");
}
return;
}
startClient(client, true /* initiatedByClient */);

View File

@@ -233,6 +233,10 @@ public abstract class ClientMonitor extends LoggableMonitor implements IBinder.D
@Override
public void binderDied() {
if (isAlreadyDone()) {
Slog.w(getLogTag(), "Binder died but client is finished, ignoring");
return;
}
// If the current client dies we should cancel the current operation.
Slog.e(getLogTag(), "Binder died, cancelling client");
stop(false /* initiatedByClient */);