Skip to content

Commit

Permalink
Add Used Change Addresses in Receive page
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaelekol committed Jan 12, 2024
1 parent d2bef0f commit e0376c2
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class DepositAddressViewModel(
viewState = viewState,
address = address,
usedAddresses = listOf(),
usedChangeAddresses = listOf(),
uri = uri,
networkName = networkName,
watchAccount = watchAccount,
Expand Down Expand Up @@ -80,6 +81,7 @@ class DepositAddressViewModel(
viewState = viewState,
address = address,
usedAddresses = listOf(),
usedChangeAddresses = listOf(),
uri = uri,
networkName = networkName,
watchAccount = watchAccount,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ fun CexDepositScreen(
type = "text/plain"
})
},
showUsedAddresses = { usedAddresses ->
viewModel.usedAddressesParams = UsedAddressesParams(cexAsset.name, usedAddresses)
showUsedAddresses = { usedAddresses, usedChangeAddresses ->
viewModel.usedAddressesParams = UsedAddressesParams(cexAsset.name, usedAddresses, usedChangeAddresses)
navController.navigate(USED_ADDRESS_SCREEN)
},
onBackPress = navigateBack(fragmentNavController, navController),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ fun ReceiveScreen(
type = "text/plain"
})
},
showUsedAddresses = { usedAddresses ->
viewModel.usedAddressesParams = UsedAddressesParams(walletNonNull.coin.name, usedAddresses)
showUsedAddresses = { usedAddresses, usedChangeAddresses ->
viewModel.usedAddressesParams = UsedAddressesParams(walletNonNull.coin.name, usedAddresses, usedChangeAddresses)
navController.navigate(USED_ADDRESSES_SCREEN)
},
onBackPress = navigateBack(fragmentNavController, navController),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ object ReceiveModule {
val viewState: ViewState,
val address: String,
val usedAddresses: List<UsedAddress>,
val usedChangeAddresses: List<UsedAddress>,
val uri: String,
val networkName: String,
val watchAccount: Boolean,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ fun ReceiveAddressScreen(
setAmount: (BigDecimal?) -> Unit,
onErrorClick: () -> Unit = {},
onShareClick: (String) -> Unit,
showUsedAddresses: (List<UsedAddress>) -> Unit,
showUsedAddresses: (List<UsedAddress>, List<UsedAddress>) -> Unit,
onBackPress: () -> Unit,
closeModule: () -> Unit,
) {
Expand Down Expand Up @@ -254,7 +254,7 @@ fun ReceiveAddressScreen(
RowUniversal(
modifier = Modifier.height(48.dp),
onClick = {
showUsedAddresses.invoke(uiState.usedAddresses)
showUsedAddresses.invoke(uiState.usedAddresses, uiState.usedChangeAddresses)
}
) {
subhead2_grey(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
package io.horizontalsystems.bankwallet.modules.receive.ui

import androidx.annotation.StringRes
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
Expand All @@ -26,6 +33,8 @@ import io.horizontalsystems.bankwallet.ui.compose.components.HSpacer
import io.horizontalsystems.bankwallet.ui.compose.components.HsBackButton
import io.horizontalsystems.bankwallet.ui.compose.components.InfoText
import io.horizontalsystems.bankwallet.ui.compose.components.RowUniversal
import io.horizontalsystems.bankwallet.ui.compose.components.TabItem
import io.horizontalsystems.bankwallet.ui.compose.components.Tabs
import io.horizontalsystems.bankwallet.ui.compose.components.VSpacer
import io.horizontalsystems.bankwallet.ui.compose.components.subhead2_grey
import io.horizontalsystems.bankwallet.ui.compose.components.subhead2_leah
Expand All @@ -35,14 +44,25 @@ import io.horizontalsystems.core.helpers.HudHelper

data class UsedAddressesParams(
val coinName: String,
val usedAddresses: List<UsedAddress>
val usedAddresses: List<UsedAddress>,
val usedChangeAddresses: List<UsedAddress>
)

enum class UsedAddressTab(@StringRes val titleResId: Int) {
ReceiveAddress(R.string.Balance_Receive_ReceiveAddresses),
ChangeAddress(R.string.Balance_Receive_ChangeAddresses);
}

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun UsedAddressScreen(
params: UsedAddressesParams,
onBackPress: () -> Unit
) {
val tabs = UsedAddressTab.values()
var selectedTab by remember { mutableStateOf(UsedAddressTab.ReceiveAddress) }
val pagerState = rememberPagerState(initialPage = selectedTab.ordinal) { tabs.size }

Scaffold(
backgroundColor = ComposeAppTheme.colors.tyler,
topBar = {
Expand All @@ -51,7 +71,6 @@ fun UsedAddressScreen(
navigationIcon = {
HsBackButton(onClick = onBackPress)
}

)
}
) {
Expand All @@ -64,22 +83,51 @@ fun UsedAddressScreen(
) {

InfoText(text = stringResource(id = R.string.Balance_Receive_UsedAddressesDescriptoin, params.coinName))
Spacer(Modifier.height(12.dp))

CellUniversalLawrenceSection(
buildList {
for (item in params.usedAddresses)
add {
TransactionInfoAddressCell(index = item.index.toString(), address = item.address, explorerUrl = item.explorerUrl)
}

VSpacer(12.dp)

LaunchedEffect(key1 = selectedTab, block = {
pagerState.scrollToPage(selectedTab.ordinal)
})
val tabItems = tabs.map {
TabItem(stringResource(id = it.titleResId), it == selectedTab, it)
}
Tabs(tabItems, onClick = { selectedTab = it })

VSpacer(12.dp)

HorizontalPager(
state = pagerState,
userScrollEnabled = false
) { page ->
when (tabs[page]) {
UsedAddressTab.ReceiveAddress -> AddressList(params.usedAddresses)

UsedAddressTab.ChangeAddress -> AddressList(params.usedChangeAddresses)
}
)
}

VSpacer(24.dp)
}
}
}

@Composable
private fun AddressList(usedAddresses: List<UsedAddress>) {
CellUniversalLawrenceSection(
buildList {
for (item in usedAddresses)
add {
TransactionInfoAddressCell(
index = item.index.plus(1).toString(),
address = item.address,
explorerUrl = item.explorerUrl
)
}
}
)
}

@Composable
fun TransactionInfoAddressCell(
index: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class ReceiveAddressViewModel(
private var viewState: ViewState = ViewState.Loading
private var address = ""
private var usedAddresses: List<UsedAddress> = listOf()
private var usedChangeAddresses: List<UsedAddress> = listOf()
private var uri = ""
private var amount: BigDecimal? = null
private var accountActive = true
Expand All @@ -44,6 +45,7 @@ class ReceiveAddressViewModel(
viewState = viewState,
address = address,
usedAddresses = usedAddresses,
usedChangeAddresses = usedChangeAddresses,
uri = uri,
networkName = networkName,
watchAccount = watchAccount,
Expand Down Expand Up @@ -104,6 +106,7 @@ class ReceiveAddressViewModel(
if (adapter != null) {
address = adapter.receiveAddress
usedAddresses = adapter.usedAddresses(false)
usedChangeAddresses = adapter.usedAddresses(true)
uri = getUri()
accountActive = adapter.isAccountActive
mainNet = adapter.isMainNet
Expand Down Expand Up @@ -136,6 +139,7 @@ class ReceiveAddressViewModel(
viewState = viewState,
address = address,
usedAddresses = usedAddresses,
usedChangeAddresses = usedChangeAddresses,
uri = uri,
networkName = networkName,
watchAccount = watchAccount,
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,8 @@
<string name="Balance_Receive_AddressMemoAlert">Provide required Memo (Tag) and send only network-compatible tokens. Others will be lost.</string>
<string name="Balance_Receive_UsedAddresses">Used Addresses</string>
<string name="Balance_Receive_UsedAddressesDescriptoin">%s addresses change for privacy and security. Below a list of used addresses in this wallet.</string>
<string name="Balance_Receive_ReceiveAddresses">Receive Addresses</string>
<string name="Balance_Receive_ChangeAddresses">Change Addresses</string>

<!--Send NFT-->
<string name="SendNft_Title">Send</string>
Expand Down

0 comments on commit e0376c2

Please sign in to comment.