Do some renaming now that user can select multiple answers per poll

This commit is contained in:
Benoit Marty
2026-08-31 15:45:14 +02:00
parent 0ad3ab1d9d
commit 012c5a1f81
12 changed files with 35 additions and 35 deletions
@@ -12,17 +12,17 @@ import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.timeline.Timeline
/**
* Sends the current user's answer to a poll, wrapping the timeline call so the analytics are captured in one place.
* Sends the current user's answer(s) to a poll, wrapping the timeline call so the analytics are captured in one place.
*/
interface SendPollResponseAction {
/**
* @param timeline the timeline the poll lives in.
* @param pollStartId the poll start event being answered.
* @param answerId the id of the chosen answer.
* @param answerIds the ids of the chosen answers.
*/
suspend fun execute(
timeline: Timeline,
pollStartId: EventId,
answerIds: List<String>
answerIds: List<String>,
): Result<Unit>
}
@@ -40,7 +40,7 @@ import kotlinx.collections.immutable.ImmutableList
@Composable
fun PollContentView(
state: PollContentState,
onSelectAnswer: (pollStartId: EventId, answerIds: List<String>) -> Unit,
onSendPollResponse: (pollStartId: EventId, answerIds: List<String>) -> Unit,
onEditPoll: (pollStartId: EventId) -> Unit,
onEndPoll: (pollStartId: EventId) -> Unit,
modifier: Modifier = Modifier,
@@ -56,7 +56,7 @@ fun PollContentView(
isPollEnded = state.isPollEnded,
isMine = state.isMine,
onEditPoll = onEditPoll,
onSelectAnswer = onSelectAnswer,
onSendPollResponse = onSendPollResponse,
onEndPoll = onEndPoll,
modifier = modifier,
)
@@ -73,7 +73,7 @@ fun PollContentView(
isPollEditable: Boolean,
isPollEnded: Boolean,
isMine: Boolean,
onSelectAnswer: (pollStartId: EventId, answerIds: List<String>) -> Unit,
onSendPollResponse: (pollStartId: EventId, answerIds: List<String>) -> Unit,
onEditPoll: (pollStartId: EventId) -> Unit,
onEndPoll: (pollStartId: EventId) -> Unit,
modifier: Modifier = Modifier,
@@ -92,10 +92,10 @@ fun PollContentView(
}.filter { it.isSelected }.map { it.answer.id }
// Only send the response if the selection count is within the limit
if (newSelections.size <= maxSelections.toInt()) {
onSelectAnswer(it, newSelections)
onSendPollResponse(it, newSelections)
}
} else {
onSelectAnswer(it, listOf(pollAnswer.id))
onSendPollResponse(it, listOf(pollAnswer.id))
}
}
}
@@ -238,7 +238,7 @@ internal fun PollContentViewUndisclosedPreview() = ElementPreview {
isPollEnded = false,
isPollEditable = false,
isMine = false,
onSelectAnswer = { _, _ -> },
onSendPollResponse = { _, _ -> },
onEditPoll = {},
onEndPoll = {},
)
@@ -257,7 +257,7 @@ internal fun PollContentViewDisclosedPreview() = ElementPreview {
isPollEnded = false,
isPollEditable = false,
isMine = false,
onSelectAnswer = { _, _ -> },
onSendPollResponse = { _, _ -> },
onEditPoll = {},
onEndPoll = {},
)
@@ -276,7 +276,7 @@ internal fun PollContentViewMultipleSelectionPreview() = ElementPreview {
isPollEnded = false,
isPollEditable = false,
isMine = false,
onSelectAnswer = { _, _ -> },
onSendPollResponse = { _, _ -> },
onEditPoll = {},
onEndPoll = {},
)
@@ -295,7 +295,7 @@ internal fun PollContentViewEndedPreview() = ElementPreview {
isPollEnded = true,
isPollEditable = false,
isMine = false,
onSelectAnswer = { _, _ -> },
onSendPollResponse = { _, _ -> },
onEditPoll = {},
onEndPoll = {},
)
@@ -314,7 +314,7 @@ internal fun PollContentViewCreatorEditablePreview() = ElementPreview {
isPollEnded = false,
isPollEditable = true,
isMine = true,
onSelectAnswer = { _, _ -> },
onSendPollResponse = { _, _ -> },
onEditPoll = {},
onEndPoll = {},
)
@@ -333,7 +333,7 @@ internal fun PollContentViewCreatorPreview() = ElementPreview {
isPollEnded = false,
isPollEditable = false,
isMine = true,
onSelectAnswer = { _, _ -> },
onSendPollResponse = { _, _ -> },
onEditPoll = {},
onEndPoll = {},
)
@@ -352,7 +352,7 @@ internal fun PollContentViewCreatorEndedPreview() = ElementPreview {
isPollEnded = true,
isPollEditable = false,
isMine = true,
onSelectAnswer = { _, _ -> },
onSendPollResponse = { _, _ -> },
onEditPoll = {},
onEndPoll = {},
)
@@ -13,7 +13,7 @@ import io.element.android.libraries.matrix.api.core.EventId
sealed interface PollHistoryEvent {
data object LoadMore : PollHistoryEvent
data class SelectPollAnswer(val pollStartId: EventId, val answerIds: List<String>) : PollHistoryEvent
data class SendPollResponse(val pollStartId: EventId, val answerIds: List<String>) : PollHistoryEvent
data class EndPoll(val pollStartId: EventId) : PollHistoryEvent
data class SelectFilter(val filter: PollHistoryFilter) : PollHistoryEvent
}
@@ -69,7 +69,7 @@ class PollHistoryPresenter(
is PollHistoryEvent.LoadMore -> {
coroutineScope.loadMore(timeline)
}
is PollHistoryEvent.SelectPollAnswer -> sessionCoroutineScope.launch {
is PollHistoryEvent.SendPollResponse -> sessionCoroutineScope.launch {
sendPollResponseAction.execute(
timeline = timeline,
pollStartId = event.pollStartId,
@@ -65,8 +65,8 @@ fun PollHistoryView(
state.eventSink(PollHistoryEvent.LoadMore)
}
fun onSelectAnswer(pollStartId: EventId, answerIds: List<String>) {
state.eventSink(PollHistoryEvent.SelectPollAnswer(pollStartId, answerIds))
fun onSendPollResponse(pollStartId: EventId, answerIds: List<String>) {
state.eventSink(PollHistoryEvent.SendPollResponse(pollStartId, answerIds))
}
fun onEndPoll(pollStartId: EventId) {
@@ -114,7 +114,7 @@ fun PollHistoryView(
pollHistoryItems = pollHistoryItems,
hasMoreToLoad = state.hasMoreToLoad,
isLoading = state.isLoading,
onSelectAnswer = ::onSelectAnswer,
onSendPollResponse = ::onSendPollResponse,
onEditPoll = onEditPoll,
onEndPoll = ::onEndPoll,
onLoadMore = ::onLoadMore,
@@ -151,7 +151,7 @@ private fun PollHistoryList(
pollHistoryItems: ImmutableList<PollHistoryItem>,
hasMoreToLoad: Boolean,
isLoading: Boolean,
onSelectAnswer: (pollStartId: EventId, answerIds: List<String>) -> Unit,
onSendPollResponse: (pollStartId: EventId, answerIds: List<String>) -> Unit,
onEditPoll: (pollStartId: EventId) -> Unit,
onEndPoll: (pollStartId: EventId) -> Unit,
onLoadMore: () -> Unit,
@@ -166,7 +166,7 @@ private fun PollHistoryList(
items(pollHistoryItems) { pollHistoryItem ->
PollHistoryItemRow(
pollHistoryItem = pollHistoryItem,
onSelectAnswer = onSelectAnswer,
onSendPollResponse = onSendPollResponse,
onEditPoll = onEditPoll,
onEndPoll = onEndPoll,
modifier = Modifier.padding(vertical = 8.dp, horizontal = 16.dp)
@@ -222,7 +222,7 @@ private fun LoadMoreButton(isLoading: Boolean, onClick: () -> Unit) {
@Composable
private fun PollHistoryItemRow(
pollHistoryItem: PollHistoryItem,
onSelectAnswer: (pollStartId: EventId, answerIds: List<String>) -> Unit,
onSendPollResponse: (pollStartId: EventId, answerIds: List<String>) -> Unit,
onEditPoll: (pollStartId: EventId) -> Unit,
onEndPoll: (pollStartId: EventId) -> Unit,
modifier: Modifier = Modifier,
@@ -244,7 +244,7 @@ private fun PollHistoryItemRow(
Spacer(modifier = Modifier.height(4.dp))
PollContentView(
state = pollHistoryItem.state,
onSelectAnswer = onSelectAnswer,
onSendPollResponse = onSendPollResponse,
onEditPoll = onEditPoll,
onEndPoll = onEndPoll,
)
@@ -117,7 +117,7 @@ class PollHistoryPresenterTest {
state.eventSink(PollHistoryEvent.EndPoll(AN_EVENT_ID))
runCurrent()
endPollAction.verifyExecutionCount(1)
state.eventSink(PollHistoryEvent.SelectPollAnswer(AN_EVENT_ID, listOf("answer")))
state.eventSink(PollHistoryEvent.SendPollResponse(AN_EVENT_ID, listOf("answer")))
runCurrent()
sendPollResponseAction.verifyExecutionCount(1)
cancelAndConsumeRemainingEvents()
@@ -133,7 +133,7 @@ class PollHistoryViewTest : RobolectricTest() {
useUnmergedTree = true,
).performClick()
eventsRecorder.assertSingle(
PollHistoryEvent.SelectPollAnswer(eventId, listOf(answer.id))
PollHistoryEvent.SendPollResponse(eventId, listOf(answer.id))
)
}