diff --git a/src/main/java/com/statsig/androidsdk/Statsig.kt b/src/main/java/com/statsig/androidsdk/Statsig.kt index acf8e5d..ce504a6 100644 --- a/src/main/java/com/statsig/androidsdk/Statsig.kt +++ b/src/main/java/com/statsig/androidsdk/Statsig.kt @@ -326,6 +326,16 @@ object Statsig { return result ?: StatsigOverrides(mutableMapOf(), mutableMapOf()) } + /** + * @return true if the SDK is initialized (usable), though the most up + * to date values will not be fetched from the network until async initialization + * is complete + */ + @JvmStatic + fun isInitialized(): Boolean { + return client.isInitialized() + } + private fun enforceInitialized(functionName: String) { client.enforceInitialized(functionName) } diff --git a/src/main/java/com/statsig/androidsdk/Store.kt b/src/main/java/com/statsig/androidsdk/Store.kt index 49cbb3d..fa0d9a8 100644 --- a/src/main/java/com/statsig/androidsdk/Store.kt +++ b/src/main/java/com/statsig/androidsdk/Store.kt @@ -45,31 +45,31 @@ internal class Store (private val sharedPrefs: SharedPreferences, user: StatsigU currentUserCacheKey = user.getCacheKey() if (cachedResponse != null) { - val type = object : TypeToken>() {}.type - try { + Statsig.errorBoundary.capture({ + val type = object : TypeToken>() {}.type cacheById = gson.fromJson(cachedResponse, type) ?: cacheById - } catch (_: Exception) { + }, { StatsigUtil.removeFromSharedPrefs(sharedPrefs, CACHE_BY_USER_KEY) - } + }) } stickyDeviceExperiments = mutableMapOf() if (cachedDeviceValues != null) { - val type = object : TypeToken>() {}.type - try { + Statsig.errorBoundary.capture({ + val type = object : TypeToken>() {}.type stickyDeviceExperiments = gson.fromJson(cachedDeviceValues, type) ?: stickyDeviceExperiments - } catch (_: Exception) { + }, { StatsigUtil.removeFromSharedPrefs(sharedPrefs, STICKY_DEVICE_EXPERIMENTS_KEY) - } + }) } localOverrides = StatsigOverrides(mutableMapOf(), mutableMapOf()) if (cachedLocalOverrides != null) { - try { + Statsig.errorBoundary.capture({ localOverrides = gson.fromJson(cachedLocalOverrides, StatsigOverrides::class.java) - } catch (_: Exception) { + }, { StatsigUtil.removeFromSharedPrefs(sharedPrefs, LOCAL_OVERRIDES_KEY) - } + }) } reason = EvaluationReason.Uninitialized currentCache = loadCacheForCurrentUser() diff --git a/src/test/java/com/statsig/androidsdk/StatsigCacheTest.kt b/src/test/java/com/statsig/androidsdk/StatsigCacheTest.kt index 64ad096..0e988f8 100644 --- a/src/test/java/com/statsig/androidsdk/StatsigCacheTest.kt +++ b/src/test/java/com/statsig/androidsdk/StatsigCacheTest.kt @@ -55,7 +55,9 @@ class StatsigCacheTest { testSharedPrefs.edit().putString("Statsig.CACHE_BY_USER", gson.toJson(cacheById)) + assertFalse(Statsig.isInitialized()) TestUtil.startStatsigAndDontWait(app, user, StatsigOptions()) + assertTrue(Statsig.isInitialized()) client = Statsig.client assertTrue(client.checkGate("always_on"))