Enhance error handling while verifying vault
Display error messages when failed to read or verify the vault config
This commit is contained in:
parent
9b989561df
commit
9c0067b7e2
@ -16,6 +16,9 @@ import org.cryptomator.domain.exception.license.LicenseNotValidException
|
||||
import org.cryptomator.domain.exception.license.NoLicenseAvailableException
|
||||
import org.cryptomator.domain.exception.update.GeneralUpdateErrorException
|
||||
import org.cryptomator.domain.exception.update.SSLHandshakePreAndroid5UpdateCheckException
|
||||
import org.cryptomator.domain.exception.vaultconfig.VaultConfigLoadException
|
||||
import org.cryptomator.domain.exception.vaultconfig.VaultKeyInvalidException
|
||||
import org.cryptomator.domain.exception.vaultconfig.VaultVersionMismatchException
|
||||
import org.cryptomator.presentation.R
|
||||
import org.cryptomator.presentation.ui.activity.view.View
|
||||
import java.util.ArrayList
|
||||
@ -45,6 +48,9 @@ class ExceptionHandlers @Inject constructor(private val context: Context, defaul
|
||||
staticHandler(NoLicenseAvailableException::class.java, R.string.dialog_enter_license_no_content)
|
||||
staticHandler(GeneralUpdateErrorException::class.java, R.string.error_general_update)
|
||||
staticHandler(SSLHandshakePreAndroid5UpdateCheckException::class.java, R.string.error_general_update)
|
||||
staticHandler(VaultVersionMismatchException::class.java, R.string.error_vault_version_mismatch)
|
||||
staticHandler(VaultKeyInvalidException::class.java, R.string.error_vault_key_invalid)
|
||||
staticHandler(VaultConfigLoadException::class.java, R.string.error_vault_config_loading)
|
||||
exceptionHandlers.add(MissingCryptorExceptionHandler())
|
||||
exceptionHandlers.add(CancellationExceptionHandler())
|
||||
exceptionHandlers.add(NoSuchVaultExceptionHandler())
|
||||
|
@ -29,6 +29,7 @@ import org.cryptomator.presentation.model.ProgressModel
|
||||
import org.cryptomator.presentation.model.ProgressStateModel
|
||||
import org.cryptomator.presentation.model.VaultModel
|
||||
import org.cryptomator.presentation.ui.activity.view.UnlockVaultView
|
||||
import org.cryptomator.presentation.ui.dialog.EnterPasswordDialog
|
||||
import org.cryptomator.presentation.workflow.ActivityResult
|
||||
import org.cryptomator.presentation.workflow.AuthenticationExceptionHandler
|
||||
import org.cryptomator.util.Optional
|
||||
@ -238,6 +239,14 @@ class UnlockVaultPresenter @Inject constructor(
|
||||
else -> TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
super.onError(e)
|
||||
// finish in case of biometric auth, otherwise show error in dialog
|
||||
if(view?.isShowingDialog(EnterPasswordDialog::class) == false) {
|
||||
finishWithResult(null)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@ -266,6 +275,7 @@ class UnlockVaultPresenter @Inject constructor(
|
||||
|
||||
override fun onError(e: Throwable) {
|
||||
Timber.tag("VaultListPresenter").e(e, "Error while removing vault passwords")
|
||||
finishWithResult(null)
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -352,6 +362,10 @@ class UnlockVaultPresenter @Inject constructor(
|
||||
})
|
||||
}
|
||||
|
||||
fun onCancelMissingVaultClicked(vault: Vault) {
|
||||
finishWithResult(null)
|
||||
}
|
||||
|
||||
private open class PendingUnlock(private val vault: Vault?) : Serializable {
|
||||
|
||||
private var unlockToken: UnlockToken? = null
|
||||
|
@ -185,12 +185,8 @@ class VaultListPresenter @Inject constructor( //
|
||||
}
|
||||
|
||||
fun deleteVault(vaultModel: VaultModel) {
|
||||
deleteVault(vaultModel.toVault())
|
||||
}
|
||||
|
||||
private fun deleteVault(vault: Vault) {
|
||||
deleteVaultUseCase //
|
||||
.withVault(vault) //
|
||||
.withVault(vaultModel.toVault()) //
|
||||
.run(object : DefaultResultHandler<Long>() {
|
||||
override fun onSuccess(vaultId: Long) {
|
||||
view?.deleteVaultFromAdapter(vaultId)
|
||||
@ -433,10 +429,6 @@ class VaultListPresenter @Inject constructor( //
|
||||
}
|
||||
}
|
||||
|
||||
fun onDeleteMissingVaultClicked(vault: Vault) {
|
||||
deleteVault(vault)
|
||||
}
|
||||
|
||||
fun onFilteredTouchEventForSecurity() {
|
||||
view?.showDialog(AppIsObscuredInfoDialog.newInstance())
|
||||
}
|
||||
|
@ -114,4 +114,8 @@ class UnlockVaultActivity : BaseActivity(), //
|
||||
presenter.onDeleteMissingVaultClicked(vault)
|
||||
}
|
||||
|
||||
override fun onCancelMissingVaultClicked(vault: Vault) {
|
||||
presenter.onCancelMissingVaultClicked(vault)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.view.View
|
||||
import androidx.fragment.app.Fragment
|
||||
import org.cryptomator.domain.Vault
|
||||
import org.cryptomator.generator.Activity
|
||||
import org.cryptomator.generator.InjectIntent
|
||||
import org.cryptomator.presentation.CryptomatorApp
|
||||
@ -26,7 +25,6 @@ import org.cryptomator.presentation.ui.dialog.BetaConfirmationDialog
|
||||
import org.cryptomator.presentation.ui.dialog.UpdateAppAvailableDialog
|
||||
import org.cryptomator.presentation.ui.dialog.UpdateAppDialog
|
||||
import org.cryptomator.presentation.ui.dialog.VaultDeleteConfirmationDialog
|
||||
import org.cryptomator.presentation.ui.dialog.VaultNotFoundDialog
|
||||
import org.cryptomator.presentation.ui.dialog.VaultRenameDialog
|
||||
import org.cryptomator.presentation.ui.fragment.VaultListFragment
|
||||
import org.cryptomator.presentation.ui.layout.ObscuredAwareCoordinatorLayout.Listener
|
||||
@ -40,7 +38,6 @@ class VaultListActivity : BaseActivity(), //
|
||||
VaultListView, //
|
||||
VaultListCallback, //
|
||||
AskForLockScreenDialog.Callback, //
|
||||
VaultNotFoundDialog.Callback, //
|
||||
UpdateAppAvailableDialog.Callback, //
|
||||
UpdateAppDialog.Callback, //
|
||||
BetaConfirmationDialog.Callback {
|
||||
@ -197,10 +194,6 @@ class VaultListActivity : BaseActivity(), //
|
||||
private fun vaultListFragment(): VaultListFragment = //
|
||||
getCurrentFragment(R.id.fragmentContainer) as VaultListFragment
|
||||
|
||||
override fun onDeleteMissingVaultClicked(vault: Vault) {
|
||||
vaultListPresenter.onDeleteMissingVaultClicked(vault)
|
||||
}
|
||||
|
||||
override fun onUpdateAppDialogLoaded() {
|
||||
showProgress(ProgressModel.GENERIC)
|
||||
}
|
||||
|
@ -14,6 +14,8 @@ class VaultNotFoundDialog private constructor(private val context: Context) {
|
||||
interface Callback {
|
||||
|
||||
fun onDeleteMissingVaultClicked(vault: Vault)
|
||||
fun onCancelMissingVaultClicked(vault: Vault)
|
||||
|
||||
}
|
||||
|
||||
fun show(vault: Vault) {
|
||||
@ -21,7 +23,8 @@ class VaultNotFoundDialog private constructor(private val context: Context) {
|
||||
.setTitle(String.format(ResourceHelper.getString(R.string.dialog_vault_not_found_title), vault.name)) //
|
||||
.setMessage(ResourceHelper.getString(R.string.dialog_vault_not_found_message)) //
|
||||
.setPositiveButton(ResourceHelper.getString(R.string.dialog_vault_not_found_positive_button_text)) { _: DialogInterface, _: Int -> callback.onDeleteMissingVaultClicked(vault) } //
|
||||
.setNegativeButton(ResourceHelper.getString(R.string.dialog_button_cancel)) { dialog: DialogInterface, _: Int -> dialog.dismiss() } //
|
||||
.setNegativeButton(ResourceHelper.getString(R.string.dialog_button_cancel)) { _: DialogInterface, _: Int -> callback.onCancelMissingVaultClicked(vault) } //
|
||||
.setOnCancelListener { callback.onCancelMissingVaultClicked(vault) }
|
||||
.create().show()
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,9 @@
|
||||
<string name="error_failed_to_decrypt_webdav_password">Failed to decrypt WebDAV password, please re add in settings</string>
|
||||
<string name="error_play_services_not_available">Play Services not installed</string>
|
||||
<string name="error_biometric_auth_aborted">Biometric authentication aborted</string>
|
||||
|
||||
<string name="error_vault_version_mismatch">Version specified in vault.cryptomator is different to masterkey.cryptomator</string>
|
||||
<string name="error_vault_key_invalid">vault.cryptomator does not match with this masterkey.cryptomator</string>
|
||||
<string name="error_vault_config_loading">General error while loading the vault config</string>
|
||||
<!-- # clouds -->
|
||||
|
||||
<!-- ## cloud names -->
|
||||
|
Loading…
x
Reference in New Issue
Block a user