Skip to content

Commit ea18512

Browse files
committed
Allow voters to suggest poll options in UI Components
1 parent 99a0274 commit ea18512

16 files changed

Lines changed: 345 additions & 4 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,7 @@ public final class io/getstream/chat/android/ui/common/feature/messages/list/Mes
732732
public fun <init> (Ljava/lang/String;Lio/getstream/chat/android/ui/common/helper/ClipboardHandler;ZLjava/lang/String;Ljava/lang/String;ILio/getstream/chat/android/client/ChatClient;Lio/getstream/chat/android/client/setup/state/ClientState;Lkotlinx/coroutines/flow/StateFlow;Lio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;ZLio/getstream/chat/android/ui/common/state/messages/list/MessageFooterVisibility;ZLio/getstream/chat/android/ui/common/feature/messages/list/DateSeparatorHandler;Lio/getstream/chat/android/ui/common/feature/messages/list/DateSeparatorHandler;Lio/getstream/chat/android/ui/common/feature/messages/list/MessagePositionHandler;ZZ)V
733733
public synthetic fun <init> (Ljava/lang/String;Lio/getstream/chat/android/ui/common/helper/ClipboardHandler;ZLjava/lang/String;Ljava/lang/String;ILio/getstream/chat/android/client/ChatClient;Lio/getstream/chat/android/client/setup/state/ClientState;Lkotlinx/coroutines/flow/StateFlow;Lio/getstream/chat/android/ui/common/state/messages/list/DeletedMessageVisibility;ZLio/getstream/chat/android/ui/common/state/messages/list/MessageFooterVisibility;ZLio/getstream/chat/android/ui/common/feature/messages/list/DateSeparatorHandler;Lio/getstream/chat/android/ui/common/feature/messages/list/DateSeparatorHandler;Lio/getstream/chat/android/ui/common/feature/messages/list/MessagePositionHandler;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
734734
public final fun addPollOption (Lio/getstream/chat/android/models/Poll;Ljava/lang/String;)V
735+
public final fun addPollOption (Ljava/lang/String;Ljava/lang/String;)V
735736
public final fun banUser (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)V
736737
public static synthetic fun banUser$default (Lio/getstream/chat/android/ui/common/feature/messages/list/MessageListController;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;ILjava/lang/Object;)V
737738
public final fun blockUser (Ljava/lang/String;)V

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2447,8 +2447,18 @@ public class MessageListController(
24472447
* @param option The text of the new option to be added.
24482448
*/
24492449
public fun addPollOption(poll: Poll, option: String) {
2450+
addPollOption(pollId = poll.id, option = option)
2451+
}
2452+
2453+
/**
2454+
* Creates a new poll option for the poll identified by [pollId].
2455+
*
2456+
* @param pollId The id of the poll to which the option will be added.
2457+
* @param option The text of the new option to be added.
2458+
*/
2459+
public fun addPollOption(pollId: String, option: String) {
24502460
scope.launch {
2451-
chatClient.createPollOption(poll.id, PollOption(text = option)).await()
2461+
chatClient.createPollOption(pollId, PollOption(text = option)).await()
24522462
}
24532463
}
24542464

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
@@ -2278,6 +2278,7 @@ public final class io/getstream/chat/android/ui/feature/messages/list/MessageLis
22782278
public final fun setOnReactionViewClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnReactionViewClickListener;)V
22792279
public final fun setOnReplyMessageClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnReplyMessageClickListener;)V
22802280
public final fun setOnScrollToBottomHandler (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnScrollToBottomHandler;)V
2281+
public final fun setOnSuggestPollOptionClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnSuggestPollOptionClickListener;)V
22812282
public final fun setOnThreadClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnThreadClickListener;)V
22822283
public final fun setOnUnreadLabelClickListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnUnreadLabelClickListener;)V
22832284
public final fun setOnUnreadLabelReachedListener (Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnUnreadLabelReachedListener;)V
@@ -2525,6 +2526,10 @@ public abstract interface class io/getstream/chat/android/ui/feature/messages/li
25252526
public abstract fun onShowAllPollOptionClick (Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/Poll;)Z
25262527
}
25272528

2529+
public abstract interface class io/getstream/chat/android/ui/feature/messages/list/MessageListView$OnSuggestPollOptionClickListener {
2530+
public abstract fun onSuggestPollOptionClick (Lio/getstream/chat/android/models/Poll;)Z
2531+
}
2532+
25282533
public abstract interface class io/getstream/chat/android/ui/feature/messages/list/MessageListView$OnThreadClickListener {
25292534
public abstract fun onThreadClick (Lio/getstream/chat/android/models/Message;)Z
25302535
}
@@ -3078,6 +3083,7 @@ public abstract interface class io/getstream/chat/android/ui/feature/messages/li
30783083
public abstract fun getOnPollCloseClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnPollCloseClickListener;
30793084
public abstract fun getOnPollOptionClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnPollOptionClickListener;
30803085
public abstract fun getOnShowAllPollOptionClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnShowAllPollOptionClickListener;
3086+
public abstract fun getOnSuggestPollOptionClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnSuggestPollOptionClickListener;
30813087
public abstract fun getOnViewPollResultClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnViewPollResultClickListener;
30823088
public abstract fun getReactionViewClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnReactionViewClickListener;
30833089
public abstract fun getThreadClickListener ()Lio/getstream/chat/android/ui/feature/messages/list/MessageListView$OnThreadClickListener;
@@ -3158,7 +3164,7 @@ public final class io/getstream/chat/android/ui/feature/messages/list/adapter/vi
31583164
}
31593165

31603166
public final class io/getstream/chat/android/ui/feature/messages/list/adapter/view/PollViewStyle : io/getstream/chat/android/ui/helper/ViewStyle {
3161-
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;)V
3167+
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
31623168
public final fun component1 ()Lio/getstream/chat/android/ui/font/TextStyle;
31633169
public final fun component2 ()Lio/getstream/chat/android/ui/font/TextStyle;
31643170
public final fun component3 ()Landroid/graphics/drawable/Drawable;
@@ -3167,8 +3173,9 @@ public final class io/getstream/chat/android/ui/feature/messages/list/adapter/vi
31673173
public final fun component6 ()Lio/getstream/chat/android/ui/font/TextStyle;
31683174
public final fun component7 ()Lio/getstream/chat/android/ui/font/TextStyle;
31693175
public final fun component8 ()Lio/getstream/chat/android/ui/font/TextStyle;
3170-
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/feature/messages/list/adapter/view/PollViewStyle;
3171-
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;ILjava/lang/Object;)Lio/getstream/chat/android/ui/feature/messages/list/adapter/view/PollViewStyle;
3176+
public final fun component9 ()Lio/getstream/chat/android/ui/font/TextStyle;
3177+
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;
3178+
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;
31723179
public fun equals (Ljava/lang/Object;)Z
31733180
public final fun getPollCloseTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
31743181
public final fun getPollOptionCheckDrawable ()Landroid/graphics/drawable/Drawable;
@@ -3177,6 +3184,7 @@ public final class io/getstream/chat/android/ui/feature/messages/list/adapter/vi
31773184
public final fun getPollResultsTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
31783185
public final fun getPollShowAllOptionsTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
31793186
public final fun getPollSubtitleTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
3187+
public final fun getPollSuggestOptionTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
31803188
public final fun getPollTitleTextStyle ()Lio/getstream/chat/android/ui/font/TextStyle;
31813189
public fun hashCode ()I
31823190
public fun toString ()Ljava/lang/String;
@@ -3459,6 +3467,16 @@ public final class io/getstream/chat/android/ui/feature/messages/list/internal/p
34593467
public final fun newInstance (Lio/getstream/chat/android/models/Poll;)Lio/getstream/chat/android/ui/feature/messages/list/internal/poll/PollResultsDialogFragment;
34603468
}
34613469

3470+
public final class io/getstream/chat/android/ui/feature/messages/list/internal/poll/SuggestPollOptionDialogFragment : androidx/appcompat/app/AppCompatDialogFragment {
3471+
public static final field Companion Lio/getstream/chat/android/ui/feature/messages/list/internal/poll/SuggestPollOptionDialogFragment$Companion;
3472+
public fun <init> ()V
3473+
public fun onCreateDialog (Landroid/os/Bundle;)Landroid/app/Dialog;
3474+
}
3475+
3476+
public final class io/getstream/chat/android/ui/feature/messages/list/internal/poll/SuggestPollOptionDialogFragment$Companion {
3477+
public final fun newInstance (Ljava/lang/String;)Lio/getstream/chat/android/ui/feature/messages/list/internal/poll/SuggestPollOptionDialogFragment;
3478+
}
3479+
34623480
public class io/getstream/chat/android/ui/feature/messages/list/options/message/DefaultMessageOptionItemsFactory : io/getstream/chat/android/ui/feature/messages/list/options/message/MessageOptionItemsFactory {
34633481
public fun <init> (Landroid/content/Context;)V
34643482
public fun createMessageOptionItems (Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/User;ZLjava/util/Set;Lio/getstream/chat/android/ui/feature/messages/list/MessageListViewStyle;)Ljava/util/List;
@@ -4908,6 +4926,19 @@ public final class io/getstream/chat/android/ui/viewmodel/messages/MessageListVi
49084926
public fun toString ()Ljava/lang/String;
49094927
}
49104928

4929+
public final class io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollOptionSuggested : io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event {
4930+
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
4931+
public final fun component1 ()Ljava/lang/String;
4932+
public final fun component2 ()Ljava/lang/String;
4933+
public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollOptionSuggested;
4934+
public static synthetic fun copy$default (Lio/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollOptionSuggested;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollOptionSuggested;
4935+
public fun equals (Ljava/lang/Object;)Z
4936+
public final fun getOption ()Ljava/lang/String;
4937+
public final fun getPollId ()Ljava/lang/String;
4938+
public fun hashCode ()I
4939+
public fun toString ()Ljava/lang/String;
4940+
}
4941+
49114942
public final class io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event$PollOptionUpdated : io/getstream/chat/android/ui/viewmodel/messages/MessageListViewModel$Event {
49124943
public fun <init> (Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/Poll;Lio/getstream/chat/android/models/Option;)V
49134944
public final fun component1 ()Lio/getstream/chat/android/models/Message;

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ import io.getstream.chat.android.ui.feature.messages.list.internal.SwipeReplyCal
9393
import io.getstream.chat.android.ui.feature.messages.list.internal.canReplyToMessage
9494
import io.getstream.chat.android.ui.feature.messages.list.internal.poll.AllPollOptionsDialogFragment
9595
import io.getstream.chat.android.ui.feature.messages.list.internal.poll.PollResultsDialogFragment
96+
import io.getstream.chat.android.ui.feature.messages.list.internal.poll.SuggestPollOptionDialogFragment
9697
import io.getstream.chat.android.ui.feature.messages.list.options.message.MessageOptionItem
9798
import io.getstream.chat.android.ui.feature.messages.list.options.message.MessageOptionItemsFactory
9899
import io.getstream.chat.android.ui.feature.messages.list.options.message.MessageOptionsDialogFragment
@@ -615,6 +616,13 @@ public class MessageListView : ConstraintLayout {
615616
true
616617
} ?: false
617618
}
619+
private val defaultOnSuggestPollOptionClickListener = OnSuggestPollOptionClickListener { poll ->
620+
context.getFragmentManager()?.let { fragmentManager ->
621+
SuggestPollOptionDialogFragment.newInstance(poll.id)
622+
.show(fragmentManager, SuggestPollOptionDialogFragment.TAG)
623+
true
624+
} ?: false
625+
}
618626

619627
private val listenerContainer = MessageListListenerContainerImpl(
620628
messageClickListener = defaultMessageClickListener,
@@ -632,6 +640,7 @@ public class MessageListView : ConstraintLayout {
632640
onShowAllPollOptionClickListener = defaultOnShowAllPollOptionClickListener,
633641
onPollCloseClickListener = defaultOnPollCloseClickListener,
634642
onViewPollResultClickListener = defaultOnViewPollResultClickListener,
643+
onSuggestPollOptionClickListener = defaultOnSuggestPollOptionClickListener,
635644
)
636645
private var enterThreadListener = defaultEnterThreadListener
637646
private var userReactionClickListener = defaultUserReactionClickListener
@@ -1434,6 +1443,20 @@ public class MessageListView : ConstraintLayout {
14341443
}
14351444
}
14361445

1446+
/**
1447+
* Set the Suggest Poll Option click listener to be used by MessageListView.
1448+
*
1449+
* @param listener The listener to use. If null, the default will be used instead.
1450+
*/
1451+
public fun setOnSuggestPollOptionClickListener(listener: OnSuggestPollOptionClickListener?) {
1452+
listenerContainer.onSuggestPollOptionClickListener =
1453+
if (listener == null) {
1454+
defaultOnSuggestPollOptionClickListener
1455+
} else {
1456+
OnSuggestPollOptionClickListener(listener::onSuggestPollOptionClick)
1457+
}
1458+
}
1459+
14371460
/**
14381461
* Sets the message long click listener to be used by MessageListView.
14391462
*
@@ -2312,6 +2335,10 @@ public class MessageListView : ConstraintLayout {
23122335
public fun onViewPollResultClick(poll: Poll): Boolean
23132336
}
23142337

2338+
public fun interface OnSuggestPollOptionClickListener {
2339+
public fun onSuggestPollOptionClick(poll: Poll): Boolean
2340+
}
2341+
23152342
@Deprecated(
23162343
message = "Use ReplyMessageClickListener instead",
23172344
replaceWith = ReplaceWith("ReplyMessageClickListener"),

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnPoll
3535
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnPollOptionClickListener
3636
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnReactionViewClickListener
3737
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnShowAllPollOptionClickListener
38+
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnSuggestPollOptionClickListener
3839
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnThreadClickListener
3940
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnTranslatedLabelClickListener
4041
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnUnreadLabelReachedListener
@@ -80,6 +81,7 @@ public sealed interface MessageListListeners {
8081
public val onShowAllPollOptionClickListener: OnShowAllPollOptionClickListener
8182
public val onPollCloseClickListener: OnPollCloseClickListener
8283
public val onViewPollResultClickListener: OnViewPollResultClickListener
84+
public val onSuggestPollOptionClickListener: OnSuggestPollOptionClickListener
8385
}
8486

8587
@Deprecated(

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnPoll
2828
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnPollOptionClickListener
2929
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnReactionViewClickListener
3030
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnShowAllPollOptionClickListener
31+
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnSuggestPollOptionClickListener
3132
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnThreadClickListener
3233
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnTranslatedLabelClickListener
3334
import io.getstream.chat.android.ui.feature.messages.list.MessageListView.OnUnreadLabelReachedListener
@@ -57,6 +58,7 @@ internal class MessageListListenerContainerImpl(
5758
onShowAllPollOptionClickListener: OnShowAllPollOptionClickListener,
5859
onPollCloseClickListener: OnPollCloseClickListener,
5960
onViewPollResultClickListener: OnViewPollResultClickListener,
61+
onSuggestPollOptionClickListener: OnSuggestPollOptionClickListener,
6062
) : MessageListListeners {
6163
private object EmptyFunctions {
6264
val ONE_PARAM: (Any) -> Boolean = { _ -> false }
@@ -198,4 +200,12 @@ internal class MessageListListenerContainerImpl(
198200
realListener().onViewPollResultClick(poll)
199201
}
200202
}
203+
204+
override var onSuggestPollOptionClickListener: OnSuggestPollOptionClickListener by ListenerDelegate(
205+
onSuggestPollOptionClickListener,
206+
) { realListener ->
207+
OnSuggestPollOptionClickListener { poll ->
208+
realListener().onSuggestPollOptionClick(poll)
209+
}
210+
}
201211
}

0 commit comments

Comments
 (0)