Skip to content

Commit

Permalink
Save onboarding data to the server implementation.
Browse files Browse the repository at this point in the history
  • Loading branch information
flaviahandrea-vsp committed Jul 1, 2024
1 parent 14c617d commit b331814
Show file tree
Hide file tree
Showing 7 changed files with 373 additions and 261 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,16 @@

package org.permanent.permanent.ui.archiveOnboarding.compose

import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
Expand All @@ -27,10 +34,12 @@ import androidx.compose.runtime.saveable.listSaver
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.runtime.toMutableStateList
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
Expand Down Expand Up @@ -75,29 +84,23 @@ fun ArchiveOnboardingScreen(
val isFirstProgressBarEmpty by viewModel.isFirstProgressBarEmpty.collectAsState()
val isSecondProgressBarEmpty by viewModel.isSecondProgressBarEmpty.collectAsState()
val isThirdProgressBarEmpty by viewModel.isThirdProgressBarEmpty.collectAsState()
val isBusyState by viewModel.isBusyState.collectAsState()

val goals = rememberSaveable(
saver = listSaver(
save = {
it.map { goal ->
listOf(
goal.type.ordinal,
goal.description,
goal.isChecked.value
)
}
},
restore = { restoredGoals ->
restoredGoals.map {
OnboardingGoal(
type = OnboardingGoalType.values()[it[0] as Int],
description = it[1] as String,
isChecked = mutableStateOf(it[2] as Boolean)
)
}.toMutableStateList()
}
)
) {
val goals = rememberSaveable(saver = listSaver(save = {
it.map { goal ->
listOf(
goal.type.ordinal, goal.description, goal.isChecked.value
)
}
}, restore = { restoredGoals ->
restoredGoals.map {
OnboardingGoal(
type = OnboardingGoalType.values()[it[0] as Int],
description = it[1] as String,
isChecked = mutableStateOf(it[2] as Boolean)
)
}.toMutableStateList()
})) {
viewModel.createOnboardingGoals(context).map { (ordinal, description) ->
OnboardingGoal(
type = OnboardingGoalType.values()[ordinal],
Expand All @@ -107,28 +110,21 @@ fun ArchiveOnboardingScreen(
}.toMutableStateList()
}

val priorities = rememberSaveable(
saver = listSaver(
save = {
it.map { priority ->
listOf(
priority.type.ordinal,
priority.description,
priority.isChecked.value
)
}
},
restore = { restoredPriorities ->
restoredPriorities.map {
OnboardingPriority(
type = OnboardingPriorityType.values()[it[0] as Int],
description = it[1] as String,
isChecked = mutableStateOf(it[2] as Boolean)
)
}.toMutableStateList()
}
)
) {
val priorities = rememberSaveable(saver = listSaver(save = {
it.map { priority ->
listOf(
priority.type.ordinal, priority.description, priority.isChecked.value
)
}
}, restore = { restoredPriorities ->
restoredPriorities.map {
OnboardingPriority(
type = OnboardingPriorityType.values()[it[0] as Int],
description = it[1] as String,
isChecked = mutableStateOf(it[2] as Boolean)
)
}.toMutableStateList()
})) {
viewModel.createOnboardingPriorities(context).map { (ordinal, description) ->
OnboardingPriority(
type = OnboardingPriorityType.values()[ordinal],
Expand Down Expand Up @@ -159,107 +155,141 @@ fun ArchiveOnboardingScreen(
}

Box(
modifier = Modifier
.fillMaxSize()
.background(
Brush.verticalGradient(
listOf(
blue900Color, blueLighterColor
)
)
)
modifier = Modifier.fillMaxSize()
) {
Column(
Box(
modifier = Modifier
.fillMaxSize()
.padding(top = topPaddingDp),
verticalArrangement = Arrangement.Top
.background(
Brush.verticalGradient(
listOf(
blue900Color, blueLighterColor
)
)
)
) {
Image(
painter = painterResource(id = R.drawable.img_logo),
contentDescription = "Logo",
Column(
modifier = Modifier
.size(40.dp)
.padding(horizontal = horizontalPaddingDp)
)

Box(
modifier = Modifier.padding(
top = topPaddingDp, start = horizontalPaddingDp, end = horizontalPaddingDp
)
.fillMaxSize()
.padding(top = topPaddingDp),
verticalArrangement = Arrangement.Top
) {
Row(horizontalArrangement = Arrangement.spacedBy(spacerPaddingDp)) {
OnboardingProgressIndicator(
progressIndicatorHeight,
horizontalPaddingDp,
spacerPaddingDp,
isFirstProgressBarEmpty
)
Image(
painter = painterResource(id = R.drawable.img_logo),
contentDescription = "Logo",
modifier = Modifier
.size(40.dp)
.padding(horizontal = horizontalPaddingDp)
)

OnboardingProgressIndicator(
progressIndicatorHeight,
horizontalPaddingDp,
spacerPaddingDp,
isSecondProgressBarEmpty
Box(
modifier = Modifier.padding(
top = topPaddingDp, start = horizontalPaddingDp, end = horizontalPaddingDp
)
) {
Row(horizontalArrangement = Arrangement.spacedBy(spacerPaddingDp)) {
OnboardingProgressIndicator(
progressIndicatorHeight,
horizontalPaddingDp,
spacerPaddingDp,
isFirstProgressBarEmpty
)

OnboardingProgressIndicator(
progressIndicatorHeight,
horizontalPaddingDp,
spacerPaddingDp,
isThirdProgressBarEmpty
)
}
}
OnboardingProgressIndicator(
progressIndicatorHeight,
horizontalPaddingDp,
spacerPaddingDp,
isSecondProgressBarEmpty
)

HorizontalPager(
state = pagerState, userScrollEnabled = false
) { page ->
when (page) {
OnboardingPage.WELCOME_PAGE.value -> {
WelcomePage(
isTablet = isTablet,
pagerState = pagerState,
accountName = viewModel.getAccountName().value
OnboardingProgressIndicator(
progressIndicatorHeight,
horizontalPaddingDp,
spacerPaddingDp,
isThirdProgressBarEmpty
)
}
}

OnboardingPage.ARCHIVE_TYPE_PAGE.value -> {
ArchiveTypePage(isTablet = isTablet,
pagerState = pagerState,
onArchiveTypeClick = { type: ArchiveType, typeName: String ->
newArchive = newArchive.copy(type = type, typeName = typeName)
})
}
HorizontalPager(
state = pagerState, userScrollEnabled = false
) { page ->
when (page) {
OnboardingPage.WELCOME_PAGE.value -> {
WelcomePage(
isTablet = isTablet,
pagerState = pagerState,
accountName = viewModel.getAccountName().value
)
}

OnboardingPage.ARCHIVE_NAME_PAGE.value -> {
ArchiveNamePage(
isTablet = isTablet, pagerState = pagerState, newArchive = newArchive
)
}
OnboardingPage.ARCHIVE_TYPE_PAGE.value -> {
ArchiveTypePage(isTablet = isTablet,
pagerState = pagerState,
onArchiveTypeClick = { type: ArchiveType, typeName: String ->
newArchive = newArchive.copy(type = type, typeName = typeName)
})
}

OnboardingPage.GOALS_PAGE.value -> {
GoalsPage(
isTablet = isTablet,
horizontalPaddingDp = horizontalPaddingDp,
pagerState = pagerState,
newArchive = newArchive,
goals = goals
)
}
OnboardingPage.ARCHIVE_NAME_PAGE.value -> {
ArchiveNamePage(
isTablet = isTablet,
pagerState = pagerState,
newArchive = newArchive
)
}

OnboardingPage.PRIORITIES_PAGE.value -> {
PrioritiesPage(
isTablet = isTablet,
horizontalPaddingDp = horizontalPaddingDp,
pagerState = pagerState,
newArchive = newArchive,
priorities = priorities
)
OnboardingPage.GOALS_PAGE.value -> {
GoalsPage(
isTablet = isTablet,
horizontalPaddingDp = horizontalPaddingDp,
pagerState = pagerState,
newArchive = newArchive,
goals = goals
)
}

OnboardingPage.PRIORITIES_PAGE.value -> {
PrioritiesPage(
viewModel = viewModel,
isTablet = isTablet,
horizontalPaddingDp = horizontalPaddingDp,
pagerState = pagerState,
newArchive = newArchive,
priorities = priorities
)
}
}
}
}
}

// Overlay with spinning images
if (isBusyState) {
Box(
modifier = Modifier
.fillMaxSize()
.background(Color.Black.copy(alpha = 0.5f))
.clickable(enabled = false) {}, contentAlignment = Alignment.Center
) {
val infiniteTransition = rememberInfiniteTransition(label = "")

val rotation by infiniteTransition.animateFloat(
initialValue = 0f, targetValue = 360f, animationSpec = infiniteRepeatable(
animation = tween(1000, easing = LinearEasing),
repeatMode = RepeatMode.Restart
), label = ""
)

Image(painter = painterResource(id = R.drawable.ellipse_exterior),
contentDescription = null,
modifier = Modifier.graphicsLayer { rotationZ = -rotation })

Image(painter = painterResource(id = R.drawable.ellipse_interior),
contentDescription = null,
modifier = Modifier.graphicsLayer { rotationZ = rotation })
}
}
}
}

Expand Down
Loading

0 comments on commit b331814

Please sign in to comment.