Gate user status behind UserStatus feature flag

This commit is contained in:
ganfra
2026-06-17 17:20:58 +02:00
parent 1cfd3e4dfb
commit dd24e14cf6
5 changed files with 40 additions and 14 deletions
@@ -62,20 +62,20 @@ class PreferencesRootPresenter(
) : Presenter<PreferencesRootState> {
@Composable
override fun present(): PreferencesRootState {
val userStatusState = userStatusPresenter.present()
val coroutineScope = rememberCoroutineScope()
val matrixUser = matrixClient.userProfile.collectAsState()
LaunchedEffect(Unit) {
// Force a refresh of the profile
matrixClient.getUserProfile()
}
val isMultiAccountEnabled by remember {
featureFlagService.isFeatureEnabledFlow(FeatureFlags.MultiAccount)
}.collectAsState(initial = false)
val showLinkNewDevice by remember {
featureFlagService.isFeatureEnabledFlow(FeatureFlags.QrCodeLogin)
}.collectAsState(initial = false)
val isUserStatusEnabled by featureFlagService.isFeatureEnabledFlow(FeatureFlags.UserStatus).collectAsState(initial = false)
val userStatusState = if (isUserStatusEnabled) userStatusPresenter.present() else null
val otherSessions by remember {
sessionStore.sessionsFlow().map { list ->
@@ -17,7 +17,7 @@ import kotlinx.collections.immutable.ImmutableList
data class PreferencesRootState(
val myUser: MatrixUser,
val userStatusState: UserStatusState,
val userStatusState: UserStatusState?,
val version: String,
val deviceId: DeviceId?,
val isMultiAccountEnabled: Boolean,
@@ -88,7 +88,7 @@ fun aPreferencesRootState(
nbOfBlockedUsers: Int = 0,
showLabsItem: Boolean = false,
directLogoutState: DirectLogoutState = aDirectLogoutState(),
userStatusState: UserStatusState = aUserStatusState(),
userStatusState: UserStatusState? = aUserStatusState(),
snackbarMessage: SnackbarMessage? = null,
eventSink: (PreferencesRootEvent) -> Unit = {},
) = PreferencesRootState(
@@ -25,6 +25,7 @@ import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.preferences.impl.R
import io.element.android.features.preferences.impl.user.UserPreferences
import io.element.android.features.preferences.impl.userstatus.UserStatusRow
import io.element.android.features.preferences.impl.userstatus.UserStatusState
import io.element.android.libraries.architecture.coverage.ExcludeFromCoverage
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.components.list.ListItemContent
@@ -82,15 +83,14 @@ fun PreferencesRootView(
},
matrixUser = state.myUser,
)
HorizontalDivider()
UserStatusRow(
state = state.userStatusState,
modifier = Modifier.fillMaxWidth(),
)
HorizontalDivider()
if (state.userStatusState != null) {
UserStatusSection(state.userStatusState)
}
if (state.isMultiAccountEnabled) {
MultiAccountSection(
state = state,
showTopDivider = state.userStatusState == null,
onAddAccountClick = onAddAccountClick,
)
}
@@ -135,14 +135,33 @@ fun PreferencesRootView(
}
@Composable
private fun ColumnScope.MultiAccountSection(
state: PreferencesRootState,
onAddAccountClick: () -> Unit,
) {
private fun ColumnScope.UserStatusSection(userStatusState: UserStatusState) {
HorizontalDivider(
thickness = 8.dp,
color = ElementTheme.colors.bgSubtleSecondary,
)
UserStatusRow(
state = userStatusState,
modifier = Modifier.fillMaxWidth(),
)
HorizontalDivider(
thickness = 8.dp,
color = ElementTheme.colors.bgSubtleSecondary,
)
}
@Composable
private fun ColumnScope.MultiAccountSection(
state: PreferencesRootState,
showTopDivider: Boolean,
onAddAccountClick: () -> Unit,
) {
if(showTopDivider) {
HorizontalDivider(
thickness = 8.dp,
color = ElementTheme.colors.bgSubtleSecondary,
)
}
state.otherSessions.forEach { matrixUser ->
MatrixUserRow(
modifier = Modifier
@@ -137,4 +137,11 @@ enum class FeatureFlags(
defaultValue = { false },
isFinished = false,
),
UserStatus(
key = "feature.user_status",
title = "User status",
description = "Allow users to set a status (e.g. In a meeting, Away) visible to their contacts.",
defaultValue = { false },
isFinished = false,
),
}