Add feature flag

This commit is contained in:
yostyle
2023-08-17 09:32:06 +02:00
parent 683eb778dc
commit eea849d74c
7 changed files with 22 additions and 4 deletions

View File

@@ -42,6 +42,7 @@ dependencies {
implementation(projects.libraries.androidutils)
implementation(projects.libraries.mediapickers.api)
implementation(projects.libraries.mediaupload.api)
implementation(projects.libraries.featureflag.api)
api(projects.features.roomdetails.api)
api(projects.libraries.usersearch.api)
api(projects.services.apperror.api)

View File

@@ -22,6 +22,7 @@ import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@@ -30,6 +31,8 @@ import io.element.android.features.leaveroom.api.LeaveRoomPresenter
import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsPresenter
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.featureflag.api.FeatureFlagService
import io.element.android.libraries.featureflag.api.FeatureFlags
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.notificationsettings.NotificationSettingsService
import io.element.android.libraries.matrix.api.room.MatrixRoom
@@ -49,6 +52,7 @@ import javax.inject.Inject
class RoomDetailsPresenter @Inject constructor(
private val client: MatrixClient,
private val room: MatrixRoom,
private val featureFlagService: FeatureFlagService,
private val notificationSettingsService: NotificationSettingsService,
private val roomMembersDetailsPresenterFactory: RoomMemberDetailsPresenter.Factory,
private val leaveRoomPresenter: LeaveRoomPresenter,
@@ -59,9 +63,14 @@ class RoomDetailsPresenter @Inject constructor(
override fun present(): RoomDetailsState {
val scope = rememberCoroutineScope()
val leaveRoomState = leaveRoomPresenter.present()
val canShowNotificationSettings = remember { mutableStateOf(false) }
LaunchedEffect(Unit) {
room.updateRoomNotificationSettings()
observeNotificationSettings()
canShowNotificationSettings.value = featureFlagService.isFeatureEnabled(FeatureFlags.NotificationSettings)
if (canShowNotificationSettings.value) {
room.updateRoomNotificationSettings()
observeNotificationSettings()
}
room.updateMembers()
}
@@ -115,6 +124,7 @@ class RoomDetailsPresenter @Inject constructor(
isEncrypted = room.isEncrypted,
canInvite = canInvite,
canEdit = (canEditAvatar || canEditName || canEditTopic) && roomType == RoomDetailsType.Room,
canShowNotificationSettings = canShowNotificationSettings.value,
roomType = roomType,
roomMemberDetailsState = roomMemberDetailsState,
leaveRoomState = leaveRoomState,

View File

@@ -33,6 +33,7 @@ data class RoomDetailsState(
val roomMemberDetailsState: RoomMemberDetailsState?,
val canEdit: Boolean,
val canInvite: Boolean,
val canShowNotificationSettings: Boolean,
val leaveRoomState: LeaveRoomState,
val roomNotificationSettings: RoomNotificationSettings?,
val eventSink: (RoomDetailsEvent) -> Unit

View File

@@ -77,6 +77,7 @@ fun aRoomDetailsState() = RoomDetailsState(
isEncrypted = true,
canInvite = false,
canEdit = false,
canShowNotificationSettings = true,
roomType = RoomDetailsType.Room,
roomMemberDetailsState = null,
leaveRoomState = LeaveRoomState(),

View File

@@ -148,7 +148,7 @@ fun RoomDetailsView(
)
}
if (state.roomNotificationSettings != null) {
if (state.canShowNotificationSettings && state.roomNotificationSettings != null) {
NotificationSection(
state = state,
openRoomNotificationSettings = openRoomNotificationSettings)
@@ -226,7 +226,7 @@ internal fun RoomDetailsTopBar(
internal fun MainActionsSection(state: RoomDetailsState, onShareRoom: () -> Unit, modifier: Modifier = Modifier) {
Row(modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) {
val roomNotificationSettings = state.roomNotificationSettings
if (roomNotificationSettings != null) {
if (state.canShowNotificationSettings && roomNotificationSettings != null) {
if (roomNotificationSettings.mode == RoomNotificationMode.MUTE) {
MainActionButton(title = stringResource(CommonStrings.common_unmute), icon = Icons.Outlined.NotificationsOff, onClick = {
state.eventSink(RoomDetailsEvent.UnmuteNotification)

View File

@@ -32,4 +32,8 @@ enum class FeatureFlags(
description = "Render poll events in the timeline",
defaultValue = false,
)
NotificationSettings(
key = "feature.notificationsettings",
title = "Show notification settings",
)
}

View File

@@ -31,6 +31,7 @@ class BuildtimeFeatureFlagProvider @Inject constructor() :
when (feature) {
FeatureFlags.LocationSharing -> true
FeatureFlags.Polls -> false
FeatureFlags.NotificationSettings -> false
}
} else {
false