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 58f111c05..37c105900 100644
--- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt
+++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt
@@ -62,6 +62,7 @@ import android.view.Menu
import android.view.MenuItem
import android.view.MotionEvent
import android.view.View
+import android.view.animation.AccelerateDecelerateInterpolator
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.animation.LinearInterpolator
@@ -344,15 +345,11 @@ class ChatActivity :
val typingString: SpannableStringBuilder
when (typingParticipants.size) {
- 0 -> {
- typingString = SpannableStringBuilder().append("")
- }
+ 0 -> typingString = SpannableStringBuilder().append(binding.typingIndicator.text)
- 1 -> {
- typingString = SpannableStringBuilder()
+ 1 -> typingString = SpannableStringBuilder()
.bold { append(participantNames[0]) }
.append(WHITESPACE + context.resources?.getString(R.string.typing_is_typing))
- }
2 -> typingString = SpannableStringBuilder()
.bold { append(participantNames[0]) }
@@ -378,11 +375,9 @@ class ChatActivity :
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)
@@ -393,12 +388,22 @@ class ChatActivity :
}
}
+ val typingIndicatorHeight = DisplayUtils.convertDpToPixel(20f,context)
+
runOnUiThread {
if (participantNames.size > 0) {
- binding.typingIndicator.visibility = View.VISIBLE
+ binding.typingIndicatorWrapper.animate()
+ .translationY(binding.messageInputView.y - typingIndicatorHeight)
+ .setInterpolator(AccelerateDecelerateInterpolator())
+ .duration = TYPING_INDICATOR_ANIMATION_DURATION
+
} else {
- binding.typingIndicator.visibility = View.GONE
+ binding.typingIndicatorWrapper.animate()
+ .translationY(binding.messageInputView.y)
+ .setInterpolator(AccelerateDecelerateInterpolator())
+ .duration = TYPING_INDICATOR_ANIMATION_DURATION
}
+
binding.typingIndicator.text = typingString
}
}
@@ -3765,5 +3770,6 @@ class ChatActivity :
private const val WHITESPACE = " "
private const val COMMA = ", "
+ private const val TYPING_INDICATOR_ANIMATION_DURATION = 200L
}
}
diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml
index a9fc29bd9..b90eb204d 100644
--- a/app/src/main/res/layout/activity_chat.xml
+++ b/app/src/main/res/layout/activity_chat.xml
@@ -80,7 +80,8 @@
android:id="@+id/messagesListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingBottom="0dp"
+ android:paddingBottom="20dp"
+ android:clipToPadding="false"
android:visibility="gone"
app:dateHeaderTextSize="13sp"
app:incomingBubblePaddingBottom="@dimen/message_bubble_corners_vertical_padding"
@@ -108,7 +109,8 @@
app:outcomingTextLinkColor="@color/high_emphasis_text"
app:outcomingTextSize="@dimen/chat_text_size"
app:outcomingTimeTextSize="12sp"
- app:textAutoLink="all" />
+ app:textAutoLink="all"
+ tools:visibility="visible"/>
+
+
+
+
+
+
+
+
+
-
-
-
-
-
Open in Files app
You are not allowed to share content to this chat
- is typing
- are typing
- and 1 other is typing…
- and %1$s others are typing…
+ is typing …
+ are typing …
+ and 1 other is typing …
+ and %1$s others are typing …
Add to conversation