From 9adab28d52df5bf7280598f87ae59c93d35252d0 Mon Sep 17 00:00:00 2001 From: Dominique Padiou <5765435+dpad85@users.noreply.github.com> Date: Tue, 2 Jul 2024 19:09:22 +0200 Subject: [PATCH] (android) Fix editing contact from incoming offer screen --- .../components/contact/ContactDetailsView.kt | 1 - .../components/contact/ContactOrOfferView.kt | 2 +- .../details/PaymentDetailsSplashView.kt | 32 +++++++++---------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/contact/ContactDetailsView.kt b/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/contact/ContactDetailsView.kt index da7e65a1a..76280e050 100644 --- a/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/contact/ContactDetailsView.kt +++ b/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/contact/ContactDetailsView.kt @@ -50,7 +50,6 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.acinq.bitcoin.byteVector import fr.acinq.lightning.wire.OfferTypes import fr.acinq.phoenix.android.R import fr.acinq.phoenix.android.Screen diff --git a/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/contact/ContactOrOfferView.kt b/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/contact/ContactOrOfferView.kt index d573126bc..72b48cd82 100644 --- a/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/contact/ContactOrOfferView.kt +++ b/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/components/contact/ContactOrOfferView.kt @@ -40,7 +40,7 @@ import fr.acinq.phoenix.android.components.SplashClickableContent import fr.acinq.phoenix.android.utils.mutedTextColor import fr.acinq.phoenix.data.ContactInfo -private sealed class OfferContactState { +sealed class OfferContactState { data object Init: OfferContactState() data class Found(val contact: ContactInfo): OfferContactState() data object NotFound: OfferContactState() diff --git a/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/payments/details/PaymentDetailsSplashView.kt b/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/payments/details/PaymentDetailsSplashView.kt index 9ab0225db..451956b7a 100644 --- a/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/payments/details/PaymentDetailsSplashView.kt +++ b/phoenix-android/src/main/kotlin/fr/acinq/phoenix/android/payments/details/PaymentDetailsSplashView.kt @@ -24,7 +24,6 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.selection.SelectionContainer import androidx.compose.foundation.verticalScroll import androidx.compose.material.MaterialTheme @@ -63,11 +62,11 @@ import fr.acinq.phoenix.android.business import fr.acinq.phoenix.android.components.* import fr.acinq.phoenix.android.components.contact.ContactCompactView import fr.acinq.phoenix.android.components.contact.ContactOrOfferView +import fr.acinq.phoenix.android.components.contact.OfferContactState import fr.acinq.phoenix.android.payments.cpfp.CpfpView import fr.acinq.phoenix.android.utils.* import fr.acinq.phoenix.android.utils.Converter.toPrettyString import fr.acinq.phoenix.android.utils.Converter.toRelativeDateString -import fr.acinq.phoenix.data.ContactInfo import fr.acinq.phoenix.data.LnurlPayMetadata import fr.acinq.phoenix.data.WalletPaymentId import fr.acinq.phoenix.data.WalletPaymentInfo @@ -129,7 +128,7 @@ fun PaymentDetailsSplashView( OfferPayerNote(payerNote = it) Spacer(modifier = Modifier.height(8.dp)) } - OfferPayerContact(payerPubkey = meta.payerKey) + OfferSentBy(payerPubkey = meta.payerKey) } PaymentDescriptionView(data = data, onMetadataDescriptionUpdate = onMetadataDescriptionUpdate) @@ -450,29 +449,28 @@ private fun OfferPayerNote(payerNote: String) { } @Composable -private fun OfferPayerContact(payerPubkey: PublicKey?) { +private fun OfferSentBy(payerPubkey: PublicKey?) { val contactsManager = business.contactsManager - val contactForOffer = produceState?>(initialValue = null, producer = { - value = payerPubkey?.let { - contactsManager.getContactForPayerPubkey(it)?.let { - Either.Right(it) - } ?: Either.Left(Unit) - } ?: Either.Left(Unit) - }) + val contactState = remember { mutableStateOf(OfferContactState.Init) } + LaunchedEffect(Unit) { + contactState.value = payerPubkey?.let { + contactsManager.getContactForPayerPubkey(it) + }?.let { OfferContactState.Found(it) } ?: OfferContactState.NotFound + } SplashLabelRow(label = stringResource(id = R.string.paymentdetails_offer_sender_label)) { - when (val contact = contactForOffer.value) { - null -> Text(text = stringResource(id = R.string.utils_loading_data)) - is Either.Left -> { + when (val res = contactState.value) { + is OfferContactState.Init -> Text(text = stringResource(id = R.string.utils_loading_data)) + is OfferContactState.NotFound -> { Text(text = stringResource(id = R.string.paymentdetails_offer_sender_unknown)) Spacer(modifier = Modifier.height(4.dp)) Text(text = stringResource(id = R.string.paymentdetails_offer_sender_unknown_details), style = MaterialTheme.typography.subtitle2) } - is Either.Right -> { + is OfferContactState.Found -> { ContactCompactView( - contact = contact.value, + contact = res.contact, currentOffer = null, - onContactChange = {}, + onContactChange = { contactState.value = if (it == null) OfferContactState.NotFound else OfferContactState.Found(it) }, ) } }