From 55a62ead059a98a2d4c42d4bb54502b5fcadde11 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 25 Feb 2021 21:14:10 -0500 Subject: [PATCH] Avoid API 10 issues with androidx.biometric usage. --- .../securesms/PassphrasePromptActivity.java | 18 ++++++++++++------ .../securesms/PassphraseRequiredActivity.java | 4 +++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java index 7ccc8619bec..6f3f0fe19a9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphrasePromptActivity.java @@ -76,6 +76,7 @@ public class PassphrasePromptActivity extends PassphraseActivity { private static final int ALLOWED_AUTHENTICATORS = BIOMETRIC_AUTHENTICATORS | Authenticators.DEVICE_CREDENTIAL; private static final short AUTHENTICATE_REQUEST_CODE = 1007; private static final String BUNDLE_ALREADY_SHOWN = "bundle_already_shown"; + public static final String FROM_FOREGROUND = "from_foreground"; private DynamicIntroTheme dynamicTheme = new DynamicIntroTheme(); private DynamicLanguage dynamicLanguage = new DynamicLanguage(); @@ -109,7 +110,8 @@ public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.prompt_passphrase_activity); initializeResources(); - alreadyShown = savedInstanceState != null && savedInstanceState.getBoolean(BUNDLE_ALREADY_SHOWN); + alreadyShown = (savedInstanceState != null && savedInstanceState.getBoolean(BUNDLE_ALREADY_SHOWN)) || + getIntent().getBooleanExtra(FROM_FOREGROUND, false); } @Override @@ -286,17 +288,21 @@ private void resumeScreenLock(boolean force) { return; } - if (biometricManager.canAuthenticate(ALLOWED_AUTHENTICATORS) == BiometricManager.BIOMETRIC_SUCCESS) { + if (Build.VERSION.SDK_INT != 29 && biometricManager.canAuthenticate(ALLOWED_AUTHENTICATORS) == BiometricManager.BIOMETRIC_SUCCESS) { if (force) { Log.i(TAG, "Listening for biometric authentication..."); biometricPrompt.authenticate(biometricPromptInfo); } else { Log.i(TAG, "Skipping show system biometric dialog unless forced"); } - } else if (Build.VERSION.SDK_INT >= 21){ - Log.i(TAG, "firing intent..."); - Intent intent = keyguardManager.createConfirmDeviceCredentialIntent(getString(R.string.PassphrasePromptActivity_unlock_signal), ""); - startActivityForResult(intent, AUTHENTICATE_REQUEST_CODE); + } else if (Build.VERSION.SDK_INT >= 21) { + if (force) { + Log.i(TAG, "firing intent..."); + Intent intent = keyguardManager.createConfirmDeviceCredentialIntent(getString(R.string.PassphrasePromptActivity_unlock_signal), ""); + startActivityForResult(intent, AUTHENTICATE_REQUEST_CODE); + } else { + Log.i(TAG, "Skipping firing intent unless forced"); + } } else { Log.w(TAG, "Not compatible..."); handleAuthenticated(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java index 08c5f02d415..cfe7e3f2b0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java @@ -183,7 +183,9 @@ private Intent getCreatePassphraseIntent() { } private Intent getPromptPassphraseIntent() { - return getRoutedIntent(PassphrasePromptActivity.class, getIntent()); + Intent intent = getRoutedIntent(PassphrasePromptActivity.class, getIntent()); + intent.putExtra(PassphrasePromptActivity.FROM_FOREGROUND, ApplicationDependencies.getAppForegroundObserver().isForegrounded()); + return intent; } private Intent getUiBlockingUpgradeIntent() {