diff --git a/apps/ios/Shared/Views/Badges/BadgesPurchaseStateView.swift b/apps/ios/Shared/Views/Badges/BadgesPurchaseStateView.swift index 84049e0079..710a4ed4fa 100644 --- a/apps/ios/Shared/Views/Badges/BadgesPurchaseStateView.swift +++ b/apps/ios/Shared/Views/Badges/BadgesPurchaseStateView.swift @@ -12,7 +12,7 @@ struct BadgesPurchaseStateView: View { @EnvironmentObject var theme: AppTheme @Environment(\.dismiss) private var dismiss let title: LocalizedStringKey - let message: LocalizedStringKey + var message: LocalizedStringKey? = nil var showsAsSheet: Bool = false var body: some View { @@ -38,10 +38,12 @@ struct BadgesPurchaseStateView: View { .multilineTextAlignment(.center) .fixedSize(horizontal: false, vertical: true) - Text(message) - .font(.body) - .multilineTextAlignment(.center) - .fixedSize(horizontal: false, vertical: true) + if let message { + Text(message) + .font(.body) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + } Spacer() diff --git a/apps/ios/Shared/Views/Badges/BadgesView.swift b/apps/ios/Shared/Views/Badges/BadgesView.swift index 07760a5284..4de8383094 100644 --- a/apps/ios/Shared/Views/Badges/BadgesView.swift +++ b/apps/ios/Shared/Views/Badges/BadgesView.swift @@ -31,7 +31,7 @@ struct BadgesView: View { BadgesPurchaseStateView(title: purchaseState.title, message: purchaseState.message, showsAsSheet: showsAsSheet) .transition(.opacity) } else if store.checkingPurchases { - BadgesPurchaseStateView(title: "Checking your purchases", message: "Purchases not yet delivered are checked first.", showsAsSheet: showsAsSheet) + BadgesPurchaseStateView(title: "Checking your purchases", showsAsSheet: showsAsSheet) .transition(.opacity) } else { BadgesSupportSimplexView(showsAsSheet: showsAsSheet) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPurchaseStateView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPurchaseStateView.kt index 0c6425a4a0..bb9260f9d9 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPurchaseStateView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesPurchaseStateView.kt @@ -16,7 +16,7 @@ import chat.simplex.common.views.onboarding.TextButtonBelowOnboardingButton import chat.simplex.res.MR @Composable -fun BadgesPurchaseStateView(title: StringResource, message: StringResource, onDismiss: () -> Unit) { +fun BadgesPurchaseStateView(title: StringResource, message: StringResource?, onDismiss: () -> Unit) { ColumnWithScrollBar( Modifier.background(MaterialTheme.colors.background).padding(horizontal = 25.dp).padding(top = 8.dp, bottom = 20.dp), verticalArrangement = Arrangement.spacedBy(16.dp), @@ -32,12 +32,14 @@ fun BadgesPurchaseStateView(title: StringResource, message: StringResource, onDi modifier = Modifier.fillMaxWidth() ) - Text( - stringResource(message), - style = MaterialTheme.typography.body1, - textAlign = TextAlign.Center, - modifier = Modifier.fillMaxWidth() - ) + if (message != null) { + Text( + stringResource(message), + style = MaterialTheme.typography.body1, + textAlign = TextAlign.Center, + modifier = Modifier.fillMaxWidth() + ) + } Spacer(Modifier.weight(1f)) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesView.kt index b48e120eca..e4f21df803 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/badges/BadgesView.kt @@ -30,7 +30,7 @@ fun BadgesView(modalManager: ModalManager, close: () -> Unit) { // holds the purchase screens' slot, so a consumable cannot be bought twice BadgesPurchaseStateView(purchaseState.title, purchaseState.message, onDismiss = close) } else if (checkingPurchases) { - BadgesPurchaseStateView(MR.strings.badges_checking_purchases_title, MR.strings.badges_checking_purchases_body, onDismiss = close) + BadgesPurchaseStateView(MR.strings.badges_checking_purchases_title, null, onDismiss = close) } else { BadgesSupportSimplexView(modalManager, unwindToDepth) } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 5eb521d1c0..65ae37cc86 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -3190,7 +3190,6 @@ Waiting for approval Nothing has been charged. Checking your purchases - Purchases not yet delivered are checked first. Store purchase A store purchase is being processed. Buy in browser diff --git a/src/Simplex/Chat/Store/Badges.hs b/src/Simplex/Chat/Store/Badges.hs index 21d990a520..769cb47d4b 100644 --- a/src/Simplex/Chat/Store/Badges.hs +++ b/src/Simplex/Chat/Store/Badges.hs @@ -143,8 +143,8 @@ getOpenStorePurchases db User {userId} now = |] (userId, receiptDueSince) where - -- a week outlasts an Ask to Buy request (24 hours) and a Play slow payment (days), whose waiting screen - -- needs the record; one a receipt reached is paid for, so it is listed until its badge arrives + -- a record with no receipt is dropped after a week: longer than an Ask to Buy approval or a Play slow + -- payment can take, and those are the only waits that still need it. One a receipt reached is paid for. receiptDueSince = addUTCTime (negate $ 7 * nominalDay) now getBadgeStoreReceipt :: DB.Connection -> User -> StoreTransactionRef -> IO (Maybe BadgeStash)