Skip to content

Commit

Permalink
Improve onboarding
Browse files Browse the repository at this point in the history
  • Loading branch information
pauljohanneskraft committed Nov 23, 2024
1 parent 7a94909 commit f4bcd7a
Show file tree
Hide file tree
Showing 12 changed files with 442 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ class ConsentDataSource @Inject constructor() {

init {
if (standard !is ConsentConstraint) {
TODO("on iOS: fatalError")
error("Standard does not conform to ConsentConstraint!")
}
}

suspend fun store(document: suspend () -> PdfDocument, identifier: String) {
(standard as? ConsentConstraint)?.let { consentConstraint ->
val export = ConsentDocumentExport(identifier, document)
consentConstraint.store(export)
} ?: TODO("on iOS: fatalError")
} ?: error("Standard does not conform to ConsentConstraint!")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ import edu.stanford.spezi.core.design.theme.SpeziTheme
import edu.stanford.spezi.core.design.views.personalinfo.PersonNameComponents
import edu.stanford.spezi.core.design.views.views.model.ViewState
import edu.stanford.spezi.core.utils.extensions.testIdentifier
import edu.stanford.spezi.module.onboarding.onboarding.OnboardingComposable
import edu.stanford.spezi.module.onboarding.onboarding.OnboardingTitle
import edu.stanford.spezi.module.onboarding.core.OnboardingComposable
import edu.stanford.spezi.module.onboarding.core.OnboardingTitle
import kotlinx.coroutines.launch

@Composable
fun OnboardingConsentComposable(
markdown: suspend () -> ByteArray,
action: suspend () -> Unit,
title: StringResource? = remember { StringResource("Consent") },
title: String? = StringResource("Consent").text(),
identifier: String = remember { "ConsentDocument" },
exportConfiguration: ConsentDocumentExportConfiguration = remember { ConsentDocumentExportConfiguration() },
) {
Expand All @@ -59,7 +59,7 @@ fun OnboardingConsentComposable(
internal fun OnboardingConsentComposableContent(
markdown: suspend () -> ByteArray,
action: suspend () -> Unit,
title: StringResource?,
title: String?,
identifier: String,
exportConfiguration: ConsentDocumentExportConfiguration,
uiState: ConsentUiState,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
package edu.stanford.spezi.module.onboarding.onboarding
package edu.stanford.spezi.module.onboarding.core

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.unit.IntSize
Expand All @@ -23,15 +27,15 @@ fun OnboardingComposable(
) {
val size = remember { mutableStateOf(IntSize.Zero) }
Box(modifier.onSizeChanged { size.value = it }) {
LazyColumn {
LazyColumn(Modifier.padding(24.dp)) {
item {
Column(Modifier.heightIn(min = size.value.height.dp)) {
Column {
Column(Modifier.heightIn(min = size.value.height.dp), horizontalAlignment = Alignment.CenterHorizontally) {
Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
title()
content()
}
action?.let { action ->
Spacer(Modifier)
Spacer(Modifier.fillMaxHeight())
action()
}
Spacer(Modifier.height(10.dp))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package edu.stanford.spezi.module.onboarding.core

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import edu.stanford.spezi.core.design.theme.Spacings
import edu.stanford.spezi.core.design.theme.SpeziTheme
import edu.stanford.spezi.core.design.theme.TextStyles
import edu.stanford.spezi.core.design.theme.ThemePreviews

@Composable
fun OnboardingTitle(
title: String,
subtitle: String? = null,
) {
Column(Modifier.padding(vertical = Spacings.medium), horizontalAlignment = Alignment.CenterHorizontally) {
Text(
title,
modifier = Modifier.padding(bottom = Spacings.medium),
style = TextStyles.headlineMedium.copy(fontWeight = FontWeight.Bold),
textAlign = TextAlign.Center
)

subtitle?.let { subtitle ->
Text(
subtitle,
modifier = Modifier.padding(bottom = Spacings.medium),
style = TextStyles.bodyMedium,
textAlign = TextAlign.Center
)
}
}
}

@ThemePreviews
@Composable
private fun OnboardingTitlePreview() {
SpeziTheme(isPreview = true) {
OnboardingTitle("Title", "Subtitle")
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.stanford.spezi.module.onboarding.onboarding
package edu.stanford.spezi.module.onboarding.spezi

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
Expand All @@ -8,8 +9,12 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import edu.stanford.spezi.core.design.theme.SpeziTheme
import edu.stanford.spezi.core.design.theme.ThemePreviews
import edu.stanford.spezi.core.design.views.views.model.ViewState
import edu.stanford.spezi.core.design.views.views.views.button.SuspendButton
import edu.stanford.spezi.core.design.views.views.viewstate.ViewStateAlert
Expand All @@ -27,21 +32,41 @@ fun OnboardingActions(
ViewStateAlert(primaryActionState)
ViewStateAlert(secondaryActionState)

Column(Modifier.padding(top = 10.dp)) {
Column(Modifier.padding(top = 10.dp), horizontalAlignment = Alignment.CenterHorizontally) {
SuspendButton(state = primaryActionState, action = primaryAction) {
Text(
primaryText,
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.fillMaxWidth()
.heightIn(min = 38.dp)
)
) {
Text(
primaryText,
textAlign = TextAlign.Center,
)
}
}

secondaryText?.let { secondaryText ->
secondaryAction?.let { secondaryAction ->
// TODO: Make SuspendTextButton
SuspendButton(state = secondaryActionState, action = secondaryAction) {
Text(secondaryText)
}
}
}
}
}

@ThemePreviews
@Composable
private fun OnboardingActionsPreview() {
SpeziTheme(isPreview = true) {
OnboardingActions(
"Primary",
{ println("Primary Action") },
"Secondary",
{ println("Secondary Action") }
)
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package edu.stanford.spezi.module.onboarding.onboarding
package edu.stanford.spezi.module.onboarding.spezi

import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package edu.stanford.spezi.module.onboarding.spezi

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Build
import androidx.compose.material.icons.filled.Call
import androidx.compose.material.icons.filled.Email
import androidx.compose.runtime.Composable
import edu.stanford.spezi.core.design.component.ImageResource
import edu.stanford.spezi.core.design.component.StringResource
import edu.stanford.spezi.core.design.component.StringResource.Companion.invoke
import edu.stanford.spezi.core.design.theme.SpeziTheme
import edu.stanford.spezi.core.design.theme.ThemePreviews
import edu.stanford.spezi.module.onboarding.core.OnboardingComposable
import edu.stanford.spezi.module.onboarding.core.OnboardingTitle

@Composable
fun OnboardingComposable(
title: String,
subtitle: String? = null,
areas: List<OnboardingInformationContent>,
actionText: String,
action: suspend () -> Unit,
) {
OnboardingComposable(
title = {
OnboardingTitle(title, subtitle)
},
content = {
OnboardingInformation(areas)
},
action = {
OnboardingActions(actionText, action)
}
)
}

@ThemePreviews
@Composable
private fun OnboardingComposablePreview() {
val areas = listOf(
OnboardingInformationContent(
icon = ImageResource.Vector(Icons.Default.Email, StringResource("Email")),
title = "Email",
description = "This is an email. And we can write a lot about E-Mails in a section like this. A very long text!"
),
OnboardingInformationContent(
icon = ImageResource.Vector(Icons.Default.Build, StringResource("Wrench")),
title = "Wrench",
description = "This is a wrench!"
),
OnboardingInformationContent(
icon = ImageResource.Vector(Icons.Default.Call, StringResource("Phone")),
title = "Phone",
description = "This is a phone."
)
)

SpeziTheme(isPreview = true) {
OnboardingComposable(
"Title",
"Subtitle",
areas,
actionText = "Action",
action = {}
)
}
}
Loading

0 comments on commit f4bcd7a

Please sign in to comment.