diff --git a/compose-custom-attachments/build.gradle b/compose-custom-attachments/build.gradle
index b26ba230..1a1f6743 100644
--- a/compose-custom-attachments/build.gradle
+++ b/compose-custom-attachments/build.gradle
@@ -30,7 +30,9 @@ android {
dependencies {
// Stream SDK
- implementation "io.getstream:stream-chat-android-compose:5.17.0"
+ implementation "io.getstream:stream-chat-android-compose:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-state:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-offline:6.0.0-beta2"
implementation libs.androidxCoreKtx
implementation libs.androidxAppCompat
diff --git a/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/CustomAttachmentsApp.kt b/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/CustomAttachmentsApp.kt
index 8aa8a9c9..2940a968 100644
--- a/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/CustomAttachmentsApp.kt
+++ b/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/CustomAttachmentsApp.kt
@@ -27,10 +27,11 @@ package io.getstream.chat.android.compose.customattachments
import android.app.Application
import io.getstream.chat.android.client.ChatClient
import io.getstream.chat.android.client.logger.ChatLogLevel
-import io.getstream.chat.android.client.models.User
-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.models.User
import io.getstream.chat.android.offline.plugin.factory.StreamOfflinePluginFactory
+import io.getstream.chat.android.state.plugin.config.StatePluginConfig
+import io.getstream.chat.android.state.plugin.factory.StreamStatePluginFactory
class CustomAttachmentsApp : Application() {
override fun onCreate() {
@@ -40,18 +41,18 @@ class CustomAttachmentsApp : Application() {
}
private fun setupStreamSdk() {
- val offlinePluginFactory = StreamOfflinePluginFactory(
- config = Config(
+ val offlinePluginFactory = StreamOfflinePluginFactory(appContext = applicationContext)
+ val statePluginFactory = StreamStatePluginFactory(
+ config = StatePluginConfig(
backgroundSyncEnabled = true,
userPresence = true,
- persistenceEnabled = true,
- uploadAttachmentsNetworkType = UploadAttachmentsNetworkType.NOT_ROAMING
),
- appContext = applicationContext
+ appContext = applicationContext,
)
ChatClient.Builder("qx5us2v6xvmh", applicationContext)
.logLevel(ChatLogLevel.ALL)
- .withPlugin(offlinePluginFactory)
+ .uploadAttachmentsNetworkType(UploadAttachmentsNetworkType.NOT_ROAMING)
+ .withPlugins(offlinePluginFactory, statePluginFactory)
.build()
}
diff --git a/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/ui/CustomMessagesScreen.kt b/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/ui/CustomMessagesScreen.kt
index 833c4583..8de43b86 100644
--- a/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/ui/CustomMessagesScreen.kt
+++ b/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/ui/CustomMessagesScreen.kt
@@ -46,9 +46,6 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import com.google.android.material.datepicker.MaterialDatePicker
-import io.getstream.chat.android.client.models.Attachment
-import io.getstream.chat.android.common.state.MessageMode
-import io.getstream.chat.android.common.state.Reply
import io.getstream.chat.android.compose.customattachments.R
import io.getstream.chat.android.compose.ui.messages.MessagesScreen
import io.getstream.chat.android.compose.ui.messages.composer.MessageComposer
@@ -58,6 +55,9 @@ import io.getstream.chat.android.compose.ui.theme.ChatTheme
import io.getstream.chat.android.compose.viewmodel.messages.MessageComposerViewModel
import io.getstream.chat.android.compose.viewmodel.messages.MessageListViewModel
import io.getstream.chat.android.compose.viewmodel.messages.MessagesViewModelFactory
+import io.getstream.chat.android.models.Attachment
+import io.getstream.chat.android.ui.common.state.messages.MessageMode
+import io.getstream.chat.android.ui.common.state.messages.Reply
import java.text.DateFormat
import java.util.Date
diff --git a/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/ui/DateAttachmentFactory.kt b/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/ui/DateAttachmentFactory.kt
index 408ec13d..f5dec19d 100644
--- a/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/ui/DateAttachmentFactory.kt
+++ b/compose-custom-attachments/src/main/java/io/getstream/chat/android/compose/customattachments/ui/DateAttachmentFactory.kt
@@ -42,12 +42,12 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
-import io.getstream.chat.android.client.models.Attachment
import io.getstream.chat.android.compose.customattachments.R
import io.getstream.chat.android.compose.state.messages.attachments.AttachmentState
import io.getstream.chat.android.compose.ui.attachments.AttachmentFactory
import io.getstream.chat.android.compose.ui.components.CancelIcon
import io.getstream.chat.android.compose.ui.theme.ChatTheme
+import io.getstream.chat.android.models.Attachment
/**
* A custom [AttachmentFactory] that adds support for date attachments.
diff --git a/custom-attachments-message-composer/build.gradle b/custom-attachments-message-composer/build.gradle
index 376052aa..4b2f9a3a 100644
--- a/custom-attachments-message-composer/build.gradle
+++ b/custom-attachments-message-composer/build.gradle
@@ -21,7 +21,9 @@ android {
dependencies {
// Stream SDK dependency
- implementation "io.getstream:stream-chat-android-ui-components:5.17.0"
+ implementation "io.getstream:stream-chat-android-ui-components:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-state:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-offline:6.0.0-beta2"
implementation libs.androidxCoreKtx
implementation libs.androidxActivityKtx
diff --git a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/App.kt b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/App.kt
index e97c5571..190ddbfa 100644
--- a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/App.kt
+++ b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/App.kt
@@ -27,19 +27,19 @@ package io.getstream.chat.android.customattachments
import android.app.Application
import io.getstream.chat.android.client.ChatClient
import io.getstream.chat.android.client.logger.ChatLogLevel
-import io.getstream.chat.android.client.models.User
import io.getstream.chat.android.customattachments.factory.DateAttachmentFactory
import io.getstream.chat.android.customattachments.factory.DateAttachmentPreviewFactory
import io.getstream.chat.android.customattachments.factory.QuotedDateAttachmentFactory
-import io.getstream.chat.android.offline.plugin.configuration.Config
+import io.getstream.chat.android.models.User
import io.getstream.chat.android.offline.plugin.factory.StreamOfflinePluginFactory
+import io.getstream.chat.android.state.plugin.config.StatePluginConfig
+import io.getstream.chat.android.state.plugin.factory.StreamStatePluginFactory
import io.getstream.chat.android.ui.ChatUI
-import io.getstream.chat.android.ui.message.composer.attachment.AttachmentPreviewFactoryManager
-import io.getstream.chat.android.ui.message.composer.attachment.factory.FileAttachmentPreviewFactory
-import io.getstream.chat.android.ui.message.composer.attachment.factory.ImageAttachmentPreviewFactory
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.AttachmentFactoryManager
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.DefaultQuotedAttachmentMessageFactory
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.QuotedAttachmentFactoryManager
+import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.AttachmentPreviewFactoryManager
+import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.factory.FileAttachmentPreviewFactory
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.AttachmentFactoryManager
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.DefaultQuotedAttachmentMessageFactory
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.QuotedAttachmentFactoryManager
class App : Application() {
override fun onCreate() {
@@ -49,28 +49,33 @@ class App : Application() {
}
private fun setupStreamSdk() {
- val offlinePluginFactory = StreamOfflinePluginFactory(
- config = Config(),
- appContext = applicationContext
+ val offlinePluginFactory = StreamOfflinePluginFactory(appContext = applicationContext)
+ val statePluginFactory = StreamStatePluginFactory(
+ config = StatePluginConfig(),
+ appContext = applicationContext,
)
ChatClient.Builder("qx5us2v6xvmh", applicationContext)
.logLevel(ChatLogLevel.ALL)
- .withPlugin(offlinePluginFactory)
+ .withPlugins(offlinePluginFactory, statePluginFactory)
.build()
- ChatUI.attachmentFactoryManager = AttachmentFactoryManager(listOf(DateAttachmentFactory()))
+ ChatUI.attachmentFactoryManager = AttachmentFactoryManager(
+ attachmentFactories = listOf(
+ DateAttachmentFactory()
+ )
+ )
ChatUI.attachmentPreviewFactoryManager = AttachmentPreviewFactoryManager(
listOf(
DateAttachmentPreviewFactory(),
- ImageAttachmentPreviewFactory(),
FileAttachmentPreviewFactory()
)
)
ChatUI.quotedAttachmentFactoryManager = QuotedAttachmentFactoryManager(
- listOf(
+ quotedAttachmentFactories = listOf(
QuotedDateAttachmentFactory(),
+ // The default factory
DefaultQuotedAttachmentMessageFactory()
)
)
diff --git a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/ChannelsActivity.kt b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/ChannelsActivity.kt
index 69cf21a7..9aca70ad 100644
--- a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/ChannelsActivity.kt
+++ b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/ChannelsActivity.kt
@@ -24,9 +24,9 @@
package io.getstream.chat.android.customattachments.activity
-import io.getstream.chat.android.client.models.Channel
-import io.getstream.chat.android.ui.channel.ChannelListActivity
-import io.getstream.chat.android.ui.channel.ChannelListFragment
+import io.getstream.chat.android.models.Channel
+import io.getstream.chat.android.ui.feature.channels.ChannelListActivity
+import io.getstream.chat.android.ui.feature.channels.ChannelListFragment
class ChannelsActivity : ChannelListActivity(), ChannelListFragment.ChannelListItemClickListener {
diff --git a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt
index dd71dee8..b6d8757a 100644
--- a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt
+++ b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt
@@ -34,30 +34,27 @@ import androidx.activity.addCallback
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
-import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel
import com.google.android.material.datepicker.MaterialDatePicker
-import io.getstream.chat.android.client.models.Attachment
-import io.getstream.chat.android.client.models.ChannelCapabilities
-import io.getstream.chat.android.common.composer.MessageComposerState
-import io.getstream.chat.android.common.state.Edit
-import io.getstream.chat.android.common.state.MessageMode
-import io.getstream.chat.android.common.state.Reply
import io.getstream.chat.android.core.ExperimentalStreamChatApi
import io.getstream.chat.android.customattachments.databinding.ActivityMessagesBinding
import io.getstream.chat.android.customattachments.databinding.CustomMessageComposerLeadingContentBinding
-import io.getstream.chat.android.ui.message.composer.MessageComposerContext
-import io.getstream.chat.android.ui.message.composer.MessageComposerViewStyle
-import io.getstream.chat.android.ui.message.composer.content.MessageComposerContent
-import io.getstream.chat.android.ui.message.composer.viewmodel.MessageComposerViewModel
-import io.getstream.chat.android.ui.message.composer.viewmodel.bindView
-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.models.Attachment
+import io.getstream.chat.android.models.ChannelCapabilities
+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.common.state.messages.Reply
+import io.getstream.chat.android.ui.common.state.messages.composer.MessageComposerState
+import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerContext
+import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerViewStyle
+import io.getstream.chat.android.ui.feature.messages.composer.content.MessageComposerContent
+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
import java.text.DateFormat
import java.util.Date
-@OptIn(ExperimentalStreamChatApi::class)
class MessagesActivity : AppCompatActivity() {
private lateinit var binding: ActivityMessagesBinding
@@ -80,11 +77,11 @@ class MessagesActivity : AppCompatActivity() {
messageListViewModel.mode.observe(this) {
when (it) {
- is MessageListViewModel.Mode.Thread -> {
+ is MessageMode.MessageThread -> {
messageListHeaderViewModel.setActiveThread(it.parentMessage)
messageComposerViewModel.setMessageMode(MessageMode.MessageThread(it.parentMessage))
}
- is MessageListViewModel.Mode.Normal -> {
+ is MessageMode.Normal -> {
messageListHeaderViewModel.resetThread()
messageComposerViewModel.leaveThread()
}
diff --git a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentFactory.kt b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentFactory.kt
index d9c72c9a..bee455aa 100644
--- a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentFactory.kt
+++ b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentFactory.kt
@@ -26,11 +26,11 @@ package io.getstream.chat.android.customattachments.factory
import android.view.LayoutInflater
import android.view.ViewGroup
-import io.getstream.chat.android.client.models.Message
import io.getstream.chat.android.customattachments.databinding.ItemDateAttachmentBinding
-import io.getstream.chat.android.ui.message.list.adapter.MessageListListenerContainer
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.AttachmentFactory
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.InnerAttachmentViewHolder
+import io.getstream.chat.android.models.Message
+import io.getstream.chat.android.ui.feature.messages.list.adapter.MessageListListenerContainer
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.AttachmentFactory
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.InnerAttachmentViewHolder
class DateAttachmentFactory : AttachmentFactory {
diff --git a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentPreviewFactory.kt b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentPreviewFactory.kt
index ae91d62f..3c767a9d 100644
--- a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentPreviewFactory.kt
+++ b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentPreviewFactory.kt
@@ -26,10 +26,11 @@ package io.getstream.chat.android.customattachments.factory
import android.view.LayoutInflater
import android.view.ViewGroup
-import io.getstream.chat.android.client.models.Attachment
import io.getstream.chat.android.customattachments.databinding.ItemDateAttachmentPreviewBinding
-import io.getstream.chat.android.ui.message.composer.attachment.AttachmentPreviewViewHolder
-import io.getstream.chat.android.ui.message.composer.attachment.factory.AttachmentPreviewFactory
+import io.getstream.chat.android.models.Attachment
+import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerViewStyle
+import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.AttachmentPreviewViewHolder
+import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.factory.AttachmentPreviewFactory
class DateAttachmentPreviewFactory : AttachmentPreviewFactory {
@@ -39,7 +40,8 @@ class DateAttachmentPreviewFactory : AttachmentPreviewFactory {
override fun onCreateViewHolder(
parentView: ViewGroup,
- attachmentRemovalListener: (Attachment) -> Unit
+ attachmentRemovalListener: (Attachment) -> Unit,
+ style: MessageComposerViewStyle?
): AttachmentPreviewViewHolder {
return ItemDateAttachmentPreviewBinding
.inflate(LayoutInflater.from(parentView.context), parentView, false)
diff --git a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/QuotedDateAttachmentFactory.kt b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/QuotedDateAttachmentFactory.kt
index 4c2d2c7b..fbf1b86c 100644
--- a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/QuotedDateAttachmentFactory.kt
+++ b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/factory/QuotedDateAttachmentFactory.kt
@@ -29,10 +29,10 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
-import io.getstream.chat.android.client.models.Attachment
-import io.getstream.chat.android.client.models.Message
import io.getstream.chat.android.customattachments.databinding.ViewQuotedDateAttachmentBinding
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.QuotedAttachmentFactory
+import io.getstream.chat.android.models.Attachment
+import io.getstream.chat.android.models.Message
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.QuotedAttachmentFactory
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
diff --git a/custom-attachments-message-composer/src/main/res/layout/activity_messages.xml b/custom-attachments-message-composer/src/main/res/layout/activity_messages.xml
index 6d75ac35..05fec8c8 100644
--- a/custom-attachments-message-composer/src/main/res/layout/activity_messages.xml
+++ b/custom-attachments-message-composer/src/main/res/layout/activity_messages.xml
@@ -27,7 +27,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
-
- ?attr/colorPrimaryVariant
-
-
-
-
\ No newline at end of file
diff --git a/custom-attachments-message-input/build.gradle b/custom-attachments-message-input/build.gradle
index 2ab477cf..c0c35355 100644
--- a/custom-attachments-message-input/build.gradle
+++ b/custom-attachments-message-input/build.gradle
@@ -21,7 +21,9 @@ android {
dependencies {
// Stream SDK dependency
- implementation "io.getstream:stream-chat-android-ui-components:5.17.0"
+ implementation "io.getstream:stream-chat-android-ui-components:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-state:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-offline:6.0.0-beta2"
implementation libs.androidxCoreKtx
implementation libs.androidxActivityKtx
diff --git a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/App.kt b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/App.kt
index d45a5fd6..fc0a4280 100644
--- a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/App.kt
+++ b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/App.kt
@@ -27,15 +27,20 @@ package io.getstream.chat.android.customattachments
import android.app.Application
import io.getstream.chat.android.client.ChatClient
import io.getstream.chat.android.client.logger.ChatLogLevel
-import io.getstream.chat.android.client.models.User
import io.getstream.chat.android.customattachments.factory.DateAttachmentFactory
+import io.getstream.chat.android.customattachments.factory.DateAttachmentPreviewFactory
import io.getstream.chat.android.customattachments.factory.QuotedDateAttachmentFactory
-import io.getstream.chat.android.offline.plugin.configuration.Config
+import io.getstream.chat.android.models.User
import io.getstream.chat.android.offline.plugin.factory.StreamOfflinePluginFactory
+import io.getstream.chat.android.state.plugin.config.StatePluginConfig
+import io.getstream.chat.android.state.plugin.factory.StreamStatePluginFactory
import io.getstream.chat.android.ui.ChatUI
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.AttachmentFactoryManager
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.DefaultQuotedAttachmentMessageFactory
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.QuotedAttachmentFactoryManager
+import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.AttachmentPreviewFactoryManager
+import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.factory.FileAttachmentPreviewFactory
+import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.factory.MediaAttachmentPreviewFactory
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.AttachmentFactoryManager
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.DefaultQuotedAttachmentMessageFactory
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.QuotedAttachmentFactoryManager
class App : Application() {
override fun onCreate() {
@@ -45,20 +50,33 @@ class App : Application() {
}
private fun setupStreamSdk() {
- val offlinePluginFactory = StreamOfflinePluginFactory(
- config = Config(),
- appContext = applicationContext
+ val offlinePluginFactory = StreamOfflinePluginFactory(appContext = applicationContext)
+ val statePluginFactory = StreamStatePluginFactory(
+ config = StatePluginConfig(),
+ appContext = applicationContext,
)
ChatClient.Builder("qx5us2v6xvmh", applicationContext)
.logLevel(ChatLogLevel.ALL)
- .withPlugin(offlinePluginFactory)
+ .withPlugins(offlinePluginFactory, statePluginFactory)
.build()
- ChatUI.attachmentFactoryManager = AttachmentFactoryManager(listOf(DateAttachmentFactory()))
-
+ ChatUI.attachmentFactoryManager = AttachmentFactoryManager(
+ attachmentFactories = listOf(
+ DateAttachmentFactory()
+ )
+ )
+ ChatUI.attachmentPreviewFactoryManager = AttachmentPreviewFactoryManager(
+ attachmentPreviewFactories = listOf(
+ DateAttachmentPreviewFactory(),
+ // The default factories
+ MediaAttachmentPreviewFactory(),
+ FileAttachmentPreviewFactory(),
+ )
+ )
ChatUI.quotedAttachmentFactoryManager = QuotedAttachmentFactoryManager(
- listOf(
+ quotedAttachmentFactories = listOf(
QuotedDateAttachmentFactory(),
+ // The default factory
DefaultQuotedAttachmentMessageFactory()
)
)
diff --git a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/ChannelsActivity.kt b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/ChannelsActivity.kt
index 69cf21a7..9aca70ad 100644
--- a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/ChannelsActivity.kt
+++ b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/ChannelsActivity.kt
@@ -24,9 +24,9 @@
package io.getstream.chat.android.customattachments.activity
-import io.getstream.chat.android.client.models.Channel
-import io.getstream.chat.android.ui.channel.ChannelListActivity
-import io.getstream.chat.android.ui.channel.ChannelListFragment
+import io.getstream.chat.android.models.Channel
+import io.getstream.chat.android.ui.feature.channels.ChannelListActivity
+import io.getstream.chat.android.ui.feature.channels.ChannelListFragment
class ChannelsActivity : ChannelListActivity(), ChannelListFragment.ChannelListItemClickListener {
diff --git a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt
index 1e1cec9d..937fb39d 100644
--- a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt
+++ b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt
@@ -26,14 +26,23 @@ package io.getstream.chat.android.customattachments.activity
import android.content.Context
import android.content.Intent
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.widget.FrameLayout
+import androidx.core.view.isVisible
import com.google.android.material.datepicker.MaterialDatePicker
-import io.getstream.chat.android.client.models.Attachment
-import io.getstream.chat.android.customattachments.R
-import io.getstream.chat.android.customattachments.factory.DateAttachmentPreviewFactory
-import io.getstream.chat.android.ui.message.MessageListActivity
-import io.getstream.chat.android.ui.message.MessageListFragment
-import io.getstream.chat.android.ui.message.input.MessageInputView
-import java.text.DateFormat
+import io.getstream.chat.android.customattachments.databinding.CustomMessageComposerLeadingContentBinding
+import io.getstream.chat.android.models.Attachment
+import io.getstream.chat.android.models.ChannelCapabilities
+import io.getstream.chat.android.ui.common.state.messages.Edit
+import io.getstream.chat.android.ui.common.state.messages.composer.MessageComposerState
+import io.getstream.chat.android.ui.feature.messages.MessageListActivity
+import io.getstream.chat.android.ui.feature.messages.MessageListFragment
+import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerContext
+import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerView
+import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerViewStyle
+import io.getstream.chat.android.ui.feature.messages.composer.content.MessageComposerContent
+import java.text.SimpleDateFormat
import java.util.Date
class MessagesActivity : MessageListActivity() {
@@ -41,7 +50,6 @@ class MessagesActivity : MessageListActivity() {
override fun createMessageListFragment(cid: String, messageId: String?): MessageListFragment {
return MessageListFragment.newInstance(cid) {
setFragment(CustomMessageListFragment())
- customTheme(R.style.CustomStreamUiTheme)
showHeader(true)
messageId(messageId)
}
@@ -49,36 +57,87 @@ class MessagesActivity : MessageListActivity() {
class CustomMessageListFragment : MessageListFragment() {
- override fun setupMessageInput(messageInputView: MessageInputView) {
- super.setupMessageInput(messageInputView)
-
- // Create an instance of a date picker dialog
- val datePickerDialog = MaterialDatePicker.Builder
- .datePicker()
- .build()
-
- // Add an attachment to the message input when the user selects a date
- datePickerDialog.addOnPositiveButtonClickListener {
- val date = DateFormat
- .getDateInstance(DateFormat.LONG)
- .format(Date(it))
- val attachment = Attachment(
- type = "date",
- extraData = mutableMapOf("payload" to date)
- )
- messageInputView.submitCustomAttachments(
- attachments = listOf(attachment),
- viewHolderFactory = DateAttachmentPreviewFactory()
- )
- }
+ override fun setupMessageComposer(messageComposerView: MessageComposerView) {
+ super.setupMessageComposer(messageComposerView)
+ messageComposerView.setLeadingContent(
+ CustomMessageComposerLeadingContent(messageComposerView.context).also {
+ it.attachmentsButtonClickListener = { binding.messageComposerView.attachmentsButtonClickListener() }
+ it.commandsButtonClickListener = { binding.messageComposerView.commandsButtonClickListener() }
+ it.calendarButtonClickListener = {
+ // Create an instance of a date picker dialog
+ val datePickerDialog = MaterialDatePicker.Builder
+ .datePicker()
+ .build()
- // Show the date picker dialog when the attachment button is clicked
- messageInputView.setAttachmentButtonClickListener {
- datePickerDialog.show(requireActivity().supportFragmentManager, null)
- }
+ // Add an attachment to the message input when the user selects a date
+ datePickerDialog.addOnPositiveButtonClickListener { date ->
+ val payload = SimpleDateFormat("MMMM dd, yyyy").format(Date(date))
+ val attachment = Attachment(
+ type = "date",
+ extraData = mutableMapOf("payload" to payload)
+ )
+ messageComposerViewModel.addSelectedAttachments(listOf(attachment))
+ }
+
+ // Show the date picker dialog at the click of the calendar button
+ datePickerDialog.show(requireActivity().supportFragmentManager, null)
+ }
+ }
+ )
}
}
+ private class CustomMessageComposerLeadingContent : FrameLayout, MessageComposerContent {
+
+ private val binding: CustomMessageComposerLeadingContentBinding
+ private lateinit var style: MessageComposerViewStyle
+
+ var attachmentsButtonClickListener: () -> Unit = {}
+ var commandsButtonClickListener: () -> Unit = {}
+
+ // Click listener for the date picker button
+ var calendarButtonClickListener: () -> Unit = {}
+
+ constructor(context: Context) : this(context, null)
+
+ constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
+
+ constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
+ context,
+ attrs,
+ defStyleAttr
+ ) {
+ binding = CustomMessageComposerLeadingContentBinding.inflate(LayoutInflater.from(context), this)
+ binding.attachmentsButton.setOnClickListener { attachmentsButtonClickListener() }
+ binding.commandsButton.setOnClickListener { commandsButtonClickListener() }
+ // Set click listener for the date picker button
+ binding.calendarButton.setOnClickListener { calendarButtonClickListener() }
+ }
+
+ override fun attachContext(messageComposerContext: MessageComposerContext) {
+ this.style = messageComposerContext.style
+ }
+
+ override fun renderState(state: MessageComposerState) {
+ val canSendMessage = state.ownCapabilities.contains(ChannelCapabilities.SEND_MESSAGE)
+ val canUploadFile = state.ownCapabilities.contains(ChannelCapabilities.UPLOAD_FILE)
+ val hasTextInput = state.inputValue.isNotEmpty()
+ val hasAttachments = state.attachments.isNotEmpty()
+ val hasCommandInput = state.inputValue.startsWith("/")
+ val hasCommandSuggestions = state.commandSuggestions.isNotEmpty()
+ val hasMentionSuggestions = state.mentionSuggestions.isNotEmpty()
+ val isInEditMode = state.action is Edit
+
+ binding.attachmentsButton.isEnabled =
+ !hasCommandInput && !hasCommandSuggestions && !hasMentionSuggestions
+ binding.attachmentsButton.isVisible =
+ style.attachmentsButtonVisible && canSendMessage && canUploadFile && !isInEditMode
+
+ binding.commandsButton.isEnabled = !hasTextInput && !hasAttachments
+ binding.commandsButton.isVisible = style.commandsButtonVisible && canSendMessage && !isInEditMode
+ binding.commandsButton.isSelected = hasCommandSuggestions
+ }
+ }
companion object {
private const val EXTRA_CID: String = "extra_cid"
private const val EXTRA_MESSAGE_ID: String = "extra_message_id"
diff --git a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentFactory.kt b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentFactory.kt
index d9c72c9a..bee455aa 100644
--- a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentFactory.kt
+++ b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentFactory.kt
@@ -26,11 +26,11 @@ package io.getstream.chat.android.customattachments.factory
import android.view.LayoutInflater
import android.view.ViewGroup
-import io.getstream.chat.android.client.models.Message
import io.getstream.chat.android.customattachments.databinding.ItemDateAttachmentBinding
-import io.getstream.chat.android.ui.message.list.adapter.MessageListListenerContainer
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.AttachmentFactory
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.InnerAttachmentViewHolder
+import io.getstream.chat.android.models.Message
+import io.getstream.chat.android.ui.feature.messages.list.adapter.MessageListListenerContainer
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.AttachmentFactory
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.InnerAttachmentViewHolder
class DateAttachmentFactory : AttachmentFactory {
diff --git a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentPreviewFactory.kt b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentPreviewFactory.kt
index b91f4664..787edb76 100644
--- a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentPreviewFactory.kt
+++ b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/DateAttachmentPreviewFactory.kt
@@ -26,31 +26,45 @@ package io.getstream.chat.android.customattachments.factory
import android.view.LayoutInflater
import android.view.ViewGroup
-import io.getstream.chat.android.client.models.Attachment
import io.getstream.chat.android.customattachments.databinding.ItemDateAttachmentPreviewBinding
-import io.getstream.chat.android.ui.message.input.attachment.selected.internal.BaseSelectedCustomAttachmentViewHolder
-import io.getstream.chat.android.ui.message.input.attachment.selected.internal.SelectedCustomAttachmentViewHolderFactory
+import io.getstream.chat.android.models.Attachment
+import io.getstream.chat.android.ui.feature.messages.composer.MessageComposerViewStyle
+import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.AttachmentPreviewViewHolder
+import io.getstream.chat.android.ui.feature.messages.composer.attachment.preview.factory.AttachmentPreviewFactory
-class DateAttachmentPreviewFactory : SelectedCustomAttachmentViewHolderFactory {
+class DateAttachmentPreviewFactory : AttachmentPreviewFactory {
- override fun createAttachmentViewHolder(
- attachments: List,
- parent: ViewGroup
- ): BaseSelectedCustomAttachmentViewHolder {
+ override fun canHandle(attachment: Attachment): Boolean {
+ return attachment.type == "date"
+ }
+
+ override fun onCreateViewHolder(
+ parentView: ViewGroup,
+ attachmentRemovalListener: (Attachment) -> Unit,
+ style: MessageComposerViewStyle?,
+ ): AttachmentPreviewViewHolder {
return ItemDateAttachmentPreviewBinding
- .inflate(LayoutInflater.from(parent.context), parent, false)
- .let(::DateAttachmentPreviewViewHolder)
+ .inflate(LayoutInflater.from(parentView.context), parentView, false)
+ .let { DateAttachmentPreviewViewHolder(it, attachmentRemovalListener) }
}
class DateAttachmentPreviewViewHolder(
- private val binding: ItemDateAttachmentPreviewBinding
- ) : BaseSelectedCustomAttachmentViewHolder(binding.root) {
+ private val binding: ItemDateAttachmentPreviewBinding,
+ private val attachmentRemovalListener: (Attachment) -> Unit,
+ ) : AttachmentPreviewViewHolder(binding.root) {
- override fun bind(attachment: Attachment, onAttachmentCancelled: (Attachment) -> Unit) {
- binding.dateTextView.text = attachment.extraData["payload"].toString()
+ private lateinit var attachment: Attachment
+
+ init {
binding.deleteButton.setOnClickListener {
- onAttachmentCancelled(attachment)
+ attachmentRemovalListener(attachment)
}
}
+
+ override fun bind(attachment: Attachment) {
+ this.attachment = attachment
+
+ binding.dateTextView.text = attachment.extraData["payload"].toString()
+ }
}
}
diff --git a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/QuotedDateAttachmentFactory.kt b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/QuotedDateAttachmentFactory.kt
index 4c2d2c7b..fbf1b86c 100644
--- a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/QuotedDateAttachmentFactory.kt
+++ b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/factory/QuotedDateAttachmentFactory.kt
@@ -29,10 +29,10 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
-import io.getstream.chat.android.client.models.Attachment
-import io.getstream.chat.android.client.models.Message
import io.getstream.chat.android.customattachments.databinding.ViewQuotedDateAttachmentBinding
-import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.QuotedAttachmentFactory
+import io.getstream.chat.android.models.Attachment
+import io.getstream.chat.android.models.Message
+import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.QuotedAttachmentFactory
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
diff --git a/custom-attachments-message-input/src/main/res/layout/custom_message_composer_leading_content.xml b/custom-attachments-message-input/src/main/res/layout/custom_message_composer_leading_content.xml
new file mode 100644
index 00000000..e6236937
--- /dev/null
+++ b/custom-attachments-message-input/src/main/res/layout/custom_message_composer_leading_content.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/custom-attachments-message-input/src/main/res/values/themes.xml b/custom-attachments-message-input/src/main/res/values/themes.xml
index 18663419..5b8552e9 100644
--- a/custom-attachments-message-input/src/main/res/values/themes.xml
+++ b/custom-attachments-message-input/src/main/res/values/themes.xml
@@ -37,12 +37,4 @@
- ?attr/colorPrimaryVariant
-
-
-
-
\ No newline at end of file
diff --git a/video-chat-sample/build.gradle b/video-chat-sample/build.gradle
index 22346cf2..f949a4e0 100644
--- a/video-chat-sample/build.gradle
+++ b/video-chat-sample/build.gradle
@@ -41,7 +41,7 @@ android {
dependencies {
// Stream SDK dependency
- implementation 'io.getstream:stream-chat-android-client:5.17.0'
+ implementation "io.getstream:stream-chat-android-client:6.0.0-beta2"
implementation libs.materialComponents
implementation libs.kotlinStdLib
diff --git a/video-chat-sample/src/main/kotlin/io/getstream/videochat/VideoChatApp.kt b/video-chat-sample/src/main/kotlin/io/getstream/videochat/VideoChatApp.kt
index cd5926bd..4c866628 100644
--- a/video-chat-sample/src/main/kotlin/io/getstream/videochat/VideoChatApp.kt
+++ b/video-chat-sample/src/main/kotlin/io/getstream/videochat/VideoChatApp.kt
@@ -27,7 +27,7 @@ package io.getstream.videochat
import android.app.Application
import io.getstream.chat.android.client.ChatClient
import io.getstream.chat.android.client.logger.ChatLogLevel
-import io.getstream.chat.android.client.models.User
+import io.getstream.chat.android.models.User
class VideoChatApp : Application() {
diff --git a/video-chat-sample/src/main/kotlin/io/getstream/videochat/ui/detail/MessageListAdapter.kt b/video-chat-sample/src/main/kotlin/io/getstream/videochat/ui/detail/MessageListAdapter.kt
index caae586a..3ce91ade 100644
--- a/video-chat-sample/src/main/kotlin/io/getstream/videochat/ui/detail/MessageListAdapter.kt
+++ b/video-chat-sample/src/main/kotlin/io/getstream/videochat/ui/detail/MessageListAdapter.kt
@@ -31,7 +31,7 @@ import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import coil.load
import coil.transform.CircleCropTransformation
-import io.getstream.chat.android.client.models.Message
+import io.getstream.chat.android.models.Message
import io.getstream.videochat.databinding.ItemMessageBinding
class MessageListAdapter :
diff --git a/video-chat-sample/src/main/kotlin/io/getstream/videochat/ui/detail/VideoDetailViewModel.kt b/video-chat-sample/src/main/kotlin/io/getstream/videochat/ui/detail/VideoDetailViewModel.kt
index 9ef74c3c..2b95375d 100644
--- a/video-chat-sample/src/main/kotlin/io/getstream/videochat/ui/detail/VideoDetailViewModel.kt
+++ b/video-chat-sample/src/main/kotlin/io/getstream/videochat/ui/detail/VideoDetailViewModel.kt
@@ -33,8 +33,8 @@ import io.getstream.chat.android.client.api.models.QueryChannelRequest
import io.getstream.chat.android.client.channel.ChannelClient
import io.getstream.chat.android.client.channel.subscribeFor
import io.getstream.chat.android.client.events.NewMessageEvent
-import io.getstream.chat.android.client.models.Message
import io.getstream.chat.android.client.utils.observable.Disposable
+import io.getstream.chat.android.models.Message
import io.getstream.videochat.YoutubeVideo
class VideoDetailViewModel(
@@ -55,9 +55,7 @@ class VideoDetailViewModel(
.withMessages(30)
.withWatch()
channelClient.query(query).enqueue {
- if (it.isSuccess) {
- _messages.value = it.data().messages
- }
+ it.onSuccess { _messages.value = it.messages }
}
channelClient.subscribeFor { event ->
diff --git a/virtual-event-sample/build.gradle b/virtual-event-sample/build.gradle
index c9a1663a..a5d2fb76 100644
--- a/virtual-event-sample/build.gradle
+++ b/virtual-event-sample/build.gradle
@@ -71,7 +71,9 @@ android {
dependencies {
// Stream SDK dependency
- implementation "io.getstream:stream-chat-android-ui-components:5.17.0"
+ implementation "io.getstream:stream-chat-android-ui-components:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-state:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-offline:6.0.0-beta2"
implementation libs.androidxCoreKtx
implementation libs.androidxAppCompat
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/MainActivity.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/MainActivity.kt
index f521ba48..7be0645a 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/MainActivity.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/MainActivity.kt
@@ -54,7 +54,7 @@ class MainActivity : AppCompatActivity() {
private fun setupToolbar() {
viewModel.currentUser.observe(this) { user ->
if (user != null) {
- binding.userAvatarView.setUserData(user)
+ binding.userAvatarView.setUser(user)
}
}
binding.userAvatarView.setOnClickListener {
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/MainViewModel.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/MainViewModel.kt
index 3ab6ffd5..56302cff 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/MainViewModel.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/MainViewModel.kt
@@ -28,12 +28,13 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import io.getstream.chat.android.client.ChatClient
-import io.getstream.chat.android.client.models.User
-import io.getstream.chat.android.client.setup.state.ClientState
+import io.getstream.chat.android.models.User
+import io.getstream.chat.android.state.extensions.globalState
+import io.getstream.chat.android.state.plugin.state.global.GlobalState
class MainViewModel(
- clientState: ClientState = ChatClient.instance().clientState,
+ globalState: GlobalState = ChatClient.instance().globalState,
) : ViewModel() {
- val currentUser: LiveData = clientState.user.asLiveData()
+ val currentUser: LiveData = globalState.user.asLiveData()
}
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/VirtualEventApp.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/VirtualEventApp.kt
index c989db7b..95c4cb49 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/VirtualEventApp.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/VirtualEventApp.kt
@@ -27,20 +27,22 @@ package io.getstream.chat.virtualevent
import android.app.Application
import io.getstream.chat.android.client.ChatClient
import io.getstream.chat.android.client.logger.ChatLogLevel
-import io.getstream.chat.android.client.models.User
-import io.getstream.chat.android.offline.plugin.configuration.Config
+import io.getstream.chat.android.models.User
import io.getstream.chat.android.offline.plugin.factory.StreamOfflinePluginFactory
+import io.getstream.chat.android.state.plugin.config.StatePluginConfig
+import io.getstream.chat.android.state.plugin.factory.StreamStatePluginFactory
class VirtualEventApp : Application() {
override fun onCreate() {
super.onCreate()
- val offlinePluginFactory = StreamOfflinePluginFactory(
- config = Config(),
- appContext = this
+ val offlinePluginFactory = StreamOfflinePluginFactory(appContext = this)
+ val statePluginFactory = StreamStatePluginFactory(
+ config = StatePluginConfig(),
+ appContext = this,
)
ChatClient.Builder("7de6n9dsyzjx", applicationContext)
- .withPlugin(offlinePluginFactory)
+ .withPlugins(offlinePluginFactory, statePluginFactory)
.logLevel(ChatLogLevel.ALL)
.build()
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/DirectChatActivity.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/DirectChatActivity.kt
index ecd62bc6..53cf7bdb 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/DirectChatActivity.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/DirectChatActivity.kt
@@ -33,16 +33,16 @@ import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.descendants
import androidx.core.view.setPadding
-import com.getstream.sdk.chat.viewmodel.MessageInputViewModel
-import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel
-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
import io.getstream.chat.virtualevent.databinding.ActivityDirectChatBinding
class DirectChatActivity : AppCompatActivity() {
@@ -54,7 +54,7 @@ class DirectChatActivity : AppCompatActivity() {
private val factory: MessageListViewModelFactory by lazy { MessageListViewModelFactory(cid) }
private val messageListViewModel: MessageListViewModel by viewModels { factory }
private val messageListHeaderViewModel: MessageListHeaderViewModel by viewModels { factory }
- private val messageInputViewModel: MessageInputViewModel by viewModels { factory }
+ private val messageInputViewModel: MessageComposerViewModel by viewModels { factory }
private lateinit var binding: ActivityDirectChatBinding
@@ -107,23 +107,24 @@ class DirectChatActivity : AppCompatActivity() {
}
}
- private fun setupMessageInput(messageInputView: MessageInputView) {
+ private fun setupMessageInput(messageInputView: MessageComposerView) {
messageInputViewModel.apply {
messageInputViewModel.bindView(messageInputView, this@DirectChatActivity)
messageListViewModel.mode.observe(this@DirectChatActivity) {
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)
+ }
+ binding.messageListView.setMessageEditHandler {
+ performMessageAction(Edit(it))
}
- binding.messageListView.setMessageEditHandler(::postMessageToEdit)
}
}
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/list/DirectChatsFragment.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/list/DirectChatsFragment.kt
index 68dc2c1f..44ff07fb 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/list/DirectChatsFragment.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/list/DirectChatsFragment.kt
@@ -31,9 +31,9 @@ import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
-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.viewmodel.channels.ChannelListViewModel
+import io.getstream.chat.android.ui.viewmodel.channels.ChannelListViewModelFactory
+import io.getstream.chat.android.ui.viewmodel.channels.bindView
import io.getstream.chat.virtualevent.databinding.FragmentDirectChatsBinding
import io.getstream.chat.virtualevent.databinding.ViewDmEmptyBinding
import io.getstream.chat.virtualevent.feature.dm.DirectChatActivity
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/ParticipantListAdapter.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/ParticipantListAdapter.kt
index e85f8d31..34cbb288 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/ParticipantListAdapter.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/ParticipantListAdapter.kt
@@ -27,7 +27,7 @@ package io.getstream.chat.virtualevent.feature.dm.new
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
-import io.getstream.chat.android.client.models.User
+import io.getstream.chat.android.models.User
import io.getstream.chat.virtualevent.databinding.ItemParticipantBinding
class ParticipantListAdapter(
@@ -70,7 +70,7 @@ class ParticipantListAdapter(
fun bind(participants: User) {
this.participants = participants
with(binding) {
- userAvatarView.setUserData(participants)
+ userAvatarView.setUser(participants)
nameTextView.text = participants.name
companyTextView.text = participants.extraData[EXTRA_COMPANY] as? String
}
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantActivity.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantActivity.kt
index 945fade1..e4c2454b 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantActivity.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantActivity.kt
@@ -29,7 +29,7 @@ import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
-import io.getstream.chat.android.livedata.utils.EventObserver
+import androidx.lifecycle.Observer
import io.getstream.chat.virtualevent.databinding.ActivitySelectParticipantBinding
import io.getstream.chat.virtualevent.feature.dm.DirectChatActivity
import io.getstream.chat.virtualevent.util.setupToolbar
@@ -56,7 +56,7 @@ class SelectParticipantActivity : AppCompatActivity() {
binding.participantsRecyclerView.adapter = adapter
with(viewModel) {
state.observe(this@SelectParticipantActivity, ::renderParticipantsState)
- events.observe(this@SelectParticipantActivity, EventObserver(::handleEvent))
+ events.observe(this@SelectParticipantActivity, Observer(::handleEvent))
}
}
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantViewModel.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantViewModel.kt
index ac1e5597..f7427300 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantViewModel.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantViewModel.kt
@@ -31,9 +31,8 @@ import androidx.lifecycle.viewModelScope
import io.getstream.chat.android.client.ChatClient
import io.getstream.chat.android.client.api.models.QueryUsersRequest
import io.getstream.chat.android.client.errors.ChatError
-import io.getstream.chat.android.client.models.Filters
-import io.getstream.chat.android.client.models.User
-import io.getstream.chat.android.livedata.utils.Event
+import io.getstream.chat.android.models.Filters
+import io.getstream.chat.android.models.User
import io.getstream.chat.virtualevent.util.currentUserId
import kotlinx.coroutines.launch
@@ -48,14 +47,14 @@ class SelectParticipantViewModel(
) : ViewModel() {
private val _state: MutableLiveData = MutableLiveData()
- private val _events: MutableLiveData> = MutableLiveData()
+ private val _events: MutableLiveData = MutableLiveData()
val state: LiveData = _state
- val events: LiveData> = _events
+ val events: LiveData = _events
init {
_state.postValue(State.Loading)
viewModelScope.launch {
- val result = chatClient.queryUsers(
+ chatClient.queryUsers(
QueryUsersRequest(
filter = Filters.and(
Filters.ne("id", currentUserId()),
@@ -64,12 +63,10 @@ class SelectParticipantViewModel(
offset = 0,
limit = 30,
)
- ).await()
- if (result.isSuccess) {
- _state.postValue(State.Content(result.data()))
- } else {
- _state.postValue(State.Error(result.error()))
- }
+ )
+ .await()
+ .onSuccess { _state.postValue(State.Content(it)) }
+ .onError { _state.postValue(State.Error(it)) }
}
}
@@ -81,10 +78,7 @@ class SelectParticipantViewModel(
memberIds = listOf(user.id, currentUserId()),
extraData = mapOf()
).await()
- if (result.isSuccess) {
- val cid = result.data().cid
- _events.postValue(Event(UiEvent.NavigateToChat(cid)))
- }
+ .onSuccess { _events.postValue(UiEvent.NavigateToChat(it.cid)) }
}
}
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/EventDetailsActivity.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/EventDetailsActivity.kt
index f38a8797..b8fb1985 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/EventDetailsActivity.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/EventDetailsActivity.kt
@@ -30,14 +30,13 @@ import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
-import com.getstream.sdk.chat.viewmodel.MessageInputViewModel
-import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel
import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.SimpleExoPlayer
-import io.getstream.chat.android.ui.message.input.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.viewmodel.messages.MessageComposerViewModel
+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
import io.getstream.chat.virtualevent.databinding.ActivityEventDetailsBinding
import io.getstream.chat.virtualevent.util.setupToolbar
@@ -48,7 +47,7 @@ import io.getstream.chat.virtualevent.util.setupToolbar
class EventDetailsActivity : AppCompatActivity() {
private lateinit var messageListViewModel: MessageListViewModel
- private lateinit var messageInputViewModel: MessageInputViewModel
+ private lateinit var messageInputViewModel: MessageComposerViewModel
private lateinit var binding: ActivityEventDetailsBinding
private var player: SimpleExoPlayer? = null
@@ -61,7 +60,7 @@ class EventDetailsActivity : AppCompatActivity() {
val cid = intent.getStringExtra(KEY_EXTRA_CID)!!
val factory = MessageListViewModelFactory(cid = cid)
messageListViewModel = factory.create(MessageListViewModel::class.java)
- messageInputViewModel = factory.create(MessageInputViewModel::class.java)
+ messageInputViewModel = factory.create(MessageComposerViewModel::class.java)
setupToolbar()
setupMessageListView()
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/LivestreamMessageItemVhFactory.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/LivestreamMessageItemVhFactory.kt
index 62242838..f3fce4a9 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/LivestreamMessageItemVhFactory.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/LivestreamMessageItemVhFactory.kt
@@ -26,11 +26,11 @@ package io.getstream.chat.virtualevent.feature.event.detail
import android.view.LayoutInflater
import android.view.ViewGroup
-import com.getstream.sdk.chat.adapter.MessageListItem
-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.PLAIN_TEXT
+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.PLAIN_TEXT
import io.getstream.chat.virtualevent.databinding.ItemMessagePlainTextBinding
class LivestreamMessageItemVhFactory : MessageListItemViewHolderFactory() {
@@ -58,7 +58,7 @@ class PlainTextViewHolder(
override fun bindData(data: MessageListItem.MessageItem, diff: MessageListItemPayloadDiff?) {
binding.messageTextView.text = data.message.text
binding.usernameTextView.text = data.message.user.name
- binding.avatarView.setUserData(data.message.user)
+ binding.avatarView.setUser(data.message.user)
// TODO: check if we can push back on this
binding.messageTimeTextView.text = "2 mins"
}
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/SwitchUserActivity.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/SwitchUserActivity.kt
index 6ae5e79e..f72fd9b6 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/SwitchUserActivity.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/SwitchUserActivity.kt
@@ -29,7 +29,7 @@ import android.content.Intent
import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
-import io.getstream.chat.android.livedata.utils.EventObserver
+import androidx.lifecycle.Observer
import io.getstream.chat.virtualevent.MainActivity
import io.getstream.chat.virtualevent.databinding.ActivitySwitchUserBinding
import io.getstream.chat.virtualevent.util.setupToolbar
@@ -52,7 +52,7 @@ class SwitchUserActivity : AppCompatActivity() {
binding.usersRecyclerView.adapter = adapter
with(viewModel) {
state.observe(this@SwitchUserActivity, ::renderUsersState)
- events.observe(this@SwitchUserActivity, EventObserver(::handleEvent))
+ events.observe(this@SwitchUserActivity, Observer(::handleEvent))
}
}
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/SwitchUserViewModel.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/SwitchUserViewModel.kt
index a3d8ed02..0f1f1afe 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/SwitchUserViewModel.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/SwitchUserViewModel.kt
@@ -29,8 +29,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import io.getstream.chat.android.client.ChatClient
-import io.getstream.chat.android.client.models.User
-import io.getstream.chat.android.livedata.utils.Event
+import io.getstream.chat.android.models.User
import io.getstream.chat.virtualevent.AppConfig
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
@@ -38,9 +37,9 @@ import kotlinx.coroutines.launch
class SwitchUserViewModel : ViewModel() {
private val _state: MutableLiveData = MutableLiveData()
- private val _events: MutableLiveData> = MutableLiveData()
+ private val _events: MutableLiveData = MutableLiveData()
val state: LiveData = _state
- val events: LiveData> = _events
+ val events: LiveData = _events
init {
val users = AppConfig.availableUsers
@@ -72,7 +71,7 @@ class SwitchUserViewModel : ViewModel() {
.connectUser(user, token)
.enqueue { result ->
if (result.isSuccess) {
- _events.postValue(Event(UiEvent.NavigateToHomeScreen))
+ _events.postValue(UiEvent.NavigateToHomeScreen)
}
}
}
diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/UserListAdapter.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/UserListAdapter.kt
index 28137bfa..bdeec95c 100644
--- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/UserListAdapter.kt
+++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/user/UserListAdapter.kt
@@ -27,7 +27,7 @@ package io.getstream.chat.virtualevent.feature.user
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
-import io.getstream.chat.android.client.models.User
+import io.getstream.chat.android.models.User
import io.getstream.chat.virtualevent.databinding.ItemUserBinding
class UserListAdapter(
@@ -70,7 +70,7 @@ class UserListAdapter(
fun bind(user: User) {
this.user = user
with(binding) {
- userAvatarView.setUserData(user)
+ userAvatarView.setUser(user)
nameTextView.text = user.name
}
}
diff --git a/virtual-event-sample/src/main/res/layout/activity_direct_chat.xml b/virtual-event-sample/src/main/res/layout/activity_direct_chat.xml
index 6a428461..8b92797e 100644
--- a/virtual-event-sample/src/main/res/layout/activity_direct_chat.xml
+++ b/virtual-event-sample/src/main/res/layout/activity_direct_chat.xml
@@ -22,12 +22,15 @@
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
-
+ android:layout_height="match_parent"
+ >
-
+ app:streamUiMessageListHeaderShowUserAvatar="false"
+ />
-
+ app:streamUiPinMessageEnabled="false"
+ />
-
-
+ app:layout_constraintTop_toBottomOf="@+id/messageListView"
+ />
diff --git a/virtual-event-sample/src/main/res/layout/activity_event_details.xml b/virtual-event-sample/src/main/res/layout/activity_event_details.xml
index a92dfed9..526c5a62 100644
--- a/virtual-event-sample/src/main/res/layout/activity_event_details.xml
+++ b/virtual-event-sample/src/main/res/layout/activity_event_details.xml
@@ -22,10 +22,13 @@
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-->
-
+ android:layout_height="match_parent"
+ >
+ app:navigationIcon="@drawable/ic_left"
+ >
-
+ android:textColor="@color/static_white"
+ />
+ app:layout_constraintTop_toBottomOf="@id/toolbar"
+ >
+ android:background="@color/static_dark_grey"
+ />
+ app:use_controller="false"
+ />
+ android:textColor="@color/static_white"
+ />
-
+ app:lottie_rawRes="@raw/mic_on"
+ />
-
+ android:src="@drawable/ic_connection"
+ />
-
+ app:streamUiPinMessageEnabled="true"
+ />
-
-
+ />
diff --git a/virtual-event-sample/src/main/res/layout/activity_main.xml b/virtual-event-sample/src/main/res/layout/activity_main.xml
index db57ff7e..8e599478 100644
--- a/virtual-event-sample/src/main/res/layout/activity_main.xml
+++ b/virtual-event-sample/src/main/res/layout/activity_main.xml
@@ -26,7 +26,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ >
+ app:layout_constraintTop_toTopOf="parent"
+ >
+ android:layout_height="match_parent"
+ >
+ app:layout_constraintTop_toTopOf="parent"
+ />
+ app:layout_constraintTop_toTopOf="parent"
+ />
-
-
+ tools:src="@tools:sample/avatars"
+ />
-
+ app:navGraph="@navigation/nav_graph"
+ />
-
+ app:menu="@menu/bottom_nav_menu"
+ />
diff --git a/virtual-event-sample/src/main/res/layout/fragment_direct_chats.xml b/virtual-event-sample/src/main/res/layout/fragment_direct_chats.xml
index f0b15f08..f4e3d644 100644
--- a/virtual-event-sample/src/main/res/layout/fragment_direct_chats.xml
+++ b/virtual-event-sample/src/main/res/layout/fragment_direct_chats.xml
@@ -27,9 +27,10 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".feature.dm.list.DirectChatsFragment">
+ tools:context=".feature.dm.list.DirectChatsFragment"
+ >
-
+ app:streamUiForegroundLayoutColor="@color/app_canvas"
+ />
-
+ app:layout_constraintStart_toStartOf="parent"
+ />
diff --git a/virtual-event-sample/src/main/res/layout/item_message_plain_text.xml b/virtual-event-sample/src/main/res/layout/item_message_plain_text.xml
index 9de6dd27..349c7a32 100644
--- a/virtual-event-sample/src/main/res/layout/item_message_plain_text.xml
+++ b/virtual-event-sample/src/main/res/layout/item_message_plain_text.xml
@@ -28,9 +28,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/margin_tiny"
- android:paddingBottom="@dimen/margin_small">
+ android:paddingBottom="@dimen/margin_small"
+ >
-
+ tools:src="@tools:sample/avatars"
+ />
+ tools:text="Lincoln Culhane"
+ />
+ tools:text="2 mins"
+ />
+ tools:text="You can't transmit the alarm without quantifying the haptic AGP card!"
+ />
+ app:layout_constraintGuide_begin="8dp"
+ />
-
+ app:layout_constraintGuide_end="8dp"
+ />
diff --git a/virtual-event-sample/src/main/res/layout/item_participant.xml b/virtual-event-sample/src/main/res/layout/item_participant.xml
index 4df2b09a..9d9b0276 100644
--- a/virtual-event-sample/src/main/res/layout/item_participant.xml
+++ b/virtual-event-sample/src/main/res/layout/item_participant.xml
@@ -29,9 +29,10 @@
android:layout_height="48dp"
android:background="?attr/selectableItemBackground"
android:paddingHorizontal="@dimen/margin_small"
- android:paddingVertical="@dimen/margin_tiny">
+ android:paddingVertical="@dimen/margin_tiny"
+ >
-
+ />
+ tools:text="Jerome Abbadi"
+ />
-
+ tools:text="Harvey Inc"
+ />
\ No newline at end of file
diff --git a/virtual-event-sample/src/main/res/layout/item_user.xml b/virtual-event-sample/src/main/res/layout/item_user.xml
index 2df0ece7..6ebbca80 100644
--- a/virtual-event-sample/src/main/res/layout/item_user.xml
+++ b/virtual-event-sample/src/main/res/layout/item_user.xml
@@ -28,9 +28,10 @@
android:layout_width="match_parent"
android:layout_height="72dp"
android:background="?selectableItemBackground"
- android:paddingHorizontal="@dimen/margin_small">
+ android:paddingHorizontal="@dimen/margin_small"
+ >
-
+ tools:src="@tools:sample/avatars"
+ />
+ tools:text="Jerome Abbadi"
+ />
+ app:layout_constraintTop_toBottomOf="@+id/nameTextView"
+ />
-
+ app:layout_constraintTop_toTopOf="parent"
+ />
\ No newline at end of file
diff --git a/whatsapp-clone-sample/build.gradle b/whatsapp-clone-sample/build.gradle
index d94e5a5e..7fea5ae9 100644
--- a/whatsapp-clone-sample/build.gradle
+++ b/whatsapp-clone-sample/build.gradle
@@ -36,7 +36,9 @@ android {
dependencies {
// Stream SDK dependency
- implementation "io.getstream:stream-chat-android-ui-components:5.17.0"
+ implementation "io.getstream:stream-chat-android-ui-components:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-state:6.0.0-beta2"
+ implementation "io.getstream:stream-chat-android-offline:6.0.0-beta2"
implementation libs.kotlinStdLib
implementation libs.androidxViewPager2
diff --git a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/WhatsApp.kt b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/WhatsApp.kt
index bd03be82..d2c758cd 100644
--- a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/WhatsApp.kt
+++ b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/WhatsApp.kt
@@ -26,9 +26,10 @@ package io.getstream.whatsappclone
import android.app.Application
import io.getstream.chat.android.client.ChatClient
-import io.getstream.chat.android.client.models.User
-import io.getstream.chat.android.offline.plugin.configuration.Config
+import io.getstream.chat.android.models.User
import io.getstream.chat.android.offline.plugin.factory.StreamOfflinePluginFactory
+import io.getstream.chat.android.state.plugin.config.StatePluginConfig
+import io.getstream.chat.android.state.plugin.factory.StreamStatePluginFactory
class WhatsApp : Application() {
@@ -36,11 +37,14 @@ class WhatsApp : Application() {
super.onCreate()
val offlinePluginFactory = StreamOfflinePluginFactory(
- config = Config(),
appContext = this
)
+ val statePluginFactory = StreamStatePluginFactory(
+ config = StatePluginConfig(),
+ appContext = this,
+ )
ChatClient.Builder("qx5us2v6xvmh", this)
- .withPlugin(offlinePluginFactory)
+ .withPlugins(offlinePluginFactory, statePluginFactory)
.build()
val user = User().apply {
diff --git a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/channels/ChannelListFragment.kt b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/channels/ChannelListFragment.kt
index bb198dc8..7f472ff4 100644
--- a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/channels/ChannelListFragment.kt
+++ b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/channels/ChannelListFragment.kt
@@ -31,9 +31,9 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
-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.viewmodel.channels.ChannelListViewModel
+import io.getstream.chat.android.ui.viewmodel.channels.ChannelListViewModelFactory
+import io.getstream.chat.android.ui.viewmodel.channels.bindView
import io.getstream.whatsappclone.databinding.FragmentChannelListBinding
import io.getstream.whatsappclone.ui.home.HomeFragmentDirections
@@ -62,8 +62,9 @@ class ChannelListFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
viewModel.bindView(binding.channelList, viewLifecycleOwner)
- binding.channelList.setChannelItemClickListener { (cid) ->
- findNavController().navigate(HomeFragmentDirections.navHomeToChannel(cid))
+ binding.channelList.setChannelItemClickListener { channel ->
+ println("JcLog: cid -> ${channel.cid}")
+ findNavController().navigate(HomeFragmentDirections.navHomeToChannel(channel.cid))
}
}
}
diff --git a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageInputView.kt b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageInputView.kt
index d3cb4998..7e6dbb44 100644
--- a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageInputView.kt
+++ b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageInputView.kt
@@ -52,17 +52,16 @@ class MessageInputView @JvmOverloads constructor(
private var binding: ViewMessageInputBinding =
ViewMessageInputBinding.inflate(LayoutInflater.from(context), this, true)
- fun initViews(sendMessage: (String) -> Unit, keystroke: () -> Unit) {
+ fun initViews(sendMessage: () -> Unit, keystroke: (String) -> Unit) {
binding.voiceRecordingOrSend.setOnClickListener {
-
- sendMessage.invoke(binding.messageInput.text.toString())
+ sendMessage()
binding.messageInput.setText("")
}
// listen to typing events and connect to the view model
binding.messageInput.doAfterTextChanged {
if (it.toString().isNotEmpty()) {
- keystroke.invoke()
+ keystroke.invoke(it.toString())
binding.takePicture.isVisible = false
binding.voiceRecordingOrSend.setImageResource(R.drawable.ic_send_black_24dp)
} else {
diff --git a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageListFragment.kt b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageListFragment.kt
index ae8e3f77..34f4a589 100644
--- a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageListFragment.kt
+++ b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageListFragment.kt
@@ -36,13 +36,14 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
-import com.getstream.sdk.chat.viewmodel.MessageInputViewModel
-import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel
import io.getstream.chat.android.client.ChatClient
+import io.getstream.chat.android.state.extensions.globalState
import io.getstream.chat.android.ui.ChatUI
-import io.getstream.chat.android.ui.message.list.header.viewmodel.MessageListHeaderViewModel
-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.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
import io.getstream.whatsappclone.R
import io.getstream.whatsappclone.databinding.FragmentMessageListBinding
@@ -53,7 +54,7 @@ class MessageListFragment : Fragment() {
private val factory: MessageListViewModelFactory by lazy { MessageListViewModelFactory(args.cid) }
private val messageListHeaderViewModel: MessageListHeaderViewModel by viewModels { factory }
private val messageListViewModel: MessageListViewModel by viewModels { factory }
- private val messageInputViewModel: MessageInputViewModel by viewModels { factory }
+ private val messageInputViewModel: MessageComposerViewModel by viewModels { factory }
private var _binding: FragmentMessageListBinding? = null
private val binding get() = _binding!!
@@ -102,10 +103,10 @@ class MessageListFragment : Fragment() {
}
messageListHeaderViewModel.channel.observe(viewLifecycleOwner) { channel ->
- val user = ChatClient.instance().clientState.user.value
+ val user = ChatClient.instance().globalState.user.value
binding.channelNameTextView.text =
ChatUI.channelNameFormatter.formatChannelName(channel, user)
- binding.avatarView.setChannelData(channel)
+ binding.avatarView.setChannel(channel)
}
}
@@ -115,8 +116,8 @@ class MessageListFragment : Fragment() {
private fun setupMessageInput() {
binding.messageInputView.initViews(
- sendMessage = { message -> messageInputViewModel.sendMessage(message) },
- keystroke = { messageInputViewModel.keystroke() }
+ sendMessage = messageInputViewModel::sendMessage,
+ keystroke = messageInputViewModel::setMessageInput
)
}
diff --git a/whatsapp-clone-sample/src/main/res/layout/fragment_channel_list.xml b/whatsapp-clone-sample/src/main/res/layout/fragment_channel_list.xml
index 25eba0ee..e99d1cb1 100644
--- a/whatsapp-clone-sample/src/main/res/layout/fragment_channel_list.xml
+++ b/whatsapp-clone-sample/src/main/res/layout/fragment_channel_list.xml
@@ -27,7 +27,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
-
-