diff --git a/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt b/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt index b50bfc4a..6ccbedbe 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt @@ -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()) diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/UnlockVaultPresenter.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/UnlockVaultPresenter.kt index 4bb68516..974acdb2 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/UnlockVaultPresenter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/UnlockVaultPresenter.kt @@ -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 diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt index c512c674..f773853c 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt @@ -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() { 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()) } diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/UnlockVaultActivity.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/UnlockVaultActivity.kt index f9795fd6..5fe46dfe 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/UnlockVaultActivity.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/UnlockVaultActivity.kt @@ -114,4 +114,8 @@ class UnlockVaultActivity : BaseActivity(), // presenter.onDeleteMissingVaultClicked(vault) } + override fun onCancelMissingVaultClicked(vault: Vault) { + presenter.onCancelMissingVaultClicked(vault) + } + } diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/VaultListActivity.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/VaultListActivity.kt index bc9dcbf8..ddce44e1 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/VaultListActivity.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/VaultListActivity.kt @@ -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) } diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/VaultNotFoundDialog.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/VaultNotFoundDialog.kt index 5b918e64..ec110d07 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/VaultNotFoundDialog.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/dialog/VaultNotFoundDialog.kt @@ -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() } diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index a8d0920f..37098863 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -32,7 +32,9 @@ Failed to decrypt WebDAV password, please re add in settings Play Services not installed Biometric authentication aborted - + Version specified in vault.cryptomator is different to masterkey.cryptomator + vault.cryptomator does not match with this masterkey.cryptomator + General error while loading the vault config