diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt index 44af7d9345..d1ce31a54a 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt @@ -22,6 +22,7 @@ import android.content.Intent import android.content.res.ColorStateList import android.content.res.Configuration import android.graphics.Color +import android.graphics.Typeface import android.net.Uri import android.os.Build import android.os.Bundle @@ -172,6 +173,7 @@ import im.vector.app.features.home.room.detail.upgrade.MigrateRoomBottomSheet import im.vector.app.features.home.room.detail.views.RoomDetailLazyLoadedViews import im.vector.app.features.home.room.detail.widget.RoomWidgetsBottomSheet import im.vector.app.features.home.room.threads.arguments.ThreadTimelineArgs +import im.vector.app.features.home.room.typing.TypingHelper import im.vector.app.features.html.EventHtmlRenderer import im.vector.app.features.html.PillImageSpan import im.vector.app.features.html.PillsPostProcessor @@ -265,6 +267,7 @@ class TimelineFragment @Inject constructor( private val pillsPostProcessorFactory: PillsPostProcessor.Factory, private val callManager: WebRtcCallManager, private val voiceMessagePlaybackTracker: VoiceMessagePlaybackTracker, + private val typingHelper: TypingHelper, private val clock: Clock ) : VectorBaseFragment(), @@ -1704,6 +1707,14 @@ class TimelineFragment @Inject constructor( } private fun renderTypingMessageNotification(roomSummary: RoomSummary?, state: RoomDetailViewState) { + // SC-TODO: setting? + // Old-school toolbar indicator + if (roomSummary != null) { + val typingMessage = typingHelper.getTypingMessage(state.typingUsers ?: listOf()) + renderSubTitle(typingMessage, roomSummary.topic) + return + } + /* New bottom typing indicator if (!isThreadTimeLine() && roomSummary != null) { views.typingMessageView.isInvisibleOrGone = state.typingUsers.isNullOrEmpty() state.typingUsers @@ -1712,6 +1723,7 @@ class TimelineFragment @Inject constructor( } else { views.typingMessageView.isInvisibleOrGone = true } + */ } private fun renderToolbar(roomSummary: RoomSummary?) { @@ -1741,6 +1753,20 @@ class TimelineFragment @Inject constructor( } } + private fun renderSubTitle(typingMessage: String?, topic: String) { + val subtitle = typingMessage?.takeIf { it.isNotBlank() } ?: topic + views.includeRoomToolbar.roomToolbarSubtitleView.apply { + setTextOrHide(subtitle) + if (typingMessage.isNullOrBlank()) { + setTextColor(colorProvider.getColorFromAttribute(R.attr.vctr_content_secondary)) + setTypeface(null, Typeface.NORMAL) + } else { + setTextColor(colorProvider.getColorFromAttribute(R.attr.colorPrimary)) + setTypeface(null, Typeface.BOLD) + } + } + } + private fun renderSendMessageResult(sendMessageResult: MessageComposerViewEvents.SendMessageResult) { when (sendMessageResult) { is MessageComposerViewEvents.SlashCommandLoading -> { diff --git a/vector/src/main/res/layout/view_room_detail_toolbar.xml b/vector/src/main/res/layout/view_room_detail_toolbar.xml index 2e80522017..af4ada581d 100644 --- a/vector/src/main/res/layout/view_room_detail_toolbar.xml +++ b/vector/src/main/res/layout/view_room_detail_toolbar.xml @@ -9,8 +9,8 @@ + android:layout_width="17dp" + android:layout_height="17dp" + android:layout_marginStart="5dp" + android:layout_marginTop="2dp" + app:layout_constraintBottom_toBottomOf="@id/roomToolbarTitleView" + app:layout_constraintStart_toEndOf="@id/roomToolbarAvatarImageView" + app:layout_constraintTop_toTopOf="@id/roomToolbarTitleView" /> @@ -58,32 +58,43 @@ app:layout_constraintCircleAngle="135" app:layout_constraintCircleRadius="20dp" tools:ignore="MissingConstraints" - tools:visibility="invisible" /> - - + tools:visibility="visible" /> + +