From 16d2d3d693663f8b7bb1744e2c9ccfdbf62ecf87 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Tue, 16 May 2023 17:02:18 +0200 Subject: [PATCH] add timer for typing logic Signed-off-by: Marcel Hibbe --- .../com/nextcloud/talk/chat/ChatActivity.kt | 33 +++++++++++++++++-- 1 file changed, 30 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 00b4c08ea..d7f010b6e 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -44,6 +44,7 @@ import android.media.MediaRecorder import android.net.Uri import android.os.Build import android.os.Bundle +import android.os.CountDownTimer import android.os.Handler import android.os.Parcelable import android.os.SystemClock @@ -302,6 +303,8 @@ class ChatActivity : private var videoURI: Uri? = null + var typingTimer: CountDownTimer? = null + private val localParticipantMessageListener = object : SignalingMessageReceiver.LocalParticipantMessageListener { override fun onSwitchTo(token: String?) { if (token != null) { @@ -518,7 +521,7 @@ class ChatActivity : @Suppress("Detekt.TooGenericExceptionCaught") override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { - sendTypingMessage() + sendStartTypingMessage() if (s.length >= lengthFilter) { binding?.messageInputView?.inputEditText?.error = String.format( @@ -652,11 +655,35 @@ class ChatActivity : } } - fun sendTypingMessage() { + fun sendStartTypingMessage() { + if (typingTimer == null) { + for ((sessionId, participant) in webSocketInstance?.getUserMap()!!) { + val ncSignalingMessage = NCSignalingMessage() + ncSignalingMessage.to = sessionId + ncSignalingMessage.type = "startedTyping" + signalingMessageSender!!.send(ncSignalingMessage) + } + + typingTimer = object : CountDownTimer(4000, 1000) { + override fun onTick(millisUntilFinished: Long) { + } + + override fun onFinish() { + sendStopTypingMessage() + typingTimer = null + } + }.start() + } else { + typingTimer?.cancel() + typingTimer?.start() + } + } + + fun sendStopTypingMessage() { for ((sessionId, participant) in webSocketInstance?.getUserMap()!!) { val ncSignalingMessage = NCSignalingMessage() ncSignalingMessage.to = sessionId - ncSignalingMessage.type = "startedTyping" + ncSignalingMessage.type = "stoppedTyping" signalingMessageSender!!.send(ncSignalingMessage) } }