diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VoiceBroadcastItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VoiceBroadcastItemFactory.kt index 5a70f66d75..98f45cd5db 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VoiceBroadcastItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VoiceBroadcastItemFactory.kt @@ -34,6 +34,7 @@ import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.getRoom +import org.matrix.android.sdk.api.session.getUser import org.matrix.android.sdk.api.util.toMatrixItem import javax.inject.Inject @@ -61,10 +62,19 @@ class VoiceBroadcastItemFactory @Inject constructor( val mostRecentEvent = mostRecentTimelineEvent.root.asVoiceBroadcastEvent() val mostRecentMessageContent = mostRecentEvent?.content ?: return null val isRecording = mostRecentMessageContent.voiceBroadcastState != VoiceBroadcastState.STOPPED && mostRecentEvent.root.stateKey == session.myUserId + val recorderName = mostRecentTimelineEvent.root.stateKey?.let { session.getUser(it) }?.displayName ?: mostRecentTimelineEvent.root.stateKey return if (isRecording) { createRecordingItem(params.event.roomId, highlight, callback, attributes) } else { - createListeningItem(params.event.roomId, eventsGroup.groupId, mostRecentMessageContent.voiceBroadcastState, highlight, callback, attributes) + createListeningItem( + params.event.roomId, + eventsGroup.groupId, + mostRecentMessageContent.voiceBroadcastState, + recorderName, + highlight, + callback, + attributes + ) } } @@ -90,6 +100,7 @@ class VoiceBroadcastItemFactory @Inject constructor( roomId: String, voiceBroadcastId: String, voiceBroadcastState: VoiceBroadcastState?, + broadcasterName: String?, highlight: Boolean, callback: TimelineEventController.Callback?, attributes: AbsMessageItem.Attributes, @@ -104,6 +115,7 @@ class VoiceBroadcastItemFactory @Inject constructor( .voiceBroadcastPlayer(voiceBroadcastPlayer) .voiceBroadcastId(voiceBroadcastId) .voiceBroadcastState(voiceBroadcastState) + .broadcasterName(broadcasterName) .leftGuideline(avatarSizeProvider.leftGuideline) .callback(callback) } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceBroadcastListeningItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceBroadcastListeningItem.kt index bf0f202f0c..130d44202f 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceBroadcastListeningItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceBroadcastListeningItem.kt @@ -48,6 +48,9 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageItem<MessageVoiceB @EpoxyAttribute var voiceBroadcastState: VoiceBroadcastState? = null + @EpoxyAttribute + var broadcasterName: String? = null + @EpoxyAttribute lateinit var colorProvider: ColorProvider @@ -84,6 +87,7 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageItem<MessageVoiceB attributes.avatarRenderer.render(it, roomAvatarImageView) titleText.text = it.displayName } + broadcasterNameText.text = broadcasterName } } @@ -114,7 +118,6 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageItem<MessageVoiceB } } - @Suppress("UNUSED_PARAMETER") private fun renderActiveMedia(holder: Holder, state: VoiceBroadcastPlayer.State) { with(holder) { bufferingView.isVisible = state == VoiceBroadcastPlayer.State.BUFFERING @@ -166,6 +169,7 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageItem<MessageVoiceB val titleText by bind<TextView>(R.id.titleText) val playPauseButton by bind<ImageButton>(R.id.playPauseButton) val bufferingView by bind<View>(R.id.bufferingView) + val broadcasterNameText by bind<TextView>(R.id.broadcasterNameText) } companion object { diff --git a/vector/src/main/res/drawable/ic_live_broadcast_16.xml b/vector/src/main/res/drawable/ic_voice_broadcast_16.xml similarity index 100% rename from vector/src/main/res/drawable/ic_live_broadcast_16.xml rename to vector/src/main/res/drawable/ic_voice_broadcast_16.xml diff --git a/vector/src/main/res/layout/item_timeline_event_voice_broadcast_listening_stub.xml b/vector/src/main/res/layout/item_timeline_event_voice_broadcast_listening_stub.xml index 6a4fcef77a..73acde2942 100644 --- a/vector/src/main/res/layout/item_timeline_event_voice_broadcast_listening_stub.xml +++ b/vector/src/main/res/layout/item_timeline_event_voice_broadcast_listening_stub.xml @@ -24,7 +24,7 @@ android:singleLine="true" android:text="@string/voice_broadcast_live" android:textColor="?colorOnError" - app:drawableStartCompat="@drawable/ic_live_broadcast_16" + app:drawableStartCompat="@drawable/ic_voice_broadcast_16" app:drawableTint="?colorOnError" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -36,7 +36,7 @@ android:contentDescription="@string/avatar" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - tools:src="@sample/user_round_avatars" /> + tools:src="@sample/room_round_avatars" /> <androidx.constraintlayout.widget.Barrier android:id="@+id/avatarRightBarrier" @@ -54,7 +54,59 @@ android:contentDescription="@string/avatar" app:layout_constraintStart_toEndOf="@id/avatarRightBarrier" app:layout_constraintTop_toTopOf="parent" - tools:src="@sample/users.json/data/displayName" /> + tools:src="@sample/rooms.json/data/name" /> + + <LinearLayout + android:id="@+id/broadcasterViewGroup" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:gravity="center_vertical" + android:orientation="horizontal" + app:layout_constraintStart_toEndOf="@id/avatarRightBarrier" + app:layout_constraintTop_toBottomOf="@id/titleText"> + + <ImageView + android:id="@+id/broadcasterIcon" + android:layout_width="16dp" + android:layout_height="16dp" + android:layout_marginEnd="5dp" + android:src="@drawable/ic_microphone" + app:tint="?vctr_content_secondary" /> + + <TextView + android:id="@+id/broadcasterNameText" + style="@style/Widget.Vector.TextView.Caption" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + tools:text="@sample/users.json/data/displayName" /> + </LinearLayout> + + <LinearLayout + android:id="@+id/voiceBroadcastViewGroup" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:gravity="center_vertical" + android:orientation="horizontal" + app:layout_constraintStart_toEndOf="@id/avatarRightBarrier" + app:layout_constraintTop_toBottomOf="@id/broadcasterViewGroup"> + + <ImageView + android:id="@+id/voiceBroadcastIcon" + android:layout_width="16dp" + android:layout_height="16dp" + android:layout_marginEnd="5dp" + android:src="@drawable/ic_voice_broadcast_16" + app:tint="?vctr_content_secondary" /> + + <TextView + android:id="@+id/voiceBroadcastText" + style="@style/Widget.Vector.TextView.Caption" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/attachment_type_voice_broadcast" /> + </LinearLayout> <androidx.constraintlayout.widget.Barrier android:id="@+id/headerBottomBarrier" @@ -62,7 +114,7 @@ android:layout_height="wrap_content" app:barrierDirection="bottom" app:barrierMargin="12dp" - app:constraint_referenced_ids="roomAvatarImageView,titleText" /> + app:constraint_referenced_ids="roomAvatarImageView,titleText,broadcasterViewGroup,voiceBroadcastViewGroup" /> <ImageButton android:id="@+id/playPauseButton" diff --git a/vector/src/main/res/layout/item_timeline_event_voice_broadcast_recording_stub.xml b/vector/src/main/res/layout/item_timeline_event_voice_broadcast_recording_stub.xml index 6773280ba5..e3bb85138d 100644 --- a/vector/src/main/res/layout/item_timeline_event_voice_broadcast_recording_stub.xml +++ b/vector/src/main/res/layout/item_timeline_event_voice_broadcast_recording_stub.xml @@ -24,7 +24,7 @@ android:singleLine="true" android:text="@string/voice_broadcast_live" android:textColor="?colorOnError" - app:drawableStartCompat="@drawable/ic_live_broadcast_16" + app:drawableStartCompat="@drawable/ic_voice_broadcast_16" app:drawableTint="?colorOnError" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" />