0
0
mirror of https://github.com/thunderbird/thunderbird-android.git synced 2024-09-19 19:52:14 +02:00

Use toolbar in validation screen when editing server settings

This commit is contained in:
cketti 2024-01-30 12:34:29 +01:00
parent 65f8920039
commit 7d3eeb2b7c
9 changed files with 139 additions and 19 deletions

View File

@ -1,6 +1,7 @@
package app.k9mail.feature.account.edit.ui.server.settings
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
@ -8,9 +9,10 @@ import androidx.navigation.compose.rememberNavController
import app.k9mail.feature.account.edit.ui.server.settings.modify.ModifyIncomingServerSettingsViewModel
import app.k9mail.feature.account.edit.ui.server.settings.save.SaveIncomingServerSettingsViewModel
import app.k9mail.feature.account.edit.ui.server.settings.save.SaveServerSettingsScreen
import app.k9mail.feature.account.server.settings.R
import app.k9mail.feature.account.server.settings.ui.incoming.IncomingServerSettingsScreen
import app.k9mail.feature.account.server.validation.ui.IncomingServerValidationViewModel
import app.k9mail.feature.account.server.validation.ui.ServerValidationScreen
import app.k9mail.feature.account.server.validation.ui.SettingsServerValidationScreen
import org.koin.androidx.compose.koinViewModel
import org.koin.core.parameter.parametersOf
@ -48,7 +50,8 @@ fun EditIncomingServerSettingsNavHost(
)
}
composable(route = NESTED_NAVIGATION_ROUTE_VALIDATE) {
ServerValidationScreen(
SettingsServerValidationScreen(
title = stringResource(id = R.string.account_server_settings_incoming_top_bar_title),
onBack = { navController.popBackStack() },
onNext = { navController.navigateToSave() },
viewModel = koinViewModel<IncomingServerValidationViewModel> {

View File

@ -1,6 +1,7 @@
package app.k9mail.feature.account.edit.ui.server.settings
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
@ -8,9 +9,10 @@ import androidx.navigation.compose.rememberNavController
import app.k9mail.feature.account.edit.ui.server.settings.modify.ModifyOutgoingServerSettingsViewModel
import app.k9mail.feature.account.edit.ui.server.settings.save.SaveOutgoingServerSettingsViewModel
import app.k9mail.feature.account.edit.ui.server.settings.save.SaveServerSettingsScreen
import app.k9mail.feature.account.server.settings.R
import app.k9mail.feature.account.server.settings.ui.outgoing.OutgoingServerSettingsScreen
import app.k9mail.feature.account.server.validation.ui.OutgoingServerValidationViewModel
import app.k9mail.feature.account.server.validation.ui.ServerValidationScreen
import app.k9mail.feature.account.server.validation.ui.SettingsServerValidationScreen
import org.koin.androidx.compose.koinViewModel
import org.koin.core.parameter.parametersOf
@ -48,7 +50,8 @@ fun EditOutgoingServerSettingsNavHost(
)
}
composable(route = NESTED_NAVIGATION_ROUTE_VALIDATE) {
ServerValidationScreen(
SettingsServerValidationScreen(
title = stringResource(id = R.string.account_server_settings_outgoing_top_bar_title),
onBack = { navController.popBackStack() },
onNext = { navController.navigateToSave() },
viewModel = koinViewModel<OutgoingServerValidationViewModel> {

View File

@ -17,7 +17,7 @@ import app.k9mail.feature.account.server.validation.ui.fake.FakeIncomingServerVa
import app.k9mail.feature.account.server.validation.ui.fake.FakeOutgoingServerValidationViewModel
@Composable
internal fun ServerValidationMainScreen(
internal fun ServerValidationAppTitleScreen(
viewModel: ViewModel,
modifier: Modifier = Modifier,
) {
@ -52,7 +52,7 @@ internal fun ServerValidationMainScreen(
@PreviewDevices
internal fun IncomingServerValidationScreenK9Preview() {
K9Theme {
ServerValidationMainScreen(
ServerValidationAppTitleScreen(
viewModel = FakeIncomingServerValidationViewModel(
oAuthViewModel = PreviewAccountOAuthViewModel(),
),
@ -64,7 +64,7 @@ internal fun IncomingServerValidationScreenK9Preview() {
@PreviewDevices
internal fun IncomingServerValidationScreenThunderbirdPreview() {
ThunderbirdTheme {
ServerValidationMainScreen(
ServerValidationAppTitleScreen(
viewModel = FakeIncomingServerValidationViewModel(
oAuthViewModel = PreviewAccountOAuthViewModel(),
),
@ -76,7 +76,7 @@ internal fun IncomingServerValidationScreenThunderbirdPreview() {
@PreviewDevices
internal fun AccountOutgoingValidationScreenK9Preview() {
K9Theme {
ServerValidationMainScreen(
ServerValidationAppTitleScreen(
viewModel = FakeOutgoingServerValidationViewModel(
oAuthViewModel = PreviewAccountOAuthViewModel(),
),
@ -88,7 +88,7 @@ internal fun AccountOutgoingValidationScreenK9Preview() {
@PreviewDevices
internal fun AccountOutgoingValidationScreenThunderbirdPreview() {
ThunderbirdTheme {
ServerValidationMainScreen(
ServerValidationAppTitleScreen(
viewModel = FakeOutgoingServerValidationViewModel(
oAuthViewModel = PreviewAccountOAuthViewModel(),
),

View File

@ -12,11 +12,12 @@ import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.
@Suppress("ViewModelForwarding")
@Composable
fun ServerValidationScreen(
internal fun ServerValidationContainerScreen(
onNext: () -> Unit,
onBack: () -> Unit,
viewModel: ViewModel,
modifier: Modifier = Modifier,
content: @Composable (modifier: Modifier) -> Unit,
) {
val (state, dispatch) = viewModel.observe { effect ->
when (effect) {
@ -40,9 +41,6 @@ fun ServerValidationScreen(
modifier = modifier,
)
} else {
ServerValidationMainScreen(
viewModel = viewModel,
modifier = modifier,
)
content(modifier)
}
}

View File

@ -0,0 +1,64 @@
package app.k9mail.feature.account.server.validation.ui
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import app.k9mail.core.ui.compose.common.annotation.PreviewDevices
import app.k9mail.core.ui.compose.common.mvi.observeWithoutEffect
import app.k9mail.core.ui.compose.designsystem.template.Scaffold
import app.k9mail.core.ui.compose.theme.K9Theme
import app.k9mail.feature.account.common.ui.AccountTopAppBarWithBackButton
import app.k9mail.feature.account.common.ui.WizardNavigationBar
import app.k9mail.feature.account.common.ui.WizardNavigationBarState
import app.k9mail.feature.account.oauth.ui.preview.PreviewAccountOAuthViewModel
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.Event
import app.k9mail.feature.account.server.validation.ui.ServerValidationContract.ViewModel
import app.k9mail.feature.account.server.validation.ui.fake.FakeIncomingServerValidationViewModel
@Composable
internal fun ServerValidationToolbarScreen(
title: String,
viewModel: ViewModel,
modifier: Modifier = Modifier,
) {
val (state, dispatch) = viewModel.observeWithoutEffect()
Scaffold(
topBar = {
AccountTopAppBarWithBackButton(
title = title,
onBackClicked = { dispatch(Event.OnBackClicked) },
)
},
bottomBar = {
WizardNavigationBar(
onNextClick = {},
onBackClick = { dispatch(Event.OnBackClicked) },
state = WizardNavigationBarState(
showNext = false,
),
)
},
modifier = modifier,
) { innerPadding ->
ServerValidationContent(
onEvent = { dispatch(it) },
state = state.value,
isIncomingValidation = viewModel.isIncomingValidation,
oAuthViewModel = viewModel.oAuthViewModel,
contentPadding = innerPadding,
)
}
}
@Composable
@PreviewDevices
internal fun IncomingServerValidationToolbarScreenK9Preview() {
K9Theme {
ServerValidationToolbarScreen(
title = "Incoming server settings",
viewModel = FakeIncomingServerValidationViewModel(
oAuthViewModel = PreviewAccountOAuthViewModel(),
),
)
}
}

View File

@ -0,0 +1,27 @@
package app.k9mail.feature.account.server.validation.ui
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@Suppress("ViewModelForwarding")
@Composable
fun SettingsServerValidationScreen(
title: String,
onNext: () -> Unit,
onBack: () -> Unit,
viewModel: ServerValidationContract.ViewModel,
modifier: Modifier = Modifier,
) {
ServerValidationContainerScreen(
onNext = onNext,
onBack = onBack,
viewModel = viewModel,
modifier = modifier,
) { contentModifier ->
ServerValidationToolbarScreen(
title = title,
viewModel = viewModel,
modifier = contentModifier,
)
}
}

View File

@ -0,0 +1,25 @@
package app.k9mail.feature.account.server.validation.ui
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@Suppress("ViewModelForwarding")
@Composable
fun SetupServerValidationScreen(
onNext: () -> Unit,
onBack: () -> Unit,
viewModel: ServerValidationContract.ViewModel,
modifier: Modifier = Modifier,
) {
ServerValidationContainerScreen(
onNext = onNext,
onBack = onBack,
viewModel = viewModel,
modifier = modifier,
) { contentModifier ->
ServerValidationAppTitleScreen(
viewModel = viewModel,
modifier = contentModifier,
)
}
}

View File

@ -11,7 +11,7 @@ import assertk.assertions.isEqualTo
import kotlinx.coroutines.test.runTest
import org.junit.Test
class ServerValidationScreenKtTest : ComposeTest() {
class SetupServerValidationScreenKtTest : ComposeTest() {
@Test
fun `should delegate navigation effects`() = runTest {
@ -22,7 +22,7 @@ class ServerValidationScreenKtTest : ComposeTest() {
setContent {
ThunderbirdTheme {
ServerValidationScreen(
SetupServerValidationScreen(
onNext = { onNextCounter++ },
onBack = { onBackCounter++ },
viewModel = viewModel,

View File

@ -15,7 +15,7 @@ import app.k9mail.feature.account.server.settings.ui.outgoing.OutgoingServerSett
import app.k9mail.feature.account.server.settings.ui.outgoing.OutgoingServerSettingsViewModel
import app.k9mail.feature.account.server.validation.ui.IncomingServerValidationViewModel
import app.k9mail.feature.account.server.validation.ui.OutgoingServerValidationViewModel
import app.k9mail.feature.account.server.validation.ui.ServerValidationScreen
import app.k9mail.feature.account.server.validation.ui.SetupServerValidationScreen
import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryScreen
import app.k9mail.feature.account.setup.ui.autodiscovery.AccountAutoDiscoveryViewModel
import app.k9mail.feature.account.setup.ui.createaccount.CreateAccountScreen
@ -80,7 +80,7 @@ fun AccountSetupNavHost(
}
composable(route = NESTED_NAVIGATION_INCOMING_SERVER_VALIDATION) {
ServerValidationScreen(
SetupServerValidationScreen(
onNext = {
if (isAutomaticConfig) {
navController.navigate(NESTED_NAVIGATION_OUTGOING_SERVER_VALIDATION) {
@ -106,7 +106,7 @@ fun AccountSetupNavHost(
}
composable(route = NESTED_NAVIGATION_OUTGOING_SERVER_VALIDATION) {
ServerValidationScreen(
SetupServerValidationScreen(
onNext = {
navController.navigate(
if (hasSpecialFolders) {