diff --git a/app/build.gradle b/app/build.gradle index 3252752..c7c91a6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -103,7 +103,7 @@ android { dependencies { // Twilio - implementation "com.twilio:conversations-android-with-symbols:5.0.0" + implementation "com.twilio:conversations-android-with-symbols:5.1.0" // or without symbols: // implementation "com.twilio:conversations-android:5.0.0" diff --git a/app/src/main/java/com/twilio/conversations/app/common/DataConverter.kt b/app/src/main/java/com/twilio/conversations/app/common/DataConverter.kt index 2316bff..5dcc1bf 100644 --- a/app/src/main/java/com/twilio/conversations/app/common/DataConverter.kt +++ b/app/src/main/java/com/twilio/conversations/app/common/DataConverter.kt @@ -27,6 +27,7 @@ import com.twilio.conversations.app.data.localCache.entity.MessageDataItem import com.twilio.conversations.app.data.localCache.entity.ParticipantDataItem import com.twilio.conversations.app.data.models.* import com.twilio.conversations.app.manager.friendlyName +import com.twilio.conversations.content.ContentTemplate fun Conversation.toConversationDataItem(): ConversationDataItem { return ConversationDataItem( @@ -170,6 +171,11 @@ fun List.asConversationListViewItems(context: Context) = fun List.asMessageDataItems(identity: String) = map { it.toMessageDataItem(identity) } +fun ContentTemplate.asContentTemplateItem() = ContentTemplateItem( + this.sid, + this.friendlyName +) + fun List.asMessageListViewItems() = mapIndexed { index, item -> item.toMessageListViewItem(isAuthorChanged(index)) } diff --git a/app/src/main/java/com/twilio/conversations/app/data/models/ContentTemplateItem.kt b/app/src/main/java/com/twilio/conversations/app/data/models/ContentTemplateItem.kt new file mode 100644 index 0000000..e0a55c9 --- /dev/null +++ b/app/src/main/java/com/twilio/conversations/app/data/models/ContentTemplateItem.kt @@ -0,0 +1,7 @@ +package com.twilio.conversations.app.data.models + +// Todo: add missing fields that come from the sdk +data class ContentTemplateItem( + val sid: String, + val friendlyName: String, +) diff --git a/app/src/main/java/com/twilio/conversations/app/repository/ConversationsRepository.kt b/app/src/main/java/com/twilio/conversations/app/repository/ConversationsRepository.kt index 0316380..df9c7af 100644 --- a/app/src/main/java/com/twilio/conversations/app/repository/ConversationsRepository.kt +++ b/app/src/main/java/com/twilio/conversations/app/repository/ConversationsRepository.kt @@ -7,6 +7,7 @@ import com.twilio.conversations.Participant.Type.CHAT import com.twilio.conversations.User import com.twilio.conversations.app.common.DefaultDispatcherProvider import com.twilio.conversations.app.common.DispatcherProvider +import com.twilio.conversations.app.common.asContentTemplateItem import com.twilio.conversations.app.common.asMessageDataItems import com.twilio.conversations.app.common.asMessageListViewItems import com.twilio.conversations.app.common.asParticipantDataItem @@ -25,6 +26,7 @@ import com.twilio.conversations.app.data.localCache.LocalCacheProvider import com.twilio.conversations.app.data.localCache.entity.ConversationDataItem import com.twilio.conversations.app.data.localCache.entity.MessageDataItem import com.twilio.conversations.app.data.localCache.entity.ParticipantDataItem +import com.twilio.conversations.app.data.models.ContentTemplateItem import com.twilio.conversations.app.data.models.MessageListViewItem import com.twilio.conversations.app.data.models.RepositoryRequestStatus import com.twilio.conversations.app.data.models.RepositoryRequestStatus.COMPLETE @@ -34,6 +36,7 @@ import com.twilio.conversations.app.data.models.RepositoryRequestStatus.SUBSCRIB import com.twilio.conversations.app.data.models.RepositoryResult import com.twilio.conversations.extensions.ConversationListener import com.twilio.conversations.extensions.ConversationsClientListener +import com.twilio.conversations.extensions.getContentTemplates import com.twilio.conversations.extensions.getConversation import com.twilio.conversations.extensions.getLastMessages import com.twilio.conversations.extensions.getMessagesBefore @@ -68,6 +71,7 @@ interface ConversationsRepository { // Interim solution till paging v3.0 is available as an alpha version. // It has support for converting PagedList types fun getMessages(conversationSid: String, pageSize: Int): Flow>> + fun getContentTemplates(conversationSid: String): Flow>> fun insertMessage(message: MessageDataItem) fun updateMessageByUuid(message: MessageDataItem) fun updateMessageStatus(messageUuid: String, sendStatus: Int, errorCode: Int) @@ -235,6 +239,22 @@ class ConversationsRepositoryImpl( return combine(pagedListFlow, requestStatusConversation.asFlow().distinctUntilChanged() ) { data, status -> RepositoryResult(data, status) } } + override fun getContentTemplates(conversationSid: String): Flow>> = flow { + Timber.v("getContentTemplates($conversationSid)") + val list = conversationsClientWrapper + .getConversationsClient() + .getContentTemplates() + emit( + RepositoryResult( + list.map { + println(it) + it.asContentTemplateItem() + }, + COMPLETE + ) + ) + } + override fun insertMessage(message: MessageDataItem) { launch { localCache.messagesDao().insertOrReplace(message) diff --git a/app/src/main/java/com/twilio/conversations/app/ui/MessageListActivity.kt b/app/src/main/java/com/twilio/conversations/app/ui/MessageListActivity.kt index cab6555..6012546 100644 --- a/app/src/main/java/com/twilio/conversations/app/ui/MessageListActivity.kt +++ b/app/src/main/java/com/twilio/conversations/app/ui/MessageListActivity.kt @@ -151,6 +151,15 @@ class MessageListActivity : BaseActivity() { AttachFileDialog.getInstance(messageListViewModel.conversationSid) .showNow(supportFragmentManager, null) } + binding.templatesButton.setOnClickListener { + // Todo: open templates + messageListViewModel.contentTemplateItems.observe(this) { contentTemplates -> + println("@output@: start observing") + contentTemplates.map { + println("@output@: " + it) + } + } + } } private fun showRemoveMessageDialog() { diff --git a/app/src/main/java/com/twilio/conversations/app/viewModel/MessageListViewModel.kt b/app/src/main/java/com/twilio/conversations/app/viewModel/MessageListViewModel.kt index aa0a8e5..8278a69 100644 --- a/app/src/main/java/com/twilio/conversations/app/viewModel/MessageListViewModel.kt +++ b/app/src/main/java/com/twilio/conversations/app/viewModel/MessageListViewModel.kt @@ -66,6 +66,10 @@ class MessageListViewModel( .asLiveData(viewModelScope.coroutineContext) .map { it.data } + val contentTemplateItems = conversationsRepository.getContentTemplates(conversationSid) + .asLiveData(viewModelScope.coroutineContext) + .map { it.data } + val onMessageError = SingleLiveEvent() val onMessageSent = SingleLiveEvent() diff --git a/app/src/main/res/layout/activity_message_list.xml b/app/src/main/res/layout/activity_message_list.xml index b9b2885..42b656a 100644 --- a/app/src/main/res/layout/activity_message_list.xml +++ b/app/src/main/res/layout/activity_message_list.xml @@ -69,9 +69,22 @@ android:layout_marginStart="9dp" android:background="?attr/selectableItemBackgroundBorderless" android:src="@drawable/ic_attach" - app:layout_constraintBottom_toBottomOf="@+id/messageInputHolder" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/messageInputHolder" + app:layout_constraintBottom_toTopOf="@id/templatesButton" + app:tint="@color/colorPrimary" /> + + +