mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 12:07:28 +00:00
Do some renaming now that user can select multiple answers per poll
This commit is contained in:
+1
-1
@@ -52,7 +52,7 @@ sealed interface TimelineEvent {
|
||||
*/
|
||||
sealed interface TimelineItemPollEvent : TimelineItemEvent
|
||||
|
||||
data class SelectPollAnswer(
|
||||
data class SendPollResponse(
|
||||
val pollStartId: EventId,
|
||||
val answerIds: List<String>
|
||||
) : TimelineItemPollEvent
|
||||
|
||||
+2
-2
@@ -201,12 +201,12 @@ class TimelinePresenter(
|
||||
newEventState.value = NewEventState.None
|
||||
}
|
||||
}
|
||||
is TimelineEvent.SelectPollAnswer -> sessionCoroutineScope.launch {
|
||||
is TimelineEvent.SendPollResponse -> sessionCoroutineScope.launch {
|
||||
timelineController.invokeOnCurrentTimeline {
|
||||
sendPollResponseAction.execute(
|
||||
timeline = this,
|
||||
pollStartId = event.pollStartId,
|
||||
answerIds = event.answerIds
|
||||
answerIds = event.answerIds,
|
||||
).onFailure { error ->
|
||||
Timber.tag(tag).e(error, "Failed to send poll response")
|
||||
}
|
||||
|
||||
+3
-3
@@ -26,8 +26,8 @@ fun TimelineItemPollView(
|
||||
eventSink: (TimelineEvent.TimelineItemPollEvent) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
fun onSelectAnswer(pollStartId: EventId, answerIds: List<String>) {
|
||||
eventSink(TimelineEvent.SelectPollAnswer(pollStartId, answerIds))
|
||||
fun onSendPollResponse(pollStartId: EventId, answerIds: List<String>) {
|
||||
eventSink(TimelineEvent.SendPollResponse(pollStartId, answerIds))
|
||||
}
|
||||
|
||||
fun onEndPoll(pollStartId: EventId) {
|
||||
@@ -48,7 +48,7 @@ fun TimelineItemPollView(
|
||||
isPollEnded = content.isEnded,
|
||||
isPollEditable = content.isEditable,
|
||||
isMine = content.isMine,
|
||||
onSelectAnswer = ::onSelectAnswer,
|
||||
onSendPollResponse = ::onSendPollResponse,
|
||||
onEditPoll = ::onEditPoll,
|
||||
onEndPoll = ::onEndPoll,
|
||||
modifier = modifier,
|
||||
|
||||
+2
-2
@@ -951,14 +951,14 @@ class TimelinePresenterTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - PollAnswerSelected event`() = runTest {
|
||||
fun `present - SendPollResponse event`() = runTest {
|
||||
val sendPollResponseAction = FakeSendPollResponseAction()
|
||||
val presenter = createTimelinePresenter(
|
||||
sendPollResponseAction = sendPollResponseAction,
|
||||
)
|
||||
presenter.test {
|
||||
val initialState = awaitFirstItem()
|
||||
initialState.eventSink.invoke(TimelineEvent.SelectPollAnswer(AN_EVENT_ID, listOf("anAnswerId")))
|
||||
initialState.eventSink.invoke(TimelineEvent.SendPollResponse(AN_EVENT_ID, listOf("anAnswerId")))
|
||||
}
|
||||
delay(1)
|
||||
sendPollResponseAction.verifyExecutionCount(1)
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ class TimelineItemPollViewTest : RobolectricTest() {
|
||||
matcher = hasText(answer.text),
|
||||
useUnmergedTree = true,
|
||||
).performClick()
|
||||
eventsRecorder.assertSingle(TimelineEvent.SelectPollAnswer(content.eventId!!, listOf(answer.id)))
|
||||
eventsRecorder.assertSingle(TimelineEvent.SendPollResponse(content.eventId!!, listOf(answer.id)))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+3
-3
@@ -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>
|
||||
}
|
||||
|
||||
+12
-12
@@ -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 = {},
|
||||
)
|
||||
|
||||
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
+1
-1
@@ -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,
|
||||
|
||||
+7
-7
@@ -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,
|
||||
)
|
||||
|
||||
+1
-1
@@ -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()
|
||||
|
||||
+1
-1
@@ -133,7 +133,7 @@ class PollHistoryViewTest : RobolectricTest() {
|
||||
useUnmergedTree = true,
|
||||
).performClick()
|
||||
eventsRecorder.assertSingle(
|
||||
PollHistoryEvent.SelectPollAnswer(eventId, listOf(answer.id))
|
||||
PollHistoryEvent.SendPollResponse(eventId, listOf(answer.id))
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user