Loading app/k9mail/src/main/java/com/fsck/k9/account/AccountCreator.kt +2 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,8 @@ class AccountCreator( newAccount.outgoingServerSettings = account.outgoingServerSettings newAccount.oAuthState = account.authorizationState newAccount.name = account.options.accountName newAccount.senderName = account.options.displayName if (account.options.emailSignature != null) { Loading app/k9mail/src/test/java/com/fsck/k9/DependencyInjectionTest.kt +8 −0 Original line number Diff line number Diff line Loading @@ -3,7 +3,10 @@ package com.fsck.k9 import android.view.ContextThemeWrapper import androidx.lifecycle.LifecycleOwner import androidx.work.WorkerParameters import app.k9mail.feature.account.setup.domain.DomainContract.UseCase.ValidateServerSettings import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract import com.fsck.k9.job.MailSyncWorker import com.fsck.k9.mail.oauth.AuthStateStorage import com.fsck.k9.ui.R import com.fsck.k9.ui.changelog.ChangeLogMode import com.fsck.k9.ui.changelog.ChangelogViewModel Loading @@ -17,6 +20,7 @@ import org.junit.runner.RunWith import org.koin.core.annotation.KoinInternalApi import org.koin.core.logger.PrintLogger import org.koin.core.parameter.parametersOf import org.koin.core.qualifier.named import org.koin.java.KoinJavaComponent import org.koin.test.AutoCloseKoinTest import org.koin.test.check.checkModules Loading @@ -34,6 +38,7 @@ class DependencyInjectionTest : AutoCloseKoinTest() { on { lifecycle } doReturn mock() } private val autocryptTransferView = mock<AutocryptKeyTransferActivity>() private val authStateStorage = mock<AuthStateStorage>() @KoinInternalApi @Test Loading @@ -53,6 +58,9 @@ class DependencyInjectionTest : AutoCloseKoinTest() { withParameters(clazz = Class.forName("com.fsck.k9.view.K9WebViewClient").kotlin) { parametersOf(null, null) } withParameter<AccountValidationContract.ViewModel>(named("incoming_validation")) { authStateStorage } withParameter<AccountValidationContract.ViewModel>(named("outgoing_validation")) { authStateStorage } withParameter<ValidateServerSettings> { authStateStorage } } } } feature/account/oauth/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ android { dependencies { implementation(projects.core.ui.compose.designsystem) implementation(projects.core.common) implementation(projects.mail.common) implementation(projects.feature.account.common) implementation(libs.appauth) Loading feature/account/oauth/src/main/kotlin/app/k9mail/feature/account/oauth/AccountOAuthModule.kt +2 −2 Original line number Diff line number Diff line Loading @@ -9,10 +9,10 @@ import app.k9mail.feature.account.oauth.domain.usecase.CheckIsGoogleSignIn import app.k9mail.feature.account.oauth.domain.usecase.FinishOAuthSignIn import app.k9mail.feature.account.oauth.domain.usecase.GetOAuthRequestIntent import app.k9mail.feature.account.oauth.domain.usecase.SuggestServerName import app.k9mail.feature.account.oauth.ui.AccountOAuthContract import app.k9mail.feature.account.oauth.ui.AccountOAuthViewModel import net.openid.appauth.AuthorizationService import org.koin.android.ext.koin.androidApplication import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.core.module.Module import org.koin.dsl.module Loading Loading @@ -48,7 +48,7 @@ val featureAccountOAuthModule: Module = module { factory<UseCase.CheckIsGoogleSignIn> { CheckIsGoogleSignIn() } viewModel { factory<AccountOAuthContract.ViewModel> { AccountOAuthViewModel( getOAuthRequestIntent = get(), finishOAuthSignIn = get(), Loading feature/account/oauth/src/main/kotlin/app/k9mail/feature/account/oauth/ui/AccountOAuthContent.kt +17 −23 Original line number Diff line number Diff line package app.k9mail.feature.account.oauth.ui import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier Loading @@ -8,16 +9,15 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import app.k9mail.core.ui.compose.common.DevicePreviews import app.k9mail.core.ui.compose.designsystem.molecule.ErrorView import app.k9mail.core.ui.compose.designsystem.molecule.LoadingView import app.k9mail.core.ui.compose.theme.K9Theme import app.k9mail.core.ui.compose.theme.MainTheme import app.k9mail.core.ui.compose.theme.ThunderbirdTheme import app.k9mail.feature.account.common.ui.ContentListView import app.k9mail.feature.account.common.ui.item.ErrorItem import app.k9mail.feature.account.common.ui.item.LoadingItem import app.k9mail.feature.account.oauth.R import app.k9mail.feature.account.oauth.ui.AccountOAuthContract.Event import app.k9mail.feature.account.oauth.ui.AccountOAuthContract.State import app.k9mail.feature.account.oauth.ui.item.SignInItem import app.k9mail.feature.account.oauth.ui.view.SignInView @Composable internal fun AccountOAuthContent( Loading @@ -27,36 +27,30 @@ internal fun AccountOAuthContent( ) { val resources = LocalContext.current.resources ContentListView( Column( modifier = Modifier .testTag("AccountOAuthContent") .then(modifier), verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.double, Alignment.CenterVertically), ) { if (state.isLoading) { item(key = "loading") { LoadingItem( LoadingView( message = stringResource(id = R.string.account_oauth_loading_message), ) } } else if (state.error != null) { item(key = "error") { ErrorItem( ErrorView( title = stringResource(id = R.string.account_oauth_loading_error), message = state.error.toResourceString(resources), onRetry = { onEvent(Event.OnRetryClicked) }, ) } } else { item(key = "sign_in") { SignInItem( SignInView( onSignInClick = { onEvent(Event.SignInClicked) }, isGoogleSignIn = state.isGoogleSignIn, ) } } } } @Composable @DevicePreviews Loading Loading
app/k9mail/src/main/java/com/fsck/k9/account/AccountCreator.kt +2 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,8 @@ class AccountCreator( newAccount.outgoingServerSettings = account.outgoingServerSettings newAccount.oAuthState = account.authorizationState newAccount.name = account.options.accountName newAccount.senderName = account.options.displayName if (account.options.emailSignature != null) { Loading
app/k9mail/src/test/java/com/fsck/k9/DependencyInjectionTest.kt +8 −0 Original line number Diff line number Diff line Loading @@ -3,7 +3,10 @@ package com.fsck.k9 import android.view.ContextThemeWrapper import androidx.lifecycle.LifecycleOwner import androidx.work.WorkerParameters import app.k9mail.feature.account.setup.domain.DomainContract.UseCase.ValidateServerSettings import app.k9mail.feature.account.setup.ui.validation.AccountValidationContract import com.fsck.k9.job.MailSyncWorker import com.fsck.k9.mail.oauth.AuthStateStorage import com.fsck.k9.ui.R import com.fsck.k9.ui.changelog.ChangeLogMode import com.fsck.k9.ui.changelog.ChangelogViewModel Loading @@ -17,6 +20,7 @@ import org.junit.runner.RunWith import org.koin.core.annotation.KoinInternalApi import org.koin.core.logger.PrintLogger import org.koin.core.parameter.parametersOf import org.koin.core.qualifier.named import org.koin.java.KoinJavaComponent import org.koin.test.AutoCloseKoinTest import org.koin.test.check.checkModules Loading @@ -34,6 +38,7 @@ class DependencyInjectionTest : AutoCloseKoinTest() { on { lifecycle } doReturn mock() } private val autocryptTransferView = mock<AutocryptKeyTransferActivity>() private val authStateStorage = mock<AuthStateStorage>() @KoinInternalApi @Test Loading @@ -53,6 +58,9 @@ class DependencyInjectionTest : AutoCloseKoinTest() { withParameters(clazz = Class.forName("com.fsck.k9.view.K9WebViewClient").kotlin) { parametersOf(null, null) } withParameter<AccountValidationContract.ViewModel>(named("incoming_validation")) { authStateStorage } withParameter<AccountValidationContract.ViewModel>(named("outgoing_validation")) { authStateStorage } withParameter<ValidateServerSettings> { authStateStorage } } } }
feature/account/oauth/build.gradle.kts +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ android { dependencies { implementation(projects.core.ui.compose.designsystem) implementation(projects.core.common) implementation(projects.mail.common) implementation(projects.feature.account.common) implementation(libs.appauth) Loading
feature/account/oauth/src/main/kotlin/app/k9mail/feature/account/oauth/AccountOAuthModule.kt +2 −2 Original line number Diff line number Diff line Loading @@ -9,10 +9,10 @@ import app.k9mail.feature.account.oauth.domain.usecase.CheckIsGoogleSignIn import app.k9mail.feature.account.oauth.domain.usecase.FinishOAuthSignIn import app.k9mail.feature.account.oauth.domain.usecase.GetOAuthRequestIntent import app.k9mail.feature.account.oauth.domain.usecase.SuggestServerName import app.k9mail.feature.account.oauth.ui.AccountOAuthContract import app.k9mail.feature.account.oauth.ui.AccountOAuthViewModel import net.openid.appauth.AuthorizationService import org.koin.android.ext.koin.androidApplication import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.core.module.Module import org.koin.dsl.module Loading Loading @@ -48,7 +48,7 @@ val featureAccountOAuthModule: Module = module { factory<UseCase.CheckIsGoogleSignIn> { CheckIsGoogleSignIn() } viewModel { factory<AccountOAuthContract.ViewModel> { AccountOAuthViewModel( getOAuthRequestIntent = get(), finishOAuthSignIn = get(), Loading
feature/account/oauth/src/main/kotlin/app/k9mail/feature/account/oauth/ui/AccountOAuthContent.kt +17 −23 Original line number Diff line number Diff line package app.k9mail.feature.account.oauth.ui import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier Loading @@ -8,16 +9,15 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import app.k9mail.core.ui.compose.common.DevicePreviews import app.k9mail.core.ui.compose.designsystem.molecule.ErrorView import app.k9mail.core.ui.compose.designsystem.molecule.LoadingView import app.k9mail.core.ui.compose.theme.K9Theme import app.k9mail.core.ui.compose.theme.MainTheme import app.k9mail.core.ui.compose.theme.ThunderbirdTheme import app.k9mail.feature.account.common.ui.ContentListView import app.k9mail.feature.account.common.ui.item.ErrorItem import app.k9mail.feature.account.common.ui.item.LoadingItem import app.k9mail.feature.account.oauth.R import app.k9mail.feature.account.oauth.ui.AccountOAuthContract.Event import app.k9mail.feature.account.oauth.ui.AccountOAuthContract.State import app.k9mail.feature.account.oauth.ui.item.SignInItem import app.k9mail.feature.account.oauth.ui.view.SignInView @Composable internal fun AccountOAuthContent( Loading @@ -27,36 +27,30 @@ internal fun AccountOAuthContent( ) { val resources = LocalContext.current.resources ContentListView( Column( modifier = Modifier .testTag("AccountOAuthContent") .then(modifier), verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.double, Alignment.CenterVertically), ) { if (state.isLoading) { item(key = "loading") { LoadingItem( LoadingView( message = stringResource(id = R.string.account_oauth_loading_message), ) } } else if (state.error != null) { item(key = "error") { ErrorItem( ErrorView( title = stringResource(id = R.string.account_oauth_loading_error), message = state.error.toResourceString(resources), onRetry = { onEvent(Event.OnRetryClicked) }, ) } } else { item(key = "sign_in") { SignInItem( SignInView( onSignInClick = { onEvent(Event.SignInClicked) }, isGoogleSignIn = state.isGoogleSignIn, ) } } } } @Composable @DevicePreviews Loading