behind feature flag

This commit is contained in:
Maciej Zieniuk
2026-03-27 21:59:51 +00:00
parent 2946186b51
commit 13b41d104a
5 changed files with 28 additions and 6 deletions

View File

@@ -122,6 +122,7 @@ fun SendScreen(
SendDialogs(
dialogState = state.dialogState,
isSendFolderEnabled = state.isSendFolderEnabled,
onAddSendSelected = { viewModel.trySendAction(SendAction.AddSendSelected(it)) },
onDismissRequest = { viewModel.trySendAction(SendAction.DismissDialog) },
)
@@ -211,6 +212,7 @@ fun SendScreen(
@Composable
private fun SendDialogs(
dialogState: SendState.DialogState?,
isSendFolderEnabled: Boolean,
onAddSendSelected: (SendItemType) -> Unit,
onDismissRequest: () -> Unit,
) {
@@ -230,12 +232,14 @@ private fun SendDialogs(
title = stringResource(id = BitwardenString.type),
onDismissRequest = onDismissRequest,
) {
SendItemType.entries.forEach {
BitwardenBasicDialogRow(
text = it.selectionText(),
onClick = { onAddSendSelected(it) },
)
}
SendItemType.entries
.filter { it != SendItemType.FOLDER || isSendFolderEnabled }
.forEach {
BitwardenBasicDialogRow(
text = it.selectionText(),
onClick = { onAddSendSelected(it) },
)
}
}
null -> Unit

View File

@@ -16,8 +16,10 @@ import com.bitwarden.ui.platform.resource.BitwardenDrawable
import com.bitwarden.ui.platform.resource.BitwardenString
import com.bitwarden.ui.util.Text
import com.bitwarden.ui.util.asText
import com.bitwarden.core.data.manager.model.FlagKey
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
import com.x8bit.bitwarden.data.auth.repository.model.UserState
import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager
import com.x8bit.bitwarden.data.platform.manager.PolicyManager
import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager
import com.x8bit.bitwarden.data.platform.manager.network.NetworkConnectionManager
@@ -59,6 +61,7 @@ class SendViewModel @Inject constructor(
private val environmentRepo: EnvironmentRepository,
private val vaultRepo: VaultRepository,
private val networkConnectionManager: NetworkConnectionManager,
featureFlagManager: FeatureFlagManager,
) : BaseViewModel<SendState, SendEvent, SendAction>(
// We load the state from the savedStateHandle for testing purposes.
initialState = savedStateHandle[KEY_STATE]
@@ -71,6 +74,8 @@ class SendViewModel @Inject constructor(
.any(),
isRefreshing = false,
isPremiumUser = authRepo.userStateFlow.value?.activeAccount?.isPremium == true,
isSendFolderEnabled = featureFlagManager
.getFeatureFlag(key = FlagKey.SendFolder),
),
) {
@@ -475,6 +480,7 @@ data class SendState(
val policyDisablesSend: Boolean,
val isRefreshing: Boolean,
val isPremiumUser: Boolean,
val isSendFolderEnabled: Boolean,
) : Parcelable {
/**

View File

@@ -38,6 +38,7 @@ sealed class FlagKey<out T : Any> {
ArchiveItems,
SendEmailVerification,
MobilePremiumUpgrade,
SendFolder,
)
}
}
@@ -116,6 +117,14 @@ sealed class FlagKey<out T : Any> {
override val defaultValue: Boolean = false
}
/**
* Data object holding the feature flag key for the Send Folder feature.
*/
data object SendFolder : FlagKey<Boolean>() {
override val keyName: String = "innovation-sprint-2026-send-folder"
override val defaultValue: Boolean = false
}
//region Dummy keys for testing
/**
* Data object holding the key for a [Boolean] flag to be used in tests.

View File

@@ -32,6 +32,7 @@ fun <T : Any> FlagKey<T>.ListItemContent(
FlagKey.ArchiveItems,
FlagKey.SendEmailVerification,
FlagKey.MobilePremiumUpgrade,
FlagKey.SendFolder,
-> {
@Suppress("UNCHECKED_CAST")
BooleanFlagItem(
@@ -85,4 +86,5 @@ private fun <T : Any> FlagKey<T>.getDisplayLabel(): String = when (this) {
FlagKey.ArchiveItems -> stringResource(BitwardenString.archive_items)
FlagKey.SendEmailVerification -> stringResource(BitwardenString.send_email_verification)
FlagKey.MobilePremiumUpgrade -> stringResource(BitwardenString.mobile_premium_upgrade)
FlagKey.SendFolder -> stringResource(BitwardenString.send_folder)
}

View File

@@ -46,6 +46,7 @@
<string name="trigger_cookie_acquisition">Trigger cookie acquisition</string>
<string name="clear_sso_cookies">Clear SSO cookies</string>
<string name="mobile_premium_upgrade">Mobile Premium Upgrade</string>
<string name="send_folder">Send Folder</string>
<!-- endregion Debug Menu -->
</resources>