Skip to content

Commit 657ac05

Browse files
committed
Remove feature flag RichTextEditor, it's replaced by an advanced settings.
1 parent 2d9cdd1 commit 657ac05

File tree

5 files changed

+23
-20
lines changed

5 files changed

+23
-20
lines changed

features/messages/impl/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ dependencies {
4848
implementation(projects.libraries.mediapickers.api)
4949
implementation(projects.libraries.featureflag.api)
5050
implementation(projects.libraries.mediaupload.api)
51+
implementation(projects.libraries.preferences.api)
5152
implementation(projects.features.networkmonitor.api)
5253
implementation(projects.services.analytics.api)
5354
implementation(libs.coil.compose)
@@ -76,6 +77,7 @@ dependencies {
7677
testImplementation(projects.libraries.featureflag.test)
7778
testImplementation(projects.libraries.mediaupload.test)
7879
testImplementation(projects.libraries.mediapickers.test)
80+
testImplementation(projects.libraries.preferences.test)
7981
testImplementation(projects.libraries.textcomposer.test)
8082
testImplementation(libs.test.mockk)
8183

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
5757
import io.element.android.features.messages.impl.utils.messagesummary.MessageSummaryFormatter
5858
import io.element.android.features.networkmonitor.api.NetworkMonitor
5959
import io.element.android.features.networkmonitor.api.NetworkStatus
60+
import io.element.android.features.preferences.api.store.PreferencesStore
6061
import io.element.android.libraries.androidutils.clipboard.ClipboardHelper
6162
import io.element.android.libraries.architecture.Async
6263
import io.element.android.libraries.architecture.Presenter
@@ -66,8 +67,6 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize
6667
import io.element.android.libraries.designsystem.utils.SnackbarDispatcher
6768
import io.element.android.libraries.designsystem.utils.SnackbarMessage
6869
import io.element.android.libraries.designsystem.utils.collectSnackbarMessageAsState
69-
import io.element.android.libraries.featureflag.api.FeatureFlagService
70-
import io.element.android.libraries.featureflag.api.FeatureFlags
7170
import io.element.android.libraries.matrix.api.core.EventId
7271
import io.element.android.libraries.matrix.api.room.MatrixRoom
7372
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
@@ -97,7 +96,7 @@ class MessagesPresenter @AssistedInject constructor(
9796
private val dispatchers: CoroutineDispatchers,
9897
private val clipboardHelper: ClipboardHelper,
9998
private val analyticsService: AnalyticsService,
100-
private val featureFlagService: FeatureFlagService,
99+
private val preferencesStore: PreferencesStore,
101100
@Assisted private val navigator: MessagesNavigator,
102101
) : Presenter<MessagesState> {
103102

@@ -146,15 +145,17 @@ class MessagesPresenter @AssistedInject constructor(
146145
timelineState.eventSink(TimelineEvents.SetHighlightedEvent(composerState.mode.relatedEventId))
147146
}
148147

149-
var enableTextFormatting by remember { mutableStateOf(true) }
150-
LaunchedEffect(Unit) {
151-
enableTextFormatting = featureFlagService.isFeatureEnabled(FeatureFlags.RichTextEditor)
152-
}
148+
val enableTextFormatting by preferencesStore.isRichTextEditorEnabledFlow().collectAsState(initial = true)
153149

154150
fun handleEvents(event: MessagesEvents) {
155151
when (event) {
156152
is MessagesEvents.HandleAction -> {
157-
localCoroutineScope.handleTimelineAction(event.action, event.event, composerState)
153+
localCoroutineScope.handleTimelineAction(
154+
action = event.action,
155+
targetEvent = event.event,
156+
composerState = composerState,
157+
enableTextFormatting = enableTextFormatting,
158+
)
158159
}
159160
is MessagesEvents.ToggleReaction -> {
160161
localCoroutineScope.toggleReaction(event.emoji, event.eventId)
@@ -204,11 +205,12 @@ class MessagesPresenter @AssistedInject constructor(
204205
action: TimelineItemAction,
205206
targetEvent: TimelineItem.Event,
206207
composerState: MessageComposerState,
208+
enableTextFormatting: Boolean,
207209
) = launch {
208210
when (action) {
209211
TimelineItemAction.Copy -> handleCopyContents(targetEvent)
210212
TimelineItemAction.Redact -> handleActionRedact(targetEvent)
211-
TimelineItemAction.Edit -> handleActionEdit(targetEvent, composerState)
213+
TimelineItemAction.Edit -> handleActionEdit(targetEvent, composerState, enableTextFormatting)
212214
TimelineItemAction.Reply,
213215
TimelineItemAction.ReplyInThread -> handleActionReply(targetEvent, composerState)
214216
TimelineItemAction.Developer -> handleShowDebugInfoAction(targetEvent)
@@ -260,11 +262,15 @@ class MessagesPresenter @AssistedInject constructor(
260262
}
261263
}
262264

263-
private suspend fun handleActionEdit(targetEvent: TimelineItem.Event, composerState: MessageComposerState) {
265+
private suspend fun handleActionEdit(
266+
targetEvent: TimelineItem.Event,
267+
composerState: MessageComposerState,
268+
enableTextFormatting: Boolean,
269+
) {
264270
val composerMode = MessageComposerMode.Edit(
265271
targetEvent.eventId,
266272
(targetEvent.content as? TimelineItemTextBasedContent)?.let {
267-
if (featureFlagService.isFeatureEnabled(FeatureFlags.RichTextEditor)) {
273+
if (enableTextFormatting) {
268274
it.htmlBody ?: it.body
269275
} else {
270276
it.body

features/messages/impl/src/test/kotlin/io/element/android/features/messages/MessagesPresenterTest.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize
5454
import io.element.android.libraries.designsystem.utils.SnackbarDispatcher
5555
import io.element.android.libraries.featureflag.api.FeatureFlags
5656
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
57+
import io.element.android.libraries.featureflag.test.InMemoryPreferencesStore
5758
import io.element.android.libraries.matrix.api.media.MediaSource
5859
import io.element.android.libraries.matrix.api.room.MatrixRoom
5960
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
@@ -614,7 +615,7 @@ class MessagesPresenterTest {
614615
messageComposerContext = MessageComposerContextImpl(),
615616
richTextEditorStateFactory = TestRichTextEditorStateFactory(),
616617

617-
)
618+
)
618619
val timelinePresenter = TimelinePresenter(
619620
timelineItemsFactory = aTimelineItemsFactory(),
620621
room = matrixRoom,
@@ -627,7 +628,7 @@ class MessagesPresenterTest {
627628
val customReactionPresenter = CustomReactionPresenter(emojibaseProvider = FakeEmojibaseProvider())
628629
val reactionSummaryPresenter = ReactionSummaryPresenter(room = matrixRoom)
629630
val retrySendMenuPresenter = RetrySendMenuPresenter(room = matrixRoom)
630-
val featureFlagsService = FakeFeatureFlagService(mapOf(FeatureFlags.RichTextEditor.key to true))
631+
val preferencesStore = InMemoryPreferencesStore(isRichTextEditorEnabled = true)
631632
return MessagesPresenter(
632633
room = matrixRoom,
633634
composerPresenter = messageComposerPresenter,
@@ -642,7 +643,7 @@ class MessagesPresenterTest {
642643
navigator = navigator,
643644
clipboardHelper = clipboardHelper,
644645
analyticsService = analyticsService,
645-
featureFlagService = featureFlagsService,
646+
preferencesStore = preferencesStore,
646647
dispatchers = coroutineDispatchers,
647648
)
648649
}

libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,4 @@ enum class FeatureFlags(
4343
title = "Show notification settings",
4444
defaultValue = true,
4545
),
46-
RichTextEditor(
47-
key = "feature.richtexteditor",
48-
title = "Enable rich text editor",
49-
defaultValue = true,
50-
),
5146
}

libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ class StaticFeatureFlagProvider @Inject constructor() :
3535
FeatureFlags.LocationSharing -> true
3636
FeatureFlags.Polls -> true
3737
FeatureFlags.NotificationSettings -> true
38-
FeatureFlags.RichTextEditor -> true
3938
}
4039
} else {
4140
false

0 commit comments

Comments
 (0)