From f9e522f734084fb284f7a0b161dac56d24d90445 Mon Sep 17 00:00:00 2001 From: Trey t Date: Tue, 25 Nov 2025 11:22:32 -0600 Subject: [PATCH] Fix Android subscription limitations not working MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Load subscription status and upgrade triggers during Android app initialization in LookupsRepository.initialize(). Previously, only iOS was loading this data via APILayer.initializeLookups(). Without subscription data, SubscriptionHelper couldn't enforce limits because SubscriptionCache.currentSubscription was always null. Changes: - Add SubscriptionApi calls to load subscription status and upgrade triggers in parallel with other lookup data - Clear SubscriptionCache on logout in clear() method - Add debug logging for subscription loading 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../mycrib/repository/LookupsRepository.kt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/repository/LookupsRepository.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/repository/LookupsRepository.kt index d4ed02a..c4e6936 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/repository/LookupsRepository.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/repository/LookupsRepository.kt @@ -1,8 +1,10 @@ package com.example.mycrib.repository +import com.example.mycrib.cache.SubscriptionCache import com.example.mycrib.models.* import com.example.mycrib.network.ApiResult import com.example.mycrib.network.LookupsApi +import com.example.mycrib.network.SubscriptionApi import com.example.mycrib.storage.TokenStorage import com.example.mycrib.storage.TaskCacheStorage import kotlinx.coroutines.CoroutineScope @@ -17,6 +19,7 @@ import kotlinx.coroutines.launch */ object LookupsRepository { private val lookupsApi = LookupsApi() + private val subscriptionApi = SubscriptionApi() private val scope = CoroutineScope(Dispatchers.Default) private val _residenceTypes = MutableStateFlow>(emptyList()) @@ -100,6 +103,41 @@ object LookupsRepository { } } } + + // Load subscription status for limitation checks + launch { + println("🔄 [LookupsRepository] Fetching subscription status...") + when (val result = subscriptionApi.getSubscriptionStatus(token)) { + is ApiResult.Success -> { + println("✅ [LookupsRepository] Subscription status loaded: limitationsEnabled=${result.data.limitationsEnabled}") + println(" Limits: ${result.data.limits}") + SubscriptionCache.updateSubscriptionStatus(result.data) + } + is ApiResult.Error -> { + println("❌ [LookupsRepository] Failed to fetch subscription status: ${result.message}") + } + else -> { + println("❌ [LookupsRepository] Unexpected subscription result") + } + } + } + + // Load upgrade triggers for subscription prompts + launch { + println("🔄 [LookupsRepository] Fetching upgrade triggers...") + when (val result = subscriptionApi.getUpgradeTriggers(token)) { + is ApiResult.Success -> { + println("✅ [LookupsRepository] Upgrade triggers loaded: ${result.data.size} triggers") + SubscriptionCache.updateUpgradeTriggers(result.data) + } + is ApiResult.Error -> { + println("❌ [LookupsRepository] Failed to fetch upgrade triggers: ${result.message}") + } + else -> { + println("❌ [LookupsRepository] Unexpected upgrade triggers result") + } + } + } } _isInitialized.value = true @@ -121,6 +159,8 @@ object LookupsRepository { _allTasks.value = emptyList() // Clear disk cache on logout TaskCacheStorage.clearTasks() + // Clear subscription cache on logout + SubscriptionCache.clear() _isInitialized.value = false _isLoading.value = false }