Skip to content

Commit 92cd74e

Browse files
committed
Allow voters to add poll comments in UI Components
1 parent d404872 commit 92cd74e

22 files changed

Lines changed: 1076 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: 34 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,10 @@ 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
32433255
public final fun component1 ()Lio/getstream/chat/android/ui/font/TextStyle;
3256+
public final fun component10 ()Lio/getstream/chat/android/ui/font/TextStyle;
3257+
public final fun component11 ()Lio/getstream/chat/android/ui/font/TextStyle;
32443258
public final fun component2 ()Lio/getstream/chat/android/ui/font/TextStyle;
32453259
public final fun component3 ()Landroid/graphics/drawable/Drawable;
32463260
public final fun component4 ()Lio/getstream/chat/android/ui/font/TextStyle;
@@ -3249,9 +3263,10 @@ public final class io/getstream/chat/android/ui/feature/messages/list/adapter/vi
32493263
public final fun component7 ()Lio/getstream/chat/android/ui/font/TextStyle;
32503264
public final fun component8 ()Lio/getstream/chat/android/ui/font/TextStyle;
32513265
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;
3266+
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;
3267+
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;
32543268
public fun equals (Ljava/lang/Object;)Z
3269+
public final fun getPollAddCommentTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32553270
public final fun getPollCloseTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32563271
public final fun getPollOptionCheckDrawable ()Landroid/graphics/drawable/Drawable;
32573272
public final fun getPollOptionTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
@@ -3261,6 +3276,7 @@ public final class io/getstream/chat/android/ui/feature/messages/list/adapter/vi
32613276
public final fun getPollSubtitleTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32623277
public final fun getPollSuggestOptionTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32633278
public final fun getPollTitleTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
3279+
public final fun getPollViewCommentsTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
32643280
public fun hashCode ()I
32653281
public fun toString ()Ljava/lang/String;
32663282
}
@@ -4990,6 +5006,21 @@ public final class io/getstream/chat/android/ui/viewmodel/messages/MessageListVi
49905006
public fun toString ()Ljava/lang/String;
49915007
}
49925008

5009+
public final class io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollAnswerCast : io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event {
5010+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
5011+
public final fun component1 ()Ljava/lang/String;
5012+
public final fun component2 ()Ljava/lang/String;
5013+
public final fun component3 ()Ljava/lang/String;
5014+
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lio/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollAnswerCast;
5015+
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;
5016+
public fun equals (Ljava/lang/Object;)Z
5017+
public final fun getAnswer ()Ljava/lang/String;
5018+
public final fun getMessageId ()Ljava/lang/String;
5019+
public final fun getPollId ()Ljava/lang/String;
5020+
public fun hashCode ()I
5021+
public fun toString ()Ljava/lang/String;
5022+
}
5023+
49935024
public final class io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollClosed : io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event {
49945025
public fun <init> (Lio/getstream/chat/android/models/Poll;)V
49955026
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: 55 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
*
@@ -2338,6 +2385,14 @@ public class MessageListView : ConstraintLayout {
23382385
public fun onSuggestPollOptionClick(poll: Poll): Boolean
23392386
}
23402387

2388+
public fun interface OnAddPollCommentClickListener {
2389+
public fun onAddPollCommentClick(message: Message, poll: Poll): Boolean
2390+
}
2391+
2392+
public fun interface OnViewPollCommentsClickListener {
2393+
public fun onViewPollCommentsClick(message: Message, poll: Poll): Boolean
2394+
}
2395+
23412396
@Deprecated(
23422397
message = "Use ReplyMessageClickListener instead",
23432398
replaceWith = ReplaceWith("ReplyMessageClickListener"),

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import io.getstream.chat.android.ui.feature.messages.list.MessageListView.LinkCl
2323
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.MessageClickListener
2424
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.MessageLongClickListener
2525
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.MessageRetryListener
26+
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnAddPollCommentClickListener
2627
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnAttachmentClickListener
2728
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnAttachmentDownloadClickListener
2829
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnGiphySendListener
@@ -40,6 +41,7 @@ import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnThre
4041
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnTranslatedLabelClickListener
4142
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnUnreadLabelReachedListener
4243
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnUserClickListener
44+
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnViewPollCommentsClickListener
4345
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnViewPollResultClickListener
4446
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.ReactionViewClickListener
4547
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.ThreadClickListener
@@ -82,6 +84,8 @@ public sealed interface MessageListListeners {
8284
public val onPollCloseClickListener: OnPollCloseClickListener
8385
public val onViewPollResultClickListener: OnViewPollResultClickListener
8486
public val onSuggestPollOptionClickListener: OnSuggestPollOptionClickListener
87+
public val onAddPollCommentClickListener: OnAddPollCommentClickListener
88+
public val onViewPollCommentsClickListener: OnViewPollCommentsClickListener
8589
}
8690

8791
@Deprecated(

0 commit comments

Comments
 (0)