VoiceBroadcast - Update live indicator icon

This commit is contained in:
Florian Renaud 2022-10-20 21:06:27 +02:00
parent f711a0ea74
commit cebc096ac7
3 changed files with 29 additions and 5 deletions

View file

@ -64,7 +64,7 @@ class VoiceBroadcastItemFactory @Inject constructor(
return if (isRecording) { return if (isRecording) {
createRecordingItem(params.event.roomId, highlight, callback, attributes) createRecordingItem(params.event.roomId, highlight, callback, attributes)
} else { } else {
createListeningItem(params.event.roomId, eventsGroup.groupId, highlight, callback, attributes) createListeningItem(params.event.roomId, eventsGroup.groupId, mostRecentMessageContent.voiceBroadcastState, highlight, callback, attributes)
} }
} }
@ -89,6 +89,7 @@ class VoiceBroadcastItemFactory @Inject constructor(
private fun createListeningItem( private fun createListeningItem(
roomId: String, roomId: String,
voiceBroadcastId: String, voiceBroadcastId: String,
voiceBroadcastState: VoiceBroadcastState?,
highlight: Boolean, highlight: Boolean,
callback: TimelineEventController.Callback?, callback: TimelineEventController.Callback?,
attributes: AbsMessageItem.Attributes, attributes: AbsMessageItem.Attributes,
@ -102,6 +103,7 @@ class VoiceBroadcastItemFactory @Inject constructor(
.drawableProvider(drawableProvider) .drawableProvider(drawableProvider)
.voiceBroadcastPlayer(voiceBroadcastPlayer) .voiceBroadcastPlayer(voiceBroadcastPlayer)
.voiceBroadcastId(voiceBroadcastId) .voiceBroadcastId(voiceBroadcastId)
.voiceBroadcastState(voiceBroadcastState)
.leftGuideline(avatarSizeProvider.leftGuideline) .leftGuideline(avatarSizeProvider.leftGuideline)
.callback(callback) .callback(callback)
} }

View file

@ -24,11 +24,13 @@ import androidx.core.view.isVisible
import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyAttribute
import com.airbnb.epoxy.EpoxyModelClass import com.airbnb.epoxy.EpoxyModelClass
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.extensions.tintBackground
import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.ColorProvider
import im.vector.app.core.resources.DrawableProvider import im.vector.app.core.resources.DrawableProvider
import im.vector.app.features.home.room.detail.RoomDetailAction import im.vector.app.features.home.room.detail.RoomDetailAction
import im.vector.app.features.home.room.detail.timeline.TimelineEventController import im.vector.app.features.home.room.detail.timeline.TimelineEventController
import im.vector.app.features.voicebroadcast.VoiceBroadcastPlayer import im.vector.app.features.voicebroadcast.VoiceBroadcastPlayer
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
import org.matrix.android.sdk.api.util.MatrixItem import org.matrix.android.sdk.api.util.MatrixItem
@EpoxyModelClass @EpoxyModelClass
@ -43,6 +45,9 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageItem<MessageVoiceB
@EpoxyAttribute @EpoxyAttribute
lateinit var voiceBroadcastId: String lateinit var voiceBroadcastId: String
@EpoxyAttribute
var voiceBroadcastState: VoiceBroadcastState? = null
@EpoxyAttribute @EpoxyAttribute
lateinit var colorProvider: ColorProvider lateinit var colorProvider: ColorProvider
@ -70,6 +75,7 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageItem<MessageVoiceB
} }
voiceBroadcastPlayer?.addListener(playerListener) voiceBroadcastPlayer?.addListener(playerListener)
renderHeader(holder) renderHeader(holder)
renderLiveIcon(holder)
} }
private fun renderHeader(holder: Holder) { private fun renderHeader(holder: Holder) {
@ -81,6 +87,25 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageItem<MessageVoiceB
} }
} }
private fun renderLiveIcon(holder: Holder) {
with(holder) {
when (voiceBroadcastState) {
VoiceBroadcastState.STARTED,
VoiceBroadcastState.RESUMED -> {
liveIndicator.tintBackground(colorProvider.getColorFromAttribute(R.attr.colorError))
liveIndicator.isVisible = true
}
VoiceBroadcastState.PAUSED -> {
liveIndicator.tintBackground(colorProvider.getColorFromAttribute(R.attr.vctr_content_quaternary))
liveIndicator.isVisible = true
}
VoiceBroadcastState.STOPPED, null -> {
liveIndicator.isVisible = false
}
}
}
}
private fun renderState(holder: Holder, state: VoiceBroadcastPlayer.State) { private fun renderState(holder: Holder, state: VoiceBroadcastPlayer.State) {
if (isCurrentMediaActive()) { if (isCurrentMediaActive()) {
renderActiveMedia(holder, state) renderActiveMedia(holder, state)
@ -94,8 +119,6 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageItem<MessageVoiceB
with(holder) { with(holder) {
bufferingView.isVisible = state == VoiceBroadcastPlayer.State.BUFFERING bufferingView.isVisible = state == VoiceBroadcastPlayer.State.BUFFERING
playPauseButton.isVisible = state != VoiceBroadcastPlayer.State.BUFFERING playPauseButton.isVisible = state != VoiceBroadcastPlayer.State.BUFFERING
liveIndicator.isVisible = false
// liveIndicator.tintBackground(colorProvider.getColorFromAttribute(R.attr.colorOnError))
when (state) { when (state) {
VoiceBroadcastPlayer.State.PLAYING -> { VoiceBroadcastPlayer.State.PLAYING -> {
@ -118,7 +141,6 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageItem<MessageVoiceB
private fun renderInactiveMedia(holder: Holder) { private fun renderInactiveMedia(holder: Holder) {
with(holder) { with(holder) {
liveIndicator.isVisible = false
bufferingView.isVisible = false bufferingView.isVisible = false
playPauseButton.isVisible = true playPauseButton.isVisible = true
playPauseButton.setImageResource(R.drawable.ic_play_pause_play) playPauseButton.setImageResource(R.drawable.ic_play_pause_play)

View file

@ -87,7 +87,7 @@ abstract class MessageVoiceBroadcastRecordingItem : AbsMessageItem<MessageVoiceB
stopRecordButton.isEnabled = true stopRecordButton.isEnabled = true
liveIndicator.isVisible = true liveIndicator.isVisible = true
liveIndicator.tintBackground(colorProvider.getColorFromAttribute(R.attr.colorOnError)) liveIndicator.tintBackground(colorProvider.getColorFromAttribute(R.attr.colorError))
val drawableColor = colorProvider.getColorFromAttribute(R.attr.vctr_content_secondary) val drawableColor = colorProvider.getColorFromAttribute(R.attr.vctr_content_secondary)
val drawable = drawableProvider.getDrawable(R.drawable.ic_play_pause_pause, drawableColor) val drawable = drawableProvider.getDrawable(R.drawable.ic_play_pause_pause, drawableColor)