Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,18 @@ sealed class PolicyInformation {
val minutes: Int?,

@SerialName("action")
val action: String?,
) : PolicyInformation()
val action: Action?,
) : PolicyInformation() {
/**
* The action to take when the vault timeout is reached.
*/
@Serializable
enum class Action {
@SerialName("lock")
LOCK,

@SerialName("logOut")
LOGOUT,
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -647,10 +647,9 @@ class SettingsRepositoryImpl(
}
}
vaultUnlockPolicy.action?.let {
vaultTimeoutAction = if (it == "lock") {
VaultTimeoutAction.LOCK
} else {
VaultTimeoutAction.LOGOUT
vaultTimeoutAction = when (it) {
PolicyInformation.VaultTimeout.Action.LOCK -> VaultTimeoutAction.LOCK
PolicyInformation.VaultTimeout.Action.LOGOUT -> VaultTimeoutAction.LOGOUT
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ import com.bitwarden.ui.platform.resource.BitwardenString
import com.bitwarden.ui.platform.theme.BitwardenTheme
import com.bitwarden.ui.util.Text
import com.bitwarden.ui.util.asText
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeout
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction
import com.x8bit.bitwarden.ui.platform.components.toggle.BitwardenUnlockWithBiometricsSwitch
Expand Down Expand Up @@ -473,25 +474,25 @@ private fun AccountSecurityDialogs(
@Composable
private fun SessionTimeoutPolicyRow(
vaultTimeoutPolicyMinutes: Int?,
vaultTimeoutPolicyAction: String?,
vaultTimeoutPolicyAction: PolicyInformation.VaultTimeout.Action?,
modifier: Modifier = Modifier,
) {
// Show the policy warning if applicable.
if (vaultTimeoutPolicyMinutes != null || !vaultTimeoutPolicyAction.isNullOrBlank()) {
if (vaultTimeoutPolicyMinutes != null || vaultTimeoutPolicyAction != null) {
// Calculate the hours and minutes to show in the policy label.
val hours = vaultTimeoutPolicyMinutes?.floorDiv(MINUTES_PER_HOUR)
val minutes = vaultTimeoutPolicyMinutes?.mod(MINUTES_PER_HOUR)

// Get the localized version of the action.
val action = if (vaultTimeoutPolicyAction == "lock") {
BitwardenString.lock.asText()
} else {
BitwardenString.log_out.asText()
val action = when (vaultTimeoutPolicyAction) {
PolicyInformation.VaultTimeout.Action.LOCK -> BitwardenString.lock.asText()
PolicyInformation.VaultTimeout.Action.LOGOUT -> BitwardenString.log_out.asText()
null -> BitwardenString.log_out.asText()
}

val policyText = if (hours == null || minutes == null) {
BitwardenString.vault_timeout_action_policy_in_effect.asText(action)
} else if (vaultTimeoutPolicyAction.isNullOrBlank()) {
} else if (vaultTimeoutPolicyAction == null) {
BitwardenString.vault_timeout_policy_in_effect.asText(hours, minutes)
} else {
BitwardenString.vault_timeout_policy_with_action_in_effect.asText(
Expand Down Expand Up @@ -629,7 +630,7 @@ private fun SessionCustomTimeoutRow(
@Composable
private fun SessionTimeoutActionRow(
isEnabled: Boolean,
vaultTimeoutPolicyAction: String?,
vaultTimeoutPolicyAction: PolicyInformation.VaultTimeout.Action?,
selectedVaultTimeoutAction: VaultTimeoutAction,
onVaultTimeoutActionSelect: (VaultTimeoutAction) -> Unit,
modifier: Modifier = Modifier,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ data class AccountSecurityState(
val vaultTimeout: VaultTimeout,
val vaultTimeoutAction: VaultTimeoutAction,
val vaultTimeoutPolicyMinutes: Int?,
val vaultTimeoutPolicyAction: String?,
val vaultTimeoutPolicyAction: PolicyInformation.VaultTimeout.Action?,
val shouldShowUnlockActionCard: Boolean,
val removeUnlockWithPinPolicyEnabled: Boolean,
) : Parcelable {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class SyncResponseJsonExtensionsTest {
fun `policyInformation converts the VaultTimeout Json data to policy information`() {
val policyInformation = PolicyInformation.VaultTimeout(
minutes = 10,
action = "lock",
action = PolicyInformation.VaultTimeout.Action.LOCK,
)
val policy = createMockPolicy(
type = PolicyTypeJson.MAXIMUM_VAULT_TIMEOUT,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
import com.bitwarden.ui.platform.manager.IntentManager
import com.bitwarden.ui.util.asText
import com.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.data.auth.repository.model.PolicyInformation
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeout
import com.x8bit.bitwarden.data.platform.repository.model.VaultTimeoutAction
import com.x8bit.bitwarden.ui.platform.base.BitwardenComposeTest
Expand Down Expand Up @@ -602,7 +603,7 @@ class AccountSecurityScreenTest : BitwardenComposeTest() {
mutableStateFlow.update {
it.copy(
vaultTimeoutPolicyMinutes = 100,
vaultTimeoutPolicyAction = "lock",
vaultTimeoutPolicyAction = PolicyInformation.VaultTimeout.Action.LOCK,
)
}
val bothText = "Your organization policies are affecting your vault timeout. " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {

val policyInformation = PolicyInformation.VaultTimeout(
minutes = 10,
action = "lock",
action = PolicyInformation.VaultTimeout.Action.LOCK,
)
mutableActivePolicyFlow.emit(
listOf(
Expand All @@ -159,7 +159,7 @@ class AccountSecurityViewModelTest : BaseViewModelTest() {
assertEquals(
DEFAULT_STATE.copy(
vaultTimeoutPolicyMinutes = 10,
vaultTimeoutPolicyAction = "lock",
vaultTimeoutPolicyAction = PolicyInformation.VaultTimeout.Action.LOCK,
),
awaitItem(),
)
Expand Down
Loading