From 786d7d1a2d94648218a631166ba2ba7bb7e05f23 Mon Sep 17 00:00:00 2001 From: Maninder T Date: Sun, 10 Dec 2023 13:17:58 -0500 Subject: [PATCH 01/10] Adding delete account --- app/src/main/java/com/getcode/view/SheetNav.kt | 4 ++++ app/src/main/res/values/strings.xml | 1 + 2 files changed, 5 insertions(+) diff --git a/app/src/main/java/com/getcode/view/SheetNav.kt b/app/src/main/java/com/getcode/view/SheetNav.kt index 57bb47048..8ef397b7e 100644 --- a/app/src/main/java/com/getcode/view/SheetNav.kt +++ b/app/src/main/java/com/getcode/view/SheetNav.kt @@ -257,6 +257,10 @@ enum class SheetSections( title = R.string.title_myAccount, route = "sheet/accountDetails" ), + ACCOUNT_DETAILS( + title = R.string.title_deleteAccount, + route = "sheet/deleteAccount" + ), PHONE_VERIFY( title = R.string.title_enterPhoneNumber, route = "login/verifyPhone?" + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 994d034f4..79f339d23 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -267,6 +267,7 @@ Withdrew Your Access Key My Account + Delete Account Buy & Sell Kin You Have %d Invite From cf4ec1a4349a6862ad0e0b57a378b265bb73a7ce Mon Sep 17 00:00:00 2001 From: Maninder T Date: Sun, 10 Dec 2023 13:26:09 -0500 Subject: [PATCH 02/10] Enum added to sheetnav --- app/src/main/java/com/getcode/view/SheetNav.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/getcode/view/SheetNav.kt b/app/src/main/java/com/getcode/view/SheetNav.kt index 8ef397b7e..9160eb253 100644 --- a/app/src/main/java/com/getcode/view/SheetNav.kt +++ b/app/src/main/java/com/getcode/view/SheetNav.kt @@ -257,7 +257,7 @@ enum class SheetSections( title = R.string.title_myAccount, route = "sheet/accountDetails" ), - ACCOUNT_DETAILS( + DELETE_ACCOUNT( title = R.string.title_deleteAccount, route = "sheet/deleteAccount" ), From ff1b6d7cc6bdf5a3511064fbb3bc2cae70e3fd99 Mon Sep 17 00:00:00 2001 From: Maninder T Date: Sun, 10 Dec 2023 13:47:41 -0500 Subject: [PATCH 03/10] Added base delete account --- .../main/java/com/getcode/view/SheetNav.kt | 8 +++++++ .../view/main/account/AccountDetails.kt | 17 ++++++++++---- .../main/account/AccountSheetViewModel.kt | 1 + .../view/main/account/DeleteAccount.kt | 22 +++++++++++++++++++ .../main/account/DeleteAccountViewModel.kt | 11 ++++++++++ app/src/main/res/values/strings.xml | 2 +- 6 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt create mode 100644 app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt diff --git a/app/src/main/java/com/getcode/view/SheetNav.kt b/app/src/main/java/com/getcode/view/SheetNav.kt index 9160eb253..fa550d035 100644 --- a/app/src/main/java/com/getcode/view/SheetNav.kt +++ b/app/src/main/java/com/getcode/view/SheetNav.kt @@ -32,6 +32,7 @@ fun NavGraphBuilder.addSheetGraph( DEPOSIT -> navController.navigate(SheetSections.DEPOSIT.route) WITHDRAW -> navController.navigate(SheetSections.WITHDRAW_AMOUNT.route) ACCESS_KEY -> navController.navigate(SheetSections.ACCESS_KEY.route) + DELETE_ACCOUNT -> navController.navigate(SheetSections.DELETE_ACCOUNT.route) FAQ -> navController.navigate(SheetSections.FAQ.route) ACCOUNT_DETAILS -> navController.navigate(SheetSections.ACCOUNT_DETAILS.route) PHONE -> navController.navigate( @@ -85,6 +86,13 @@ fun NavGraphBuilder.addSheetGraph( onTitleChange(SheetSections.ACCESS_KEY.title) AccountAccessKey(navController) } + composableItem( + route = SheetSections.DELETE_ACCOUNT.route + ) { + onBackButtonVisibilityChange(true) + onTitleChange(SheetSections.DELETE_ACCOUNT.title) + DeleteCodeAccount(navController) + } composableItem( route = SheetSections.FAQ.route, ) { diff --git a/app/src/main/java/com/getcode/view/main/account/AccountDetails.kt b/app/src/main/java/com/getcode/view/main/account/AccountDetails.kt index e15313101..09d352f11 100644 --- a/app/src/main/java/com/getcode/view/main/account/AccountDetails.kt +++ b/app/src/main/java/com/getcode/view/main/account/AccountDetails.kt @@ -1,15 +1,20 @@ package com.getcode.view.main.account -import androidx.compose.foundation.* -import androidx.compose.foundation.layout.* -import androidx.compose.runtime.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.hilt.navigation.compose.hiltViewModel import com.getcode.App import com.getcode.R import com.getcode.manager.BottomBarManager -import com.getcode.util.getActivity @Composable fun AccountDetails( @@ -54,6 +59,10 @@ fun AccountDetails( icon = R.drawable.ic_menu_phone, isPhoneLinked = dataState.isPhoneLinked, ) { onPage(AccountPage.PHONE) }, + AccountMainItem( + name = R.string.title_deleteAccount, + icon = R.drawable.ic_delete + ) { onPage(AccountPage.DELETE_ACCOUNT) }, ) for (action in actions) { diff --git a/app/src/main/java/com/getcode/view/main/account/AccountSheetViewModel.kt b/app/src/main/java/com/getcode/view/main/account/AccountSheetViewModel.kt index 4d48d5f35..8eddc938e 100644 --- a/app/src/main/java/com/getcode/view/main/account/AccountSheetViewModel.kt +++ b/app/src/main/java/com/getcode/view/main/account/AccountSheetViewModel.kt @@ -24,6 +24,7 @@ enum class AccountPage { DEPOSIT, WITHDRAW, PHONE, + DELETE_ACCOUNT, ACCESS_KEY, FAQ, ACCOUNT_DETAILS, diff --git a/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt b/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt new file mode 100644 index 000000000..6cd93a9e3 --- /dev/null +++ b/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt @@ -0,0 +1,22 @@ +package com.getcode.view.main.account + +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.platform.LocalContext +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavController + +@Composable +fun DeleteCodeAccount(navController: NavController) { + val viewModel = hiltViewModel() + val dataState by viewModel.uiFlow.collectAsState() + val context = LocalContext.current + + Text(text = "Hello") + SideEffect { + viewModel.init() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt b/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt new file mode 100644 index 000000000..83116de7a --- /dev/null +++ b/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt @@ -0,0 +1,11 @@ +package com.getcode.view.main.account + +import com.getcode.view.BaseViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + + +@HiltViewModel +class DeleteAccountViewModel @Inject constructor() : BaseViewModel() { + +} \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 79f339d23..8a2025c0e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -267,7 +267,7 @@ Withdrew Your Access Key My Account - Delete Account + Delete Code Account Buy & Sell Kin You Have %d Invite From 089e1ceeda9ed6535e8475791f7d1d3cfae99556 Mon Sep 17 00:00:00 2001 From: Maninder T Date: Sun, 10 Dec 2023 15:04:43 -0500 Subject: [PATCH 04/10] Deletiong confirmation done --- .../main/java/com/getcode/view/SheetNav.kt | 26 +++++++- .../getcode/view/components/TextSection.kt | 25 ++++++++ .../view/main/account/AccountDetails.kt | 2 +- .../view/main/account/DeleteAccount.kt | 62 +++++++++++++++---- .../main/res/drawable/ic_delete_bubble.xml | 25 ++++++++ app/src/main/res/values-en-rGB/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 7 files changed, 126 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/com/getcode/view/components/TextSection.kt create mode 100644 app/src/main/res/drawable/ic_delete_bubble.xml diff --git a/app/src/main/java/com/getcode/view/SheetNav.kt b/app/src/main/java/com/getcode/view/SheetNav.kt index fa550d035..86109f784 100644 --- a/app/src/main/java/com/getcode/view/SheetNav.kt +++ b/app/src/main/java/com/getcode/view/SheetNav.kt @@ -1,14 +1,34 @@ package com.getcode.view import androidx.annotation.StringRes +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.navigation.NamedNavArgument +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavType +import androidx.navigation.navArgument import androidx.compose.animation.* import androidx.navigation.* import com.getcode.R import com.getcode.view.login.PhoneConfirm import com.getcode.view.login.PhoneVerify -import com.getcode.view.main.account.* -import com.getcode.view.main.account.AccountPage.* +import com.getcode.view.main.account.AccountAccessKey +import com.getcode.view.main.account.AccountDebugOptions +import com.getcode.view.main.account.AccountDeposit +import com.getcode.view.main.account.AccountDetails import com.getcode.view.main.account.AccountFaq +import com.getcode.view.main.account.AccountHome +import com.getcode.view.main.account.AccountPage +import com.getcode.view.main.account.AccountPage.ACCESS_KEY +import com.getcode.view.main.account.AccountPage.ACCOUNT_DEBUG_OPTIONS +import com.getcode.view.main.account.AccountPage.ACCOUNT_DETAILS +import com.getcode.view.main.account.AccountPage.DELETE_ACCOUNT +import com.getcode.view.main.account.AccountPage.DEPOSIT +import com.getcode.view.main.account.AccountPage.FAQ +import com.getcode.view.main.account.AccountPage.PHONE +import com.getcode.view.main.account.AccountPage.WITHDRAW +import com.getcode.view.main.account.AccountPhone +import com.getcode.view.main.account.DeleteCodeAccount import com.getcode.view.main.account.withdraw.AccountWithdrawAddress import com.getcode.view.main.account.withdraw.AccountWithdrawAmount import com.getcode.view.main.account.withdraw.AccountWithdrawSummary @@ -266,7 +286,7 @@ enum class SheetSections( route = "sheet/accountDetails" ), DELETE_ACCOUNT( - title = R.string.title_deleteAccount, + title = R.string.action_deleteAccount, route = "sheet/deleteAccount" ), PHONE_VERIFY( diff --git a/app/src/main/java/com/getcode/view/components/TextSection.kt b/app/src/main/java/com/getcode/view/components/TextSection.kt new file mode 100644 index 000000000..618139900 --- /dev/null +++ b/app/src/main/java/com/getcode/view/components/TextSection.kt @@ -0,0 +1,25 @@ +package com.getcode.view.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp + +@Composable +fun TextSection(title: String, description: String) { + Column(verticalArrangement = Arrangement.spacedBy(10.dp)) { + Text( + text = title, + style = MaterialTheme.typography.h6.copy( + fontWeight = FontWeight.Bold, + ) + ) + Text( + text = description, + style = MaterialTheme.typography.subtitle2 + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/getcode/view/main/account/AccountDetails.kt b/app/src/main/java/com/getcode/view/main/account/AccountDetails.kt index 09d352f11..5c645ab4a 100644 --- a/app/src/main/java/com/getcode/view/main/account/AccountDetails.kt +++ b/app/src/main/java/com/getcode/view/main/account/AccountDetails.kt @@ -60,7 +60,7 @@ fun AccountDetails( isPhoneLinked = dataState.isPhoneLinked, ) { onPage(AccountPage.PHONE) }, AccountMainItem( - name = R.string.title_deleteAccount, + name = R.string.action_deleteAccount, icon = R.drawable.ic_delete ) { onPage(AccountPage.DELETE_ACCOUNT) }, ) diff --git a/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt b/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt index 6cd93a9e3..f3060c70a 100644 --- a/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt +++ b/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt @@ -1,22 +1,60 @@ package com.getcode.view.main.account -import androidx.compose.material.Text +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController +import com.getcode.R +import com.getcode.view.components.ButtonState +import com.getcode.view.components.CodeButton +import com.getcode.view.components.TextSection @Composable fun DeleteCodeAccount(navController: NavController) { - val viewModel = hiltViewModel() - val dataState by viewModel.uiFlow.collectAsState() - val context = LocalContext.current - - Text(text = "Hello") - SideEffect { - viewModel.init() + val viewModel = hiltViewModel() + Column(Modifier.padding(20.dp)) { + LazyColumn( + modifier = Modifier.weight(1f), + verticalArrangement = Arrangement.spacedBy(30.dp) + ) { + item { + Image( + painter = painterResource(id = R.drawable.ic_delete_bubble), + contentDescription = "Delete" + ) + } + item { + TextSection( + title = stringResource(id = R.string.deleteAccount_title_willDo), + description = stringResource(id = R.string.deleteAccount_description_willDo) + ) + } + item { + TextSection( + title = stringResource(id = R.string.deleteAccount_title_wontDo), + description = stringResource(id = R.string.deleteAccount_description_wontDo) + ) + } + item { + TextSection( + title = stringResource(id = R.string.deleteAccount_title_willHappen), + description = stringResource(id = R.string.deleteAccount_description_willHappen) + ) + } + } + CodeButton( + onClick = { + }, + text = stringResource(R.string.action_continue), + buttonState = ButtonState.Filled, + ) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_delete_bubble.xml b/app/src/main/res/drawable/ic_delete_bubble.xml new file mode 100644 index 000000000..3af2bb3b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_delete_bubble.xml @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 549be4855..8f0e31983 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -13,7 +13,7 @@ Copy Address Create an Account Create a New Code Account - Delete Account + Delete Code Account Enable Face ID Enable Touch ID Exit diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8a2025c0e..8aa27f9a0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,7 +13,7 @@ Copy Address Create an Account Create a New Code Account - Delete Account + Delete Code Account Enable Face ID Enable Touch ID Exit From e887bc21a49c44542dfbc8e87283a73d29c5c8fd Mon Sep 17 00:00:00 2001 From: Maninder T Date: Sun, 10 Dec 2023 15:35:27 -0500 Subject: [PATCH 05/10] Delete account added --- .../main/java/com/getcode/view/SheetNav.kt | 12 ++++ .../view/main/account/ConfirmDeleteAccount.kt | 68 +++++++++++++++++++ .../view/main/account/DeleteAccount.kt | 4 +- .../main/account/DeleteAccountViewModel.kt | 8 +++ 4 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt diff --git a/app/src/main/java/com/getcode/view/SheetNav.kt b/app/src/main/java/com/getcode/view/SheetNav.kt index 86109f784..9438ce95b 100644 --- a/app/src/main/java/com/getcode/view/SheetNav.kt +++ b/app/src/main/java/com/getcode/view/SheetNav.kt @@ -28,6 +28,7 @@ import com.getcode.view.main.account.AccountPage.FAQ import com.getcode.view.main.account.AccountPage.PHONE import com.getcode.view.main.account.AccountPage.WITHDRAW import com.getcode.view.main.account.AccountPhone +import com.getcode.view.main.account.ConfirmDeleteAccount import com.getcode.view.main.account.DeleteCodeAccount import com.getcode.view.main.account.withdraw.AccountWithdrawAddress import com.getcode.view.main.account.withdraw.AccountWithdrawAmount @@ -113,6 +114,13 @@ fun NavGraphBuilder.addSheetGraph( onTitleChange(SheetSections.DELETE_ACCOUNT.title) DeleteCodeAccount(navController) } + composableItem( + route = SheetSections.CONFIRM_DELETE_ACCOUNT.route + ) { + onBackButtonVisibilityChange(true) + onTitleChange(SheetSections.CONFIRM_DELETE_ACCOUNT.title) + ConfirmDeleteAccount(navController) + } composableItem( route = SheetSections.FAQ.route, ) { @@ -289,6 +297,10 @@ enum class SheetSections( title = R.string.action_deleteAccount, route = "sheet/deleteAccount" ), + CONFIRM_DELETE_ACCOUNT( + title = R.string.action_deleteAccount, + route = "sheet/confirmDeleteAccount" + ), PHONE_VERIFY( title = R.string.title_enterPhoneNumber, route = "login/verifyPhone?" + diff --git a/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt b/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt new file mode 100644 index 000000000..2868f29f4 --- /dev/null +++ b/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt @@ -0,0 +1,68 @@ +package com.getcode.view.main.account + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.material.TextField +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavController +import com.getcode.R +import com.getcode.theme.inputColors +import com.getcode.view.components.ButtonState +import com.getcode.view.components.CodeButton + +@Composable +fun ConfirmDeleteAccount(navController: NavController) { + val viewModel = hiltViewModel() + Column(Modifier.padding(20.dp).imePadding(), verticalArrangement = Arrangement.spacedBy(10.dp)) { + Text( + text = stringResource(id = R.string.subtitle_deleteAccountDescription), + style = MaterialTheme.typography.subtitle2 + ) + TextField( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight(), + placeholder = { + Text( + stringResource(id = R.string.subtitle_typeDelete).format(viewModel.requiredPhrase), + style = MaterialTheme.typography.subtitle1.copy( + fontSize = 16.sp, + ) + ) + }, + value = viewModel.typedText.collectAsState().value, + onValueChange = { + viewModel.onTextUpdated(it) + }, + textStyle = MaterialTheme.typography.subtitle1.copy( + fontSize = 16.sp, + ), + singleLine = true, + colors = inputColors(), + shape = RoundedCornerShape(size = 5.dp) + ) + Spacer(modifier = Modifier.weight(1f)) + CodeButton( + onClick = { + + }, + text = stringResource(R.string.action_deleteAccount), + buttonState = ButtonState.Filled, + enabled = viewModel.isDeletionAllowed() + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt b/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt index f3060c70a..b84fa910c 100644 --- a/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt +++ b/app/src/main/java/com/getcode/view/main/account/DeleteAccount.kt @@ -10,16 +10,15 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController import com.getcode.R +import com.getcode.view.SheetSections import com.getcode.view.components.ButtonState import com.getcode.view.components.CodeButton import com.getcode.view.components.TextSection @Composable fun DeleteCodeAccount(navController: NavController) { - val viewModel = hiltViewModel() Column(Modifier.padding(20.dp)) { LazyColumn( modifier = Modifier.weight(1f), @@ -52,6 +51,7 @@ fun DeleteCodeAccount(navController: NavController) { } CodeButton( onClick = { + navController.navigate(SheetSections.CONFIRM_DELETE_ACCOUNT.route) }, text = stringResource(R.string.action_continue), buttonState = ButtonState.Filled, diff --git a/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt b/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt index 83116de7a..88f8441be 100644 --- a/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt +++ b/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt @@ -2,10 +2,18 @@ package com.getcode.view.main.account import com.getcode.view.BaseViewModel import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow import javax.inject.Inject @HiltViewModel class DeleteAccountViewModel @Inject constructor() : BaseViewModel() { + val requiredPhrase = "Delete" + val typedText = MutableStateFlow("") + fun onTextUpdated(text: String) { + typedText.value = text + } + + fun isDeletionAllowed() = typedText.value.equals(requiredPhrase, ignoreCase = true) } \ No newline at end of file From f831639e1cfba7825d88d07a3659877d6d41aba3 Mon Sep 17 00:00:00 2001 From: Maninder T Date: Sun, 10 Dec 2023 15:52:07 -0500 Subject: [PATCH 06/10] Confirm dialog added --- .../com/getcode/manager/BottomBarManager.kt | 2 +- .../view/main/account/ConfirmDeleteAccount.kt | 26 ++++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/com/getcode/manager/BottomBarManager.kt b/api/src/main/java/com/getcode/manager/BottomBarManager.kt index ab17e2f3a..098b1cf7b 100644 --- a/api/src/main/java/com/getcode/manager/BottomBarManager.kt +++ b/api/src/main/java/com/getcode/manager/BottomBarManager.kt @@ -11,7 +11,7 @@ import kotlin.concurrent.timerTask object BottomBarManager { data class BottomBarMessage( val title: String, - val subtitle: String, + val subtitle: String = "", val positiveText: String, val negativeText: String, val tertiaryText: String? = null, diff --git a/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt b/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt index 2868f29f4..34e3a356b 100644 --- a/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt +++ b/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt @@ -19,7 +19,9 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController +import com.getcode.App import com.getcode.R +import com.getcode.manager.BottomBarManager import com.getcode.theme.inputColors import com.getcode.view.components.ButtonState import com.getcode.view.components.CodeButton @@ -27,7 +29,12 @@ import com.getcode.view.components.CodeButton @Composable fun ConfirmDeleteAccount(navController: NavController) { val viewModel = hiltViewModel() - Column(Modifier.padding(20.dp).imePadding(), verticalArrangement = Arrangement.spacedBy(10.dp)) { + Column( + Modifier + .padding(20.dp) + .imePadding(), + verticalArrangement = Arrangement.spacedBy(10.dp) + ) { Text( text = stringResource(id = R.string.subtitle_deleteAccountDescription), style = MaterialTheme.typography.subtitle2 @@ -57,12 +64,23 @@ fun ConfirmDeleteAccount(navController: NavController) { ) Spacer(modifier = Modifier.weight(1f)) CodeButton( - onClick = { - - }, + onClick = { showConfirmDeletionBanner() }, text = stringResource(R.string.action_deleteAccount), buttonState = ButtonState.Filled, enabled = viewModel.isDeletionAllowed() ) } +} + +fun showConfirmDeletionBanner() { + BottomBarManager.showMessage( + BottomBarManager.BottomBarMessage( + title = App.getInstance() + .getString(R.string.prompt_title_deleteAccount), + positiveText = App.getInstance() + .getString(R.string.action_deleteAccount), + negativeText = App.getInstance().getString(R.string.action_cancel), + onPositive = { }, + onNegative = { } + )) } \ No newline at end of file From 6d07f304683784842cc4093fb5e695caaf5be8da Mon Sep 17 00:00:00 2001 From: Maninder T Date: Sun, 10 Dec 2023 15:59:36 -0500 Subject: [PATCH 07/10] Account deletion connections --- .../view/main/account/ConfirmDeleteAccount.kt | 15 ++++++++++++--- .../view/main/account/DeleteAccountViewModel.kt | 11 ++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt b/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt index 34e3a356b..fb6406b48 100644 --- a/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt +++ b/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt @@ -14,6 +14,7 @@ import androidx.compose.material.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -23,12 +24,14 @@ import com.getcode.App import com.getcode.R import com.getcode.manager.BottomBarManager import com.getcode.theme.inputColors +import com.getcode.util.getActivity import com.getcode.view.components.ButtonState import com.getcode.view.components.CodeButton @Composable fun ConfirmDeleteAccount(navController: NavController) { val viewModel = hiltViewModel() + val context = LocalContext.current Column( Modifier .padding(20.dp) @@ -64,7 +67,13 @@ fun ConfirmDeleteAccount(navController: NavController) { ) Spacer(modifier = Modifier.weight(1f)) CodeButton( - onClick = { showConfirmDeletionBanner() }, + onClick = { + showConfirmDeletionBanner(onConfirm = { + context.getActivity()?.let { + viewModel.onConfirmDelete(it) + } + }) + }, text = stringResource(R.string.action_deleteAccount), buttonState = ButtonState.Filled, enabled = viewModel.isDeletionAllowed() @@ -72,7 +81,7 @@ fun ConfirmDeleteAccount(navController: NavController) { } } -fun showConfirmDeletionBanner() { +fun showConfirmDeletionBanner(onConfirm: () -> Unit) { BottomBarManager.showMessage( BottomBarManager.BottomBarMessage( title = App.getInstance() @@ -80,7 +89,7 @@ fun showConfirmDeletionBanner() { positiveText = App.getInstance() .getString(R.string.action_deleteAccount), negativeText = App.getInstance().getString(R.string.action_cancel), - onPositive = { }, + onPositive = onConfirm, onNegative = { } )) } \ No newline at end of file diff --git a/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt b/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt index 88f8441be..42101b5a6 100644 --- a/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt +++ b/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt @@ -1,5 +1,7 @@ package com.getcode.view.main.account +import android.app.Activity +import com.getcode.manager.AuthManager import com.getcode.view.BaseViewModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow @@ -7,7 +9,9 @@ import javax.inject.Inject @HiltViewModel -class DeleteAccountViewModel @Inject constructor() : BaseViewModel() { +class DeleteAccountViewModel @Inject constructor( + private val authManager: AuthManager +) : BaseViewModel() { val requiredPhrase = "Delete" val typedText = MutableStateFlow("") @@ -16,4 +20,9 @@ class DeleteAccountViewModel @Inject constructor() : BaseViewModel() { } fun isDeletionAllowed() = typedText.value.equals(requiredPhrase, ignoreCase = true) + + fun onConfirmDelete(activity: Activity) { + //todo: delete account + authManager.logout(activity) + } } \ No newline at end of file From 03f5e6249a0e3a408c111c1f2c16c845eb65151b Mon Sep 17 00:00:00 2001 From: Maninder T Date: Sun, 10 Dec 2023 16:09:38 -0500 Subject: [PATCH 08/10] linking account deletion repo --- app/src/main/java/com/getcode/manager/AuthManager.kt | 5 +++++ .../com/getcode/view/main/account/DeleteAccountViewModel.kt | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/getcode/manager/AuthManager.kt b/app/src/main/java/com/getcode/manager/AuthManager.kt index 7a53ed651..68f75c413 100644 --- a/app/src/main/java/com/getcode/manager/AuthManager.kt +++ b/app/src/main/java/com/getcode/manager/AuthManager.kt @@ -132,6 +132,11 @@ class AuthManager @Inject constructor( .ignoreElement() } + fun deleteAndLogout(activity: Activity, onComplete: () -> Unit = {}) { + //todo: add account deletion + logout(activity, onComplete) + } + fun logout(activity: Activity, onComplete: () -> Unit = {}) { AccountUtils.removeAccounts(activity) .doOnSuccess { res: Boolean -> diff --git a/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt b/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt index 42101b5a6..bd9681b3b 100644 --- a/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt +++ b/app/src/main/java/com/getcode/view/main/account/DeleteAccountViewModel.kt @@ -22,7 +22,6 @@ class DeleteAccountViewModel @Inject constructor( fun isDeletionAllowed() = typedText.value.equals(requiredPhrase, ignoreCase = true) fun onConfirmDelete(activity: Activity) { - //todo: delete account - authManager.logout(activity) + authManager.deleteAndLogout(activity) } } \ No newline at end of file From 38c160850fcf2e2b46b4e7cc6e566e0cff96bd39 Mon Sep 17 00:00:00 2001 From: Maninder T Date: Sun, 10 Dec 2023 16:19:15 -0500 Subject: [PATCH 09/10] Auto hide keyboard --- .../getcode/view/main/account/ConfirmDeleteAccount.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt b/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt index fb6406b48..9f99a9c57 100644 --- a/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt +++ b/app/src/main/java/com/getcode/view/main/account/ConfirmDeleteAccount.kt @@ -13,8 +13,10 @@ import androidx.compose.material.Text import androidx.compose.material.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -28,10 +30,12 @@ import com.getcode.util.getActivity import com.getcode.view.components.ButtonState import com.getcode.view.components.CodeButton +@OptIn(ExperimentalComposeUiApi::class) @Composable fun ConfirmDeleteAccount(navController: NavController) { val viewModel = hiltViewModel() val context = LocalContext.current + val keyboardController = LocalSoftwareKeyboardController.current Column( Modifier .padding(20.dp) @@ -68,10 +72,9 @@ fun ConfirmDeleteAccount(navController: NavController) { Spacer(modifier = Modifier.weight(1f)) CodeButton( onClick = { + keyboardController?.hide() showConfirmDeletionBanner(onConfirm = { - context.getActivity()?.let { - viewModel.onConfirmDelete(it) - } + context.getActivity()?.let { viewModel.onConfirmDelete(it) } }) }, text = stringResource(R.string.action_deleteAccount), From fd1912435eb7081156d813be28d8be18bcb57294 Mon Sep 17 00:00:00 2001 From: Maninder T Date: Mon, 11 Dec 2023 16:31:04 -0500 Subject: [PATCH 10/10] fixed rebase --- app/src/main/java/com/getcode/view/SheetNav.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/getcode/view/SheetNav.kt b/app/src/main/java/com/getcode/view/SheetNav.kt index 9438ce95b..7b8b4bcd3 100644 --- a/app/src/main/java/com/getcode/view/SheetNav.kt +++ b/app/src/main/java/com/getcode/view/SheetNav.kt @@ -27,6 +27,7 @@ import com.getcode.view.main.account.AccountPage.DEPOSIT import com.getcode.view.main.account.AccountPage.FAQ import com.getcode.view.main.account.AccountPage.PHONE import com.getcode.view.main.account.AccountPage.WITHDRAW +import com.getcode.view.main.account.AccountPage.BUY_AND_SELL_KIN import com.getcode.view.main.account.AccountPhone import com.getcode.view.main.account.ConfirmDeleteAccount import com.getcode.view.main.account.DeleteCodeAccount