From 226eacc41350bad3cc47ea24d2f5bb2430cd4131 Mon Sep 17 00:00:00 2001 From: Ian Rumac Date: Fri, 27 Sep 2024 23:45:43 +0200 Subject: [PATCH 1/4] Expose configuration status --- CHANGELOG.md | 5 +++++ .../main/java/com/superwall/sdk/Superwall.kt | 19 +++++++++++++++++++ .../sdk/config/models/ConfigurationStatus.kt | 17 +++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 superwall/src/main/java/com/superwall/sdk/config/models/ConfigurationStatus.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index 3eaecc4c..de9e5aba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ The changelog for `Superwall`. Also see the [releases](https://github.com/superwall/Superwall-Android/releases) on GitHub. +## 1.2.7 + +### Enhancements +- Exposes current configuration status via `Superwall.instance.configurationStatus` + ## 1.2.6 ### Fixes diff --git a/superwall/src/main/java/com/superwall/sdk/Superwall.kt b/superwall/src/main/java/com/superwall/sdk/Superwall.kt index 60b6e038..677a1eb4 100644 --- a/superwall/src/main/java/com/superwall/sdk/Superwall.kt +++ b/superwall/src/main/java/com/superwall/sdk/Superwall.kt @@ -6,6 +6,8 @@ import android.net.Uri import androidx.work.WorkManager import com.superwall.sdk.analytics.internal.track import com.superwall.sdk.analytics.internal.trackable.InternalSuperwallEvent +import com.superwall.sdk.config.models.ConfigState +import com.superwall.sdk.config.models.ConfigurationStatus import com.superwall.sdk.config.options.SuperwallOptions import com.superwall.sdk.delegate.SubscriptionStatus import com.superwall.sdk.delegate.SuperwallDelegate @@ -212,6 +214,23 @@ class Superwall( */ val subscriptionStatus: StateFlow get() = _subscriptionStatus + /** + * A property that indicates current configuration state of the SDK. + * + * This is `ConfigurationStatus.Pending` when the SDK is yet to finish + * configuring. Upon successful configuration, it will change to `ConfigurationStatus.Configured`. + * On failure, it will change to `ConfigurationStatus.Failed`. + */ + val configurationState: ConfigurationStatus + get() = + dependencyContainer.configManager.configState.value.let { + when (it) { + is ConfigState.Retrieved -> ConfigurationStatus.Configured + is ConfigState.Failed -> ConfigurationStatus.Failed + else -> ConfigurationStatus.Pending + } + } + companion object { /** A variable that is only `true` if ``instance`` is available for use. * Gets set to `true` immediately after diff --git a/superwall/src/main/java/com/superwall/sdk/config/models/ConfigurationStatus.kt b/superwall/src/main/java/com/superwall/sdk/config/models/ConfigurationStatus.kt new file mode 100644 index 00000000..78a9dcd8 --- /dev/null +++ b/superwall/src/main/java/com/superwall/sdk/config/models/ConfigurationStatus.kt @@ -0,0 +1,17 @@ +package com.superwall.sdk.config.models + +/** +* Derived from ConfigState.kt. +* Represents the current configuration status of the SDK. +* Can be one of: +* - Pending: The configuration process is not yet completed. +* - Configured: The configuration process completed successfully. +* - Failed: The configuration process failed. +* */ +sealed class ConfigurationStatus { + object Pending : ConfigurationStatus() + + object Configured : ConfigurationStatus() + + object Failed : ConfigurationStatus() +} From b20a367809de8d63bf1e0294c182382f498ceca6 Mon Sep 17 00:00:00 2001 From: Ian Rumac Date: Fri, 27 Sep 2024 23:23:20 +0200 Subject: [PATCH 2/4] Fix preview issues, enable strict mode in test app --- CHANGELOG.md | 3 +++ .../com/superwall/superapp/MainApplication.kt | 22 +++++++++++++++++++ .../java/com/superwall/sdk/debug/DebugView.kt | 15 ++++++------- .../superwall/sdk/network/BaseHostService.kt | 2 +- .../java/com/superwall/sdk/network/Network.kt | 4 ++-- .../com/superwall/sdk/network/SuperwallAPI.kt | 2 +- 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de9e5aba..5acab532 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ The changelog for `Superwall`. Also see the [releases](https://github.com/superw ### Enhancements - Exposes current configuration status via `Superwall.instance.configurationStatus` +### Fixes +- Fixes issues with Paywall previews not loading + ## 1.2.6 ### Fixes diff --git a/app/src/main/java/com/superwall/superapp/MainApplication.kt b/app/src/main/java/com/superwall/superapp/MainApplication.kt index 8cfdcfd9..f5e431b6 100644 --- a/app/src/main/java/com/superwall/superapp/MainApplication.kt +++ b/app/src/main/java/com/superwall/superapp/MainApplication.kt @@ -1,6 +1,9 @@ package com.superwall.superapp import android.app.Activity +import android.os.StrictMode +import android.os.StrictMode.ThreadPolicy +import android.os.StrictMode.VmPolicy import androidx.appcompat.app.AlertDialog import com.superwall.sdk.Superwall import com.superwall.sdk.analytics.superwall.SuperwallEventInfo @@ -39,6 +42,25 @@ class MainApplication : override fun onCreate() { super.onCreate() + StrictMode.setThreadPolicy( + ThreadPolicy + .Builder() + .detectCustomSlowCalls() + .detectResourceMismatches() + .detectUnbufferedIo() // or .detectAll() for all detectable problems + .penaltyLog() + .build(), + ) + StrictMode.setVmPolicy( + VmPolicy + .Builder() + .detectLeakedSqlLiteObjects() + .detectActivityLeaks() + .detectLeakedRegistrationObjects() + .penaltyLog() + .penaltyDeath() + .build(), + ) configureWithAutomaticInitialization() // configureWithRevenueCatInitialization() diff --git a/superwall/src/main/java/com/superwall/sdk/debug/DebugView.kt b/superwall/src/main/java/com/superwall/sdk/debug/DebugView.kt index ee0fcb5b..0ca6df1b 100644 --- a/superwall/src/main/java/com/superwall/sdk/debug/DebugView.kt +++ b/superwall/src/main/java/com/superwall/sdk/debug/DebugView.kt @@ -37,8 +37,7 @@ import com.superwall.sdk.dependencies.ViewFactory import com.superwall.sdk.logger.LogLevel import com.superwall.sdk.logger.LogScope import com.superwall.sdk.logger.Logger -import com.superwall.sdk.misc.onError -import com.superwall.sdk.misc.then +import com.superwall.sdk.misc.fold import com.superwall.sdk.models.paywall.Paywall import com.superwall.sdk.network.Network import com.superwall.sdk.paywall.manager.PaywallManager @@ -528,18 +527,18 @@ class DebugView( if (paywalls.isEmpty()) { network - .getPaywalls() - .onError { + .getPaywalls(true) + .fold({ + paywalls = it + finishLoadingPreview() + }, { Logger.debug( logLevel = LogLevel.error, scope = LogScope.debugView, message = "Failed to Fetch Paywalls", error = it, ) - }.then { - paywalls = it - finishLoadingPreview() - } + }) } else { finishLoadingPreview() } diff --git a/superwall/src/main/java/com/superwall/sdk/network/BaseHostService.kt b/superwall/src/main/java/com/superwall/sdk/network/BaseHostService.kt index 0782df6e..c983f85c 100644 --- a/superwall/src/main/java/com/superwall/sdk/network/BaseHostService.kt +++ b/superwall/src/main/java/com/superwall/sdk/network/BaseHostService.kt @@ -38,7 +38,7 @@ class BaseHostService( body = json.encodeToString(confirmableAssignments).toByteArray(), ) - suspend fun paywalls() = get("paywalls") + suspend fun paywalls(isForDebugging: Boolean) = get(path = "paywalls", isForDebugging = isForDebugging) suspend fun paywall(identifier: String? = null): Either { // WARNING: Do not modify anything about this request without considering our cache eviction code diff --git a/superwall/src/main/java/com/superwall/sdk/network/Network.kt b/superwall/src/main/java/com/superwall/sdk/network/Network.kt index 781c3f20..639ae294 100644 --- a/superwall/src/main/java/com/superwall/sdk/network/Network.kt +++ b/superwall/src/main/java/com/superwall/sdk/network/Network.kt @@ -78,9 +78,9 @@ open class Network( }, ) - override suspend fun getPaywalls(): Either, NetworkError> = + override suspend fun getPaywalls(isForDebugging: Boolean): Either, NetworkError> = baseHostService - .paywalls() + .paywalls(isForDebugging) .map { it.paywalls }.logError("/paywalls") diff --git a/superwall/src/main/java/com/superwall/sdk/network/SuperwallAPI.kt b/superwall/src/main/java/com/superwall/sdk/network/SuperwallAPI.kt index 057abdf0..60340d32 100644 --- a/superwall/src/main/java/com/superwall/sdk/network/SuperwallAPI.kt +++ b/superwall/src/main/java/com/superwall/sdk/network/SuperwallAPI.kt @@ -21,7 +21,7 @@ interface SuperwallAPI { event: EventData? = null, ): Either - suspend fun getPaywalls(): Either, NetworkError> + suspend fun getPaywalls(isForDebugging: Boolean = false): Either, NetworkError> suspend fun getGeoInfo(): Either From 20ee1405a216f5ab5fd672eb755f1dfc85785cc1 Mon Sep 17 00:00:00 2001 From: Ian Rumac Date: Fri, 27 Sep 2024 23:52:33 +0200 Subject: [PATCH 3/4] Fix tests and mocks --- .../androidTest/java/com/superwall/sdk/network/NetworkMock.kt | 2 +- .../src/main/java/com/superwall/sdk/network/BaseHostService.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/superwall/src/androidTest/java/com/superwall/sdk/network/NetworkMock.kt b/superwall/src/androidTest/java/com/superwall/sdk/network/NetworkMock.kt index 30c1e56a..0a793a1a 100644 --- a/superwall/src/androidTest/java/com/superwall/sdk/network/NetworkMock.kt +++ b/superwall/src/androidTest/java/com/superwall/sdk/network/NetworkMock.kt @@ -46,7 +46,7 @@ class NetworkMock : SuperwallAPI { TODO("Not yet implemented") } - override suspend fun getPaywalls(): Either, NetworkError> { + override suspend fun getPaywalls(isForDebugging: Boolean): Either, NetworkError> { TODO("Not yet implemented") } diff --git a/superwall/src/main/java/com/superwall/sdk/network/BaseHostService.kt b/superwall/src/main/java/com/superwall/sdk/network/BaseHostService.kt index c983f85c..fcbe5ef7 100644 --- a/superwall/src/main/java/com/superwall/sdk/network/BaseHostService.kt +++ b/superwall/src/main/java/com/superwall/sdk/network/BaseHostService.kt @@ -38,7 +38,7 @@ class BaseHostService( body = json.encodeToString(confirmableAssignments).toByteArray(), ) - suspend fun paywalls(isForDebugging: Boolean) = get(path = "paywalls", isForDebugging = isForDebugging) + suspend fun paywalls(isForDebugging: Boolean = false) = get(path = "paywalls", isForDebugging = isForDebugging) suspend fun paywall(identifier: String? = null): Either { // WARNING: Do not modify anything about this request without considering our cache eviction code From 047861d0031a8539f36bb1967afbc4431ef3d38e Mon Sep 17 00:00:00 2001 From: Ian Rumac Date: Sat, 28 Sep 2024 00:00:03 +0200 Subject: [PATCH 4/4] Version bump 1.2.7 --- superwall/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superwall/build.gradle.kts b/superwall/build.gradle.kts index 1114e28f..5e7d8cb8 100644 --- a/superwall/build.gradle.kts +++ b/superwall/build.gradle.kts @@ -23,7 +23,7 @@ plugins { id("signing") } -version = "1.2.6" +version = "1.2.7" android { compileSdk = 34