Remove FeatureFlag.LocationSharing and FeatureFlag.Polls
This commit is contained in:
parent
75b4a4ba9d
commit
92990b27f3
8 changed files with 11 additions and 52 deletions
|
|
@ -132,17 +132,15 @@ private fun AttachmentSourcePickerMenu(
|
||||||
style = ListItemStyle.Primary,
|
style = ListItemStyle.Primary,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (state.canCreatePoll) {
|
ListItem(
|
||||||
ListItem(
|
modifier = Modifier.clickable {
|
||||||
modifier = Modifier.clickable {
|
state.eventSink(MessageComposerEvents.PickAttachmentSource.Poll)
|
||||||
state.eventSink(MessageComposerEvents.PickAttachmentSource.Poll)
|
onCreatePollClick()
|
||||||
onCreatePollClick()
|
},
|
||||||
},
|
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Polls())),
|
||||||
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Polls())),
|
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_poll)) },
|
||||||
headlineContent = { Text(stringResource(R.string.screen_room_attachment_source_poll)) },
|
style = ListItemStyle.Primary,
|
||||||
style = ListItemStyle.Primary,
|
)
|
||||||
)
|
|
||||||
}
|
|
||||||
if (enableTextFormatting) {
|
if (enableTextFormatting) {
|
||||||
ListItem(
|
ListItem(
|
||||||
modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.ToggleTextFormatting(enabled = true)) },
|
modifier = Modifier.clickable { state.eventSink(MessageComposerEvents.ToggleTextFormatting(enabled = true)) },
|
||||||
|
|
|
||||||
|
|
@ -45,8 +45,6 @@ import io.element.android.libraries.core.mimetype.MimeTypes
|
||||||
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
|
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
|
||||||
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
|
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
|
||||||
import io.element.android.libraries.di.annotations.SessionCoroutineScope
|
import io.element.android.libraries.di.annotations.SessionCoroutineScope
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.permalink.PermalinkBuilder
|
import io.element.android.libraries.matrix.api.permalink.PermalinkBuilder
|
||||||
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
|
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
|
||||||
|
|
@ -103,7 +101,6 @@ class MessageComposerPresenter @AssistedInject constructor(
|
||||||
private val sessionCoroutineScope: CoroutineScope,
|
private val sessionCoroutineScope: CoroutineScope,
|
||||||
private val room: JoinedRoom,
|
private val room: JoinedRoom,
|
||||||
private val mediaPickerProvider: PickerProvider,
|
private val mediaPickerProvider: PickerProvider,
|
||||||
private val featureFlagService: FeatureFlagService,
|
|
||||||
private val sessionPreferencesStore: SessionPreferencesStore,
|
private val sessionPreferencesStore: SessionPreferencesStore,
|
||||||
private val localMediaFactory: LocalMediaFactory,
|
private val localMediaFactory: LocalMediaFactory,
|
||||||
private val mediaSender: MediaSender,
|
private val mediaSender: MediaSender,
|
||||||
|
|
@ -156,13 +153,7 @@ class MessageComposerPresenter @AssistedInject constructor(
|
||||||
|
|
||||||
val canShareLocation = remember { mutableStateOf(false) }
|
val canShareLocation = remember { mutableStateOf(false) }
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
canShareLocation.value = featureFlagService.isFeatureEnabled(FeatureFlags.LocationSharing) &&
|
canShareLocation.value = locationService.isServiceAvailable()
|
||||||
locationService.isServiceAvailable()
|
|
||||||
}
|
|
||||||
|
|
||||||
val canCreatePoll = remember { mutableStateOf(false) }
|
|
||||||
LaunchedEffect(Unit) {
|
|
||||||
canCreatePoll.value = featureFlagService.isFeatureEnabled(FeatureFlags.Polls)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val galleryMediaPicker = mediaPickerProvider.registerGalleryPicker { uri, mimeType ->
|
val galleryMediaPicker = mediaPickerProvider.registerGalleryPicker { uri, mimeType ->
|
||||||
|
|
@ -376,7 +367,6 @@ class MessageComposerPresenter @AssistedInject constructor(
|
||||||
showAttachmentSourcePicker = showAttachmentSourcePicker,
|
showAttachmentSourcePicker = showAttachmentSourcePicker,
|
||||||
showTextFormatting = showTextFormatting,
|
showTextFormatting = showTextFormatting,
|
||||||
canShareLocation = canShareLocation.value,
|
canShareLocation = canShareLocation.value,
|
||||||
canCreatePoll = canCreatePoll.value,
|
|
||||||
suggestions = suggestions.toPersistentList(),
|
suggestions = suggestions.toPersistentList(),
|
||||||
resolveMentionDisplay = resolveMentionDisplay,
|
resolveMentionDisplay = resolveMentionDisplay,
|
||||||
resolveAtRoomMentionDisplay = resolveAtRoomMentionDisplay,
|
resolveAtRoomMentionDisplay = resolveAtRoomMentionDisplay,
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ data class MessageComposerState(
|
||||||
val showAttachmentSourcePicker: Boolean,
|
val showAttachmentSourcePicker: Boolean,
|
||||||
val showTextFormatting: Boolean,
|
val showTextFormatting: Boolean,
|
||||||
val canShareLocation: Boolean,
|
val canShareLocation: Boolean,
|
||||||
val canCreatePoll: Boolean,
|
|
||||||
val suggestions: ImmutableList<ResolvedSuggestion>,
|
val suggestions: ImmutableList<ResolvedSuggestion>,
|
||||||
val resolveMentionDisplay: (String, String) -> TextDisplay,
|
val resolveMentionDisplay: (String, String) -> TextDisplay,
|
||||||
val resolveAtRoomMentionDisplay: () -> TextDisplay,
|
val resolveAtRoomMentionDisplay: () -> TextDisplay,
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ fun aMessageComposerState(
|
||||||
showTextFormatting: Boolean = false,
|
showTextFormatting: Boolean = false,
|
||||||
showAttachmentSourcePicker: Boolean = false,
|
showAttachmentSourcePicker: Boolean = false,
|
||||||
canShareLocation: Boolean = true,
|
canShareLocation: Boolean = true,
|
||||||
canCreatePoll: Boolean = true,
|
|
||||||
suggestions: ImmutableList<ResolvedSuggestion> = persistentListOf(),
|
suggestions: ImmutableList<ResolvedSuggestion> = persistentListOf(),
|
||||||
eventSink: (MessageComposerEvents) -> Unit = {},
|
eventSink: (MessageComposerEvents) -> Unit = {},
|
||||||
) = MessageComposerState(
|
) = MessageComposerState(
|
||||||
|
|
@ -40,7 +39,6 @@ fun aMessageComposerState(
|
||||||
showTextFormatting = showTextFormatting,
|
showTextFormatting = showTextFormatting,
|
||||||
showAttachmentSourcePicker = showAttachmentSourcePicker,
|
showAttachmentSourcePicker = showAttachmentSourcePicker,
|
||||||
canShareLocation = canShareLocation,
|
canShareLocation = canShareLocation,
|
||||||
canCreatePoll = canCreatePoll,
|
|
||||||
suggestions = suggestions,
|
suggestions = suggestions,
|
||||||
resolveMentionDisplay = { _, _ -> TextDisplay.Plain },
|
resolveMentionDisplay = { _, _ -> TextDisplay.Plain },
|
||||||
resolveAtRoomMentionDisplay = { TextDisplay.Plain },
|
resolveAtRoomMentionDisplay = { TextDisplay.Plain },
|
||||||
|
|
|
||||||
|
|
@ -9,23 +9,18 @@ package io.element.android.features.messages.impl.timeline.factories.event
|
||||||
|
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent
|
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemPollContent
|
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemPollContent
|
||||||
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent
|
|
||||||
import io.element.android.features.poll.api.pollcontent.PollContentStateFactory
|
import io.element.android.features.poll.api.pollcontent.PollContentStateFactory
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class TimelineItemContentPollFactory @Inject constructor(
|
class TimelineItemContentPollFactory @Inject constructor(
|
||||||
private val featureFlagService: FeatureFlagService,
|
|
||||||
private val pollContentStateFactory: PollContentStateFactory,
|
private val pollContentStateFactory: PollContentStateFactory,
|
||||||
) {
|
) {
|
||||||
suspend fun create(
|
suspend fun create(
|
||||||
event: EventTimelineItem,
|
event: EventTimelineItem,
|
||||||
content: PollContent,
|
content: PollContent,
|
||||||
): TimelineItemEventContent {
|
): TimelineItemEventContent {
|
||||||
if (!featureFlagService.isFeatureEnabled(FeatureFlags.Polls)) return TimelineItemUnknownContent
|
|
||||||
val pollContentState = pollContentStateFactory.create(event, content)
|
val pollContentState = pollContentStateFactory.create(event, content)
|
||||||
return TimelineItemPollContent(
|
return TimelineItemPollContent(
|
||||||
isMine = pollContentState.isMine,
|
isMine = pollContentState.isMine,
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ internal fun TestScope.aTimelineItemsFactory(
|
||||||
fileSizeFormatter = FakeFileSizeFormatter(),
|
fileSizeFormatter = FakeFileSizeFormatter(),
|
||||||
fileExtensionExtractor = FileExtensionExtractorWithoutValidation()
|
fileExtensionExtractor = FileExtensionExtractorWithoutValidation()
|
||||||
),
|
),
|
||||||
pollFactory = TimelineItemContentPollFactory(FakeFeatureFlagService(), FakePollContentStateFactory()),
|
pollFactory = TimelineItemContentPollFactory(FakePollContentStateFactory()),
|
||||||
utdFactory = TimelineItemContentUTDFactory(),
|
utdFactory = TimelineItemContentUTDFactory(),
|
||||||
roomMembershipFactory = TimelineItemContentRoomMembershipFactory(timelineEventFormatter),
|
roomMembershipFactory = TimelineItemContentRoomMembershipFactory(timelineEventFormatter),
|
||||||
profileChangeFactory = TimelineItemContentProfileChangeFactory(timelineEventFormatter),
|
profileChangeFactory = TimelineItemContentProfileChangeFactory(timelineEventFormatter),
|
||||||
|
|
|
||||||
|
|
@ -32,9 +32,6 @@ import io.element.android.features.messages.impl.utils.FakeTextPillificationHelp
|
||||||
import io.element.android.features.messages.impl.utils.TextPillificationHelper
|
import io.element.android.features.messages.impl.utils.TextPillificationHelper
|
||||||
import io.element.android.libraries.core.mimetype.MimeTypes
|
import io.element.android.libraries.core.mimetype.MimeTypes
|
||||||
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
|
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
import io.element.android.libraries.matrix.api.core.EventId
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import io.element.android.libraries.matrix.api.core.ThreadId
|
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||||
|
|
@ -125,9 +122,6 @@ class MessageComposerPresenterTest {
|
||||||
private val pickerProvider = FakePickerProvider().apply {
|
private val pickerProvider = FakePickerProvider().apply {
|
||||||
givenResult(mockk()) // Uri is not available in JVM, so the only way to have a non-null Uri is using Mockk
|
givenResult(mockk()) // Uri is not available in JVM, so the only way to have a non-null Uri is using Mockk
|
||||||
}
|
}
|
||||||
private val featureFlagService = FakeFeatureFlagService(
|
|
||||||
mapOf(FeatureFlags.LocationSharing.key to true)
|
|
||||||
)
|
|
||||||
private val mediaPreProcessor = FakeMediaPreProcessor()
|
private val mediaPreProcessor = FakeMediaPreProcessor()
|
||||||
private val snackbarDispatcher = SnackbarDispatcher()
|
private val snackbarDispatcher = SnackbarDispatcher()
|
||||||
private val mockMediaUrl: Uri = mockk("localMediaUri")
|
private val mockMediaUrl: Uri = mockk("localMediaUri")
|
||||||
|
|
@ -1529,7 +1523,6 @@ class MessageComposerPresenterTest {
|
||||||
),
|
),
|
||||||
navigator: MessagesNavigator = FakeMessagesNavigator(),
|
navigator: MessagesNavigator = FakeMessagesNavigator(),
|
||||||
pickerProvider: PickerProvider = this@MessageComposerPresenterTest.pickerProvider,
|
pickerProvider: PickerProvider = this@MessageComposerPresenterTest.pickerProvider,
|
||||||
featureFlagService: FeatureFlagService = this@MessageComposerPresenterTest.featureFlagService,
|
|
||||||
locationService: LocationService = FakeLocationService(true),
|
locationService: LocationService = FakeLocationService(true),
|
||||||
sessionPreferencesStore: SessionPreferencesStore = InMemorySessionPreferencesStore(),
|
sessionPreferencesStore: SessionPreferencesStore = InMemorySessionPreferencesStore(),
|
||||||
mediaPreProcessor: MediaPreProcessor = this@MessageComposerPresenterTest.mediaPreProcessor,
|
mediaPreProcessor: MediaPreProcessor = this@MessageComposerPresenterTest.mediaPreProcessor,
|
||||||
|
|
@ -1551,7 +1544,6 @@ class MessageComposerPresenterTest {
|
||||||
sessionCoroutineScope = this,
|
sessionCoroutineScope = this,
|
||||||
room = room,
|
room = room,
|
||||||
mediaPickerProvider = pickerProvider,
|
mediaPickerProvider = pickerProvider,
|
||||||
featureFlagService = featureFlagService,
|
|
||||||
sessionPreferencesStore = sessionPreferencesStore,
|
sessionPreferencesStore = sessionPreferencesStore,
|
||||||
localMediaFactory = localMediaFactory,
|
localMediaFactory = localMediaFactory,
|
||||||
mediaSender = MediaSender(
|
mediaSender = MediaSender(
|
||||||
|
|
|
||||||
|
|
@ -21,19 +21,6 @@ enum class FeatureFlags(
|
||||||
override val defaultValue: (BuildMeta) -> Boolean,
|
override val defaultValue: (BuildMeta) -> Boolean,
|
||||||
override val isFinished: Boolean,
|
override val isFinished: Boolean,
|
||||||
) : Feature {
|
) : Feature {
|
||||||
LocationSharing(
|
|
||||||
key = "feature.locationsharing",
|
|
||||||
title = "Allow user to share location",
|
|
||||||
defaultValue = { true },
|
|
||||||
isFinished = true,
|
|
||||||
),
|
|
||||||
Polls(
|
|
||||||
key = "feature.polls",
|
|
||||||
title = "Polls",
|
|
||||||
description = "Create poll and render poll events in the timeline",
|
|
||||||
defaultValue = { true },
|
|
||||||
isFinished = true,
|
|
||||||
),
|
|
||||||
NotificationSettings(
|
NotificationSettings(
|
||||||
key = "feature.notificationsettings",
|
key = "feature.notificationsettings",
|
||||||
title = "Show notification settings",
|
title = "Show notification settings",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue