[PM-37255] feat: Wire fill-assist manager into vault sync and app startup (#6992)

This commit is contained in:
aj-rosado
2026-06-30 10:03:46 +00:00
committed by GitHub
parent 3ab1339643
commit 4d6c8c41c6
4 changed files with 21 additions and 0 deletions
@@ -3,6 +3,7 @@ package com.x8bit.bitwarden
import android.app.Application
import com.bitwarden.annotation.OmitFromCoverage
import com.x8bit.bitwarden.data.auth.manager.AuthRequestNotificationManager
import com.x8bit.bitwarden.data.autofill.manager.FillAssistManager
import com.x8bit.bitwarden.data.platform.manager.LogsManager
import com.x8bit.bitwarden.data.platform.manager.event.OrganizationEventManager
import com.x8bit.bitwarden.data.platform.manager.network.NetworkConfigManager
@@ -20,6 +21,9 @@ import javax.inject.Inject
class BitwardenApplication : Application() {
// Inject classes here that must be triggered on startup but are not otherwise consumed by
// other callers.
@Inject
lateinit var fillAssistManager: FillAssistManager
@Inject
lateinit var logsManager: LogsManager
@@ -15,6 +15,7 @@ import com.bitwarden.vault.DecryptCipherListResult
import com.bitwarden.vault.FolderView
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
import com.x8bit.bitwarden.data.auth.manager.UserLogoutManager
import com.x8bit.bitwarden.data.autofill.manager.FillAssistManager
import com.x8bit.bitwarden.data.auth.manager.UserStateManager
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
import com.x8bit.bitwarden.data.auth.repository.util.toAccountCryptographicState
@@ -80,6 +81,7 @@ class VaultSyncManagerImpl(
private val authDiskSource: AuthDiskSource,
private val vaultDiskSource: VaultDiskSource,
private val vaultSdkSource: VaultSdkSource,
private val fillAssistManager: FillAssistManager,
private val userLogoutManager: UserLogoutManager,
private val userStateManager: UserStateManager,
private val vaultLockManager: VaultLockManager,
@@ -342,6 +344,7 @@ class VaultSyncManagerImpl(
lastSyncTime = clock.instant(),
)
vaultDiskSource.replaceVaultData(userId = userId, vault = syncResponse)
fillAssistManager.syncIfNecessary()
val itemsAvailable = syncResponse.ciphers?.isNotEmpty() == true
SyncVaultDataResult.Success(itemsAvailable = itemsAvailable)
}
@@ -44,6 +44,7 @@ import com.x8bit.bitwarden.data.vault.manager.VaultLockManager
import com.x8bit.bitwarden.data.vault.manager.VaultLockManagerImpl
import com.x8bit.bitwarden.data.vault.manager.VaultMigrationManager
import com.x8bit.bitwarden.data.vault.manager.VaultMigrationManagerImpl
import com.x8bit.bitwarden.data.autofill.manager.FillAssistManager
import com.x8bit.bitwarden.data.vault.manager.VaultSyncManager
import com.x8bit.bitwarden.data.vault.manager.VaultSyncManagerImpl
import com.x8bit.bitwarden.data.vault.repository.VaultRepository
@@ -224,6 +225,7 @@ object VaultManagerModule {
@Provides
@Singleton
fun provideVaultSyncManager(
fillAssistManager: FillAssistManager,
syncService: SyncService,
settingsDiskSource: SettingsDiskSource,
authDiskSource: AuthDiskSource,
@@ -237,6 +239,7 @@ object VaultManagerModule {
pushManager: PushManager,
dispatcherManager: DispatcherManager,
): VaultSyncManager = VaultSyncManagerImpl(
fillAssistManager = fillAssistManager,
syncService = syncService,
settingsDiskSource = settingsDiskSource,
authDiskSource = authDiskSource,
@@ -34,6 +34,7 @@ import com.x8bit.bitwarden.data.auth.datasource.disk.model.UserStateJson
import com.x8bit.bitwarden.data.auth.datasource.disk.util.FakeAuthDiskSource
import com.x8bit.bitwarden.data.auth.manager.UserLogoutManager
import com.x8bit.bitwarden.data.auth.manager.UserStateManager
import com.x8bit.bitwarden.data.autofill.manager.FillAssistManager
import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason
import com.x8bit.bitwarden.data.auth.repository.model.createMockWrappedAccountCryptographicState
import com.x8bit.bitwarden.data.platform.datasource.disk.SettingsDiskSource
@@ -144,7 +145,12 @@ class VaultSyncManagerTest {
every { databaseSchemeChangeFlow } returns mutableDatabaseSchemeChangeFlow
}
private val fillAssistManager: FillAssistManager = mockk {
every { syncIfNecessary() } just runs
}
private val vaultSyncManager: VaultSyncManager = VaultSyncManagerImpl(
fillAssistManager = fillAssistManager,
syncService = syncService,
settingsDiskSource = settingsDiskSource,
authDiskSource = fakeAuthDiskSource,
@@ -777,6 +783,7 @@ class VaultSyncManagerTest {
),
)
}
verify(exactly = 1) { fillAssistManager.syncIfNecessary() }
}
@Suppress("MaxLineLength")
@@ -817,6 +824,7 @@ class VaultSyncManagerTest {
),
)
}
verify(exactly = 0) { fillAssistManager.syncIfNecessary() }
}
@Test
@@ -1183,6 +1191,7 @@ class VaultSyncManagerTest {
val syncResult = vaultSyncManager.syncForResult()
assertEquals(SyncVaultDataResult.Success(itemsAvailable = true), syncResult)
verify(exactly = 1) { fillAssistManager.syncIfNecessary() }
}
@Suppress("MaxLineLength")
@@ -1214,6 +1223,7 @@ class VaultSyncManagerTest {
val syncResult = vaultSyncManager.syncForResult()
assertEquals(SyncVaultDataResult.Success(itemsAvailable = false), syncResult)
verify(exactly = 1) { fillAssistManager.syncIfNecessary() }
}
@Test
@@ -1263,6 +1273,7 @@ class VaultSyncManagerTest {
)
}
coVerify(exactly = 0) { syncService.sync() }
verify(exactly = 0) { fillAssistManager.syncIfNecessary() }
}
//region Helper functions