From 4afe0bfa93f052ff58fcbe78c26beb273565744b Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Sun, 20 Sep 2026 10:24:38 +0200 Subject: [PATCH] Fix unresponsive UI after pressing back on the unlock screen, fixes #648 --- .../dialog/BiometricAuthKeyInvalidatedDialog.kt | 17 ++++++----------- .../ui/dialog/ChangePasswordDialog.kt | 15 +++++---------- .../ui/dialog/CreateHubDeviceDialog.kt | 15 +++++---------- .../ui/dialog/EnterPasswordDialog.kt | 17 ++++++----------- .../dialog/HubLicenseUpgradeRequiredDialog.kt | 15 +++++---------- .../ui/dialog/HubUserSetupRequiredDialog.kt | 15 +++++---------- .../ui/dialog/HubVaultAccessForbiddenDialog.kt | 15 +++++---------- .../ui/dialog/HubVaultArchivedDialog.kt | 15 +++++---------- 8 files changed, 42 insertions(+), 82 deletions(-) diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/BiometricAuthKeyInvalidatedDialog.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/BiometricAuthKeyInvalidatedDialog.kt index 817e7b3ae4..60b40fd05e 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/BiometricAuthKeyInvalidatedDialog.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/BiometricAuthKeyInvalidatedDialog.kt @@ -1,7 +1,6 @@ package org.cryptomator.presentation.ui.dialog import android.content.DialogInterface -import android.view.KeyEvent import androidx.appcompat.app.AlertDialog import org.cryptomator.generator.Dialog import org.cryptomator.presentation.R @@ -19,19 +18,15 @@ class BiometricAuthKeyInvalidatedDialog : BaseDialog } - .setOnKeyListener { _, keyCode, _ -> - if (keyCode == KeyEvent.KEYCODE_BACK) { - dialog?.dismiss() - callback?.onBiometricAuthKeyInvalidatedDialogFinished() - true - } else { - false - } - } + .setNegativeButton(getString(R.string.dialog_biometric_auth_key_invalidated_neutral_button)) { _: DialogInterface, _: Int -> callback?.onBiometricAuthKeyInvalidatedDialogFinished() } return builder.create() } + override fun onCancel(dialog: DialogInterface) { + super.onCancel(dialog) + callback?.onBiometricAuthKeyInvalidatedDialogFinished() + } + override fun onStart() { super.onStart() val dialog = dialog as AlertDialog? diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/ChangePasswordDialog.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/ChangePasswordDialog.kt index 6dea116d3b..0887aa9a96 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/ChangePasswordDialog.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/ChangePasswordDialog.kt @@ -2,7 +2,6 @@ package org.cryptomator.presentation.ui.dialog import android.content.DialogInterface import android.os.Bundle -import android.view.KeyEvent import android.view.View import android.widget.Button import android.widget.LinearLayout @@ -54,15 +53,6 @@ class ChangePasswordDialog : BaseProgressErrorDialog - if (keyCode == KeyEvent.KEYCODE_BACK) { - dialog.dismiss() - callback?.onChangePasswordCanceled() - true - } else { - false - } - } binding.etOldPassword.requestFocus() binding.etOldPassword.nextFocusForwardId = binding.etNewPassword.id binding.etNewPassword.nextFocusForwardId = binding.etNewRetypePassword.id @@ -81,6 +71,11 @@ class ChangePasswordDialog : BaseProgressErrorDialog { diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/CreateHubDeviceDialog.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/CreateHubDeviceDialog.kt index b0be92b98c..486fb97ca4 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/CreateHubDeviceDialog.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/CreateHubDeviceDialog.kt @@ -2,7 +2,6 @@ package org.cryptomator.presentation.ui.dialog import android.content.DialogInterface import android.os.Bundle -import android.view.KeyEvent import android.view.View import android.widget.LinearLayout import android.widget.TextView @@ -40,15 +39,6 @@ class CreateHubDeviceDialog : BaseProgressErrorDialog - if (keyCode == KeyEvent.KEYCODE_BACK) { - dialog.dismiss() - callback?.onCreateHubDeviceCanceled() - true - } else { - false - } - } binding.etDeviceName.requestFocus() binding.etDeviceName.nextFocusForwardId = binding.etSetupCode.id createDeviceButton?.let { @@ -58,6 +48,11 @@ class CreateHubDeviceDialog : BaseProgressErrorDialog { diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/EnterPasswordDialog.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/EnterPasswordDialog.kt index b8a8f9699f..2d433c57e3 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/EnterPasswordDialog.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/EnterPasswordDialog.kt @@ -4,7 +4,6 @@ import android.content.DialogInterface import android.os.Bundle import android.text.Editable import android.text.TextWatcher -import android.view.KeyEvent import android.view.View import android.widget.Button import android.widget.LinearLayout @@ -48,20 +47,16 @@ class EnterPasswordDialog : BaseProgressErrorDialog - if (keyCode == KeyEvent.KEYCODE_BACK) { - dialog.dismiss() - callback?.onUnlockCanceled() - callback?.closeDialog() - true - } else { - false - } - } binding.etPassword.requestFocus() } } + override fun onCancel(dialog: DialogInterface) { + super.onCancel(dialog) + callback?.onUnlockCanceled() + callback?.closeDialog() + } + public override fun setupDialog(builder: AlertDialog.Builder): android.app.Dialog { return builder // .setTitle(vaultModel().name) // diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubLicenseUpgradeRequiredDialog.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubLicenseUpgradeRequiredDialog.kt index c2a82becf4..fd7763028d 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubLicenseUpgradeRequiredDialog.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubLicenseUpgradeRequiredDialog.kt @@ -1,7 +1,6 @@ package org.cryptomator.presentation.ui.dialog import android.content.DialogInterface -import android.view.KeyEvent import androidx.appcompat.app.AlertDialog import org.cryptomator.generator.Dialog import org.cryptomator.presentation.R @@ -19,18 +18,14 @@ class HubLicenseUpgradeRequiredDialog : BaseDialog callback?.onHubLicenseUpgradeRequiredDialogFinished() } - .setOnKeyListener { _, keyCode, _ -> - if (keyCode == KeyEvent.KEYCODE_BACK) { - dialog?.dismiss() - callback?.onHubLicenseUpgradeRequiredDialogFinished() - true - } else { - false - } - } return builder.create() } + override fun onCancel(dialog: DialogInterface) { + super.onCancel(dialog) + callback?.onHubLicenseUpgradeRequiredDialogFinished() + } + public override fun setupView() { } diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubUserSetupRequiredDialog.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubUserSetupRequiredDialog.kt index 9ee48962d9..5912d00e39 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubUserSetupRequiredDialog.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubUserSetupRequiredDialog.kt @@ -2,7 +2,6 @@ package org.cryptomator.presentation.ui.dialog import android.content.DialogInterface import android.os.Bundle -import android.view.KeyEvent import androidx.appcompat.app.AlertDialog import org.cryptomator.domain.UnverifiedHubVaultConfig import org.cryptomator.generator.Dialog @@ -24,18 +23,14 @@ class HubUserSetupRequiredDialog : BaseDialog } // .setNegativeButton(getString(R.string.dialog_hub_user_setup_required_negative_button)) { _: DialogInterface, _: Int -> callback?.onCancelHubUserSetupClicked() } // - .setOnKeyListener { _, keyCode, _ -> - if (keyCode == KeyEvent.KEYCODE_BACK) { - dialog?.dismiss() - callback?.onCancelHubUserSetupClicked() - true - } else { - false - } - } return builder.create() } + override fun onCancel(dialog: DialogInterface) { + super.onCancel(dialog) + callback?.onCancelHubUserSetupClicked() + } + override fun onStart() { super.onStart() val dialog = dialog as AlertDialog? diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubVaultAccessForbiddenDialog.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubVaultAccessForbiddenDialog.kt index 72b49585a9..019cb0d8a1 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubVaultAccessForbiddenDialog.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubVaultAccessForbiddenDialog.kt @@ -1,7 +1,6 @@ package org.cryptomator.presentation.ui.dialog import android.content.DialogInterface -import android.view.KeyEvent import androidx.appcompat.app.AlertDialog import org.cryptomator.generator.Dialog import org.cryptomator.presentation.R @@ -19,18 +18,14 @@ class HubVaultAccessForbiddenDialog : BaseDialog callback?.onVaultAccessForbiddenDialogFinished() } // - .setOnKeyListener { _, keyCode, _ -> - if (keyCode == KeyEvent.KEYCODE_BACK) { - dialog?.dismiss() - callback?.onVaultAccessForbiddenDialogFinished() - true - } else { - false - } - } return builder.create() } + override fun onCancel(dialog: DialogInterface) { + super.onCancel(dialog) + callback?.onVaultAccessForbiddenDialogFinished() + } + public override fun setupView() { } diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubVaultArchivedDialog.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubVaultArchivedDialog.kt index 30923ee82b..9e07244f80 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubVaultArchivedDialog.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/HubVaultArchivedDialog.kt @@ -1,7 +1,6 @@ package org.cryptomator.presentation.ui.dialog import android.content.DialogInterface -import android.view.KeyEvent import androidx.appcompat.app.AlertDialog import org.cryptomator.generator.Dialog import org.cryptomator.presentation.R @@ -19,18 +18,14 @@ class HubVaultArchivedDialog : BaseDialog callback?.onHubVaultArchivedDialogFinished() } - .setOnKeyListener { _, keyCode, _ -> - if (keyCode == KeyEvent.KEYCODE_BACK) { - dialog?.dismiss() - callback?.onHubVaultArchivedDialogFinished() - true - } else { - false - } - } return builder.create() } + override fun onCancel(dialog: DialogInterface) { + super.onCancel(dialog) + callback?.onHubVaultArchivedDialogFinished() + } + public override fun setupView() { super.onStart() val dialog = dialog as AlertDialog?