From ed3f1839906b81c3c5c9016668e17133ce124878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jc=20Mi=C3=B1arro?= Date: Tue, 18 Apr 2023 11:05:31 +0200 Subject: [PATCH] Upgrade Stream Chat Depencency to v6 --- app/build.gradle.kts | 1 + .../initializer/StreamChatInitializer.kt | 23 ++++++------ .../repository/dm/DirectMessageRepository.kt | 2 +- .../dm/DirectMessageRepositoryImpl.kt | 8 ++-- .../repository/guest/GuestRepositoryImpl.kt | 2 +- .../data/repository/home/HomeRepository.kt | 2 +- .../repository/home/HomeRepositoryImpl.kt | 4 +- .../user/UserProfileEditRepository.kt | 2 +- .../user/UserProfileEditRepositoryImpl.kt | 4 +- .../core/uicomponents/StreamGlobalStyles.kt | 10 ++--- .../core/uicomponents/binding/ViewBinding.kt | 8 ++-- .../extensions/ModelExtensions.kt | 8 ++-- .../feature/chat/MessageListFragment.kt | 2 +- .../feature/chat/binding/ViewBinding.kt | 4 +- .../component/StreamChannelListUIComponent.kt | 8 ++-- .../component/StreamMessageListUIComponent.kt | 37 ++++++++++--------- .../main/res/layout/fragment_channel_list.xml | 4 +- .../main/res/layout/fragment_message_list.xml | 10 ++--- .../feature/dm/DirectMessageAdapter.kt | 2 +- .../feature/dm/DirectMessageDialogFragment.kt | 2 +- .../feature/dm/DirectMessageViewModel.kt | 2 +- .../feature/dm/binding/ViewBinding.kt | 2 +- .../main/res/layout/item_direct_message.xml | 6 +-- feature-home-common/build.gradle.kts | 1 + .../feature/home/common/HomeViewModel.kt | 8 ++-- .../live/LiveStreamMessageItemVhFactory.kt | 10 ++--- .../component/StreamMessageListUIComponent.kt | 37 ++++++++++--------- .../src/main/res/layout/fragment_live.xml | 2 +- .../main/res/layout/fragment_live_stream.xml | 9 ++--- .../src/main/res/layout/item_live_message.xml | 6 +-- .../feature/mention/MentionsFragment.kt | 4 +- .../src/main/res/layout/fragment_mentions.xml | 2 +- .../layout/dialog_fragment_user_profile.xml | 4 +- gradle/libs.versions.toml | 6 ++- 34 files changed, 124 insertions(+), 118 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5caa2d6..3e21cd2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -64,6 +64,7 @@ dependencies { // stream chat core + UI SDK implementation(libs.stream.ui.components) + implementation(libs.stream.offline) implementation(libs.stream.firebase) // data binding diff --git a/app/src/main/kotlin/io/getstream/avengerschat/initializer/StreamChatInitializer.kt b/app/src/main/kotlin/io/getstream/avengerschat/initializer/StreamChatInitializer.kt index a465a02..dbc1601 100644 --- a/app/src/main/kotlin/io/getstream/avengerschat/initializer/StreamChatInitializer.kt +++ b/app/src/main/kotlin/io/getstream/avengerschat/initializer/StreamChatInitializer.kt @@ -19,6 +19,7 @@ package io.getstream.avengerschat.initializer import android.content.Context import android.content.Intent import androidx.startup.Initializer +import io.getstream.android.push.firebase.FirebasePushDeviceGenerator import io.getstream.avengerschat.BuildConfig import io.getstream.avengerschat.R import io.getstream.avengerschat.core.uicomponents.startup.StreamGlobalStyleInitializer @@ -28,10 +29,10 @@ import io.getstream.chat.android.client.logger.ChatLogLevel import io.getstream.chat.android.client.notifications.handler.NotificationConfig import io.getstream.chat.android.client.notifications.handler.NotificationHandler import io.getstream.chat.android.client.notifications.handler.NotificationHandlerFactory -import io.getstream.chat.android.offline.model.message.attachments.UploadAttachmentsNetworkType -import io.getstream.chat.android.offline.plugin.configuration.Config +import io.getstream.chat.android.models.UploadAttachmentsNetworkType import io.getstream.chat.android.offline.plugin.factory.StreamOfflinePluginFactory -import io.getstream.chat.android.pushprovider.firebase.FirebasePushDeviceGenerator +import io.getstream.chat.android.state.plugin.config.StatePluginConfig +import io.getstream.chat.android.state.plugin.factory.StreamStatePluginFactory import timber.log.Timber /** @@ -43,14 +44,13 @@ class StreamChatInitializer : Initializer { Timber.d("StreamChatInitializer is initialized") val logLevel = if (BuildConfig.DEBUG) ChatLogLevel.ALL else ChatLogLevel.NOTHING - val offlinePluginFactory = StreamOfflinePluginFactory( - config = Config( + val offlinePluginFactory = StreamOfflinePluginFactory(appContext = context) + val statePluginFactory = StreamStatePluginFactory( + appContext = context, + config = StatePluginConfig( backgroundSyncEnabled = true, - userPresence = true, - persistenceEnabled = true, - uploadAttachmentsNetworkType = UploadAttachmentsNetworkType.NOT_ROAMING - ), - appContext = context + userPresence = true + ) ) /** @@ -60,7 +60,8 @@ class StreamChatInitializer : Initializer { */ ChatClient.Builder(context.getString(R.string.stream_api_key), context) .notifications(createNotificationConfig(), createNotificationHandler(context)) - .withPlugin(offlinePluginFactory) + .withPlugins(offlinePluginFactory, statePluginFactory) + .uploadAttachmentsNetworkType(UploadAttachmentsNetworkType.NOT_ROAMING) .logLevel(logLevel) .build() } diff --git a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/dm/DirectMessageRepository.kt b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/dm/DirectMessageRepository.kt index b8bb33f..82de89c 100644 --- a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/dm/DirectMessageRepository.kt +++ b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/dm/DirectMessageRepository.kt @@ -17,7 +17,7 @@ package io.getstream.avengerschat.core.data.repository.dm import androidx.annotation.WorkerThread -import io.getstream.chat.android.client.models.User +import io.getstream.chat.android.models.User import kotlinx.coroutines.flow.Flow interface DirectMessageRepository { diff --git a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/dm/DirectMessageRepositoryImpl.kt b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/dm/DirectMessageRepositoryImpl.kt index 74685b4..391991e 100644 --- a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/dm/DirectMessageRepositoryImpl.kt +++ b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/dm/DirectMessageRepositoryImpl.kt @@ -27,9 +27,9 @@ import io.getstream.avengerschat.core.network.AppDispatchers import io.getstream.avengerschat.core.network.Dispatcher import io.getstream.chat.android.client.ChatClient import io.getstream.chat.android.client.api.models.QueryUsersRequest -import io.getstream.chat.android.client.models.Filters -import io.getstream.chat.android.client.models.User import io.getstream.chat.android.client.utils.onSuccessSuspend +import io.getstream.chat.android.models.Filters +import io.getstream.chat.android.models.User import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn @@ -61,7 +61,7 @@ internal class DirectMessageRepositoryImpl @Inject constructor( ) val result = chatClient.queryUsers(usersRequest).await() result.onSuccessSuspend { - emit(result.data()) + emit(it) } }.flowOn(dispatcher) @@ -77,7 +77,7 @@ internal class DirectMessageRepositoryImpl @Inject constructor( extraData = mapOf() ).await() result.onSuccessSuspend { - emit(result.data().cid) + emit(it.cid) } } } diff --git a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/guest/GuestRepositoryImpl.kt b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/guest/GuestRepositoryImpl.kt index 1e72bdc..2b54f58 100644 --- a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/guest/GuestRepositoryImpl.kt +++ b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/guest/GuestRepositoryImpl.kt @@ -48,7 +48,7 @@ internal class GuestRepositoryImpl @Inject constructor( // fetch a guest token. val result = chatClient.getGuestToken(name, name).await() result.onSuccessSuspend { - emit(result.data().token) + emit(it.token) } }.flowOn(dispatcher) } diff --git a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/home/HomeRepository.kt b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/home/HomeRepository.kt index 3f18413..0d5525e 100644 --- a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/home/HomeRepository.kt +++ b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/home/HomeRepository.kt @@ -19,7 +19,7 @@ package io.getstream.avengerschat.core.data.repository.home import androidx.annotation.WorkerThread import io.getstream.avengerschat.core.model.Avenger import io.getstream.avengerschat.core.model.LiveRoomInfo -import io.getstream.chat.android.client.models.ConnectionData +import io.getstream.chat.android.models.ConnectionData import kotlinx.coroutines.flow.Flow interface HomeRepository { diff --git a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/home/HomeRepositoryImpl.kt b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/home/HomeRepositoryImpl.kt index 460a9ea..8d67662 100644 --- a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/home/HomeRepositoryImpl.kt +++ b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/home/HomeRepositoryImpl.kt @@ -24,8 +24,8 @@ import io.getstream.avengerschat.core.model.Avenger import io.getstream.avengerschat.core.network.AppDispatchers import io.getstream.avengerschat.core.network.Dispatcher import io.getstream.chat.android.client.ChatClient -import io.getstream.chat.android.client.models.User import io.getstream.chat.android.client.utils.onSuccessSuspend +import io.getstream.chat.android.models.User import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn @@ -58,7 +58,7 @@ internal class HomeRepositoryImpl @Inject constructor( ) val result = chatClient.connectUser(user, avenger.token).await() result.onSuccessSuspend { - emit(result.data()) + emit(it) } }.flowOn(dispatcher) diff --git a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/user/UserProfileEditRepository.kt b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/user/UserProfileEditRepository.kt index 84845a6..4752176 100644 --- a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/user/UserProfileEditRepository.kt +++ b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/user/UserProfileEditRepository.kt @@ -18,7 +18,7 @@ package io.getstream.avengerschat.core.data.repository.user import androidx.annotation.WorkerThread import io.getstream.avengerschat.core.model.Avenger -import io.getstream.chat.android.client.models.User +import io.getstream.chat.android.models.User import kotlinx.coroutines.flow.Flow interface UserProfileEditRepository { diff --git a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/user/UserProfileEditRepositoryImpl.kt b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/user/UserProfileEditRepositoryImpl.kt index 711fc23..74b3a0e 100644 --- a/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/user/UserProfileEditRepositoryImpl.kt +++ b/core-data/src/main/kotlin/io/getstream/avengerschat/core/data/repository/user/UserProfileEditRepositoryImpl.kt @@ -21,8 +21,8 @@ import io.getstream.avengerschat.core.model.Avenger import io.getstream.avengerschat.core.network.AppDispatchers import io.getstream.avengerschat.core.network.Dispatcher import io.getstream.chat.android.client.ChatClient -import io.getstream.chat.android.client.models.User import io.getstream.chat.android.client.utils.onSuccessSuspend +import io.getstream.chat.android.models.User import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn @@ -50,7 +50,7 @@ internal class UserProfileEditRepositoryImpl @Inject constructor( ) val result = chatClient.updateUser(user).await() result.onSuccessSuspend { - emit(result.data()) + emit(it) } }.flowOn(dispatcher) } diff --git a/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/StreamGlobalStyles.kt b/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/StreamGlobalStyles.kt index 6bc8394..d40df26 100644 --- a/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/StreamGlobalStyles.kt +++ b/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/StreamGlobalStyles.kt @@ -20,9 +20,9 @@ import android.content.Context import androidx.annotation.ColorInt import io.getstream.avengerschat.core.uicomponents.extensions.drawable import io.getstream.chat.android.ui.ChatUI -import io.getstream.chat.android.ui.StyleTransformer -import io.getstream.chat.android.ui.SupportedReactions -import io.getstream.chat.android.ui.TransformStyle +import io.getstream.chat.android.ui.helper.StyleTransformer +import io.getstream.chat.android.ui.helper.SupportedReactions +import io.getstream.chat.android.ui.helper.TransformStyle /** * StreamGlobalStyles unify the styles of the Stream UI components by using the @@ -67,10 +67,10 @@ object StreamGlobalStyles { ) } - TransformStyle.messageInputStyleTransformer = + TransformStyle.messageComposerStyleTransformer = StyleTransformer { messageInputStyle -> messageInputStyle.copy( - sendButtonEnabledIcon = messageInputStyle.sendButtonEnabledIcon.apply { + sendMessageButtonIconDrawable = messageInputStyle.sendMessageButtonIconDrawable.apply { setTint(color) } ) diff --git a/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/binding/ViewBinding.kt b/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/binding/ViewBinding.kt index 6f52467..7a5aef9 100644 --- a/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/binding/ViewBinding.kt +++ b/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/binding/ViewBinding.kt @@ -26,8 +26,8 @@ import coil.load import coil.request.ImageRequest import coil.transform.CircleCropTransformation import com.skydoves.androidveil.VeilLayout -import io.getstream.chat.android.client.models.User -import io.getstream.chat.android.ui.avatar.AvatarView +import io.getstream.chat.android.models.User +import io.getstream.chat.android.ui.widgets.avatar.UserAvatarView object ViewBinding { @JvmStatic @@ -71,7 +71,7 @@ object ViewBinding { @JvmStatic @BindingAdapter("user") - fun bindUser(avatarView: AvatarView, user: User?) { - user?.let { avatarView.setUserData(it) } + fun bindUser(avatarView: UserAvatarView, user: User?) { + user?.let { avatarView.setUser(it) } } } diff --git a/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/extensions/ModelExtensions.kt b/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/extensions/ModelExtensions.kt index 8822f8f..80ab4ee 100644 --- a/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/extensions/ModelExtensions.kt +++ b/core-uicomponents/src/main/kotlin/io/getstream/avengerschat/core/uicomponents/extensions/ModelExtensions.kt @@ -18,10 +18,10 @@ package io.getstream.avengerschat.extensions import android.content.Context import android.text.format.DateUtils -import com.getstream.sdk.chat.adapter.MessageListItem -import com.getstream.sdk.chat.utils.DateFormatter import io.getstream.avengerschat.core.uicomponents.R -import io.getstream.chat.android.client.models.User +import io.getstream.chat.android.models.User +import io.getstream.chat.android.ui.common.helper.DateFormatter +import io.getstream.chat.android.ui.feature.messages.list.adapter.MessageListItem import org.threeten.bp.Instant import org.threeten.bp.LocalDateTime import org.threeten.bp.ZoneId @@ -30,7 +30,7 @@ import java.util.Date fun MessageListItem.MessageItem.localDate(context: Context): String { val formatter = DateFormatter.from(context) val date = message.createdAt ?: message.createdLocallyAt - return formatter.formatDate(date?.let(::toLocalDateTime)) + return formatter.formatDate(date) } private fun toLocalDateTime(date: Date): LocalDateTime { diff --git a/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/MessageListFragment.kt b/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/MessageListFragment.kt index 188770b..96681ef 100644 --- a/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/MessageListFragment.kt +++ b/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/MessageListFragment.kt @@ -23,7 +23,6 @@ import android.view.ViewGroup import androidx.fragment.app.activityViewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs -import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel import com.skydoves.bindables.BindingFragment import dagger.hilt.android.AndroidEntryPoint import io.getstream.avengerschat.core.uicomponents.extensions.addOnBackPressedDispatcher @@ -31,6 +30,7 @@ import io.getstream.avengerschat.feature.chat.component.StreamMessageListUICompo import io.getstream.avengerschat.feature.chat.component.streamMessageListComponent import io.getstream.avengerschat.feature.chat.databinding.FragmentMessageListBinding import io.getstream.avengerschat.feature.home.common.HomeViewModel +import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModel @AndroidEntryPoint class MessageListFragment : diff --git a/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/binding/ViewBinding.kt b/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/binding/ViewBinding.kt index c93e67a..8c82ccb 100644 --- a/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/binding/ViewBinding.kt +++ b/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/binding/ViewBinding.kt @@ -18,8 +18,8 @@ package io.getstream.avengerschat.feature.chat.binding import androidx.databinding.BindingAdapter import io.getstream.avengerschat.feature.chat.R -import io.getstream.chat.android.client.models.User -import io.getstream.chat.android.ui.channel.list.header.ChannelListHeaderView +import io.getstream.chat.android.models.User +import io.getstream.chat.android.ui.feature.channels.header.ChannelListHeaderView internal object ViewBinding { diff --git a/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/component/StreamChannelListUIComponent.kt b/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/component/StreamChannelListUIComponent.kt index bc16bdd..5e95350 100644 --- a/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/component/StreamChannelListUIComponent.kt +++ b/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/component/StreamChannelListUIComponent.kt @@ -21,10 +21,10 @@ import androidx.lifecycle.LifecycleOwner import io.getstream.avengerschat.core.uicomponents.stream.StreamComponents import io.getstream.avengerschat.core.uicomponents.stream.StreamUIComponent import io.getstream.avengerschat.feature.chat.R -import io.getstream.chat.android.ui.channel.list.ChannelListView -import io.getstream.chat.android.ui.channel.list.viewmodel.ChannelListViewModel -import io.getstream.chat.android.ui.channel.list.viewmodel.bindView -import io.getstream.chat.android.ui.channel.list.viewmodel.factory.ChannelListViewModelFactory +import io.getstream.chat.android.ui.feature.channels.list.ChannelListView +import io.getstream.chat.android.ui.viewmodel.channels.ChannelListViewModel +import io.getstream.chat.android.ui.viewmodel.channels.ChannelListViewModelFactory +import io.getstream.chat.android.ui.viewmodel.channels.bindView /** * Stream channel list UI component. diff --git a/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/component/StreamMessageListUIComponent.kt b/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/component/StreamMessageListUIComponent.kt index 7af5c23..a972826 100644 --- a/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/component/StreamMessageListUIComponent.kt +++ b/feature-chat/src/main/kotlin/io/getstream/avengerschat/feature/chat/component/StreamMessageListUIComponent.kt @@ -18,19 +18,19 @@ package io.getstream.avengerschat.feature.chat.component import android.view.View import androidx.lifecycle.LifecycleOwner -import com.getstream.sdk.chat.viewmodel.MessageInputViewModel -import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel import io.getstream.avengerschat.core.uicomponents.stream.StreamComponents import io.getstream.avengerschat.core.uicomponents.stream.StreamUIComponent import io.getstream.avengerschat.feature.chat.R -import io.getstream.chat.android.ui.message.input.MessageInputView -import io.getstream.chat.android.ui.message.input.viewmodel.bindView -import io.getstream.chat.android.ui.message.list.MessageListView -import io.getstream.chat.android.ui.message.list.header.MessageListHeaderView -import io.getstream.chat.android.ui.message.list.header.viewmodel.MessageListHeaderViewModel -import io.getstream.chat.android.ui.message.list.header.viewmodel.bindView -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.android.ui.common.state.messages.Edit +import io.getstream.chat.android.ui.common.state.messages.MessageMode +import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerView +import io.getstream.chat.android.ui.feature.messages.header.MessageListHeaderView +import io.getstream.chat.android.ui.feature.messages.list.MessageListView +import io.getstream.chat.android.ui.viewmodel.messages.MessageComposerViewModel +import io.getstream.chat.android.ui.viewmodel.messages.MessageListHeaderViewModel +import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModel +import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModelFactory +import io.getstream.chat.android.ui.viewmodel.messages.bindView /** * Stream message list UI component. @@ -52,8 +52,8 @@ class StreamMessageListUIComponent constructor( val messageListViewModel: MessageListViewModel by lazy(LazyThreadSafetyMode.NONE) { factory.create(MessageListViewModel::class.java) } - private val messageInputViewModel: MessageInputViewModel by lazy(LazyThreadSafetyMode.NONE) { - factory.create(MessageInputViewModel::class.java) + private val messageInputViewModel: MessageComposerViewModel by lazy(LazyThreadSafetyMode.NONE) { + factory.create(MessageComposerViewModel::class.java) } @StreamComponents @@ -70,7 +70,7 @@ class StreamMessageListUIComponent constructor( messageListViewModel.bindView(it, lifecycleOwner) } val messageInputView = - view.findViewById(R.id.messageInputView) + view.findViewById(R.id.messageInputView) messageInputView?.let { messageInputViewModel.bindView(it, lifecycleOwner) } @@ -78,17 +78,18 @@ class StreamMessageListUIComponent constructor( // observe thread modes states. messageListViewModel.mode.observe(lifecycleOwner) { when (it) { - is MessageListViewModel.Mode.Thread -> { + is MessageMode.MessageThread -> { messageListHeaderViewModel.setActiveThread(it.parentMessage) - messageInputViewModel.setActiveThread(it.parentMessage) } - is MessageListViewModel.Mode.Normal -> { + is MessageMode.Normal -> { messageListHeaderViewModel.resetThread() - messageInputViewModel.resetThread() } } + messageInputViewModel.setMessageMode(it) + } + messageListView?.setMessageEditHandler { + messageInputViewModel.performMessageAction(Edit(it)) } - messageListView?.setMessageEditHandler(messageInputViewModel::postMessageToEdit) } } diff --git a/feature-chat/src/main/res/layout/fragment_channel_list.xml b/feature-chat/src/main/res/layout/fragment_channel_list.xml index 5fe2089..446a8be 100644 --- a/feature-chat/src/main/res/layout/fragment_channel_list.xml +++ b/feature-chat/src/main/res/layout/fragment_channel_list.xml @@ -29,7 +29,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - + app:streamUiPinMessageEnabled="true" + /> - + type="io.getstream.chat.android.models.User" /> @@ -36,7 +36,7 @@ android:paddingTop="@dimen/margin_tiny" android:paddingBottom="@dimen/margin_small"> - = chatClient.clientState.user + val user: StateFlow = chatClient.globalState.user val totalUnreadCount: StateFlow = chatClient.globalState.totalUnreadCount diff --git a/feature-live/src/main/kotlin/io/getstream/avengerschat/feature/live/LiveStreamMessageItemVhFactory.kt b/feature-live/src/main/kotlin/io/getstream/avengerschat/feature/live/LiveStreamMessageItemVhFactory.kt index a4afded..d7bee26 100644 --- a/feature-live/src/main/kotlin/io/getstream/avengerschat/feature/live/LiveStreamMessageItemVhFactory.kt +++ b/feature-live/src/main/kotlin/io/getstream/avengerschat/feature/live/LiveStreamMessageItemVhFactory.kt @@ -18,13 +18,13 @@ package io.getstream.avengerschat.feature.live import android.view.LayoutInflater import android.view.ViewGroup -import com.getstream.sdk.chat.adapter.MessageListItem import io.getstream.avengerschat.extensions.localDate import io.getstream.avengerschat.feature.live.databinding.ItemLiveMessageBinding -import io.getstream.chat.android.ui.message.list.adapter.BaseMessageItemViewHolder -import io.getstream.chat.android.ui.message.list.adapter.MessageListItemPayloadDiff -import io.getstream.chat.android.ui.message.list.adapter.MessageListItemViewHolderFactory -import io.getstream.chat.android.ui.message.list.adapter.MessageListItemViewType +import io.getstream.chat.android.ui.feature.messages.list.adapter.BaseMessageItemViewHolder +import io.getstream.chat.android.ui.feature.messages.list.adapter.MessageListItem +import io.getstream.chat.android.ui.feature.messages.list.adapter.MessageListItemPayloadDiff +import io.getstream.chat.android.ui.feature.messages.list.adapter.MessageListItemViewHolderFactory +import io.getstream.chat.android.ui.feature.messages.list.adapter.MessageListItemViewType /** * A custom item ViewHolderFactory for customizing the [MessageListItemViewType.PLAIN_TEXT] diff --git a/feature-live/src/main/kotlin/io/getstream/avengerschat/feature/live/component/StreamMessageListUIComponent.kt b/feature-live/src/main/kotlin/io/getstream/avengerschat/feature/live/component/StreamMessageListUIComponent.kt index 431200d..531fcb9 100644 --- a/feature-live/src/main/kotlin/io/getstream/avengerschat/feature/live/component/StreamMessageListUIComponent.kt +++ b/feature-live/src/main/kotlin/io/getstream/avengerschat/feature/live/component/StreamMessageListUIComponent.kt @@ -18,19 +18,19 @@ package io.getstream.avengerschat.feature.live.component import android.view.View import androidx.lifecycle.LifecycleOwner -import com.getstream.sdk.chat.viewmodel.MessageInputViewModel -import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel import io.getstream.avengerschat.core.uicomponents.stream.StreamComponents import io.getstream.avengerschat.core.uicomponents.stream.StreamUIComponent import io.getstream.avengerschat.feature.live.R -import io.getstream.chat.android.ui.message.input.MessageInputView -import io.getstream.chat.android.ui.message.input.viewmodel.bindView -import io.getstream.chat.android.ui.message.list.MessageListView -import io.getstream.chat.android.ui.message.list.header.MessageListHeaderView -import io.getstream.chat.android.ui.message.list.header.viewmodel.MessageListHeaderViewModel -import io.getstream.chat.android.ui.message.list.header.viewmodel.bindView -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.android.ui.common.state.messages.Edit +import io.getstream.chat.android.ui.common.state.messages.MessageMode +import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerView +import io.getstream.chat.android.ui.feature.messages.header.MessageListHeaderView +import io.getstream.chat.android.ui.feature.messages.list.MessageListView +import io.getstream.chat.android.ui.viewmodel.messages.MessageComposerViewModel +import io.getstream.chat.android.ui.viewmodel.messages.MessageListHeaderViewModel +import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModel +import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModelFactory +import io.getstream.chat.android.ui.viewmodel.messages.bindView /** * Stream message list UI component. @@ -52,8 +52,8 @@ class StreamMessageListUIComponent constructor( val messageListViewModel: MessageListViewModel by lazy(LazyThreadSafetyMode.NONE) { factory.create(MessageListViewModel::class.java) } - private val messageInputViewModel: MessageInputViewModel by lazy(LazyThreadSafetyMode.NONE) { - factory.create(MessageInputViewModel::class.java) + private val messageInputViewModel: MessageComposerViewModel by lazy(LazyThreadSafetyMode.NONE) { + factory.create(MessageComposerViewModel::class.java) } @StreamComponents @@ -70,7 +70,7 @@ class StreamMessageListUIComponent constructor( messageListViewModel.bindView(it, lifecycleOwner) } val messageInputView = - view.findViewById(R.id.messageInputView) + view.findViewById(R.id.messageInputView) messageInputView?.let { messageInputViewModel.bindView(it, lifecycleOwner) } @@ -78,17 +78,18 @@ class StreamMessageListUIComponent constructor( // observe thread modes states. messageListViewModel.mode.observe(lifecycleOwner) { when (it) { - is MessageListViewModel.Mode.Thread -> { + is MessageMode.MessageThread -> { messageListHeaderViewModel.setActiveThread(it.parentMessage) - messageInputViewModel.setActiveThread(it.parentMessage) } - is MessageListViewModel.Mode.Normal -> { + is MessageMode.Normal -> { messageListHeaderViewModel.resetThread() - messageInputViewModel.resetThread() } } + messageInputViewModel.setMessageMode(it) + } + messageListView?.setMessageEditHandler { + messageInputViewModel.performMessageAction(Edit(it)) } - messageListView?.setMessageEditHandler(messageInputViewModel::postMessageToEdit) } } diff --git a/feature-live/src/main/res/layout/fragment_live.xml b/feature-live/src/main/res/layout/fragment_live.xml index 9d7d63e..024771f 100644 --- a/feature-live/src/main/res/layout/fragment_live.xml +++ b/feature-live/src/main/res/layout/fragment_live.xml @@ -60,7 +60,7 @@ app:layout_constraintTop_toTopOf="parent" app:loadImage="@{vm.avenger.poster}" /> - - + /> - + app:streamUiMessageComposerAttachmentsButtonVisible="false" /> \ No newline at end of file diff --git a/feature-live/src/main/res/layout/item_live_message.xml b/feature-live/src/main/res/layout/item_live_message.xml index 9d442df..b428017 100644 --- a/feature-live/src/main/res/layout/item_live_message.xml +++ b/feature-live/src/main/res/layout/item_live_message.xml @@ -22,7 +22,7 @@ + type="io.getstream.chat.android.ui.feature.messages.list.adapter.MessageListItem.MessageItem" /> - (R.layout.fragment_mentions) { diff --git a/feature-mention/src/main/res/layout/fragment_mentions.xml b/feature-mention/src/main/res/layout/fragment_mentions.xml index 697d2ae..26810e6 100644 --- a/feature-mention/src/main/res/layout/fragment_mentions.xml +++ b/feature-mention/src/main/res/layout/fragment_mentions.xml @@ -25,7 +25,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - -