diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 1e4f21b27..8951c6f0c 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -225,6 +225,8 @@ import java.util.concurrent.ExecutionException import javax.inject.Inject import kotlin.math.roundToInt import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia +import com.nextcloud.talk.conversationinfo.viewmodel.ConversationInfoViewModel +import com.nextcloud.talk.models.json.participants.Participant @AutoInjector(NextcloudTalkApplication::class) class ChatActivity : @@ -262,6 +264,8 @@ class ChatActivity : lateinit var networkMonitor: NetworkMonitor lateinit var chatViewModel: ChatViewModel + + lateinit var conversationInfoViewModel: ConversationInfoViewModel lateinit var messageInputViewModel: MessageInputViewModel private val startSelectContactForResult = registerForActivityResult( @@ -427,6 +431,8 @@ class ChatActivity : chatViewModel = ViewModelProvider(this, viewModelFactory)[ChatViewModel::class.java] + conversationInfoViewModel = ViewModelProvider(this, viewModelFactory)[ConversationInfoViewModel::class.java] + val urlForChatting = ApiUtils.getUrlForChat(chatApiVersion, conversationUser?.baseUrl, roomToken) val credentials = ApiUtils.getCredentials(conversationUser!!.username, conversationUser!!.token) chatViewModel.initData( @@ -2976,6 +2982,7 @@ class ChatActivity : val titleTextView = popupView.findViewById(R.id.event_scheduled) val subtitleTextView = popupView.findViewById(R.id.meetingTime) val deleteConversation = popupView.findViewById(R.id.delete_conversation) + val archiveConversation = popupView.findViewById(R.id.archive_conversation) val popupWindow = PopupWindow( popupView, @@ -3019,10 +3026,30 @@ class ChatActivity : dialog.getButton(AlertDialog.BUTTON_POSITIVE), dialog.getButton(AlertDialog.BUTTON_NEGATIVE) ) + popupWindow.dismiss() } } else { deleteConversation.visibility = View.GONE } + + if (meetingStatus == context.resources.getString(R.string.nc_meeting_ended) && + ( + Participant.ParticipantType.MODERATOR == currentConversation?.participantType || + Participant.ParticipantType.OWNER == currentConversation?.participantType + ) && + currentConversation?.hasArchived == false + ) { + archiveConversation.visibility = View.VISIBLE + archiveConversation.setOnClickListener { + this.lifecycleScope.launch { + conversationInfoViewModel.archiveConversation(conversationUser!!, currentConversation?.token!!) + Snackbar.make(binding.root, R.string.conversation_archived, Snackbar.LENGTH_LONG).show() + } + popupWindow.dismiss() + } + } else { + archiveConversation.visibility = View.GONE + } } private fun deleteConversation(conversation: ConversationModel) { diff --git a/app/src/main/res/layout/item_event_schedule.xml b/app/src/main/res/layout/item_event_schedule.xml index cf2a439c1..addb2536c 100644 --- a/app/src/main/res/layout/item_event_schedule.xml +++ b/app/src/main/res/layout/item_event_schedule.xml @@ -38,4 +38,12 @@ android:textColor="@android:color/holo_red_dark" android:visibility = "gone" android:paddingTop="16dp"/> + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7645e2d2a..6fbcb4280 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -850,4 +850,5 @@ How to translate with transifex: No archived conversations Archived %1$s Unarchived %1$s + Conversation is archived