From b331814d1117740db0c796e24e2bd615504f2159 Mon Sep 17 00:00:00 2001 From: Flavia Handrea Date: Mon, 1 Jul 2024 18:34:52 +0300 Subject: [PATCH] Save onboarding data to the server implementation. --- .../compose/ArchiveOnboardingScreen.kt | 280 +++++++++-------- .../compose/PrioritiesPage.kt | 12 +- .../viewmodels/ArchiveOnboardingViewModel.kt | 288 ++++++++++-------- .../main/res/drawable/ellipse_exterior.xml | 24 ++ .../main/res/drawable/ellipse_interior.xml | 24 ++ ...agment_archive_onboarding_name_setting.xml | 1 - ...ment_archive_onboarding_type_selection.xml | 5 +- 7 files changed, 373 insertions(+), 261 deletions(-) create mode 100644 app/src/main/res/drawable/ellipse_exterior.xml create mode 100644 app/src/main/res/drawable/ellipse_interior.xml diff --git a/app/src/main/java/org/permanent/permanent/ui/archiveOnboarding/compose/ArchiveOnboardingScreen.kt b/app/src/main/java/org/permanent/permanent/ui/archiveOnboarding/compose/ArchiveOnboardingScreen.kt index 0aa70d99..2c08e184 100644 --- a/app/src/main/java/org/permanent/permanent/ui/archiveOnboarding/compose/ArchiveOnboardingScreen.kt +++ b/app/src/main/java/org/permanent/permanent/ui/archiveOnboarding/compose/ArchiveOnboardingScreen.kt @@ -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 @@ -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 @@ -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], @@ -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], @@ -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 }) + } + } } } diff --git a/app/src/main/java/org/permanent/permanent/ui/archiveOnboarding/compose/PrioritiesPage.kt b/app/src/main/java/org/permanent/permanent/ui/archiveOnboarding/compose/PrioritiesPage.kt index 2488bb52..4f906ba2 100644 --- a/app/src/main/java/org/permanent/permanent/ui/archiveOnboarding/compose/PrioritiesPage.kt +++ b/app/src/main/java/org/permanent/permanent/ui/archiveOnboarding/compose/PrioritiesPage.kt @@ -54,9 +54,11 @@ import org.permanent.permanent.ui.composeComponents.ButtonColor import org.permanent.permanent.ui.composeComponents.ButtonIconAlignment import org.permanent.permanent.ui.composeComponents.CustomCheckbox import org.permanent.permanent.ui.composeComponents.SmallTextAndIconButton +import org.permanent.permanent.viewmodels.ArchiveOnboardingViewModel @Composable fun PrioritiesPage( + viewModel: ArchiveOnboardingViewModel, isTablet: Boolean, horizontalPaddingDp: Dp, pagerState: PagerState, @@ -72,6 +74,7 @@ fun PrioritiesPage( if (isTablet) { TabletBody( + viewModel, horizontalPaddingDp, whiteColor, regularFont, @@ -82,6 +85,7 @@ fun PrioritiesPage( ) } else { PhoneBody( + viewModel, whiteSuperTransparentColor, whiteColor, regularFont, @@ -95,6 +99,7 @@ fun PrioritiesPage( @Composable private fun PhoneBody( + viewModel: ArchiveOnboardingViewModel, whiteSuperTransparentColor: Color, whiteColor: Color, regularFont: FontFamily, @@ -214,6 +219,7 @@ private fun PhoneBody( // coroutineScope.launch { // pagerState.animateScrollToPage(OnboardingPage.PRIORITIES_PAGE.value) // } + viewModel.createNewArchive(newArchive) } } } @@ -222,6 +228,7 @@ private fun PhoneBody( @Composable private fun TabletBody( + viewModel: ArchiveOnboardingViewModel, horizontalPaddingDp: Dp, whiteColor: Color, regularFont: FontFamily, @@ -298,7 +305,9 @@ private fun TabletBody( priorities.forEach { priority -> item { CustomCheckbox( - isTablet = true, text = priority.description, checkedState = priority.isChecked + isTablet = true, + text = priority.description, + checkedState = priority.isChecked ) } } @@ -344,6 +353,7 @@ private fun TabletBody( // coroutineScope.launch { // pagerState.animateScrollToPage(OnboardingPage.PRIORITIES_PAGE.value) // } + viewModel.createNewArchive(newArchive) } } } diff --git a/app/src/main/java/org/permanent/permanent/viewmodels/ArchiveOnboardingViewModel.kt b/app/src/main/java/org/permanent/permanent/viewmodels/ArchiveOnboardingViewModel.kt index 14976193..ec87f10a 100644 --- a/app/src/main/java/org/permanent/permanent/viewmodels/ArchiveOnboardingViewModel.kt +++ b/app/src/main/java/org/permanent/permanent/viewmodels/ArchiveOnboardingViewModel.kt @@ -2,7 +2,6 @@ package org.permanent.permanent.viewmodels import android.app.Application import android.content.Context -import android.text.Editable import androidx.fragment.app.Fragment import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData @@ -30,6 +29,7 @@ import org.permanent.permanent.ui.archiveOnboarding.OnboardingPage import org.permanent.permanent.ui.archiveOnboarding.PendingInvitationsFragment import org.permanent.permanent.ui.archiveOnboarding.TypeSelectionFragment import org.permanent.permanent.ui.archiveOnboarding.WelcomeFragment +import org.permanent.permanent.ui.archiveOnboarding.compose.NewArchive import org.permanent.permanent.ui.archiveOnboarding.compose.OnboardingGoalType import org.permanent.permanent.ui.archiveOnboarding.compose.OnboardingPriorityType @@ -71,6 +71,8 @@ class ArchiveOnboardingViewModel(application: Application) : val isSecondProgressBarEmpty: StateFlow = _isSecondProgressBarEmpty private val _isThirdProgressBarEmpty = MutableStateFlow(true) val isThirdProgressBarEmpty: StateFlow = _isThirdProgressBarEmpty + private val _isBusyState = MutableStateFlow(false) + val isBusyState: StateFlow = _isBusyState init { accountName.value = prefsHelper.getAccountName() @@ -110,18 +112,22 @@ class ArchiveOnboardingViewModel(application: Application) : currentPage.value = OnboardingPage.WELCOME prefsHelper.saveArchiveOnboardingDefaultFlow(true) } + typeSelectionFragment -> { currentPage.value = OnboardingPage.TYPE_SELECTION prefsHelper.saveArchiveOnboardingDefaultFlow(true) } + nameSettingFragment -> { currentPage.value = OnboardingPage.NAME_SETTING prefsHelper.saveArchiveOnboardingDefaultFlow(true) } + pendingInvitationsFragment -> { currentPage.value = OnboardingPage.PENDING_INVITATIONS prefsHelper.saveArchiveOnboardingDefaultFlow(false) } + defaultSelectionFragment -> { currentPage.value = OnboardingPage.DEFAULT_SELECTION prefsHelper.saveArchiveOnboardingDefaultFlow(false) @@ -133,9 +139,11 @@ class ArchiveOnboardingViewModel(application: Application) : fun updateFirstProgressBarEmpty(isEmpty: Boolean) { _isFirstProgressBarEmpty.update { isEmpty } } + fun updateSecondProgressBarEmpty(isEmpty: Boolean) { _isSecondProgressBarEmpty.update { isEmpty } } + fun updateThirdProgressBarEmpty(isEmpty: Boolean) { _isThirdProgressBarEmpty.update { isEmpty } } @@ -164,91 +172,37 @@ class ArchiveOnboardingViewModel(application: Application) : ) } - fun onArchiveTypeBtnClick(archiveType: ArchiveType) { - isArchiveSelected.value = true - selectedArchiveType.value = archiveType - selectedArchiveTypeTitle.value = when (archiveType) { - ArchiveType.FAMILY -> appContext.getString(R.string.archive_onboarding_group_archive_title) - ArchiveType.ORGANIZATION -> appContext.getString(R.string.archive_onboarding_organization_archive_title) - else -> appContext.getString(R.string.archive_onboarding_person_archive_title) - } - selectedArchiveTypeText.value = when (archiveType) { - ArchiveType.FAMILY -> appContext.getString(R.string.archive_onboarding_group_archive_text) - ArchiveType.ORGANIZATION -> appContext.getString(R.string.archive_onboarding_organization_archive_text) - else -> appContext.getString(R.string.archive_onboarding_person_archive_text) - } - } - - fun onNameTextChanged(name: Editable) { - this.name.value = name.toString() - } - - fun onGetStartedBtnClick() { - showFragment(typeSelectionFragment) - progress.value = progress.value?.plus(1) - } - - fun onBackBtnClick() { - if (currentPage.value == OnboardingPage.TYPE_SELECTION) { - if (onPendingArchivesRetrieved.value?.isNotEmpty() == true) { - if (areAllArchivesAccepted) { - showFragment(defaultSelectionFragment) - } else { - showFragment(pendingInvitationsFragment) + fun createNewArchive(newArchive: NewArchive) { + _isBusyState.value = true + archiveRepository.createNewArchive(newArchive.name, + newArchive.type, + object : IArchiveRepository.IArchiveListener { + override fun onSuccess(archive: Archive) { + _isBusyState.value = false + setNewArchiveAsDefault(archive) } - } else { - showFragment(welcomeFragment) - } - } else { - showFragment(typeSelectionFragment) - } - progress.value = progress.value?.minus(1) - } - - fun onNameArchiveBtnClick() { - showFragment(nameSettingFragment) - progress.value = progress.value?.plus(1) - } - - fun onCreateArchiveBtnClick() { - if (isBusy.value != null && isBusy.value!!) { - return - } - val name = name.value?.trim() - val selectedArchiveType = selectedArchiveType.value - - if (name != null && selectedArchiveType != null) { - isBusy.value = true - archiveRepository.createNewArchive( - name, - selectedArchiveType, - object : IArchiveRepository.IArchiveListener { - override fun onSuccess(archive: Archive) { - isBusy.value = false - setNewArchiveAsDefault(archive) - } - override fun onFailed(error: String?) { - isBusy.value = false - error?.let { showError.value = it } - } - }) - } + override fun onFailed(error: String?) { + _isBusyState.value = false + error?.let { showError.value = it } + } + }) } fun setNewArchiveAsDefault(newArchive: Archive) { val account = Account(prefsHelper.getAccountId(), prefsHelper.getAccountEmail()) account.defaultArchiveId = newArchive.id + _isBusyState.value = true accountRepository.update(account, object : IResponseListener { override fun onSuccess(message: String?) { - isBusy.value = false + _isBusyState.value = false prefsHelper.saveDefaultArchiveId(newArchive.id) setNewArchiveAsCurrent(newArchive) } override fun onFailed(error: String?) { - isBusy.value = false + _isBusyState.value = false error?.let { showError.value = it } } }) @@ -256,9 +210,10 @@ class ArchiveOnboardingViewModel(application: Application) : fun setNewArchiveAsCurrent(newArchive: Archive) { newArchive.number?.let { archiveNr -> + _isBusyState.value = true archiveRepository.switchToArchive(archiveNr, object : IDataListener { override fun onSuccess(dataList: List?) { - isBusy.value = false + _isBusyState.value = false prefsHelper.saveCurrentArchiveInfo( newArchive.id, newArchive.number, @@ -267,77 +222,150 @@ class ArchiveOnboardingViewModel(application: Application) : newArchive.thumbURL200, newArchive.accessRole ) - onArchiveOnboardingDone.call() +// onArchiveOnboardingDone.call() } override fun onFailed(error: String?) { - isBusy.value = false + _isBusyState.value = false error?.let { showError.value = it } } }) } } - fun onCreateNewArchiveBtnClick() { - onGetStartedBtnClick() - } - + // fun onArchiveTypeBtnClick(archiveType: ArchiveType) { +// isArchiveSelected.value = true +// selectedArchiveType.value = archiveType +// selectedArchiveTypeTitle.value = when (archiveType) { +// ArchiveType.FAMILY -> appContext.getString(R.string.archive_onboarding_group_archive_title) +// ArchiveType.ORGANIZATION -> appContext.getString(R.string.archive_onboarding_organization_archive_title) +// else -> appContext.getString(R.string.archive_onboarding_person_archive_title) +// } +// selectedArchiveTypeText.value = when (archiveType) { +// ArchiveType.FAMILY -> appContext.getString(R.string.archive_onboarding_group_archive_text) +// ArchiveType.ORGANIZATION -> appContext.getString(R.string.archive_onboarding_organization_archive_text) +// else -> appContext.getString(R.string.archive_onboarding_person_archive_text) +// } +// } +// +// fun onNameTextChanged(name: Editable) { +// this.name.value = name.toString() +// } +// +// fun onGetStartedBtnClick() { +// showFragment(typeSelectionFragment) +// progress.value = progress.value?.plus(1) +// } +// +// fun onBackBtnClick() { +// if (currentPage.value == OnboardingPage.TYPE_SELECTION) { +// if (onPendingArchivesRetrieved.value?.isNotEmpty() == true) { +// if (areAllArchivesAccepted) { +// showFragment(defaultSelectionFragment) +// } else { +// showFragment(pendingInvitationsFragment) +// } +// } else { +// showFragment(welcomeFragment) +// } +// } else { +// showFragment(typeSelectionFragment) +// } +// progress.value = progress.value?.minus(1) +// } +// +// fun onNameArchiveBtnClick() { +// showFragment(nameSettingFragment) +// progress.value = progress.value?.plus(1) +// } +// +// fun onCreateArchiveBtnClick() { +// if (isBusy.value != null && isBusy.value!!) { +// return +// } +// val name = name.value?.trim() +// val selectedArchiveType = selectedArchiveType.value +// +// if (name != null && selectedArchiveType != null) { +// isBusy.value = true +// archiveRepository.createNewArchive( +// name, +// selectedArchiveType, +// object : IArchiveRepository.IArchiveListener { +// override fun onSuccess(archive: Archive) { +// isBusy.value = false +// setNewArchiveAsDefault(archive) +// } +// +// override fun onFailed(error: String?) { +// isBusy.value = false +// error?.let { showError.value = it } +// } +// }) +// } +// } +// +// fun onCreateNewArchiveBtnClick() { +// onGetStartedBtnClick() +// } +// override fun onAcceptBtnClick(archive: Archive) { - if (isBusy.value != null && isBusy.value!!) { - return - } - - isBusy.value = true - archiveRepository.acceptArchives(listOf(archive), object : IResponseListener { - override fun onSuccess(message: String?) { - isBusy.value = false - archive.status = Status.OK - setNewArchiveAsDefault(archive) - } - - override fun onFailed(error: String?) { - isBusy.value = false - error?.let { showError.value = it } - return - } - }) - } - - fun onAcceptAllBtnClick() { - if (isBusy.value != null && isBusy.value!!) { - return - } - - val pendingArchives = onPendingArchivesRetrieved.value - - if (!pendingArchives.isNullOrEmpty()) { - isBusy.value = true - archiveRepository.acceptArchives(pendingArchives, object : IResponseListener { - override fun onSuccess(message: String?) { - isBusy.value = false - for (pendingArchive in pendingArchives) { - pendingArchive.status = Status.OK - } - onPendingArchivesRetrieved.value = onPendingArchivesRetrieved.value - showFragment(defaultSelectionFragment) - confirmationText.value = appContext.getString( - R.string.archive_onboarding_default_selection_text, - pendingArchives.size.toString() - ) - areAllArchivesAccepted = true - } - - override fun onFailed(error: String?) { - isBusy.value = false - error?.let { showError.value = it } - return - } - }) - } +// if (isBusy.value != null && isBusy.value!!) { +// return +// } +// +// isBusy.value = true +// archiveRepository.acceptArchives(listOf(archive), object : IResponseListener { +// override fun onSuccess(message: String?) { +// isBusy.value = false +// archive.status = Status.OK +// setNewArchiveAsDefault(archive) +// } +// +// override fun onFailed(error: String?) { +// isBusy.value = false +// error?.let { showError.value = it } +// return +// } +// }) } + // +// fun onAcceptAllBtnClick() { +// if (isBusy.value != null && isBusy.value!!) { +// return +// } +// +// val pendingArchives = onPendingArchivesRetrieved.value +// +// if (!pendingArchives.isNullOrEmpty()) { +// isBusy.value = true +// archiveRepository.acceptArchives(pendingArchives, object : IResponseListener { +// override fun onSuccess(message: String?) { +// isBusy.value = false +// for (pendingArchive in pendingArchives) { +// pendingArchive.status = Status.OK +// } +// onPendingArchivesRetrieved.value = onPendingArchivesRetrieved.value +// showFragment(defaultSelectionFragment) +// confirmationText.value = appContext.getString( +// R.string.archive_onboarding_default_selection_text, +// pendingArchives.size.toString() +// ) +// areAllArchivesAccepted = true +// } +// +// override fun onFailed(error: String?) { +// isBusy.value = false +// error?.let { showError.value = it } +// return +// } +// }) +// } +// } +// override fun onMakeDefaultBtnClick(archive: Archive) { - setNewArchiveAsDefault(archive) +// setNewArchiveAsDefault(archive) } fun getIsBusy(): MutableLiveData = isBusy diff --git a/app/src/main/res/drawable/ellipse_exterior.xml b/app/src/main/res/drawable/ellipse_exterior.xml new file mode 100644 index 00000000..8c156a08 --- /dev/null +++ b/app/src/main/res/drawable/ellipse_exterior.xml @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/ellipse_interior.xml b/app/src/main/res/drawable/ellipse_interior.xml new file mode 100644 index 00000000..53cafe1a --- /dev/null +++ b/app/src/main/res/drawable/ellipse_interior.xml @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_archive_onboarding_name_setting.xml b/app/src/main/res/layout/fragment_archive_onboarding_name_setting.xml index ab2dd435..84055b62 100644 --- a/app/src/main/res/layout/fragment_archive_onboarding_name_setting.xml +++ b/app/src/main/res/layout/fragment_archive_onboarding_name_setting.xml @@ -147,7 +147,6 @@ android:layout_marginStart="16dp" android:layout_marginTop="24dp" android:layout_marginEnd="16dp" - android:afterTextChanged="@{(editable)->viewModel.onNameTextChanged(editable)}" android:background="@drawable/rounded_grey_border_white_background" android:fontFamily="@font/open_sans" android:letterSpacing="-0.01" diff --git a/app/src/main/res/layout/fragment_archive_onboarding_type_selection.xml b/app/src/main/res/layout/fragment_archive_onboarding_type_selection.xml index 5164617f..059cf065 100644 --- a/app/src/main/res/layout/fragment_archive_onboarding_type_selection.xml +++ b/app/src/main/res/layout/fragment_archive_onboarding_type_selection.xml @@ -72,7 +72,6 @@ android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:background="@{viewModel.selectedArchiveType == ArchiveType.PERSON ? @drawable/rounded_border_primary_background : @drawable/rounded_grey_border_white_background}" - android:onClick="@{() -> viewModel.onArchiveTypeBtnClick(ArchiveType.PERSON)}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -134,7 +133,6 @@ android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:background="@{viewModel.selectedArchiveType == ArchiveType.FAMILY ? @drawable/rounded_border_primary_background : @drawable/rounded_grey_border_white_background}" - android:onClick="@{() -> viewModel.onArchiveTypeBtnClick(ArchiveType.FAMILY)}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -196,8 +194,7 @@ android:layout_marginTop="16dp" android:layout_marginEnd="16dp" android:background="@{viewModel.selectedArchiveType == ArchiveType.ORGANIZATION ? @drawable/rounded_border_primary_background : @drawable/rounded_grey_border_white_background}" - android:onClick="@{() -> viewModel.onArchiveTypeBtnClick(ArchiveType.ORGANIZATION)}" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/clGroup"