Skip to content

Commit 758866d

Browse files
Add configurable character limits and feature toggles for polls (#6435)
* Add configurable character limits and feature toggles for polls Introduces PollsConfig to control poll feature availability and enforce character limits on questions and options. Poll features (multiple votes, anonymous voting, suggest options, add comments) can now be hidden or preset with default values through ChatUI.pollsConfig or passed directly to CreatePollDialogFragment. * addressing pr comments * 1. Detekt - Fixed the MaxLineLength violation in PollsConfig.kt:23 by breaking the long comment line 2. Spotless - Applied formatting fixes (added license header to PollFeatureConfig.kt) 3. API Check - Regenerated the API dump file * Update stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig.kt Co-authored-by: Gianmarco <47775302+gpunto@users.noreply.github.com> * Apply suggestion from @gpunto --------- Co-authored-by: Gianmarco <47775302+gpunto@users.noreply.github.com>
1 parent e3de4b7 commit 758866d

7 files changed

Lines changed: 299 additions & 6 deletions

File tree

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

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public final class io/getstream/chat/android/ui/ChatUI {
1919
public static final fun getMessageTextTransformer ()Lio/getstream/chat/android/ui/helper/transformer/ChatMessageTextTransformer;
2020
public static final fun getMimeTypeIconProvider ()Lio/getstream/chat/android/ui/helper/MimeTypeIconProvider;
2121
public static final fun getNavigator ()Lio/getstream/chat/android/ui/navigation/ChatNavigator;
22+
public static final fun getPollsConfig ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;
2223
public static final fun getQuotedAttachmentFactoryManager ()Lio/getstream/chat/android/ui/feature/messages/list/adapter/viewholder/attachment/QuotedAttachmentFactoryManager;
2324
public static final fun getReactionPushEmojiFactory ()Lio/getstream/chat/android/ui/common/helper/ReactionPushEmojiFactory;
2425
public static final fun getShowOriginalTranslationEnabled ()Z
@@ -48,6 +49,7 @@ public final class io/getstream/chat/android/ui/ChatUI {
4849
public static final fun setMessageTextTransformer (Lio/getstream/chat/android/ui/helper/transformer/ChatMessageTextTransformer;)V
4950
public static final fun setMimeTypeIconProvider (Lio/getstream/chat/android/ui/helper/MimeTypeIconProvider;)V
5051
public static final fun setNavigator (Lio/getstream/chat/android/ui/navigation/ChatNavigator;)V
52+
public static final fun setPollsConfig (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;)V
5153
public static final fun setQuotedAttachmentFactoryManager (Lio/getstream/chat/android/ui/feature/messages/list/adapter/viewholder/attachment/QuotedAttachmentFactoryManager;)V
5254
public static final fun setReactionPushEmojiFactory (Lio/getstream/chat/android/ui/common/helper/ReactionPushEmojiFactory;)V
5355
public static final fun setShowOriginalTranslationEnabled (Z)V
@@ -1506,6 +1508,8 @@ public final class io/getstream/chat/android/ui/feature/messages/composer/attach
15061508

15071509
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/CreatePollDialogFragment$Companion {
15081510
public final fun newInstance (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/CreatePollDialogFragment$CreatePollDialogListener;)Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/CreatePollDialogFragment;
1511+
public final fun newInstance (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/CreatePollDialogFragment$CreatePollDialogListener;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;)Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/CreatePollDialogFragment;
1512+
public static synthetic fun newInstance$default (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/CreatePollDialogFragment$Companion;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/CreatePollDialogFragment$CreatePollDialogListener;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;ILjava/lang/Object;)Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/CreatePollDialogFragment;
15091513
}
15101514

15111515
public abstract interface class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/CreatePollDialogFragment$CreatePollDialogListener {
@@ -1524,13 +1528,15 @@ public final class io/getstream/chat/android/ui/feature/messages/composer/attach
15241528
public final fun getPollIsReady ()Lkotlinx/coroutines/flow/StateFlow;
15251529
public final fun onOptionTextChanged (ILjava/lang/String;)V
15261530
public final fun onTitleChanged (Ljava/lang/String;)V
1531+
public final fun setAllowAnswers (Z)V
15271532
public final fun setAllowMultipleVotes (Z)V
15281533
public final fun setAnnonymousPoll (Z)V
15291534
public final fun setMaxAnswer (Ljava/lang/Integer;)V
15301535
public final fun setSuggestAnOption (Z)V
15311536
}
15321537

15331538
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/OptionsAdapter : androidx/recyclerview/widget/ListAdapter {
1539+
public fun <init> (Ljava/lang/Integer;Lkotlin/jvm/functions/Function2;)V
15341540
public fun <init> (Lkotlin/jvm/functions/Function2;)V
15351541
public fun getItemId (I)J
15361542
public synthetic fun onBindViewHolder (Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V
@@ -1540,8 +1546,8 @@ public final class io/getstream/chat/android/ui/feature/messages/composer/attach
15401546
}
15411547

15421548
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/OptionsAdapter$OptionViewHolder : androidx/recyclerview/widget/RecyclerView$ViewHolder {
1543-
public fun <init> (Landroid/view/ViewGroup;Lio/getstream/chat/android/ui/databinding/StreamUiPollOptionBinding;Lkotlin/jvm/functions/Function2;)V
1544-
public synthetic fun <init> (Landroid/view/ViewGroup;Lio/getstream/chat/android/ui/databinding/StreamUiPollOptionBinding;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
1549+
public fun <init> (Landroid/view/ViewGroup;Lio/getstream/chat/android/ui/databinding/StreamUiPollOptionBinding;Ljava/lang/Integer;Lkotlin/jvm/functions/Function2;)V
1550+
public synthetic fun <init> (Landroid/view/ViewGroup;Lio/getstream/chat/android/ui/databinding/StreamUiPollOptionBinding;Ljava/lang/Integer;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
15451551
public final fun bind (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollAnswer;)V
15461552
}
15471553

@@ -1560,6 +1566,75 @@ public final class io/getstream/chat/android/ui/feature/messages/composer/attach
15601566
public fun toString ()Ljava/lang/String;
15611567
}
15621568

1569+
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig : android/os/Parcelable {
1570+
public static final field CREATOR Landroid/os/Parcelable$Creator;
1571+
public static final field Companion Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig$Companion;
1572+
public fun <init> (ZZ)V
1573+
public final fun component1 ()Z
1574+
public final fun component2 ()Z
1575+
public final fun copy (ZZ)Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1576+
public static synthetic fun copy$default (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;ZZILjava/lang/Object;)Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1577+
public final fun describeContents ()I
1578+
public fun equals (Ljava/lang/Object;)Z
1579+
public final fun getConfigurable ()Z
1580+
public final fun getDefaultValue ()Z
1581+
public fun hashCode ()I
1582+
public fun toString ()Ljava/lang/String;
1583+
public final fun writeToParcel (Landroid/os/Parcel;I)V
1584+
}
1585+
1586+
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig$Companion {
1587+
public final fun getDefault ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1588+
public final fun getNotConfigurable ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1589+
}
1590+
1591+
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig$Creator : android/os/Parcelable$Creator {
1592+
public fun <init> ()V
1593+
public final fun createFromParcel (Landroid/os/Parcel;)Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1594+
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
1595+
public final fun newArray (I)[Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1596+
public synthetic fun newArray (I)[Ljava/lang/Object;
1597+
}
1598+
1599+
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig : android/os/Parcelable {
1600+
public static final field CREATOR Landroid/os/Parcelable$Creator;
1601+
public static final field Companion Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig$Companion;
1602+
public fun <init> ()V
1603+
public fun <init> (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Ljava/lang/Integer;Ljava/lang/Integer;)V
1604+
public synthetic fun <init> (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Ljava/lang/Integer;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
1605+
public final fun component1 ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1606+
public final fun component2 ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1607+
public final fun component3 ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1608+
public final fun component4 ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1609+
public final fun component5 ()Ljava/lang/Integer;
1610+
public final fun component6 ()Ljava/lang/Integer;
1611+
public final fun copy (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Ljava/lang/Integer;Ljava/lang/Integer;)Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;
1612+
public static synthetic fun copy$default (Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;
1613+
public final fun describeContents ()I
1614+
public fun equals (Ljava/lang/Object;)Z
1615+
public final fun getAllowComments ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1616+
public final fun getAnonymousPoll ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1617+
public final fun getMultipleVotes ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1618+
public final fun getOptionTextLimit ()Ljava/lang/Integer;
1619+
public final fun getQuestionTextLimit ()Ljava/lang/Integer;
1620+
public final fun getSuggestAnOption ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollFeatureConfig;
1621+
public fun hashCode ()I
1622+
public fun toString ()Ljava/lang/String;
1623+
public final fun writeToParcel (Landroid/os/Parcel;I)V
1624+
}
1625+
1626+
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig$Companion {
1627+
public final fun getDefault ()Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;
1628+
}
1629+
1630+
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig$Creator : android/os/Parcelable$Creator {
1631+
public fun <init> ()V
1632+
public final fun createFromParcel (Landroid/os/Parcel;)Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;
1633+
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
1634+
public final fun newArray (I)[Lio/getstream/chat/android/ui/feature/messages/composer/attachment/picker/poll/PollsConfig;
1635+
public synthetic fun newArray (I)[Ljava/lang/Object;
1636+
}
1637+
15631638
public final class io/getstream/chat/android/ui/feature/messages/composer/attachment/preview/AttachmentPreviewFactoryManager {
15641639
public fun <init> ()V
15651640
public fun <init> (Ljava/util/List;)V

stream-chat-android-ui-components/src/main/kotlin/io/getstream/chat/android/ui/ChatUI.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import io.getstream.chat.android.ui.common.helper.VideoHeadersProvider
3030
import io.getstream.chat.android.ui.common.images.internal.StreamImageLoader
3131
import io.getstream.chat.android.ui.common.images.resizing.StreamCdnImageResizing
3232
import io.getstream.chat.android.ui.common.utils.ChannelNameFormatter
33+
import io.getstream.chat.android.ui.feature.messages.composer.attachment.picker.poll.PollsConfig
3334
import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.AttachmentPreviewFactoryManager
3435
import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.AttachmentFactoryManager
3536
import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.DefaultQuotedAttachmentMessageFactory
@@ -273,6 +274,15 @@ public object ChatUI {
273274
@JvmStatic
274275
public var showOriginalTranslationEnabled: Boolean = false
275276

277+
/**
278+
* Configuration for poll creation features. Controls which poll features are configurable by the user
279+
* and their default values.
280+
*
281+
* @see PollsConfig
282+
*/
283+
@JvmStatic
284+
public var pollsConfig: PollsConfig = PollsConfig.Default
285+
276286
/**
277287
* Provides a custom renderer for user avatars.
278288
*/

0 commit comments

Comments
 (0)