diff --git a/app/src/main/java/com/kunzisoft/keepass/database/exception/DatabaseException.kt b/app/src/main/java/com/kunzisoft/keepass/database/exception/DatabaseException.kt index f57d3a67c..f9ca05a3f 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/exception/DatabaseException.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/exception/DatabaseException.kt @@ -24,21 +24,60 @@ import androidx.annotation.StringRes import com.kunzisoft.keepass.R import com.kunzisoft.keepass.database.element.node.NodeId import com.kunzisoft.keepass.database.element.node.Type +import java.io.PrintStream +import java.io.PrintWriter +import java.lang.StringBuilder abstract class DatabaseException : Exception { + var innerMessage: String? = null abstract var errorId: Int var parameters: (Array)? = null + var mThrowable: Throwable? = null constructor() : super() constructor(message: String) : super(message) - constructor(message: String, throwable: Throwable) : super(message, throwable) - constructor(throwable: Throwable) : super(throwable) + constructor(message: String, throwable: Throwable) { + mThrowable = throwable + innerMessage = StringBuilder().apply { + append(message) + if (throwable.localizedMessage != null) { + append(" ") + append(throwable.localizedMessage) + } + }.toString() + } + constructor(throwable: Throwable) { + mThrowable = throwable + innerMessage = throwable.localizedMessage + } fun getLocalizedMessage(resources: Resources): String { - parameters?.let { - return resources.getString(errorId, *it) - } ?: return resources.getString(errorId) + val localMessage = parameters?.let { + resources.getString(errorId, *it) + } ?: resources.getString(errorId) + return StringBuilder().apply { + append(localMessage) + if (innerMessage != null) { + append(" ") + append(innerMessage) + } + }.toString() + } + + override fun printStackTrace() { + mThrowable?.printStackTrace() + super.printStackTrace() + } + + override fun printStackTrace(s: PrintStream) { + mThrowable?.printStackTrace(s) + super.printStackTrace(s) + } + + override fun printStackTrace(s: PrintWriter) { + mThrowable?.printStackTrace(s) + super.printStackTrace(s) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt index 8e7427e13..e2217d3b2 100644 --- a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt @@ -125,7 +125,7 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress fun addRequestChallengeListener(requestChallengeListener: RequestChallengeListener) { mainScope.launch { if (!mRequestChallengeListenerChannel.isEmpty) { - mRequestChallengeListenerChannel.cancel(CancellationException("Challenge already requested")) + mRequestChallengeListenerChannel.cancel(CancellationException(getString(R.string.error_challenge_already_requested))) mRequestChallengeListenerChannel = Channel(0) } else { mRequestChallengeListenerChannel.send(requestChallengeListener) @@ -234,11 +234,16 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress fun respondToChallenge(response: ByteArray) { mainScope.launch { - if (response.isEmpty()) { - mResponseChallengeChannel.cancel(CancellationException(("Unable to get the response from challenge"))) + if (!mResponseChallengeChannel.isEmpty) { + mResponseChallengeChannel.cancel(CancellationException(getString(R.string.error_response_already_provided))) mResponseChallengeChannel = Channel(0) } else { - mResponseChallengeChannel.send(response) + if (response.isEmpty()) { + mResponseChallengeChannel.cancel(CancellationException(getString(R.string.error_no_response_from_challenge))) + mResponseChallengeChannel = Channel(0) + } else { + mResponseChallengeChannel.send(response) + } } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7b97e435f..35e21584e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -195,6 +195,9 @@ The file data already exists. An error occurred while removing the file data. An error occurred while performing an action on the database. + "Challenge already requested" + Response already provided. + Unable to get the response from the challenge. Field name Field value Could not find file. Try reopening it from your file browser.