mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 12:09:45 +01:00
move typing indicator methods
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
parent
fa4d02e2c6
commit
7b12f27a1a
@ -344,71 +344,6 @@ class ChatActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateTypingIndicator() {
|
|
||||||
val participantNames = ArrayList(typingParticipants.values)
|
|
||||||
|
|
||||||
val typingString: SpannableStringBuilder
|
|
||||||
when (typingParticipants.size) {
|
|
||||||
0 -> typingString = SpannableStringBuilder().append(binding.typingIndicator.text)
|
|
||||||
|
|
||||||
1 -> typingString = SpannableStringBuilder()
|
|
||||||
.bold { append(participantNames[0]) }
|
|
||||||
.append(WHITESPACE + context.resources?.getString(R.string.typing_is_typing))
|
|
||||||
|
|
||||||
2 -> typingString = SpannableStringBuilder()
|
|
||||||
.bold { append(participantNames[0]) }
|
|
||||||
.append(WHITESPACE + context.resources?.getString(R.string.nc_common_and) + WHITESPACE)
|
|
||||||
.bold { append(participantNames[1]) }
|
|
||||||
.append(WHITESPACE + context.resources?.getString(R.string.typing_are_typing))
|
|
||||||
|
|
||||||
3 -> typingString = SpannableStringBuilder()
|
|
||||||
.bold { append(participantNames[0]) }
|
|
||||||
.append(COMMA)
|
|
||||||
.bold { append(participantNames[1]) }
|
|
||||||
.append(WHITESPACE + context.resources?.getString(R.string.nc_common_and) + WHITESPACE)
|
|
||||||
.bold { append(participantNames[2]) }
|
|
||||||
.append(WHITESPACE + context.resources?.getString(R.string.typing_are_typing))
|
|
||||||
|
|
||||||
4 -> typingString = SpannableStringBuilder()
|
|
||||||
.bold { append(participantNames[0]) }
|
|
||||||
.append(COMMA)
|
|
||||||
.bold { append(participantNames[1]) }
|
|
||||||
.append(COMMA)
|
|
||||||
.bold { append(participantNames[2]) }
|
|
||||||
.append(WHITESPACE + context.resources?.getString(R.string.typing_1_other))
|
|
||||||
|
|
||||||
else -> {
|
|
||||||
val moreTypersAmount = typingParticipants.size - 3
|
|
||||||
val othersTyping = context.resources?.getString(R.string.typing_x_others)?.let {
|
|
||||||
String.format(it, moreTypersAmount)
|
|
||||||
}
|
|
||||||
typingString = SpannableStringBuilder()
|
|
||||||
.bold { append(participantNames[0]) }
|
|
||||||
.append(COMMA)
|
|
||||||
.bold { append(participantNames[1]) }
|
|
||||||
.append(COMMA)
|
|
||||||
.bold { append(participantNames[2]) }
|
|
||||||
.append(othersTyping)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
runOnUiThread {
|
|
||||||
if (participantNames.size > 0) {
|
|
||||||
binding.typingIndicatorWrapper.animate()
|
|
||||||
.translationY(binding.messageInputView.y - binding.typingIndicator.height)
|
|
||||||
.setInterpolator(AccelerateDecelerateInterpolator())
|
|
||||||
.duration = TYPING_INDICATOR_ANIMATION_DURATION
|
|
||||||
} else {
|
|
||||||
binding.typingIndicatorWrapper.animate()
|
|
||||||
.translationY(binding.messageInputView.y)
|
|
||||||
.setInterpolator(AccelerateDecelerateInterpolator())
|
|
||||||
.duration = TYPING_INDICATOR_ANIMATION_DURATION
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.typingIndicator.text = typingString
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
|
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
|
||||||
@ -729,48 +664,6 @@ class ChatActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendStartTypingMessage() {
|
|
||||||
if (webSocketInstance == null) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!CapabilitiesUtilNew.isTypingStatusPrivate(conversationUser!!)) {
|
|
||||||
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()
|
|
||||||
}
|
|
||||||
}.start()
|
|
||||||
} else {
|
|
||||||
typingTimer?.cancel()
|
|
||||||
typingTimer?.start()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun sendStopTypingMessage() {
|
|
||||||
if (!CapabilitiesUtilNew.isTypingStatusPrivate(conversationUser!!)) {
|
|
||||||
typingTimer = null
|
|
||||||
|
|
||||||
for ((sessionId, participant) in webSocketInstance?.getUserMap()!!) {
|
|
||||||
val ncSignalingMessage = NCSignalingMessage()
|
|
||||||
ncSignalingMessage.to = sessionId
|
|
||||||
ncSignalingMessage.type = "stoppedTyping"
|
|
||||||
signalingMessageSender!!.send(ncSignalingMessage)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun initMessageHolders(): MessageHolders {
|
private fun initMessageHolders(): MessageHolders {
|
||||||
val messageHolders = MessageHolders()
|
val messageHolders = MessageHolders()
|
||||||
val profileBottomSheet = ProfileBottomSheet(ncApi, conversationUser!!)
|
val profileBottomSheet = ProfileBottomSheet(ncApi, conversationUser!!)
|
||||||
@ -1015,6 +908,113 @@ class ChatActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateTypingIndicator() {
|
||||||
|
val participantNames = ArrayList(typingParticipants.values)
|
||||||
|
|
||||||
|
val typingString: SpannableStringBuilder
|
||||||
|
when (typingParticipants.size) {
|
||||||
|
0 -> typingString = SpannableStringBuilder().append(binding.typingIndicator.text)
|
||||||
|
|
||||||
|
1 -> typingString = SpannableStringBuilder()
|
||||||
|
.bold { append(participantNames[0]) }
|
||||||
|
.append(WHITESPACE + context.resources?.getString(R.string.typing_is_typing))
|
||||||
|
|
||||||
|
2 -> typingString = SpannableStringBuilder()
|
||||||
|
.bold { append(participantNames[0]) }
|
||||||
|
.append(WHITESPACE + context.resources?.getString(R.string.nc_common_and) + WHITESPACE)
|
||||||
|
.bold { append(participantNames[1]) }
|
||||||
|
.append(WHITESPACE + context.resources?.getString(R.string.typing_are_typing))
|
||||||
|
|
||||||
|
3 -> typingString = SpannableStringBuilder()
|
||||||
|
.bold { append(participantNames[0]) }
|
||||||
|
.append(COMMA)
|
||||||
|
.bold { append(participantNames[1]) }
|
||||||
|
.append(WHITESPACE + context.resources?.getString(R.string.nc_common_and) + WHITESPACE)
|
||||||
|
.bold { append(participantNames[2]) }
|
||||||
|
.append(WHITESPACE + context.resources?.getString(R.string.typing_are_typing))
|
||||||
|
|
||||||
|
4 -> typingString = SpannableStringBuilder()
|
||||||
|
.bold { append(participantNames[0]) }
|
||||||
|
.append(COMMA)
|
||||||
|
.bold { append(participantNames[1]) }
|
||||||
|
.append(COMMA)
|
||||||
|
.bold { append(participantNames[2]) }
|
||||||
|
.append(WHITESPACE + context.resources?.getString(R.string.typing_1_other))
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
val moreTypersAmount = typingParticipants.size - 3
|
||||||
|
val othersTyping = context.resources?.getString(R.string.typing_x_others)?.let {
|
||||||
|
String.format(it, moreTypersAmount)
|
||||||
|
}
|
||||||
|
typingString = SpannableStringBuilder()
|
||||||
|
.bold { append(participantNames[0]) }
|
||||||
|
.append(COMMA)
|
||||||
|
.bold { append(participantNames[1]) }
|
||||||
|
.append(COMMA)
|
||||||
|
.bold { append(participantNames[2]) }
|
||||||
|
.append(othersTyping)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
runOnUiThread {
|
||||||
|
if (participantNames.size > 0) {
|
||||||
|
binding.typingIndicatorWrapper.animate()
|
||||||
|
.translationY(binding.messageInputView.y - binding.typingIndicator.height)
|
||||||
|
.setInterpolator(AccelerateDecelerateInterpolator())
|
||||||
|
.duration = TYPING_INDICATOR_ANIMATION_DURATION
|
||||||
|
} else {
|
||||||
|
binding.typingIndicatorWrapper.animate()
|
||||||
|
.translationY(binding.messageInputView.y)
|
||||||
|
.setInterpolator(AccelerateDecelerateInterpolator())
|
||||||
|
.duration = TYPING_INDICATOR_ANIMATION_DURATION
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.typingIndicator.text = typingString
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sendStartTypingMessage() {
|
||||||
|
if (webSocketInstance == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!CapabilitiesUtilNew.isTypingStatusPrivate(conversationUser!!)) {
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}.start()
|
||||||
|
} else {
|
||||||
|
typingTimer?.cancel()
|
||||||
|
typingTimer?.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sendStopTypingMessage() {
|
||||||
|
if (!CapabilitiesUtilNew.isTypingStatusPrivate(conversationUser!!)) {
|
||||||
|
typingTimer = null
|
||||||
|
|
||||||
|
for ((sessionId, participant) in webSocketInstance?.getUserMap()!!) {
|
||||||
|
val ncSignalingMessage = NCSignalingMessage()
|
||||||
|
ncSignalingMessage.to = sessionId
|
||||||
|
ncSignalingMessage.type = "stoppedTyping"
|
||||||
|
signalingMessageSender!!.send(ncSignalingMessage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun getRoomInfo() {
|
private fun getRoomInfo() {
|
||||||
logConversationInfos("getRoomInfo")
|
logConversationInfos("getRoomInfo")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user