From 8dfcbd4fbbc6c11241e1b77ff466a1c81e6d9202 Mon Sep 17 00:00:00 2001 From: Ian Rumac Date: Mon, 9 Mar 2026 12:37:22 +0100 Subject: [PATCH 1/2] Fixes for replace lint --- .../sdk/paywall/view/SuperwallPaywallActivity.kt | 7 ++++++- .../java/com/superwall/sdk/store/StoreManager.kt | 13 ++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/superwall/src/main/java/com/superwall/sdk/paywall/view/SuperwallPaywallActivity.kt b/superwall/src/main/java/com/superwall/sdk/paywall/view/SuperwallPaywallActivity.kt index 592e5217..9a18a892 100644 --- a/superwall/src/main/java/com/superwall/sdk/paywall/view/SuperwallPaywallActivity.kt +++ b/superwall/src/main/java/com/superwall/sdk/paywall/view/SuperwallPaywallActivity.kt @@ -448,7 +448,12 @@ class SuperwallPaywallActivity : AppCompatActivity() { initBottomSheetBehavior(isModal, height) val container = activityView.findViewById(com.superwall.sdk.R.id.container) - activityView.setOnClickListener { finish() } + activityView.setOnClickListener { + paywallView()?.dismiss( + result = PaywallResult.Declined(), + closeReason = PaywallCloseReason.ManualClose, + ) ?: finish() + } container.addView(paywallView) container.requestLayout() val radius = diff --git a/superwall/src/main/java/com/superwall/sdk/store/StoreManager.kt b/superwall/src/main/java/com/superwall/sdk/store/StoreManager.kt index d71b5699..63fd1d10 100644 --- a/superwall/src/main/java/com/superwall/sdk/store/StoreManager.kt +++ b/superwall/src/main/java/com/superwall/sdk/store/StoreManager.kt @@ -151,11 +151,14 @@ class StoreManager( is ProductState.Error -> { // Error state already exists — replace atomically for retry val deferred = CompletableDeferred() - if (productsByFullId.replace(id, state, ProductState.Loading(deferred))) { - newDeferreds[id] = deferred - } else { - (productsByFullId[id] as? ProductState.Loading)?.deferred?.let { - loading.add(it) + synchronized(productsByFullId) { + if (productsByFullId[id] is ProductState.Error) { + productsByFullId[id] = ProductState.Loading(deferred) + newDeferreds[id] = deferred + } else { + (productsByFullId[id] as? ProductState.Loading)?.deferred?.let { + loading.add(it) + } } } } From 9ab0a9f9738d12781b33c12f173e5f9a02054f7c Mon Sep 17 00:00:00 2001 From: Ian Rumac Date: Mon, 9 Mar 2026 12:47:57 +0100 Subject: [PATCH 2/2] Change type of product map --- .../com/superwall/sdk/store/StoreManager.kt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/superwall/src/main/java/com/superwall/sdk/store/StoreManager.kt b/superwall/src/main/java/com/superwall/sdk/store/StoreManager.kt index 63fd1d10..06262319 100644 --- a/superwall/src/main/java/com/superwall/sdk/store/StoreManager.kt +++ b/superwall/src/main/java/com/superwall/sdk/store/StoreManager.kt @@ -22,6 +22,7 @@ import com.superwall.sdk.store.testmode.TestModeManager import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.awaitAll import java.util.Date +import java.util.concurrent.ConcurrentHashMap class StoreManager( val purchaseController: InternalPurchaseController, @@ -35,7 +36,7 @@ class StoreManager( StoreKit { val receiptManager by lazy(receiptManagerFactory) - private var productsByFullId: MutableMap = java.util.concurrent.ConcurrentHashMap() + private var productsByFullId: ConcurrentHashMap = ConcurrentHashMap() private data class ProductProcessingResult( val fullProductIdsToLoad: Set, @@ -148,17 +149,15 @@ class StoreManager( is ProductState.Loading -> { if (id !in newDeferreds) loading.add(state.deferred) } + is ProductState.Error -> { // Error state already exists — replace atomically for retry val deferred = CompletableDeferred() - synchronized(productsByFullId) { - if (productsByFullId[id] is ProductState.Error) { - productsByFullId[id] = ProductState.Loading(deferred) - newDeferreds[id] = deferred - } else { - (productsByFullId[id] as? ProductState.Loading)?.deferred?.let { - loading.add(it) - } + if (productsByFullId.replace(id, state, ProductState.Loading(deferred))) { + newDeferreds[id] = deferred + } else { + (productsByFullId[id] as? ProductState.Loading)?.deferred?.let { + loading.add(it) } } }