From 0104989eef19d35ef4a1969244ec2cdb07b8d89f Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 19 May 2025 17:25:27 +0200 Subject: [PATCH] show warning dialog when call ends Signed-off-by: sowjanyakch --- .../com/nextcloud/talk/chat/ChatActivity.kt | 51 +++++++++++++++++++ .../nextcloud/talk/utils/CapabilitiesUtil.kt | 6 +-- 2 files changed, 54 insertions(+), 3 deletions(-) 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 9b242a8a8..46735da28 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -229,6 +229,13 @@ import java.util.Locale import java.util.concurrent.ExecutionException import javax.inject.Inject import kotlin.math.roundToInt +import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia +import com.google.android.material.card.MaterialCardView +import com.nextcloud.talk.conversationinfo.viewmodel.ConversationInfoViewModel +import com.nextcloud.talk.models.json.participants.Participant +import com.nextcloud.talk.utils.CapabilitiesUtil.retentionOfEventRooms +import com.nextcloud.talk.utils.CapabilitiesUtil.retentionOfInstantMeetingRoom +import com.nextcloud.talk.utils.CapabilitiesUtil.retentionOfSIPRoom @Suppress("TooManyFunctions") @AutoInjector(NextcloudTalkApplication::class) @@ -664,6 +671,40 @@ class ChatActivity : } } + if (currentConversation?.objectType == ConversationEnums.ObjectType.EVENT) { + val eventEndTimeStamp = currentConversation?.objectId?.split("#")[1]?.toLong() + val currentTimeStamp = (System.currentTimeMillis() / 1000).toLong() + val retentionPeriod = retentionOfEventRooms(spreedCapabilities) + val isPastEvent = eventEndTimeStamp?.let { it < currentTimeStamp } + if (isPastEvent == true && retentionPeriod != 0) { + showConversationDeletionWarning(retentionPeriod) + } + } + + if (currentConversation?.objectType == ConversationEnums.ObjectType.PHONE) { + val retentionPeriod = retentionOfSIPRoom(spreedCapabilities) + val systemMessage = currentConversation?.lastMessage?.systemMessageType + if (retentionPeriod != 0 && ( + systemMessage == ChatMessage.SystemMessageType.CALL_ENDED || + systemMessage == ChatMessage.SystemMessageType.CALL_ENDED_EVERYONE + ) + ) { + showConversationDeletionWarning(retentionPeriod) + } + } + + if (currentConversation?.objectType == ConversationEnums.ObjectType.INSTANT_MEETING) { + val retentionPeriod = retentionOfInstantMeetingRoom(spreedCapabilities) + val systemMessage = currentConversation?.lastMessage?.systemMessageType + if (retentionPeriod != 0 && ( + systemMessage == ChatMessage.SystemMessageType.CALL_ENDED || + systemMessage == ChatMessage.SystemMessageType.CALL_ENDED_EVERYONE + ) + ) { + showConversationDeletionWarning(retentionPeriod) + } + } + updateRoomTimerHandler(MILLIS_250) val urlForChatting = @@ -1150,6 +1191,16 @@ class ChatActivity : } } + fun showConversationDeletionWarning(retentionPeriod: Int) { + binding.conversationDeleteNotice.visibility = View.VISIBLE + val deleteNoticeCard = findViewById(R.id.conversation_delete_notice) + val messageTextView = deleteNoticeCard.findViewById(R.id.deletion_message) + messageTextView.text = String.format( + resources.getString(R.string.nc_conversation_auto_delete_notice), + retentionPeriod + ) + } + @Suppress("Detekt.TooGenericExceptionCaught") override fun onResume() { super.onResume() diff --git a/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt b/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt index 5fc262adf..2bbeb8a7f 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/CapabilitiesUtil.kt @@ -140,7 +140,7 @@ object CapabilitiesUtil { return false } - fun retentionOfEventRooms(spreedCapabilities: SpreedCapability): Int { + fun retentionOfEventRooms(spreedCapabilities: SpreedCapability): Int { if (spreedCapabilities.config?.containsKey("conversations") == true) { val map = spreedCapabilities.config!!["conversations"] if (map?.containsKey("retention-event") == true) { @@ -150,7 +150,7 @@ object CapabilitiesUtil { return 0 } - fun retentionOfSIP(spreedCapabilities: SpreedCapability): Int { + fun retentionOfSIPRoom(spreedCapabilities: SpreedCapability): Int { if (spreedCapabilities.config?.containsKey("conversations") == true) { val map = spreedCapabilities.config!!["conversations"] if (map?.containsKey("retention-phone") == true) { @@ -160,7 +160,7 @@ object CapabilitiesUtil { return 0 } - fun retentionOfInstantMeetings(spreedCapabilities: SpreedCapability): Int { + fun retentionOfInstantMeetingRoom(spreedCapabilities: SpreedCapability): Int { if (spreedCapabilities.config?.containsKey("conversations") == true) { val map = spreedCapabilities.config!!["conversations"] if (map?.containsKey("retention-instant-meetings") == true) {