Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[i215] Make default composer components extensible #5061

Merged
merged 2 commits into from
Nov 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@

### ⚠️ Changed
- Made `MessageReplyView` publicly available. [#5057](https://github.com/GetStream/stream-chat-android/pull/5057)
- Made `MessageComposerContent` descendants extensible/reusable. [#5061](https://github.com/GetStream/stream-chat-android/pull/5061)

### ❌ Removed

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import io.getstream.chat.android.ui.message.list.viewmodel.bindView
import io.getstream.chat.android.ui.message.list.viewmodel.factory.MessageListViewModelFactory
import io.getstream.chat.ui.sample.common.navigateSafely
import io.getstream.chat.ui.sample.databinding.FragmentChatBinding
import io.getstream.chat.ui.sample.feature.chat.composer.CustomMessageComposerLeadingContent
import io.getstream.chat.ui.sample.feature.common.ConfirmationDialogFragment
import io.getstream.chat.ui.sample.util.extensions.useAdjustResize
import java.util.Calendar
Expand Down Expand Up @@ -193,6 +194,7 @@ class ChatFragment : Fragment() {
}
}
}

binding.messageListView.setMessageReplyHandler { _, message ->
messageComposerViewModel.performMessageAction(Reply(message))
}
Expand All @@ -213,6 +215,12 @@ class ChatFragment : Fragment() {
}
}
}

if (OVERRIDE_LEADING_CONTENT) {
binding.messageComposerView.setLeadingContent(
CustomMessageComposerLeadingContent(requireContext())
)
}
}

private fun initMessagesViewModel() {
Expand Down Expand Up @@ -303,4 +311,8 @@ class ChatFragment : Fragment() {
val chatError = error() as ChatNetworkError
return chatError.streamCode == 4
}

private companion object {
private const val OVERRIDE_LEADING_CONTENT = false
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* Copyright (c) 2014-2023 Stream.io Inc. All rights reserved.
*
* Licensed under the Stream License;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://github.com/GetStream/stream-chat-android/blob/main/LICENSE
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.getstream.chat.ui.sample.feature.chat.composer

import android.content.Context
import android.util.AttributeSet
import io.getstream.chat.android.common.composer.MessageComposerState
import io.getstream.chat.android.core.ExperimentalStreamChatApi
import io.getstream.chat.android.ui.message.composer.content.DefaultMessageComposerLeadingContent

@OptIn(ExperimentalStreamChatApi::class)
class CustomMessageComposerLeadingContent : DefaultMessageComposerLeadingContent {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)

override fun renderState(state: MessageComposerState) {
super.renderState(state)
binding.attachmentsButton.isEnabled = state.attachments.isEmpty()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2232,78 +2232,147 @@ public final class io/getstream/chat/android/ui/message/composer/attachment/fact
public fun onCreateViewHolder (Landroid/view/ViewGroup;Lkotlin/jvm/functions/Function1;)Lio/getstream/chat/android/ui/message/composer/attachment/AttachmentPreviewViewHolder;
}

public final class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerCenterContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
public abstract interface class io/getstream/chat/android/ui/message/composer/content/AttachmentAdapter {
public abstract fun getItemCount ()I
public abstract fun setAttachments (Ljava/util/List;)V
}

public abstract interface class io/getstream/chat/android/ui/message/composer/content/CommandSuggestionsAdapter {
public abstract fun getItemCount ()I
public abstract fun setItems (Ljava/util/List;)V
}

public class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerCenterContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
protected field attachmentsAdapter Lio/getstream/chat/android/ui/message/composer/content/AttachmentAdapter;
protected field binding Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultCenterContentBinding;
protected field style Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun <init> (Landroid/content/Context;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;I)V
public fun attachContext (Lio/getstream/chat/android/ui/message/composer/MessageComposerContext;)V
protected fun buildAdapter (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)Landroidx/recyclerview/widget/RecyclerView$Adapter;
public final fun getAttachmentRemovalListener ()Lkotlin/jvm/functions/Function1;
protected final fun getAttachmentsAdapter ()Lio/getstream/chat/android/ui/message/composer/content/AttachmentAdapter;
protected final fun getBinding ()Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultCenterContentBinding;
protected final fun getStyle ()Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public final fun getTextInputChangeListener ()Lkotlin/jvm/functions/Function1;
protected fun renderAttachmentState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
protected fun renderReplyState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
public fun renderState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
protected fun renderTextInputState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
public final fun setAttachmentRemovalListener (Lkotlin/jvm/functions/Function1;)V
protected final fun setAttachmentsAdapter (Lio/getstream/chat/android/ui/message/composer/content/AttachmentAdapter;)V
protected final fun setBinding (Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultCenterContentBinding;)V
protected final fun setStyle (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)V
public final fun setTextInputChangeListener (Lkotlin/jvm/functions/Function1;)V
}

public final class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerCommandSuggestionsContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
public class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerCommandSuggestionsContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
protected field binding Lio/getstream/chat/android/ui/databinding/StreamUiSuggestionListViewBinding;
protected field style Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun <init> (Landroid/content/Context;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;I)V
public fun attachContext (Lio/getstream/chat/android/ui/message/composer/MessageComposerContext;)V
protected fun buildAdapter (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)Landroidx/recyclerview/widget/RecyclerView$Adapter;
protected final fun getBinding ()Lio/getstream/chat/android/ui/databinding/StreamUiSuggestionListViewBinding;
public final fun getCommandSelectionListener ()Lkotlin/jvm/functions/Function1;
protected final fun getStyle ()Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun renderState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
protected final fun setBinding (Lio/getstream/chat/android/ui/databinding/StreamUiSuggestionListViewBinding;)V
public final fun setCommandSelectionListener (Lkotlin/jvm/functions/Function1;)V
protected final fun setStyle (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)V
}

public final class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerFooterContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
public class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerFooterContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
protected field binding Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultFooterContentBinding;
protected field style Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun <init> (Landroid/content/Context;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;I)V
public fun attachContext (Lio/getstream/chat/android/ui/message/composer/MessageComposerContext;)V
public final fun getAlsoSendToChannelSelectionListener ()Lkotlin/jvm/functions/Function1;
protected final fun getBinding ()Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultFooterContentBinding;
protected final fun getStyle ()Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun renderState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
public final fun setAlsoSendToChannelSelectionListener (Lkotlin/jvm/functions/Function1;)V
protected final fun setBinding (Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultFooterContentBinding;)V
protected final fun setStyle (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)V
}

public final class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerHeaderContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
public class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerHeaderContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
protected field binding Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultHeaderContentBinding;
protected field style Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun <init> (Landroid/content/Context;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;I)V
public fun attachContext (Lio/getstream/chat/android/ui/message/composer/MessageComposerContext;)V
protected final fun getBinding ()Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultHeaderContentBinding;
public final fun getDismissActionClickListener ()Lkotlin/jvm/functions/Function0;
protected final fun getStyle ()Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun renderState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
protected final fun setBinding (Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultHeaderContentBinding;)V
public final fun setDismissActionClickListener (Lkotlin/jvm/functions/Function0;)V
protected final fun setStyle (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)V
}

public final class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerLeadingContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
public class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerLeadingContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
protected field binding Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultLeadingContentBinding;
protected field style Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun <init> (Landroid/content/Context;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;I)V
public fun attachContext (Lio/getstream/chat/android/ui/message/composer/MessageComposerContext;)V
public final fun getAttachmentsButtonClickListener ()Lkotlin/jvm/functions/Function0;
protected final fun getBinding ()Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultLeadingContentBinding;
public final fun getCommandsButtonClickListener ()Lkotlin/jvm/functions/Function0;
protected final fun getStyle ()Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun renderState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
public final fun setAttachmentsButtonClickListener (Lkotlin/jvm/functions/Function0;)V
protected final fun setBinding (Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultLeadingContentBinding;)V
public final fun setCommandsButtonClickListener (Lkotlin/jvm/functions/Function0;)V
protected final fun setStyle (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)V
}

public final class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerMentionSuggestionsContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
public class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerMentionSuggestionsContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
protected field adapter Lio/getstream/chat/android/ui/message/composer/content/MentionSuggestionsAdapter;
protected field binding Lio/getstream/chat/android/ui/databinding/StreamUiSuggestionListViewBinding;
protected field style Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun <init> (Landroid/content/Context;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;I)V
public fun attachContext (Lio/getstream/chat/android/ui/message/composer/MessageComposerContext;)V
protected fun buildAdapter (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)Landroidx/recyclerview/widget/RecyclerView$Adapter;
protected final fun getAdapter ()Lio/getstream/chat/android/ui/message/composer/content/MentionSuggestionsAdapter;
protected final fun getBinding ()Lio/getstream/chat/android/ui/databinding/StreamUiSuggestionListViewBinding;
public final fun getMentionSelectionListener ()Lkotlin/jvm/functions/Function1;
protected final fun getStyle ()Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun renderState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
protected final fun setAdapter (Lio/getstream/chat/android/ui/message/composer/content/MentionSuggestionsAdapter;)V
protected final fun setBinding (Lio/getstream/chat/android/ui/databinding/StreamUiSuggestionListViewBinding;)V
public final fun setMentionSelectionListener (Lkotlin/jvm/functions/Function1;)V
protected final fun setStyle (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)V
}

public final class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerTrailingContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
public class io/getstream/chat/android/ui/message/composer/content/DefaultMessageComposerTrailingContent : android/widget/FrameLayout, io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
protected field binding Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultTrailingContentBinding;
protected field style Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun <init> (Landroid/content/Context;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;)V
public fun <init> (Landroid/content/Context;Landroid/util/AttributeSet;I)V
public fun attachContext (Lio/getstream/chat/android/ui/message/composer/MessageComposerContext;)V
protected final fun getBinding ()Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultTrailingContentBinding;
public final fun getSendMessageButtonClickListener ()Lkotlin/jvm/functions/Function0;
protected final fun getStyle ()Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;
public fun renderState (Lio/getstream/chat/android/common/composer/MessageComposerState;)V
protected final fun setBinding (Lio/getstream/chat/android/ui/databinding/StreamUiMessageComposerDefaultTrailingContentBinding;)V
public final fun setSendMessageButtonClickListener (Lkotlin/jvm/functions/Function0;)V
protected final fun setStyle (Lio/getstream/chat/android/ui/message/composer/MessageComposerViewStyle;)V
}

public abstract interface class io/getstream/chat/android/ui/message/composer/content/MentionSuggestionsAdapter {
public abstract fun getItemCount ()I
public abstract fun setItems (Ljava/util/List;)V
}

public abstract interface class io/getstream/chat/android/ui/message/composer/content/MessageComposerContent {
Expand Down
Loading