Skip to content

Commit 21825ef

Browse files
committed
fix: clean up activity contact titles
1 parent 9a25b62 commit 21825ef

4 files changed

Lines changed: 54 additions & 25 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package to.bitkit.ui.screens.wallets.activity.components
2+
3+
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.remember
5+
import androidx.compose.ui.res.stringResource
6+
import com.synonym.bitkitcore.Activity
7+
import kotlinx.collections.immutable.ImmutableList
8+
import to.bitkit.R
9+
import to.bitkit.ext.contact
10+
import to.bitkit.ext.isSent
11+
import to.bitkit.models.PubkyProfile
12+
import to.bitkit.models.PubkyPublicKeyFormat
13+
14+
@Composable
15+
fun contactActivityTitle(activity: Activity, contacts: ImmutableList<PubkyProfile>): String? {
16+
val contactName = remember(activity, contacts) {
17+
val contact = activity.contact() ?: return@remember null
18+
contacts.firstOrNull { PubkyPublicKeyFormat.matches(it.publicKey, contact) }?.name
19+
} ?: return null
20+
21+
val titleRes = if (activity.isSent()) {
22+
R.string.contacts__activity_sent_to
23+
} else {
24+
R.string.contacts__activity_received_from
25+
}
26+
return stringResource(titleRes, contactName)
27+
}

app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListGrouped.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,21 @@ import androidx.compose.foundation.layout.wrapContentWidth
1010
import androidx.compose.foundation.lazy.LazyColumn
1111
import androidx.compose.foundation.lazy.itemsIndexed
1212
import androidx.compose.runtime.Composable
13+
import androidx.compose.runtime.getValue
14+
import androidx.compose.runtime.mutableStateOf
15+
import androidx.compose.runtime.remember
1316
import androidx.compose.ui.Alignment
1417
import androidx.compose.ui.Modifier
1518
import androidx.compose.ui.res.stringResource
1619
import androidx.compose.ui.tooling.preview.Preview
1720
import androidx.compose.ui.unit.dp
21+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1822
import com.synonym.bitkitcore.Activity
1923
import kotlinx.collections.immutable.ImmutableList
2024
import kotlinx.collections.immutable.persistentListOf
2125
import to.bitkit.R
2226
import to.bitkit.ext.rawId
27+
import to.bitkit.ui.activityListViewModel
2328
import to.bitkit.ui.components.BodyM
2429
import to.bitkit.ui.components.Caption13Up
2530
import to.bitkit.ui.components.TertiaryButton
@@ -45,6 +50,10 @@ fun ActivityListGrouped(
4550
contentPadding: PaddingValues = PaddingValues(top = 20.dp),
4651
titleProvider: @Composable (Activity) -> String? = { null },
4752
) {
53+
val contacts by activityListViewModel?.contacts?.collectAsStateWithLifecycle() ?: remember {
54+
mutableStateOf(persistentListOf())
55+
}
56+
4857
Column(
4958
horizontalAlignment = Alignment.CenterHorizontally,
5059
modifier = modifier.fillMaxSize()
@@ -100,7 +109,7 @@ fun ActivityListGrouped(
100109
item = item,
101110
onClick = onActivityItemClick,
102111
testTag = "Activity-$index",
103-
title = titleProvider(item),
112+
title = titleProvider(item) ?: contactActivityTitle(item, contacts),
104113
)
105114
VerticalSpacer(16.dp)
106115
}

app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListSimple.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,21 @@ import androidx.compose.foundation.layout.fillMaxWidth
55
import androidx.compose.foundation.layout.padding
66
import androidx.compose.foundation.layout.wrapContentWidth
77
import androidx.compose.runtime.Composable
8+
import androidx.compose.runtime.getValue
9+
import androidx.compose.runtime.mutableStateOf
10+
import androidx.compose.runtime.remember
811
import androidx.compose.ui.Alignment
912
import androidx.compose.ui.Modifier
1013
import androidx.compose.ui.platform.testTag
1114
import androidx.compose.ui.res.stringResource
1215
import androidx.compose.ui.tooling.preview.Preview
1316
import androidx.compose.ui.unit.dp
17+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1418
import com.synonym.bitkitcore.Activity
1519
import kotlinx.collections.immutable.ImmutableList
1620
import kotlinx.collections.immutable.persistentListOf
1721
import to.bitkit.R
22+
import to.bitkit.ui.activityListViewModel
1823
import to.bitkit.ui.components.TertiaryButton
1924
import to.bitkit.ui.components.VerticalSpacer
2025
import to.bitkit.ui.screens.wallets.activity.utils.previewActivityItems
@@ -27,12 +32,22 @@ fun ActivityListSimple(
2732
onActivityItemClick: (String) -> Unit,
2833
) {
2934
if (items.isNullOrEmpty()) return
35+
36+
val contacts by activityListViewModel?.contacts?.collectAsStateWithLifecycle() ?: remember {
37+
mutableStateOf(persistentListOf())
38+
}
39+
3040
Column(
3141
horizontalAlignment = Alignment.CenterHorizontally,
3242
modifier = Modifier.fillMaxWidth()
3343
) {
3444
items.forEachIndexed { index, item ->
35-
ActivityRow(item, onActivityItemClick, testTag = "ActivityShort-$index")
45+
ActivityRow(
46+
item = item,
47+
onClick = onActivityItemClick,
48+
testTag = "ActivityShort-$index",
49+
title = contactActivityTitle(item, contacts),
50+
)
3651
if (index < items.lastIndex) {
3752
VerticalSpacer(16.dp)
3853
}

app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityRow.kt

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
2727
import com.synonym.bitkitcore.Activity
2828
import com.synonym.bitkitcore.PaymentState
2929
import com.synonym.bitkitcore.PaymentType
30-
import kotlinx.collections.immutable.persistentListOf
3130
import to.bitkit.R
3231
import to.bitkit.ext.DatePattern
33-
import to.bitkit.ext.contact
3432
import to.bitkit.ext.formatted
3533
import to.bitkit.ext.isSent
3634
import to.bitkit.ext.isTransfer
@@ -40,8 +38,6 @@ import to.bitkit.ext.totalValue
4038
import to.bitkit.ext.txType
4139
import to.bitkit.models.FeeRate.Companion.getFeeShortDescription
4240
import to.bitkit.models.PrimaryDisplay
43-
import to.bitkit.models.PubkyProfile
44-
import to.bitkit.models.PubkyPublicKeyFormat
4541
import to.bitkit.models.formatToModernDisplay
4642
import to.bitkit.repositories.CurrencyState
4743
import to.bitkit.ui.LocalCurrencies
@@ -91,22 +87,9 @@ fun ActivityRow(
9187
is Activity.Onchain -> item.v1.confirmed
9288
}
9389
val isTransfer = item.isTransfer()
94-
9590
val activityListViewModel = activityListViewModel
96-
val contacts by activityListViewModel?.contacts?.collectAsStateWithLifecycle() ?: remember {
97-
mutableStateOf(persistentListOf())
98-
}
99-
val contactName = remember(item, contacts) { contactName(item, contacts) }
100-
val contactTitle = contactName?.let {
101-
val titleRes = if (item.isSent()) {
102-
R.string.contacts__activity_sent_to
103-
} else {
104-
R.string.contacts__activity_received_from
105-
}
106-
stringResource(titleRes, it)
107-
}
10891
var isCpfpChild by remember { mutableStateOf(false) }
109-
val resolvedTitle = (title ?: contactTitle).takeIf {
92+
val resolvedTitle = title.takeIf {
11093
shouldUseContactActivityTitle(item, status, isTransfer, isCpfpChild)
11194
}
11295

@@ -190,11 +173,6 @@ fun ActivityRow(
190173
}
191174
}
192175

193-
private fun contactName(activity: Activity, contacts: List<PubkyProfile>): String? {
194-
val contact = activity.contact() ?: return null
195-
return contacts.firstOrNull { PubkyPublicKeyFormat.matches(it.publicKey, contact) }?.name
196-
}
197-
198176
private fun shouldUseContactActivityTitle(
199177
activity: Activity,
200178
status: PaymentState?,

0 commit comments

Comments
 (0)