Add VaultTimeoutAction handling to SettingsRepository (#521)

This commit is contained in:
Brian Yencho
2024-01-07 13:31:04 -06:00
committed by Álison Fernandes
parent e2c35fc373
commit 6470959085
3 changed files with 118 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
package com.x8bit.bitwarden.data.platform.repository
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeout
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction
import kotlinx.coroutines.flow.StateFlow
/**
@@ -16,4 +17,23 @@ interface SettingsRepository {
* Stores the given [vaultTimeout] for the given [userId].
*/
fun storeVaultTimeout(userId: String, vaultTimeout: VaultTimeout)
/**
* Gets updates for the [VaultTimeoutAction] associated with the given [userId].
*
* Note that in cases where no value has been set, a default will be returned. Use
* [isVaultTimeoutActionSet] to see if there is an actual value set.
*/
fun getVaultTimeoutActionStateFlow(userId: String): StateFlow<VaultTimeoutAction>
/**
* Returns `true` if a [VaultTimeoutAction] is set for the given [userId], and `false`
* otherwise.
*/
fun isVaultTimeoutActionSet(userId: String): Boolean
/**
* Stores the given [VaultTimeoutAction] for the given [userId].
*/
fun storeVaultTimeoutAction(userId: String, vaultTimeoutAction: VaultTimeoutAction?)
}

View File

@@ -3,6 +3,7 @@ package com.x8bit.bitwarden.data.platform.repository
import com.x8bit.bitwarden.data.platform.datasource.disk.SettingsDiskSource
import com.x8bit.bitwarden.data.platform.manager.dispatcher.DispatcherManager
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeout
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
@@ -36,6 +37,34 @@ class SettingsRepositoryImpl(
vaultTimeoutInMinutes = vaultTimeout.vaultTimeoutInMinutes,
)
}
override fun getVaultTimeoutActionStateFlow(
userId: String,
): StateFlow<VaultTimeoutAction> =
settingsDiskSource
.getVaultTimeoutActionFlow(userId = userId)
.map { it.orDefault() }
.stateIn(
scope = unconfinedScope,
started = SharingStarted.Eagerly,
initialValue = settingsDiskSource
.getVaultTimeoutAction(userId = userId)
.orDefault(),
)
override fun isVaultTimeoutActionSet(
userId: String,
): Boolean = settingsDiskSource.getVaultTimeoutAction(userId = userId) != null
override fun storeVaultTimeoutAction(
userId: String,
vaultTimeoutAction: VaultTimeoutAction?,
) {
settingsDiskSource.storeVaultTimeoutAction(
userId = userId,
vaultTimeoutAction = vaultTimeoutAction,
)
}
}
/**
@@ -53,3 +82,9 @@ private fun Int?.toVaultTimeout(): VaultTimeout =
null -> VaultTimeout.Never
else -> VaultTimeout.Custom(vaultTimeoutInMinutes = this)
}
/**
* Returns the given [VaultTimeoutAction] or a default value if `null`.
*/
private fun VaultTimeoutAction?.orDefault(): VaultTimeoutAction =
this ?: VaultTimeoutAction.LOCK