Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit b005e26a authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé
Browse files

Add OAuth to AccountValidation

parent c8ca64ac
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ import app.k9mail.feature.account.oauth.domain.DomainContract
import app.k9mail.feature.account.oauth.domain.entity.AuthorizationState

class AuthorizationStateRepository : DomainContract.AuthorizationStateRepository {
    override suspend fun isAuthorized(authorizationState: AuthorizationState): Boolean {
    override fun isAuthorized(authorizationState: AuthorizationState): Boolean {
        val authState = authorizationState.toAuthState()

        return authState.isAuthorized
+2 −2
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ interface DomainContract {
        ): AuthorizationResult
    }

    interface AuthorizationStateRepository {
        suspend fun isAuthorized(authorizationState: AuthorizationState): Boolean
    fun interface AuthorizationStateRepository {
        fun isAuthorized(authorizationState: AuthorizationState): Boolean
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -110,6 +110,8 @@ val featureAccountSetupModule: Module = module {
        AccountValidationViewModel(
            validateServerSettings = get(),
            accountSetupStateRepository = get(),
            authorizationStateRepository = get(),
            oAuthViewModel = get(),
            isIncomingValidation = true,
        )
    }
@@ -123,6 +125,8 @@ val featureAccountSetupModule: Module = module {
        AccountValidationViewModel(
            validateServerSettings = get(),
            accountSetupStateRepository = get(),
            authorizationStateRepository = get(),
            oAuthViewModel = get(),
            isIncomingValidation = false,
        )
    }
+6 −0
Original line number Diff line number Diff line
package app.k9mail.feature.account.setup.domain.entity

import com.fsck.k9.mail.AuthType
import com.fsck.k9.mail.ServerSettings

fun ServerSettings?.isOAuth() = this?.authenticationType == AuthType.XOAUTH2
+17 −5
Original line number Diff line number Diff line
@@ -18,8 +18,12 @@ import app.k9mail.core.ui.compose.designsystem.template.ResponsiveWidthContainer
import app.k9mail.core.ui.compose.theme.MainTheme
import app.k9mail.core.ui.compose.theme.PreviewWithThemes
import app.k9mail.feature.account.common.ui.item.ErrorItem
import app.k9mail.feature.account.common.ui.item.ListItem
import app.k9mail.feature.account.common.ui.item.LoadingItem
import app.k9mail.feature.account.common.ui.item.SuccessItem
import app.k9mail.feature.account.oauth.ui.AccountOAuthContract
import app.k9mail.feature.account.oauth.ui.AccountOAuthView
import app.k9mail.feature.account.oauth.ui.preview.PreviewAccountOAuthViewModel
import app.k9mail.feature.account.setup.R
import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract.Event
import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract.State
@@ -29,6 +33,7 @@ import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract.
internal fun AccountValidationContent(
    state: State,
    isIncomingValidation: Boolean,
    oAuthViewModel: AccountOAuthContract.ViewModel,
    onEvent: (Event) -> Unit,
    contentPadding: PaddingValues,
    modifier: Modifier = Modifier,
@@ -47,11 +52,7 @@ internal fun AccountValidationContent(
                .fillMaxSize()
                .imePadding(),
            horizontalAlignment = Alignment.Start,
            verticalArrangement = if (state.isLoading || state.error != null || state.isSuccess) {
                Arrangement.spacedBy(MainTheme.spacings.double, Alignment.CenterVertically)
            } else {
                Arrangement.spacedBy(MainTheme.spacings.default)
            },
            verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.double, Alignment.CenterVertically),
        ) {
            if (state.error != null) {
                item(key = "error") {
@@ -80,6 +81,15 @@ internal fun AccountValidationContent(
                        ),
                    )
                }
            } else if (state.needsAuthorization) {
                item(key = "oauth") {
                    ListItem {
                        AccountOAuthView(
                            onOAuthResult = { result -> onEvent(Event.OnOAuthResult(result)) },
                            viewModel = oAuthViewModel,
                        )
                    }
                }
            } else {
                item(key = "loading") {
                    LoadingItem(
@@ -105,6 +115,7 @@ internal fun AccountIncomingValidationContentPreview() {
            onEvent = { },
            state = State(),
            isIncomingValidation = true,
            oAuthViewModel = PreviewAccountOAuthViewModel(),
            contentPadding = PaddingValues(),
        )
    }
@@ -118,6 +129,7 @@ internal fun AccountOutgoingValidationContentPreview() {
            onEvent = { },
            state = State(),
            isIncomingValidation = false,
            oAuthViewModel = PreviewAccountOAuthViewModel(),
            contentPadding = PaddingValues(),
        )
    }
Loading