Skip to content

Commit

Permalink
Merge pull request #1007 from radixdlt/feature/ABW-3214-actionable-ad…
Browse files Browse the repository at this point in the history
…dress-modal

Actionable address modal
  • Loading branch information
micbakos-rdx committed Jul 2, 2024
2 parents d399288 + c6fe399 commit 079ee08
Show file tree
Hide file tree
Showing 30 changed files with 2,102 additions and 788 deletions.
17 changes: 17 additions & 0 deletions app/src/main/java/com/babylon/wallet/android/WalletApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import com.babylon.wallet.android.presentation.mobileconnect.mobileConnect
import com.babylon.wallet.android.presentation.navigation.NavigationHost
import com.babylon.wallet.android.presentation.navigation.PriorityRoutes
import com.babylon.wallet.android.presentation.rootdetection.ROUTE_ROOT_DETECTION
import com.babylon.wallet.android.presentation.status.address.addressDetails
import com.babylon.wallet.android.presentation.status.dapp.dappInteractionDialog
import com.babylon.wallet.android.presentation.status.transaction.transactionStatusDialog
import com.babylon.wallet.android.presentation.transaction.transactionReview
Expand Down Expand Up @@ -123,6 +124,10 @@ fun WalletApp(
navController = navController,
statusEvents = mainViewModel.statusEvents
)
HandleAddressDetailsEvents(
navController = navController,
addressDetailsEvents = mainViewModel.addressDetailsEvents
)
ObserveHighPriorityScreens(
navController = navController,
onLowPriorityScreen = mainViewModel::onLowPriorityScreen,
Expand Down Expand Up @@ -240,6 +245,18 @@ private fun HandleStatusEvents(
}
}

@Composable
private fun HandleAddressDetailsEvents(
navController: NavController,
addressDetailsEvents: Flow<AppEvent.AddressDetails>
) {
LaunchedEffect(Unit) {
addressDetailsEvents.collect { event ->
navController.addressDetails(actionableAddress = event.address)
}
}
}

@Composable
private fun ObserveHighPriorityScreens(
navController: NavController,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.babylon.wallet.android.domain.usecases.assets

import com.babylon.wallet.android.data.repository.state.StateRepository
import com.radixdlt.sargon.PoolAddress
import javax.inject.Inject

class GetPoolsUseCase @Inject constructor(private val stateRepository: StateRepository) {

suspend operator fun invoke(poolAddresses: Set<PoolAddress>) = stateRepository.getPools(poolAddresses)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.babylon.wallet.android.domain.usecases.assets

import com.babylon.wallet.android.data.repository.state.StateRepository
import com.radixdlt.sargon.ValidatorAddress
import javax.inject.Inject

class GetValidatorsUseCase @Inject constructor(private val stateRepository: StateRepository) {

suspend operator fun invoke(validatorAddresses: Set<ValidatorAddress>) = stateRepository.getValidators(validatorAddresses)
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.babylon.wallet.android.presentation.ui.composables.ExpandableText
import com.babylon.wallet.android.presentation.ui.composables.actionableaddress.ActionableAddressView
import com.babylon.wallet.android.utils.openUrl
import com.radixdlt.sargon.Address
import com.radixdlt.sargon.AddressFormat
import com.radixdlt.sargon.NonFungibleGlobalId
import com.radixdlt.sargon.NonFungibleLocalId
import com.radixdlt.sargon.extensions.formatted
Expand Down Expand Up @@ -177,11 +178,15 @@ fun Metadata.ValueView(
}
)

MetadataType.NonFungibleLocalId -> ActionableAddressView(
MetadataType.NonFungibleLocalId -> Text(
modifier = modifier,
localId = remember(value) {
NonFungibleLocalId.init(value)
}
text = remember(value) {
NonFungibleLocalId.init(value).formatted(AddressFormat.DEFAULT)
},
style = RadixTheme.typography.body1HighImportance,
color = RadixTheme.colors.gray1,
textAlign = if (isRenderedInNewLine) TextAlign.Start else TextAlign.End,
maxLines = 2
)

MetadataType.Decimal -> Text(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,20 +46,18 @@ import com.babylon.wallet.android.designsystem.theme.RadixWalletTheme
import com.babylon.wallet.android.domain.usecases.FaucetState
import com.babylon.wallet.android.presentation.account.settings.thirdpartydeposits.getDepositRuleCopiesAndIcon
import com.babylon.wallet.android.presentation.common.UiMessage
import com.babylon.wallet.android.presentation.ui.composables.AccountQRCodeView
import com.babylon.wallet.android.presentation.ui.composables.BasicPromptAlertDialog
import com.babylon.wallet.android.presentation.ui.composables.BottomDialogHeader
import com.babylon.wallet.android.presentation.ui.composables.DefaultModalSheetLayout
import com.babylon.wallet.android.presentation.ui.composables.DefaultSettingsItem
import com.babylon.wallet.android.presentation.ui.composables.RadixCenteredTopAppBar
import com.babylon.wallet.android.presentation.ui.composables.RadixSnackbarHost
import com.babylon.wallet.android.presentation.ui.composables.SimpleAccountCard
import com.babylon.wallet.android.presentation.ui.composables.SnackbarUIMessage
import com.babylon.wallet.android.presentation.ui.composables.WarningButton
import com.babylon.wallet.android.presentation.ui.composables.actionableaddress.ActionableAddressView
import com.babylon.wallet.android.utils.BiometricAuthenticationResult
import com.babylon.wallet.android.utils.biometricAuthenticate
import com.radixdlt.sargon.Account
import com.radixdlt.sargon.AccountAddress
import com.radixdlt.sargon.Address
import com.radixdlt.sargon.DepositRule
import com.radixdlt.sargon.annotation.UsesSampleValues
import com.radixdlt.sargon.samples.sampleMainnet
Expand Down Expand Up @@ -127,24 +125,20 @@ fun AccountSettingsScreen(
onMessageShown = viewModel::onMessageShown,
error = state.error,
accountName = state.accountName,
account = state.account,
onShowRenameAccountClick = {
scope.launch {
viewModel.setBottomSheetContentToRenameAccount()
bottomSheetState.show()
}
},
onShowAddressQRCodeClick = {
scope.launch {
viewModel.setBottomSheetContentToAddressQRCode()
bottomSheetState.show()
}
},
modifier = Modifier.navigationBarsPadding(),
settingsSections = state.settingsSections,
onSettingClick = {
onSettingItemClick(it, state.accountAddress)
onSettingClick = { item ->
state.account?.address?.let { accountAddress ->
onSettingItemClick(item, accountAddress)
}
},
accountAddress = state.accountAddress,
onGetFreeXrdClick = viewModel::onGetFreeXrdClick,
faucetState = state.faucetState,
isXrdLoading = state.isFreeXRDLoading,
Expand Down Expand Up @@ -184,22 +178,10 @@ fun AccountSettingsScreen(
)
}

AccountPreferenceUiState.BottomSheetContent.AddressQRCode -> {
AddressQRCodeSheet(
accountAddress = state.accountAddress,
dismissAddressQRCodeSheet = {
scope.launch {
bottomSheetState.hide()
viewModel.resetBottomSheetContent()
}
}
)
}

AccountPreferenceUiState.BottomSheetContent.None -> {}
}
},
showDragHandle = state.bottomSheetContent == AccountPreferenceUiState.BottomSheetContent.AddressQRCode,
showDragHandle = false,
onDismissRequest = {
scope.launch {
bottomSheetState.hide()
Expand All @@ -215,13 +197,12 @@ private fun AccountSettingsContent(
onBackClick: () -> Unit,
onMessageShown: () -> Unit,
error: UiMessage?,
account: Account?,
accountName: String,
onShowRenameAccountClick: () -> Unit,
onShowAddressQRCodeClick: () -> Unit,
modifier: Modifier = Modifier,
settingsSections: ImmutableList<AccountSettingsSection>,
onSettingClick: (AccountSettingItem) -> Unit,
accountAddress: AccountAddress,
onGetFreeXrdClick: () -> Unit,
faucetState: FaucetState,
isXrdLoading: Boolean,
Expand Down Expand Up @@ -257,24 +238,15 @@ private fun AccountSettingsContent(
.background(RadixTheme.colors.gray5)
) {
item {
ActionableAddressView(
address = Address.Account(accountAddress),
modifier = Modifier.padding(
horizontal = RadixTheme.dimensions.paddingLarge,
vertical = RadixTheme.dimensions.paddingSmall
),
textStyle = RadixTheme.typography.body2Regular,
textColor = RadixTheme.colors.gray2,
truncateAddress = false
)
RadixSecondaryButton(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = RadixTheme.dimensions.paddingLarge),
text = stringResource(R.string.addressAction_showAccountQR),
onClick = onShowAddressQRCodeClick
)
Spacer(modifier = Modifier.height(RadixTheme.dimensions.paddingLarge))
account?.let {
SimpleAccountCard(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = RadixTheme.dimensions.paddingDefault)
.padding(top = RadixTheme.dimensions.paddingDefault),
account = account
)
}
}
settingsSections.forEach { section ->
item {
Expand Down Expand Up @@ -304,9 +276,11 @@ private fun AccountSettingsContent(
AccountSettingItem.AccountLabel -> {
accountName
}

is AccountSettingItem.ThirdPartyDeposits -> {
getDepositRuleCopiesAndIcon(depositRule = settingsItem.defaultDepositRule).first
}

else -> {
stringResource(id = settingsItem.subtitleRes())
}
Expand Down Expand Up @@ -453,28 +427,6 @@ private fun RenameAccountSheet(
}
}

@Composable
private fun AddressQRCodeSheet(
accountAddress: AccountAddress,
dismissAddressQRCodeSheet: () -> Unit
) {
Column(modifier = Modifier.navigationBarsPadding()) {
BottomDialogHeader(
modifier = Modifier
.fillMaxWidth()
.background(
color = RadixTheme.colors.defaultBackground,
shape = RadixTheme.shapes.roundedRectTopDefault
),
onDismissRequest = {
dismissAddressQRCodeSheet()
}
)

AccountQRCodeView(accountAddress = accountAddress)
}
}

@UsesSampleValues
@Preview(showBackground = true)
@Composable
Expand All @@ -484,9 +436,9 @@ fun AccountSettingsPreview() {
onBackClick = {},
onMessageShown = {},
error = null,
accountName = "my cool account",
account = Account.sampleMainnet(),
accountName = Account.sampleMainnet().displayName.value,
onShowRenameAccountClick = {},
onShowAddressQRCodeClick = {},
settingsSections = persistentListOf(
AccountSettingsSection.AccountSection(
listOf(
Expand All @@ -496,7 +448,6 @@ fun AccountSettingsPreview() {
)
),
onSettingClick = {},
accountAddress = AccountAddress.sampleMainnet.random(),
onGetFreeXrdClick = {},
faucetState = FaucetState.Available(isEnabled = true),
isXrdLoading = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import com.babylon.wallet.android.presentation.common.UiState
import com.babylon.wallet.android.utils.AppEvent
import com.babylon.wallet.android.utils.AppEventBus
import com.radixdlt.sargon.Account
import com.radixdlt.sargon.AccountAddress
import com.radixdlt.sargon.DepositRule
import com.radixdlt.sargon.DisplayName
import dagger.hilt.android.lifecycle.HiltViewModel
Expand Down Expand Up @@ -49,9 +48,7 @@ class AccountSettingsViewModel @Inject constructor(

private val args = AccountSettingsArgs(savedStateHandle)

override fun initialState(): AccountPreferenceUiState = AccountPreferenceUiState(
accountAddress = args.address,
)
override fun initialState(): AccountPreferenceUiState = AccountPreferenceUiState()

init {
loadAccount()
Expand Down Expand Up @@ -146,12 +143,6 @@ class AccountSettingsViewModel @Inject constructor(
}
}

fun setBottomSheetContentToAddressQRCode() {
_state.update {
it.copy(bottomSheetContent = AccountPreferenceUiState.BottomSheetContent.AddressQRCode)
}
}

fun resetBottomSheetContent() {
_state.update {
it.copy(bottomSheetContent = AccountPreferenceUiState.BottomSheetContent.None)
Expand Down Expand Up @@ -183,7 +174,8 @@ class AccountSettingsViewModel @Inject constructor(

fun onHideAccount() {
viewModelScope.launch {
changeEntityVisibilityUseCase.hideAccount(state.value.accountAddress)
val account = state.value.account ?: return@launch
changeEntityVisibilityUseCase.hideAccount(account.address)
sendEvent(Event.AccountHidden)
}
}
Expand All @@ -196,7 +188,6 @@ sealed interface Event : OneOffEvent {
data class AccountPreferenceUiState(
val settingsSections: ImmutableList<AccountSettingsSection> = defaultSettings,
val account: Account? = null,
val accountAddress: AccountAddress,
val accountName: String = "",
val accountNameChanged: String = "",
val isNewNameValid: Boolean = false,
Expand All @@ -211,7 +202,7 @@ data class AccountPreferenceUiState(
get() = bottomSheetContent != BottomSheetContent.None

enum class BottomSheetContent {
None, RenameAccount, AddressQRCode
None, RenameAccount
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ class MainViewModel @Inject constructor(
.events
.filterIsInstance<AppEvent.Status>()

val addressDetailsEvents = appEventBus
.events
.filterIsInstance<AppEvent.AddressDetails>()

val accessFactorSourcesEvents = appEventBus
.events
.filterIsInstance<AppEvent.AccessFactorSources>()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ import com.babylon.wallet.android.presentation.settings.securitycenter.seedphras
import com.babylon.wallet.android.presentation.settings.settingsNavGraph
import com.babylon.wallet.android.presentation.settings.troubleshooting.accountrecoveryscan.scan.accountRecoveryScan
import com.babylon.wallet.android.presentation.settings.troubleshooting.accountrecoveryscan.scancomplete.recoveryScanComplete
import com.babylon.wallet.android.presentation.status.address.addressDetails
import com.babylon.wallet.android.presentation.status.assets.assetDialog
import com.babylon.wallet.android.presentation.status.assets.fungibleAssetDialog
import com.babylon.wallet.android.presentation.status.assets.nftAssetDialog
Expand Down Expand Up @@ -518,6 +519,11 @@ fun NavigationHost(
navController.popBackStack()
}
)
addressDetails(
onDismiss = {
navController.popBackStack()
}
)
recoveryScanComplete(
onContinueClick = {
navController.popBackStack(MAIN_ROUTE, false)
Expand Down
Loading

0 comments on commit 079ee08

Please sign in to comment.