Coverage Summary for Class: LegalScreenKt (com.georgeci.moneysurfer.feature.login.legal)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| LegalScreenKt |
0%
(0/1)
|
0%
(0/3)
|
0%
(0/10)
|
0%
(0/34)
|
0%
(0/380)
|
package com.georgeci.moneysurfer.feature.login.legal
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.unit.dp
import com.georgeci.moneysurfer.uikit.components.base.SurferToolbar
import com.georgeci.moneysurfer.uikit.icons.SurferIcons
import com.georgeci.moneysurfer.uikit.modifier.surferContentContainer
import com.georgeci.moneysurfer.uikit.modifier.surferSafeInsets
import com.georgeci.moneysurfer.uikit.semantics.SurferSemantics
import com.georgeci.moneysurfer.uikit.theme.AppTheme
import moneysurfer.feature.login.generated.resources.Res
import moneysurfer.feature.login.generated.resources.legal_privacy_body
import moneysurfer.feature.login.generated.resources.legal_privacy_heading
import moneysurfer.feature.login.generated.resources.legal_terms_body
import moneysurfer.feature.login.generated.resources.legal_terms_heading
import moneysurfer.feature.login.generated.resources.legal_title
import moneysurfer.feature.login.generated.resources.legal_updated
import org.jetbrains.compose.resources.StringResource
import org.jetbrains.compose.resources.stringResource
const val LegalScreenTestTag: String = "legal:root"
@Composable
fun LegalScreen(onNavigateBack: () -> Unit) {
Scaffold(
modifier = Modifier
.surferSafeInsets()
.testTag(LegalScreenTestTag),
containerColor = AppTheme.materialColors.surface,
topBar = {
SurferToolbar(
title = stringResource(Res.string.legal_title),
onBack = onNavigateBack,
colors = TopAppBarDefaults.topAppBarColors(
containerColor = AppTheme.materialColors.surface,
titleContentColor = AppTheme.materialColors.onSurface,
),
)
},
) { padding ->
Column(
modifier = Modifier
.fillMaxSize()
.surferContentContainer()
.padding(
top = padding.calculateTopPadding(),
start = AppTheme.spacing.large,
end = AppTheme.spacing.large,
)
.verticalScroll(rememberScrollState()),
) {
Spacer(Modifier.height(AppTheme.spacing.small))
LegalSection(
icon = SurferIcons.Receipt,
heading = Res.string.legal_terms_heading,
body = Res.string.legal_terms_body,
)
Spacer(Modifier.height(AppTheme.spacing.large))
LegalSection(
icon = SurferIcons.Shield,
heading = Res.string.legal_privacy_heading,
body = Res.string.legal_privacy_body,
)
Spacer(Modifier.height(AppTheme.spacing.large))
Text(
text = stringResource(Res.string.legal_updated),
style = AppTheme.typography.bodySmall,
color = AppTheme.materialColors.onSurfaceVariant,
)
Spacer(Modifier.height(padding.calculateBottomPadding() + AppTheme.spacing.large))
}
}
}
@Composable
private fun LegalSection(icon: ImageVector, heading: StringResource, body: StringResource) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(AppTheme.spacing.small),
) {
Icon(
imageVector = icon,
contentDescription = SurferSemantics.Decorative,
tint = AppTheme.materialColors.primary,
modifier = Modifier.size(24.dp),
)
Text(
text = stringResource(heading),
style = AppTheme.typography.titleMedium,
color = AppTheme.materialColors.onSurface,
)
}
Spacer(Modifier.height(AppTheme.spacing.xxSmall))
Text(
text = stringResource(body),
style = AppTheme.typography.bodyMedium,
color = AppTheme.materialColors.onSurfaceVariant,
)
}