Fix null pointer exception

Add null check and refactor logic to reduce reduant code.

Bug: b/245880827
Test: run atest AuthControllerTest
Change-Id: Ib5b4fb985228294dff72da92af678e542fc31f86
This commit is contained in:
Vincent Wang
2022-09-20 08:17:21 +00:00
parent 4dc756781a
commit 47f9d4c41a

View File

@@ -349,18 +349,14 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba
@Override
public void onTryAgainPressed(long requestId) {
if (mReceiver == null) {
Log.e(TAG, "onTryAgainPressed: Receiver is null");
return;
}
if (requestId != mCurrentDialog.getRequestId()) {
Log.w(TAG, "requestId doesn't match, skip onTryAgainPressed");
final IBiometricSysuiReceiver receiver = getCurrentReceiver(requestId);
if (receiver == null) {
Log.w(TAG, "Skip onTryAgainPressed");
return;
}
try {
mReceiver.onTryAgainPressed();
receiver.onTryAgainPressed();
} catch (RemoteException e) {
Log.e(TAG, "RemoteException when handling try again", e);
}
@@ -368,18 +364,14 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba
@Override
public void onDeviceCredentialPressed(long requestId) {
if (mReceiver == null) {
Log.e(TAG, "onDeviceCredentialPressed: Receiver is null");
return;
}
if (requestId != mCurrentDialog.getRequestId()) {
Log.w(TAG, "requestId doesn't match, skip onDeviceCredentialPressed");
final IBiometricSysuiReceiver receiver = getCurrentReceiver(requestId);
if (receiver == null) {
Log.w(TAG, "Skip onDeviceCredentialPressed");
return;
}
try {
mReceiver.onDeviceCredentialPressed();
receiver.onDeviceCredentialPressed();
} catch (RemoteException e) {
Log.e(TAG, "RemoteException when handling credential button", e);
}
@@ -387,18 +379,14 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba
@Override
public void onSystemEvent(int event, long requestId) {
if (mReceiver == null) {
Log.e(TAG, "onSystemEvent(" + event + "): Receiver is null");
return;
}
if (requestId != mCurrentDialog.getRequestId()) {
Log.w(TAG, "requestId doesn't match, skip onSystemEvent");
final IBiometricSysuiReceiver receiver = getCurrentReceiver(requestId);
if (receiver == null) {
Log.w(TAG, "Skip onSystemEvent");
return;
}
try {
mReceiver.onSystemEvent(event);
receiver.onSystemEvent(event);
} catch (RemoteException e) {
Log.e(TAG, "RemoteException when sending system event", e);
}
@@ -406,23 +394,46 @@ public class AuthController extends CoreStartable implements CommandQueue.Callba
@Override
public void onDialogAnimatedIn(long requestId) {
if (mReceiver == null) {
Log.e(TAG, "onDialogAnimatedIn: Receiver is null");
return;
}
if (requestId != mCurrentDialog.getRequestId()) {
Log.w(TAG, "requestId doesn't match, skip onDialogAnimatedIn");
final IBiometricSysuiReceiver receiver = getCurrentReceiver(requestId);
if (receiver == null) {
Log.w(TAG, "Skip onDialogAnimatedIn");
return;
}
try {
mReceiver.onDialogAnimatedIn();
receiver.onDialogAnimatedIn();
} catch (RemoteException e) {
Log.e(TAG, "RemoteException when sending onDialogAnimatedIn", e);
}
}
@Nullable
private IBiometricSysuiReceiver getCurrentReceiver(long requestId) {
if (!isRequestIdValid(requestId)) {
return null;
}
if (mReceiver == null) {
Log.w(TAG, "getCurrentReceiver: Receiver is null");
}
return mReceiver;
}
private boolean isRequestIdValid(long requestId) {
if (mCurrentDialog == null) {
Log.w(TAG, "shouldNotifyReceiver: dialog already gone");
return false;
}
if (requestId != mCurrentDialog.getRequestId()) {
Log.w(TAG, "shouldNotifyReceiver: requestId doesn't match");
return false;
}
return true;
}
@Override
public void onDismissed(@DismissedReason int reason,
@Nullable byte[] credentialAttestation, long requestId) {