Repo created
This commit is contained in:
parent
a629de6271
commit
3cef7c5092
2161 changed files with 246605 additions and 2 deletions
12
feature/onboarding/build.gradle.kts
Normal file
12
feature/onboarding/build.gradle.kts
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
plugins {
|
||||
id(ThunderbirdPlugins.Library.androidCompose)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "net.thunderbird.feature.onboarding"
|
||||
resourcePrefix = "onboarding_"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.core.ui.compose.designsystem)
|
||||
}
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
package net.thunderbird.feature.onboarding
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import app.k9mail.core.ui.compose.common.DevicePreviews
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.Background
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.Button
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.button.ButtonText
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextBody1
|
||||
import app.k9mail.core.ui.compose.designsystem.atom.text.TextHeadline2
|
||||
import app.k9mail.core.ui.compose.designsystem.template.LazyColumnWithFooter
|
||||
import app.k9mail.core.ui.compose.designsystem.template.ResponsiveContent
|
||||
import app.k9mail.core.ui.compose.theme.K9Theme
|
||||
import app.k9mail.core.ui.compose.theme.MainTheme
|
||||
import app.k9mail.core.ui.compose.theme.ThunderbirdTheme
|
||||
|
||||
@Composable
|
||||
internal fun OnboardingContent(
|
||||
onStartClick: () -> Unit,
|
||||
onImportClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
ResponsiveContent {
|
||||
Background(
|
||||
modifier = modifier,
|
||||
) {
|
||||
LazyColumnWithFooter(
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.padding(MainTheme.spacings.double),
|
||||
footer = {
|
||||
WelcomeFooter(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(top = MainTheme.spacings.triple),
|
||||
onStartClick = onStartClick,
|
||||
onImportClick = onImportClick,
|
||||
)
|
||||
},
|
||||
verticalArrangement = Arrangement.spacedBy(MainTheme.sizes.large, Alignment.CenterVertically),
|
||||
) {
|
||||
item {
|
||||
WelcomeLogo(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
)
|
||||
}
|
||||
item {
|
||||
WelcomeTitle(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
)
|
||||
}
|
||||
item {
|
||||
WelcomeMessage(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun WelcomeLogo(
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier.then(modifier),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.size(MainTheme.sizes.huge)
|
||||
.clip(shape = RoundedCornerShape(percent = 50))
|
||||
.background(color = MainTheme.colors.surface),
|
||||
) {
|
||||
Image(
|
||||
painter = painterResource(id = MainTheme.images.logo),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(MainTheme.sizes.huge),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun WelcomeTitle(
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Column(
|
||||
modifier = modifier,
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
TextHeadline2(
|
||||
text = stringResource(id = R.string.onboarding_welcome_title),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun WelcomeMessage(
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.padding(start = MainTheme.spacings.quadruple, end = MainTheme.spacings.quadruple)
|
||||
.then(modifier),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
TextBody1(
|
||||
text = stringResource(id = R.string.onboarding_welcome_message),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun WelcomeFooter(
|
||||
onStartClick: () -> Unit,
|
||||
onImportClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
Column(
|
||||
modifier = modifier,
|
||||
verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
) {
|
||||
Button(
|
||||
text = stringResource(id = R.string.onboarding_welcome_start_button),
|
||||
onClick = onStartClick,
|
||||
)
|
||||
ButtonText(
|
||||
text = stringResource(id = R.string.onboarding_welcome_import_button),
|
||||
onClick = onImportClick,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@DevicePreviews
|
||||
internal fun OnboardingContentK9Preview() {
|
||||
K9Theme {
|
||||
OnboardingContent(
|
||||
onStartClick = {},
|
||||
onImportClick = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@DevicePreviews
|
||||
internal fun OnboardingContentThunderbirdPreview() {
|
||||
ThunderbirdTheme {
|
||||
OnboardingContent(
|
||||
onStartClick = {},
|
||||
onImportClick = {},
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package net.thunderbird.feature.onboarding
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
|
||||
@Composable
|
||||
fun OnboardingScreen(
|
||||
onStartClick: () -> Unit,
|
||||
onImportClick: () -> Unit,
|
||||
) {
|
||||
OnboardingContent(
|
||||
onStartClick = onStartClick,
|
||||
onImportClick = onImportClick,
|
||||
)
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
internal fun OnboardingScreenPreview() {
|
||||
OnboardingScreen(
|
||||
onStartClick = {},
|
||||
onImportClick = {},
|
||||
)
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package net.thunderbird.feature.onboarding.navigation
|
||||
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavGraphBuilder
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.compose.composable
|
||||
import net.thunderbird.feature.onboarding.OnboardingScreen
|
||||
|
||||
const val NAVIGATION_ROUTE_ONBOARDING = "onboarding"
|
||||
|
||||
fun NavController.navigateToOnboarding(
|
||||
navOptions: NavOptions? = null,
|
||||
) {
|
||||
navigate(NAVIGATION_ROUTE_ONBOARDING, navOptions)
|
||||
}
|
||||
|
||||
fun NavGraphBuilder.onboardingScreen(
|
||||
onStartClick: () -> Unit,
|
||||
onImportClick: () -> Unit,
|
||||
) {
|
||||
composable(route = NAVIGATION_ROUTE_ONBOARDING) {
|
||||
OnboardingScreen(
|
||||
onStartClick = onStartClick,
|
||||
onImportClick = onImportClick,
|
||||
)
|
||||
}
|
||||
}
|
||||
7
feature/onboarding/src/main/res/values/strings.xml
Normal file
7
feature/onboarding/src/main/res/values/strings.xml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="onboarding_welcome_title">K-9 Mail</string>
|
||||
<string name="onboarding_welcome_message">Welcome to K-9 Mail, the Android email client designed for enhanced security, easy customization, and seamless management of all your email accounts.</string>
|
||||
<string name="onboarding_welcome_start_button">Start</string>
|
||||
<string name="onboarding_welcome_import_button">Import settings</string>
|
||||
</resources>
|
||||
Loading…
Add table
Add a link
Reference in a new issue