Skip to content

Commit 1e060ec

Browse files
authored
Allow voters to add poll comments in UI Components (#6444)
* Allow voters to add poll comments in UI Components * Add missing KDoc and default params
1 parent 23b37d6 commit 1e060ec

22 files changed

Lines changed: 1079 additions & 4 deletions

File tree

stream-chat-android-core/src/testFixtures/kotlin/io/getstream/chat/android/Mother.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -917,6 +917,22 @@ public fun randomOption(
917917
text = text,
918918
)
919919

920+
public fun randomVote(
921+
id: String = randomString(),
922+
pollId: String = randomString(),
923+
optionId: String = randomString(),
924+
createdAt: Date = randomDate(),
925+
updatedAt: Date = randomDate(),
926+
user: User? = randomUser(),
927+
): Vote = Vote(
928+
id = id,
929+
pollId = pollId,
930+
optionId = optionId,
931+
createdAt = createdAt,
932+
updatedAt = updatedAt,
933+
user = user,
934+
)
935+
920936
public fun randomPollOption(
921937
id: String? = randomString(),
922938
text: String = randomString(),

stream-chat-android-ui-components/api/stream-chat-android-ui-components.api

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2338,6 +2338,7 @@ public final class io/getstream/chat/android/ui/feature/messages/list/MessageLis
23382338
public final fun setModeratedMessageHandler (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$ModeratedMessageOptionHandler;)V
23392339
public final fun setModeratedMessageLongClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$ModeratedMessageLongClickListener;)V
23402340
public final fun setNewMessagesBehaviour (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$NewMessagesBehaviour;)V
2341+
public final fun setOnAddPollCommentClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnAddPollCommentClickListener;)V
23412342
public final fun setOnAttachmentClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnAttachmentClickListener;)V
23422343
public final fun setOnAttachmentDownloadClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnAttachmentDownloadClickListener;)V
23432344
public final fun setOnEnterThreadListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnEnterThreadListener;)V
@@ -2359,6 +2360,7 @@ public final class io/getstream/chat/android/ui/feature/messages/list/MessageLis
23592360
public final fun setOnUnreadLabelReachedListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnUnreadLabelReachedListener;)V
23602361
public final fun setOnUserClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnUserClickListener;)V
23612362
public final fun setOnUserReactionClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnUserReactionClickListener;)V
2363+
public final fun setOnViewPollCommentsClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnViewPollCommentsClickListener;)V
23622364
public final fun setOnViewPollResultClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnViewPollResultClickListener;)V
23632365
public final fun setOpenThreadHandler (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OpenThreadHandler;)V
23642366
public final fun setOwnCapabilities (Ljava/util/Set;)V
@@ -2533,6 +2535,10 @@ public final class io/getstream/chat/android/ui/feature/messages/list/MessageLis
25332535
public static fun values ()[Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$NewMessagesBehaviour;
25342536
}
25352537

2538+
public abstract interface class io/getstream/chat/android/ui/feature/messages/list/MessageListView$OnAddPollCommentClickListener {
2539+
public abstract fun onAddPollCommentClick (Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/Poll;)Z
2540+
}
2541+
25362542
public abstract interface class io/getstream/chat/android/ui/feature/messages/list/MessageListView$OnAttachmentClickListener {
25372543
public abstract fun onAttachmentClick (Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/Attachment;)Z
25382544
}
@@ -2629,6 +2635,10 @@ public abstract interface class io/getstream/chat/android/ui/feature/messages/li
26292635
public abstract fun onUserReactionClick (Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/User;Lio/getstream/chat/android/models/Reaction;)Z
26302636
}
26312637

2638+
public abstract interface class io/getstream/chat/android/ui/feature/messages/list/MessageListView$OnViewPollCommentsClickListener {
2639+
public abstract fun onViewPollCommentsClick (Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/Poll;)Z
2640+
}
2641+
26322642
public abstract interface class io/getstream/chat/android/ui/feature/messages/list/MessageListView$OnViewPollResultClickListener {
26332643
public abstract fun onViewPollResultClick (Lio/getstream/chat/android/models/Poll;)Z
26342644
}
@@ -3155,10 +3165,12 @@ public abstract interface class io/getstream/chat/android/ui/feature/messages/li
31553165
public abstract fun getMessageClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnMessageClickListener;
31563166
public abstract fun getMessageLongClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnMessageLongClickListener;
31573167
public abstract fun getMessageRetryListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnMessageRetryListener;
3168+
public abstract fun getOnAddPollCommentClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnAddPollCommentClickListener;
31583169
public abstract fun getOnPollCloseClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnPollCloseClickListener;
31593170
public abstract fun getOnPollOptionClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnPollOptionClickListener;
31603171
public abstract fun getOnShowAllPollOptionClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnShowAllPollOptionClickListener;
31613172
public abstract fun getOnSuggestPollOptionClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnSuggestPollOptionClickListener;
3173+
public abstract fun getOnViewPollCommentsClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnViewPollCommentsClickListener;
31623174
public abstract fun getOnViewPollResultClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnViewPollResultClickListener;
31633175
public abstract fun getReactionViewClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnReactionViewClickListener;
31643176
public abstract fun getThreadClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnThreadClickListener;
@@ -3239,8 +3251,11 @@ public final class io/getstream/chat/android/ui/feature/messages/list/adapter/vi
32393251
}
32403252

32413253
public final class io/getstream/chat/android/ui/feature/messages/list/adapter/view/PollViewStyle : io/getstream/chat/android/ui/helper/ViewStyle {
3242-
public fun <init> (Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;)V
3254+
public fun <init> (Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;)V
3255+
public synthetic fun <init> (Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
32433256
public final fun component1 ()Lio/getstream/chat/android/ui/font/TextStyle;
3257+
public final fun component10 ()Lio/getstream/chat/android/ui/font/TextStyle;
3258+
public final fun component11 ()Lio/getstream/chat/android/ui/font/TextStyle;
32443259
public final fun component2 ()Lio/getstream/chat/android/ui/font/TextStyle;
32453260
public final fun component3 ()Landroid/graphics/drawable/Drawable;
32463261
public final fun component4 ()Lio/getstream/chat/android/ui/font/TextStyle;
@@ -3249,9 +3264,10 @@ public final class io/getstream/chat/android/ui/feature/messages/list/adapter/vi
32493264
public final fun component7 ()Lio/getstream/chat/android/ui/font/TextStyle;
32503265
public final fun component8 ()Lio/getstream/chat/android/ui/font/TextStyle;
32513266
public final fun component9 ()Lio/getstream/chat/android/ui/font/TextStyle;
3252-
public final fun copy (Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;)Lio/getstream/chat/android/ui/feature/messages/list/adapter/view/PollViewStyle;
3253-
public static synthetic fun copy$default (Lio/getstream/chat/android/ui/feature/messages/list/adapter/view/PollViewStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;ILjava/lang/Object;)Lio/getstream/chat/android/ui/feature/messages/list/adapter/view/PollViewStyle;
3267+
public final fun copy (Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;)Lio/getstream/chat/android/ui/feature/messages/list/adapter/view/PollViewStyle;
3268+
public static synthetic fun copy$default (Lio/getstream/chat/android/ui/feature/messages/list/adapter/view/PollViewStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Landroid/graphics/drawable/Drawable;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;Lio/getstream/chat/android/ui/font/TextStyle;ILjava/lang/Object;)Lio/getstream/chat/android/ui/feature/messages/list/adapter/view/PollViewStyle;
32543269
public fun equals (Ljava/lang/Object;)Z
3270+
public final fun getPollAddCommentTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32553271
public final fun getPollCloseTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32563272
public final fun getPollOptionCheckDrawable ()Landroid/graphics/drawable/Drawable;
32573273
public final fun getPollOptionTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
@@ -3261,6 +3277,7 @@ public final class io/getstream/chat/android/ui/feature/messages/list/adapter/vi
32613277
public final fun getPollSubtitleTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32623278
public final fun getPollSuggestOptionTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32633279
public final fun getPollTitleTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
3280+
public final fun getPollViewCommentsTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32643281
public fun hashCode ()I
32653282
public fun toString ()Ljava/lang/String;
32663283
}
@@ -4990,6 +5007,21 @@ public final class io/getstream/chat/android/ui/viewmodel/messages/MessageListVi
49905007
public fun toString ()Ljava/lang/String;
49915008
}
49925009

5010+
public final class io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollAnswerCast : io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event {
5011+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
5012+
public final fun component1 ()Ljava/lang/String;
5013+
public final fun component2 ()Ljava/lang/String;
5014+
public final fun component3 ()Ljava/lang/String;
5015+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollAnswerCast;
5016+
public static synthetic fun copy$default (Lio/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollAnswerCast;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollAnswerCast;
5017+
public fun equals (Ljava/lang/Object;)Z
5018+
public final fun getAnswer ()Ljava/lang/String;
5019+
public final fun getMessageId ()Ljava/lang/String;
5020+
public final fun getPollId ()Ljava/lang/String;
5021+
public fun hashCode ()I
5022+
public fun toString ()Ljava/lang/String;
5023+
}
5024+
49935025
public final class io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollClosed : io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event {
49945026
public fun <init> (Lio/getstream/chat/android/models/Poll;)V
49955027
public final fun component1 ()Lio/getstream/chat/android/models/Poll;

stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/list/MessageListView.kt

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ import io.getstream.chat.android.ui.feature.messages.list.internal.HiddenMessage
9191
import io.getstream.chat.android.ui.feature.messages.list.internal.MessageListScrollHelper
9292
import io.getstream.chat.android.ui.feature.messages.list.internal.SwipeReplyCallback
9393
import io.getstream.chat.android.ui.feature.messages.list.internal.canReplyToMessage
94+
import io.getstream.chat.android.ui.feature.messages.list.internal.poll.AddPollCommentDialogFragment
9495
import io.getstream.chat.android.ui.feature.messages.list.internal.poll.AllPollOptionsDialogFragment
96+
import io.getstream.chat.android.ui.feature.messages.list.internal.poll.PollCommentsDialogFragment
9597
import io.getstream.chat.android.ui.feature.messages.list.internal.poll.PollResultsDialogFragment
9698
import io.getstream.chat.android.ui.feature.messages.list.internal.poll.SuggestPollOptionDialogFragment
9799
import io.getstream.chat.android.ui.feature.messages.list.options.message.MessageOptionItem
@@ -623,6 +625,21 @@ public class MessageListView : ConstraintLayout {
623625
true
624626
} ?: false
625627
}
628+
private val defaultOnAddPollCommentClickListener = OnAddPollCommentClickListener { message, poll ->
629+
context.getFragmentManager()?.let { fragmentManager ->
630+
AddPollCommentDialogFragment.newInstance(messageId = message.id, pollId = poll.id)
631+
.show(fragmentManager, AddPollCommentDialogFragment.TAG)
632+
true
633+
} ?: false
634+
}
635+
private val defaultOnViewPollCommentsClickListener = OnViewPollCommentsClickListener { message, _ ->
636+
context.getFragmentManager()?.let { fragmentManager ->
637+
PollCommentsDialogFragment
638+
.newInstance(cid = message.cid, messageId = message.id)
639+
.show(fragmentManager, PollCommentsDialogFragment.TAG)
640+
true
641+
} ?: false
642+
}
626643

627644
private val listenerContainer = MessageListListenerContainerImpl(
628645
messageClickListener = defaultMessageClickListener,
@@ -641,6 +658,8 @@ public class MessageListView : ConstraintLayout {
641658
onPollCloseClickListener = defaultOnPollCloseClickListener,
642659
onViewPollResultClickListener = defaultOnViewPollResultClickListener,
643660
onSuggestPollOptionClickListener = defaultOnSuggestPollOptionClickListener,
661+
onAddPollCommentClickListener = defaultOnAddPollCommentClickListener,
662+
onViewPollCommentsClickListener = defaultOnViewPollCommentsClickListener,
644663
)
645664
private var enterThreadListener = defaultEnterThreadListener
646665
private var userReactionClickListener = defaultUserReactionClickListener
@@ -1456,6 +1475,34 @@ public class MessageListView : ConstraintLayout {
14561475
}
14571476
}
14581477

1478+
/**
1479+
* Set the Add Poll Comment click listener to be used by MessageListView.
1480+
*
1481+
* @param listener The listener to use. If null, the default will be used instead.
1482+
*/
1483+
public fun setOnAddPollCommentClickListener(listener: OnAddPollCommentClickListener?) {
1484+
listenerContainer.onAddPollCommentClickListener =
1485+
if (listener == null) {
1486+
defaultOnAddPollCommentClickListener
1487+
} else {
1488+
OnAddPollCommentClickListener(listener::onAddPollCommentClick)
1489+
}
1490+
}
1491+
1492+
/**
1493+
* Set the View Poll Comments click listener to be used by MessageListView.
1494+
*
1495+
* @param listener The listener to use. If null, the default will be used instead.
1496+
*/
1497+
public fun setOnViewPollCommentsClickListener(listener: OnViewPollCommentsClickListener?) {
1498+
listenerContainer.onViewPollCommentsClickListener =
1499+
if (listener == null) {
1500+
defaultOnViewPollCommentsClickListener
1501+
} else {
1502+
OnViewPollCommentsClickListener(listener::onViewPollCommentsClick)
1503+
}
1504+
}
1505+
14591506
/**
14601507
* Sets the message long click listener to be used by MessageListView.
14611508
*
@@ -2334,10 +2381,27 @@ public class MessageListView : ConstraintLayout {
23342381
public fun onViewPollResultClick(poll: Poll): Boolean
23352382
}
23362383

2384+
/**
2385+
* Listener for clicks on the "Suggest an option" button of a poll that allows user-suggested options.
2386+
*/
23372387
public fun interface OnSuggestPollOptionClickListener {
23382388
public fun onSuggestPollOptionClick(poll: Poll): Boolean
23392389
}
23402390

2391+
/**
2392+
* Listener for clicks on the "Add a comment" button of a poll that allows answers.
2393+
*/
2394+
public fun interface OnAddPollCommentClickListener {
2395+
public fun onAddPollCommentClick(message: Message, poll: Poll): Boolean
2396+
}
2397+
2398+
/**
2399+
* Listener for clicks on the "View comments" button of a poll that has answers.
2400+
*/
2401+
public fun interface OnViewPollCommentsClickListener {
2402+
public fun onViewPollCommentsClick(message: Message, poll: Poll): Boolean
2403+
}
2404+
23412405
@Deprecated(
23422406
message = "Use ReplyMessageClickListener instead",
23432407
replaceWith = ReplaceWith("ReplyMessageClickListener"),

0 commit comments

Comments
 (0)