2022-12-23 02:00:37 -08:00
|
|
|
package cash.z.ecc.android.sdk.demoapp.ui.screen.addresses.view
|
|
|
|
|
|
|
|
import androidx.compose.foundation.clickable
|
|
|
|
import androidx.compose.foundation.layout.Column
|
|
|
|
import androidx.compose.foundation.layout.PaddingValues
|
|
|
|
import androidx.compose.foundation.layout.Spacer
|
|
|
|
import androidx.compose.foundation.layout.padding
|
|
|
|
import androidx.compose.foundation.rememberScrollState
|
|
|
|
import androidx.compose.foundation.verticalScroll
|
|
|
|
import androidx.compose.material.icons.Icons
|
2024-04-15 08:43:19 -07:00
|
|
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
2022-12-23 02:00:37 -08:00
|
|
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
|
|
|
import androidx.compose.material3.Icon
|
|
|
|
import androidx.compose.material3.IconButton
|
2023-06-22 07:19:13 -07:00
|
|
|
import androidx.compose.material3.MaterialTheme
|
2022-12-23 02:00:37 -08:00
|
|
|
import androidx.compose.material3.Scaffold
|
2023-01-09 05:12:04 -08:00
|
|
|
import androidx.compose.material3.SnackbarHost
|
|
|
|
import androidx.compose.material3.SnackbarHostState
|
2022-12-23 02:00:37 -08:00
|
|
|
import androidx.compose.material3.Text
|
|
|
|
import androidx.compose.material3.TopAppBar
|
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
import androidx.compose.runtime.collectAsState
|
|
|
|
import androidx.compose.ui.Modifier
|
|
|
|
import androidx.compose.ui.res.stringResource
|
2023-06-22 07:19:13 -07:00
|
|
|
import androidx.compose.ui.tooling.preview.Preview
|
2022-12-23 02:00:37 -08:00
|
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
import cash.z.ecc.android.sdk.Synchronizer
|
|
|
|
import cash.z.ecc.android.sdk.demoapp.R
|
2023-02-06 06:41:38 -08:00
|
|
|
import cash.z.ecc.android.sdk.model.WalletAddresses
|
2022-12-23 02:00:37 -08:00
|
|
|
import kotlinx.coroutines.flow.flow
|
|
|
|
|
2023-06-22 07:19:13 -07:00
|
|
|
@Preview(name = "Addresses")
|
|
|
|
@Composable
|
2024-01-04 12:21:32 -08:00
|
|
|
@Suppress("ktlint:standard:function-naming")
|
2023-06-22 07:19:13 -07:00
|
|
|
private fun ComposablePreview() {
|
|
|
|
MaterialTheme {
|
|
|
|
// TODO [#1090]: Demo: Add Addresses and Transactions Compose Previews
|
|
|
|
// TODO [#1090]: https://github.com/zcash/zcash-android-wallet-sdk/issues/1090
|
|
|
|
// Addresses()
|
|
|
|
}
|
|
|
|
}
|
2022-12-23 02:00:37 -08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param copyToClipboard First string is a tag, the second string is the text to copy.
|
|
|
|
*/
|
|
|
|
@Composable
|
2024-01-04 12:21:32 -08:00
|
|
|
@Suppress("ktlint:standard:function-naming")
|
2022-12-23 02:00:37 -08:00
|
|
|
fun Addresses(
|
|
|
|
synchronizer: Synchronizer,
|
|
|
|
copyToClipboard: (String, String) -> Unit,
|
2023-01-09 05:12:04 -08:00
|
|
|
onBack: () -> Unit,
|
|
|
|
snackbarHostState: SnackbarHostState
|
2022-12-23 02:00:37 -08:00
|
|
|
) {
|
2023-01-09 05:12:04 -08:00
|
|
|
Scaffold(
|
|
|
|
topBar = { AddressesTopAppBar(onBack) },
|
|
|
|
snackbarHost = { SnackbarHost(snackbarHostState) }
|
|
|
|
) { paddingValues ->
|
2022-12-23 02:00:37 -08:00
|
|
|
// TODO [#846]: Slow addresses providing
|
|
|
|
// TODO [#846]: https://github.com/zcash/zcash-android-wallet-sdk/issues/846
|
2024-01-04 12:21:32 -08:00
|
|
|
val walletAddresses =
|
|
|
|
flow {
|
|
|
|
emit(WalletAddresses.new(synchronizer))
|
|
|
|
}.collectAsState(
|
|
|
|
initial = null
|
|
|
|
).value
|
2022-12-23 02:00:37 -08:00
|
|
|
if (null != walletAddresses) {
|
|
|
|
AddressesMainContent(
|
|
|
|
paddingValues = paddingValues,
|
|
|
|
addresses = walletAddresses,
|
|
|
|
copyToClipboard = copyToClipboard
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
@OptIn(ExperimentalMaterial3Api::class)
|
2024-01-04 12:21:32 -08:00
|
|
|
@Suppress("ktlint:standard:function-naming")
|
2022-12-23 02:00:37 -08:00
|
|
|
private fun AddressesTopAppBar(onBack: () -> Unit) {
|
|
|
|
TopAppBar(
|
|
|
|
title = { Text(text = stringResource(id = R.string.menu_address)) },
|
|
|
|
navigationIcon = {
|
|
|
|
IconButton(
|
|
|
|
onClick = onBack
|
|
|
|
) {
|
|
|
|
Icon(
|
2024-04-15 08:43:19 -07:00
|
|
|
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
|
2022-12-23 02:00:37 -08:00
|
|
|
contentDescription = null
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Composable
|
2024-01-04 12:21:32 -08:00
|
|
|
@Suppress("ktlint:standard:function-naming")
|
2022-12-23 02:00:37 -08:00
|
|
|
private fun AddressesMainContent(
|
|
|
|
paddingValues: PaddingValues,
|
|
|
|
addresses: WalletAddresses,
|
|
|
|
copyToClipboard: (String, String) -> Unit
|
|
|
|
) {
|
|
|
|
Column(
|
|
|
|
Modifier
|
|
|
|
.verticalScroll(rememberScrollState())
|
|
|
|
.padding(top = paddingValues.calculateTopPadding())
|
|
|
|
) {
|
|
|
|
Text(stringResource(id = R.string.unified_address))
|
|
|
|
addresses.unified.address.also { address ->
|
|
|
|
val tag = stringResource(id = R.string.unified_address)
|
|
|
|
|
|
|
|
Text(
|
|
|
|
address,
|
|
|
|
Modifier.clickable {
|
|
|
|
copyToClipboard(tag, address)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
Spacer(Modifier.padding(8.dp))
|
|
|
|
|
|
|
|
Text(stringResource(id = R.string.sapling_address))
|
|
|
|
addresses.sapling.address.also { address ->
|
|
|
|
val tag = stringResource(id = R.string.sapling_address_tag)
|
|
|
|
|
|
|
|
Text(
|
|
|
|
address,
|
|
|
|
Modifier.clickable {
|
|
|
|
copyToClipboard(tag, address)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
Spacer(Modifier.padding(8.dp))
|
|
|
|
|
|
|
|
Text(stringResource(id = R.string.transparent_address))
|
|
|
|
addresses.transparent.address.also { address ->
|
|
|
|
val tag = stringResource(id = R.string.transparent_address)
|
|
|
|
|
|
|
|
Text(
|
|
|
|
address,
|
|
|
|
Modifier.clickable {
|
|
|
|
copyToClipboard(tag, address)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|