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:
parent
65f8920039
commit
7d3eeb2b7c
@ -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> {
|
||||
|
@ -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> {
|
||||
|
@ -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(),
|
||||
),
|
@ -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)
|
||||
}
|
||||
}
|
@ -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(),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
@ -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,
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user