Skip to content

Commit

Permalink
Merge pull request #7476 from thunderbird/tweak_special_folders_error
Browse files Browse the repository at this point in the history
Clean up special folders error view
  • Loading branch information
cketti authored Jan 4, 2024
2 parents 46dc151 + 95fe056 commit b82a67c
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 11 deletions.
2 changes: 2 additions & 0 deletions feature/account/common/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@
<string name="account_common_title">K-9 Mail</string>
<string name="account_common_button_next">Next</string>
<string name="account_common_button_back">Back</string>

<string name="account_common_error_server_message">The server returned the following message:\n%s</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.res.Resources
import androidx.annotation.StringRes
import app.k9mail.feature.account.server.validation.R
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Error
import app.k9mail.feature.account.common.R as CommonR

internal fun Error.toResourceString(resources: Resources): String {
return when (this) {
Expand All @@ -12,7 +13,7 @@ internal fun Error.toResourceString(resources: Resources): String {
is Error.AuthenticationError -> {
resources.buildErrorString(
titleResId = R.string.account_server_validation_error_authentication,
detailsResId = R.string.account_server_validation_error_server_message,
detailsResId = CommonR.string.account_common_error_server_message,
detailsMessage = serverMessage,
)
}
Expand All @@ -28,7 +29,7 @@ internal fun Error.toResourceString(resources: Resources): String {
is Error.ServerError -> {
resources.buildErrorString(
titleResId = R.string.account_server_validation_error_server,
detailsResId = R.string.account_server_validation_error_server_message,
detailsResId = CommonR.string.account_common_error_server_message,
detailsMessage = serverMessage,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
<string name="account_server_validation_error_client_certificate_expired">The client certificate is no longer valid</string>
<string name="account_server_validation_error_client_certificate_retrieval_failure">"The client certificate couldn't be accessed"</string>
<string name="account_server_validation_error_missing_server_capability">Missing server capability</string>
<string name="account_server_validation_error_server_message">The server returned the following message:\n%s</string>
<string name="account_server_validation_error_details">Details:\n%s</string>
<string name="account_server_validation_error_missing_server_capability_details">The server is missing this capability:\n%s</string>
<string name="account_server_validation_incoming_loading_message">Checking incoming server settings…</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import app.k9mail.feature.account.common.ui.loadingerror.rememberContentLoadingE
import app.k9mail.feature.account.setup.R
import app.k9mail.feature.account.setup.ui.specialfolders.SpecialFoldersContract.Event
import app.k9mail.feature.account.setup.ui.specialfolders.SpecialFoldersContract.State
import app.k9mail.feature.account.common.R as CommonR

@Composable
fun SpecialFoldersContent(
Expand All @@ -52,9 +53,8 @@ fun SpecialFoldersContent(
)
},
error = {
ErrorView(
title = stringResource(id = R.string.account_setup_special_folders_error_message),
message = state.error?.message,
SpecialFoldersErrorView(
failure = state.error!!,
onRetry = { onEvent(Event.OnRetryClicked) },
)
},
Expand Down Expand Up @@ -114,6 +114,26 @@ fun SuccessView(
}
}

@Composable
private fun SpecialFoldersErrorView(
failure: SpecialFoldersContract.Failure,
onRetry: () -> Unit,
) {
val message = when (failure) {
is SpecialFoldersContract.Failure.LoadFoldersFailed -> {
failure.messageFromServer?.let { messageFromServer ->
stringResource(id = CommonR.string.account_common_error_server_message, messageFromServer)
}
}
}

ErrorView(
title = stringResource(id = R.string.account_setup_special_folders_error_message),
message = message,
onRetry = onRetry,
)
}

@Preview(showBackground = true)
@Composable
internal fun SpecialFoldersContentPreview() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@ interface SpecialFoldersContract {
}

sealed interface Failure {
val message: String

data class LoadFoldersFailed(override val message: String) : Failure
data class LoadFoldersFailed(val messageFromServer: String?) : Failure
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ class SpecialFoldersViewModel(
state.copy(
isLoading = false,
isSuccess = false,
error = SpecialFoldersContract.Failure.LoadFoldersFailed(exception.message ?: "unknown error"),
error = SpecialFoldersContract.Failure.LoadFoldersFailed(exception.messageFromServer),
)
}
null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ class SpecialFoldersViewModelTest {
val testSubject = createTestSubject(
formUiModel = FakeSpecialFoldersFormUiModel(),
getSpecialFolderOptions = {
throw FolderFetcherException(IllegalStateException("Failed to load folders"))
throw FolderFetcherException(IllegalStateException(), messageFromServer = "Failed to load folders")
},
initialState = initialState,
)
Expand Down

0 comments on commit b82a67c

Please sign in to comment.