diff --git a/app/src/main/java/org/greenstand/android/TreeTracker/models/organization/OrgRepo.kt b/app/src/main/java/org/greenstand/android/TreeTracker/models/organization/OrgRepo.kt index 0bff7b614..a2746d574 100644 --- a/app/src/main/java/org/greenstand/android/TreeTracker/models/organization/OrgRepo.kt +++ b/app/src/main/java/org/greenstand/android/TreeTracker/models/organization/OrgRepo.kt @@ -38,6 +38,19 @@ class OrgRepo( ) { private var currentOrg: Org? = null + private val ORG_CONFIG_SYNCED_KEY = PrefKeys.SYSTEM_SETTINGS + PrefKey("org-config-synced") + + // In OrgRepo.kt + fun hasCompletedInitialOrgSync(): Boolean = prefs.getBoolean(ORG_CONFIG_SYNCED_KEY, false) + + fun markInitialOrgSyncComplete() { + prefs.edit().putBoolean(ORG_CONFIG_SYNCED_KEY, true).commit() + } + + fun resetInitialOrgSync() { + prefs.edit().putBoolean(ORG_CONFIG_SYNCED_KEY, false).commit() + } + suspend fun init() { dao.insertOrg(defaultOrgEntity()) val currentOrgId = prefs.getString(CURRENT_ORG_ID_KEY, DEFAULT_ORG_ID) diff --git a/app/src/main/java/org/greenstand/android/TreeTracker/splash/SplashScreenViewModel.kt b/app/src/main/java/org/greenstand/android/TreeTracker/splash/SplashScreenViewModel.kt index a0e4276be..87854b22b 100644 --- a/app/src/main/java/org/greenstand/android/TreeTracker/splash/SplashScreenViewModel.kt +++ b/app/src/main/java/org/greenstand/android/TreeTracker/splash/SplashScreenViewModel.kt @@ -72,7 +72,15 @@ class SplashScreenViewModel( if (!orgId.isNullOrBlank()) { Timber.tag(ORG_LINK_TAG).i("Deeplink received: orgId=$orgId, orgName=$orgName") val configJson = orgConfigProvider.fetchOrgConfig(orgId) - if (configJson != null) { + // Non-deeplink launch: refresh current org config if we haven't yet + val currentOrg = orgRepo.currentOrg() + if (currentOrg.id != OrgRepo.DEFAULT_ORG_ID && !orgRepo.hasCompletedInitialOrgSync()) { + Timber.tag(ORG_LINK_TAG).d("Fetching Remote Config for org ${currentOrg.id}") + if (configJson != null) { + orgRepo.addOrgFromRemoteConfig(currentOrg.id, currentOrg.name, configJson) + orgRepo.markInitialOrgSyncComplete() + } + } else if (configJson != null) { Timber.tag(ORG_LINK_TAG).i("Remote Config found for org $orgId, applying full config") orgRepo.addOrgFromRemoteConfig(orgId, orgName ?: "", configJson) } else { diff --git a/app/src/test/java/org/greenstand/android/TreeTracker/splash/SplashScreenViewModelTest.kt b/app/src/test/java/org/greenstand/android/TreeTracker/splash/SplashScreenViewModelTest.kt index 11eb8568d..4b64972e2 100644 --- a/app/src/test/java/org/greenstand/android/TreeTracker/splash/SplashScreenViewModelTest.kt +++ b/app/src/test/java/org/greenstand/android/TreeTracker/splash/SplashScreenViewModelTest.kt @@ -88,6 +88,13 @@ class SplashScreenViewModelTest { @Before fun setUp() { MockKAnnotations.init(this) + // Default behavior to maintain existing test expectations: + // Assume sync is already complete so the "refresh" logic doesn't trigger unexpectedly. + every { orgRepo.hasCompletedInitialOrgSync() } returns true + every { orgRepo.currentOrg() } returns + io.mockk.mockk { + every { id } returns OrgRepo.DEFAULT_ORG_ID + } splashScreenViewModel = SplashScreenViewModel( orgId = orgId,