Let Android handle the lifecycle of BiometricPrompt

We previously stopped/started the biometric prompt every time in
onPause/onResume, but that's apparently not necessary (and discouraged according
to the documentation). This caused issues where the prompt would get stuck on
some devices. While working on this I ran into another issue where AuthActivity
was closed and reopened for no reason after rotation of the device, compounding
the issue. This patch also fixes that.
This commit is contained in:
Alexander Bakker 2020-06-18 17:21:08 +02:00
parent 6e54497492
commit 291fd5427b
2 changed files with 6 additions and 17 deletions

View file

@ -144,7 +144,7 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp
* the vault was locked by an external trigger while the Activity was still open.
*/
private boolean isOrphan() {
return !(this instanceof MainActivity) && _app.isVaultLocked();
return !(this instanceof MainActivity) && !(this instanceof AuthActivity) && _app.isVaultLocked();
}
protected Theme getCurrentTheme() {

View file

@ -145,6 +145,10 @@ public class AuthActivity extends AegisActivity {
biometricsButton.setOnClickListener(v -> {
showBiometricPrompt();
});
if (_bioKey != null) {
showBiometricPrompt();
}
}
@Override
@ -196,13 +200,7 @@ public class AuthActivity extends AegisActivity {
public void onResume() {
super.onResume();
if (_bioKey != null) {
if (_prefs.isPasswordReminderNeeded()) {
focusPasswordField();
} else {
showBiometricPrompt();
}
} else {
if (_bioKey == null || _prefs.isPasswordReminderNeeded()) {
focusPasswordField();
}
}
@ -252,15 +250,6 @@ public class AuthActivity extends AegisActivity {
_bioPrompt.authenticate(info, cryptoObj);
}
@Override
public void onPause() {
super.onPause();
if (_bioPrompt != null) {
_bioPrompt.cancelAuthentication();
}
}
private void finish(MasterKey key, boolean isSlotRepaired) {
VaultFileCredentials creds = new VaultFileCredentials(key, _slots);