diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt index d1e23e726..f209b6a75 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/MainCredentialActivity.kt @@ -51,7 +51,7 @@ import com.kunzisoft.keepass.activities.dialogs.DuplicateUuidDialog import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper import com.kunzisoft.keepass.activities.helpers.ExternalFileHelper import com.kunzisoft.keepass.activities.helpers.SpecialMode -import com.kunzisoft.keepass.activities.legacy.DatabaseLockActivity +import com.kunzisoft.keepass.activities.legacy.DatabaseLockActivity.Companion.UI_VISIBLE_DURING_LOCK import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity import com.kunzisoft.keepass.autofill.AutofillComponent import com.kunzisoft.keepass.autofill.AutofillHelper @@ -265,6 +265,11 @@ class MainCredentialActivity : DatabaseModeActivity() { override fun onResume() { super.onResume() + // Don't allow auto open prompt if lock become when UI visible + if (UI_VISIBLE_DURING_LOCK) { + mDeviceUnlockViewModel.allowAutoOpenBiometricPrompt = false + } + // Init Biometric elements only if allowed if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && PreferencesUtil.isAdvancedUnlockEnable(this)) { @@ -291,11 +296,6 @@ class MainCredentialActivity : DatabaseModeActivity() { sendBroadcast(Intent(BACK_PREVIOUS_KEYBOARD_ACTION)) } - // Don't allow auto open prompt if lock become when UI visible - if (DatabaseLockActivity.LOCKING_ACTIVITY_UI_VISIBLE_DURING_LOCK == true) { - mDeviceUnlockViewModel.allowAutoOpenBiometricPrompt = false - } - mDatabaseFileUri?.let { databaseFileUri -> mDatabaseFileViewModel.loadDatabaseFile(databaseFileUri) } @@ -420,6 +420,7 @@ class MainCredentialActivity : DatabaseModeActivity() { // Check if database really loaded if (database.loaded) { clearCredentialsViews(clearKeyFile = true, clearHardwareKey = true) + mDeviceUnlockViewModel.autoPromptAlreadyShown = false GroupActivity.launch(this, database, { onValidateSpecialMode() }, @@ -541,8 +542,7 @@ class MainCredentialActivity : DatabaseModeActivity() { override fun onPause() { // Reinit locking activity UI variable - DatabaseLockActivity.LOCKING_ACTIVITY_UI_VISIBLE_DURING_LOCK = null - + UI_VISIBLE_DURING_LOCK = false super.onPause() } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseLockActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseLockActivity.kt index f129a24ed..24c98a0c1 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseLockActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/DatabaseLockActivity.kt @@ -47,10 +47,14 @@ import com.kunzisoft.keepass.services.DatabaseTaskNotificationService import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.tasks.ActionRunnable import com.kunzisoft.keepass.timeout.TimeoutHelper -import com.kunzisoft.keepass.utils.* +import com.kunzisoft.keepass.utils.LOCK_ACTION +import com.kunzisoft.keepass.utils.LockReceiver +import com.kunzisoft.keepass.utils.closeDatabase +import com.kunzisoft.keepass.utils.registerLockReceiver +import com.kunzisoft.keepass.utils.unregisterLockReceiver import com.kunzisoft.keepass.view.showActionErrorIfNeeded import com.kunzisoft.keepass.viewmodels.NodesViewModel -import java.util.* +import java.util.UUID abstract class DatabaseLockActivity : DatabaseModeActivity(), PasswordEncodingDialogFragment.Listener { @@ -184,8 +188,7 @@ abstract class DatabaseLockActivity : DatabaseModeActivity(), mLockReceiver = LockReceiver { mDatabase = null closeDatabase(database) - if (LOCKING_ACTIVITY_UI_VISIBLE_DURING_LOCK == null) - LOCKING_ACTIVITY_UI_VISIBLE_DURING_LOCK = LOCKING_ACTIVITY_UI_VISIBLE + UI_VISIBLE_DURING_LOCK = UI_VISIBLE mExitLock = true closeOptionsMenu() finish() @@ -414,7 +417,7 @@ abstract class DatabaseLockActivity : DatabaseModeActivity(), invalidateOptionsMenu() - LOCKING_ACTIVITY_UI_VISIBLE = true + UI_VISIBLE = true } protected fun checkTimeAndLockIfTimeoutOrResetTimeout(action: (() -> Unit)? = null) { @@ -429,7 +432,7 @@ abstract class DatabaseLockActivity : DatabaseModeActivity(), } override fun onPause() { - LOCKING_ACTIVITY_UI_VISIBLE = false + UI_VISIBLE = false super.onPause() @@ -481,8 +484,8 @@ abstract class DatabaseLockActivity : DatabaseModeActivity(), const val TIMEOUT_ENABLE_KEY = "TIMEOUT_ENABLE_KEY" const val TIMEOUT_ENABLE_KEY_DEFAULT = true - private var LOCKING_ACTIVITY_UI_VISIBLE = false - var LOCKING_ACTIVITY_UI_VISIBLE_DURING_LOCK: Boolean? = null + var UI_VISIBLE: Boolean = false + var UI_VISIBLE_DURING_LOCK: Boolean = false } } diff --git a/app/src/main/java/com/kunzisoft/keepass/biometric/DeviceUnlockFragment.kt b/app/src/main/java/com/kunzisoft/keepass/biometric/DeviceUnlockFragment.kt index 60cf7d0ed..71d44c79b 100644 --- a/app/src/main/java/com/kunzisoft/keepass/biometric/DeviceUnlockFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/biometric/DeviceUnlockFragment.kt @@ -74,7 +74,6 @@ class DeviceUnlockFragment: Fragment() { private var mDeviceCredentialResultLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { result -> - mDeviceUnlockViewModel.allowAutoOpenBiometricPrompt = false // To wait resume if (keepConnection) { mDeviceUnlockViewModel.deviceCredentialAuthSucceeded = @@ -295,8 +294,9 @@ class DeviceUnlockFragment: Fragment() { } // Auto open the biometric prompt if (mDeviceUnlockViewModel.allowAutoOpenBiometricPrompt + && !mDeviceUnlockViewModel.autoPromptAlreadyShown && PreferencesUtil.isAdvancedUnlockPromptAutoOpenEnable(requireContext())) { - mDeviceUnlockViewModel.allowAutoOpenBiometricPrompt = false + mDeviceUnlockViewModel.autoPromptAlreadyShown = true openDecryptionPrompt(cryptoPrompt) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/viewmodels/DeviceUnlockViewModel.kt b/app/src/main/java/com/kunzisoft/keepass/viewmodels/DeviceUnlockViewModel.kt index 2c07838e2..4d9b7d392 100644 --- a/app/src/main/java/com/kunzisoft/keepass/viewmodels/DeviceUnlockViewModel.kt +++ b/app/src/main/java/com/kunzisoft/keepass/viewmodels/DeviceUnlockViewModel.kt @@ -22,6 +22,7 @@ import kotlinx.coroutines.flow.update class DeviceUnlockViewModel(application: Application): AndroidViewModel(application) { var allowAutoOpenBiometricPrompt : Boolean = true + var autoPromptAlreadyShown : Boolean = false var deviceCredentialAuthSucceeded: Boolean? = null private var cipherDatabaseListener: CipherDatabaseAction.CipherDatabaseListener? = null