From 2828c25c21f8ce3fb1ea96248278b26914b53d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Honza=20Rychnovsk=C3=BD?= Date: Fri, 3 May 2024 10:15:59 +0200 Subject: [PATCH] [#1350] No message included in transaction - Closes #1350 --- .../ui/design/theme/internal/Typography.kt | 6 ++++++ .../TransactionHistorySyncStateFixture.kt | 19 +++++++++++++++--- .../ui/common/viewmodel/WalletViewModel.kt | 20 +++++++++++++++++-- .../account/ext/TransactionOverviewExt.kt | 4 +++- .../account/fixture/TransactionUiFixture.kt | 5 +++++ .../ui/screen/account/model/TransactionUi.kt | 3 +++ .../ui/screen/account/view/HistoryView.kt | 20 +++++++++++++++---- .../main/res/ui/account/values/strings.xml | 1 + 8 files changed, 68 insertions(+), 10 deletions(-) diff --git a/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/theme/internal/Typography.kt b/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/theme/internal/Typography.kt index 406bb5a7..513ab082 100644 --- a/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/theme/internal/Typography.kt +++ b/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/theme/internal/Typography.kt @@ -163,6 +163,7 @@ data class TransactionItemTextStyles( val valueFirstPart: TextStyle, val valueSecondPart: TextStyle, val content: TextStyle, + val contentItalic: TextStyle, val contentMedium: TextStyle, val contentUnderline: TextStyle, val contentLineThrough: TextStyle, @@ -336,6 +337,11 @@ val LocalExtendedTypography = PrimaryTypography.bodySmall.copy( fontSize = 13.sp ), + contentItalic = + PrimaryTypography.bodySmall.copy( + fontSize = 13.sp, + fontStyle = FontStyle.Italic + ), contentMedium = PrimaryTypography.bodySmall.copy( fontSize = 13.sp, diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/account/history/fixture/TransactionHistorySyncStateFixture.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/account/history/fixture/TransactionHistorySyncStateFixture.kt index d3729c6e..616b1896 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/account/history/fixture/TransactionHistorySyncStateFixture.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/account/history/fixture/TransactionHistorySyncStateFixture.kt @@ -3,6 +3,7 @@ package co.electriccoin.zcash.ui.screen.account.history.fixture import cash.z.ecc.android.sdk.fixture.TransactionOverviewFixture import cash.z.ecc.android.sdk.model.Account import cash.z.ecc.android.sdk.model.TransactionRecipient +import cash.z.ecc.android.sdk.type.AddressType import co.electriccoin.zcash.ui.screen.account.ext.TransactionOverviewExt import co.electriccoin.zcash.ui.screen.account.state.TransactionHistorySyncState import kotlinx.collections.immutable.ImmutableList @@ -11,9 +12,21 @@ import kotlinx.collections.immutable.persistentListOf internal object TransactionHistorySyncStateFixture { val TRANSACTIONS = persistentListOf( - TransactionOverviewExt(TransactionOverviewFixture.new(), TransactionRecipient.Account(Account.DEFAULT)), - TransactionOverviewExt(TransactionOverviewFixture.new(), TransactionRecipient.Account(Account(1))), - TransactionOverviewExt(TransactionOverviewFixture.new(), null), + TransactionOverviewExt( + TransactionOverviewFixture.new(), + TransactionRecipient.Account(Account.DEFAULT), + AddressType.Shielded + ), + TransactionOverviewExt( + TransactionOverviewFixture.new(), + TransactionRecipient.Account(Account(1)), + AddressType.Transparent + ), + TransactionOverviewExt( + TransactionOverviewFixture.new(), + null, + AddressType.Unified + ), ) val STATE = TransactionHistorySyncState.Syncing(TRANSACTIONS) diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/viewmodel/WalletViewModel.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/viewmodel/WalletViewModel.kt index 264b09c4..990ecc9b 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/viewmodel/WalletViewModel.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/viewmodel/WalletViewModel.kt @@ -16,6 +16,7 @@ import cash.z.ecc.android.sdk.model.FiatCurrency import cash.z.ecc.android.sdk.model.PercentDecimal import cash.z.ecc.android.sdk.model.PersistableWallet import cash.z.ecc.android.sdk.model.TransactionOverview +import cash.z.ecc.android.sdk.model.TransactionRecipient import cash.z.ecc.android.sdk.model.WalletAddresses import cash.z.ecc.android.sdk.model.WalletBalance import cash.z.ecc.android.sdk.model.Zatoshi @@ -224,9 +225,24 @@ class WalletViewModel(application: Application) : AndroidViewModel(application) } .map { if (it.isSentTransaction) { - TransactionOverviewExt(it, synchronizer.getRecipients(it).firstOrNull()) + val recipient = synchronizer.getRecipients(it).firstOrNull() + TransactionOverviewExt( + overview = it, + recipient = recipient, + recipientAddressType = + if (recipient != null && (recipient is TransactionRecipient.Address)) { + synchronizer.validateAddress(recipient.addressValue) + } else { + null + } + ) } else { - TransactionOverviewExt(it, null) + // Note that recipients can only be queried for sent transactions + TransactionOverviewExt( + overview = it, + recipient = null, + recipientAddressType = null + ) } } if (status.isSyncing()) { diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/ext/TransactionOverviewExt.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/ext/TransactionOverviewExt.kt index bb02f132..ad60d680 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/ext/TransactionOverviewExt.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/ext/TransactionOverviewExt.kt @@ -3,10 +3,12 @@ package co.electriccoin.zcash.ui.screen.account.ext import cash.z.ecc.android.sdk.model.BlockHeight import cash.z.ecc.android.sdk.model.TransactionOverview import cash.z.ecc.android.sdk.model.TransactionRecipient +import cash.z.ecc.android.sdk.type.AddressType data class TransactionOverviewExt( val overview: TransactionOverview, - val recipient: TransactionRecipient? + val recipient: TransactionRecipient?, + val recipientAddressType: AddressType? ) fun TransactionOverview.getSortHeight(networkHeight: BlockHeight): BlockHeight { diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/fixture/TransactionUiFixture.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/fixture/TransactionUiFixture.kt index 52c325fc..415d18b6 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/fixture/TransactionUiFixture.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/fixture/TransactionUiFixture.kt @@ -5,6 +5,7 @@ import cash.z.ecc.android.sdk.fixture.WalletFixture import cash.z.ecc.android.sdk.model.TransactionOverview import cash.z.ecc.android.sdk.model.TransactionRecipient import cash.z.ecc.android.sdk.model.ZcashNetwork +import cash.z.ecc.android.sdk.type.AddressType import co.electriccoin.zcash.ui.screen.account.model.TransactionUi import co.electriccoin.zcash.ui.screen.account.model.TrxItemState @@ -16,6 +17,8 @@ object TransactionUiFixture { WalletFixture.Alice.getAddresses(ZcashNetwork.Mainnet).sapling ) + val RECIPIENT_ADDRESS_TYPE: AddressType = AddressType.Shielded + val EXPANDABLE_STATE: TrxItemState = TrxItemState.COLLAPSED val MESSAGES: List = listOf("Thanks for the coffee", "It was great to meet you!") @@ -23,11 +26,13 @@ object TransactionUiFixture { internal fun new( overview: TransactionOverview = OVERVIEW, recipient: TransactionRecipient = RECIPIENT, + recipientAddressType: AddressType = RECIPIENT_ADDRESS_TYPE, expandableState: TrxItemState = EXPANDABLE_STATE, messages: List = MESSAGES, ) = TransactionUi( overview = overview, recipient = recipient, + recipientAddressType = recipientAddressType, expandableState = expandableState, messages = messages ) diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/model/TransactionUi.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/model/TransactionUi.kt index 810234e6..c0b7e6b8 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/model/TransactionUi.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/model/TransactionUi.kt @@ -2,11 +2,13 @@ package co.electriccoin.zcash.ui.screen.account.model import cash.z.ecc.android.sdk.model.TransactionOverview import cash.z.ecc.android.sdk.model.TransactionRecipient +import cash.z.ecc.android.sdk.type.AddressType import co.electriccoin.zcash.ui.screen.account.ext.TransactionOverviewExt data class TransactionUi( val overview: TransactionOverview, val recipient: TransactionRecipient?, + val recipientAddressType: AddressType?, val expandableState: TrxItemState, val messages: List? ) { @@ -18,6 +20,7 @@ data class TransactionUi( ) = TransactionUi( overview = data.overview, recipient = data.recipient, + recipientAddressType = data.recipientAddressType, expandableState = expandableState, messages = messages ) diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/view/HistoryView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/view/HistoryView.kt index 935a4998..e44210a0 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/view/HistoryView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/view/HistoryView.kt @@ -44,6 +44,7 @@ import cash.z.ecc.android.sdk.model.TransactionRecipient import cash.z.ecc.android.sdk.model.TransactionState import cash.z.ecc.android.sdk.model.Zatoshi import cash.z.ecc.android.sdk.model.toZecString +import cash.z.ecc.android.sdk.type.AddressType import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.compose.SynchronizationStatus import co.electriccoin.zcash.ui.common.model.WalletRestoringState @@ -556,6 +557,17 @@ private fun HistoryItemExpandedPart( onAction = onAction ) + Spacer(modifier = Modifier.height(ZcashTheme.dimens.spacingDefault)) + } else if (transaction.recipientAddressType == null || + transaction.recipientAddressType == AddressType.Shielded + ) { + Text( + text = stringResource(id = R.string.account_history_item_no_message), + style = ZcashTheme.extendedTypography.transactionItemStyles.contentItalic, + color = ZcashTheme.colors.textCommon, + modifier = Modifier.fillMaxWidth(EXPANDED_TRANSACTION_WIDTH_RATIO) + ) + Spacer(modifier = Modifier.height(ZcashTheme.dimens.spacingDefault)) } @@ -601,8 +613,8 @@ private fun List.deduplicateMemos(): List { return distinct() } -const val EXPANDED_TRANSACTION_ID_WIDTH_RATIO = 0.75f -const val COLLAPSED_TRANSACTION_ID_WIDTH_RATIO = 0.5f +const val EXPANDED_TRANSACTION_WIDTH_RATIO = 0.75f +const val COLLAPSED_TRANSACTION_WIDTH_RATIO = 0.5f @Composable @Suppress("LongMethod") @@ -631,7 +643,7 @@ private fun HistoryItemTransactionIdPart( color = ZcashTheme.colors.textCommon, modifier = Modifier - .fillMaxWidth(EXPANDED_TRANSACTION_ID_WIDTH_RATIO) + .fillMaxWidth(EXPANDED_TRANSACTION_WIDTH_RATIO) .testTag(HistoryTag.TRANSACTION_ID) ) @@ -683,7 +695,7 @@ private fun HistoryItemTransactionIdPart( overflow = TextOverflow.Ellipsis, modifier = Modifier - .fillMaxWidth(COLLAPSED_TRANSACTION_ID_WIDTH_RATIO) + .fillMaxWidth(COLLAPSED_TRANSACTION_WIDTH_RATIO) .testTag(HistoryTag.TRANSACTION_ID) ) } diff --git a/ui-lib/src/main/res/ui/account/values/strings.xml b/ui-lib/src/main/res/ui/account/values/strings.xml index d9547b64..2d688698 100644 --- a/ui-lib/src/main/res/ui/account/values/strings.xml +++ b/ui-lib/src/main/res/ui/account/values/strings.xml @@ -13,6 +13,7 @@ + Tap to copy Message + No message included in transaction Collapse transaction Transaction ID Transaction Fee