diff --git a/library/ui-strings/src/main/res/values/strings.xml b/library/ui-strings/src/main/res/values/strings.xml index f1d5bfbcad..616acfb343 100644 --- a/library/ui-strings/src/main/res/values/strings.xml +++ b/library/ui-strings/src/main/res/values/strings.xml @@ -3092,12 +3092,13 @@ (%1$s) Live + + Buffering… Resume voice broadcast record Pause voice broadcast record Stop voice broadcast record Play or resume voice broadcast Pause voice broadcast - Buffering Fast backward 30 seconds Fast forward 30 seconds Can’t start a new voice broadcast 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 e5cb677763..8d32875f0c 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 @@ -17,7 +17,6 @@ package im.vector.app.features.home.room.detail.timeline.item import android.text.format.DateUtils -import android.view.View import android.widget.ImageButton import android.widget.SeekBar import android.widget.TextView @@ -30,6 +29,7 @@ import im.vector.app.features.home.room.detail.RoomDetailAction.VoiceBroadcastAc import im.vector.app.features.home.room.detail.timeline.helper.AudioMessagePlaybackTracker.Listener.State import im.vector.app.features.voicebroadcast.listening.VoiceBroadcastPlayer import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState +import im.vector.app.features.voicebroadcast.views.VoiceBroadcastBufferingView import im.vector.app.features.voicebroadcast.views.VoiceBroadcastMetadataView @EpoxyModelClass @@ -63,10 +63,10 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageVoiceBroadcastItem playPauseButton.setOnClickListener { if (player.currentVoiceBroadcast == voiceBroadcast) { when (player.playingState) { - VoiceBroadcastPlayer.State.PLAYING -> callback?.onTimelineItemAction(VoiceBroadcastAction.Listening.Pause) + VoiceBroadcastPlayer.State.PLAYING, + VoiceBroadcastPlayer.State.BUFFERING -> callback?.onTimelineItemAction(VoiceBroadcastAction.Listening.Pause) VoiceBroadcastPlayer.State.PAUSED, VoiceBroadcastPlayer.State.IDLE -> callback?.onTimelineItemAction(VoiceBroadcastAction.Listening.PlayOrResume(voiceBroadcast)) - VoiceBroadcastPlayer.State.BUFFERING -> Unit } } else { callback?.onTimelineItemAction(VoiceBroadcastAction.Listening.PlayOrResume(voiceBroadcast)) @@ -86,7 +86,6 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageVoiceBroadcastItem override fun renderMetadata(holder: Holder) { with(holder) { broadcasterNameMetadata.value = recorderName - voiceBroadcastMetadata.isVisible = true listenersCountMetadata.isVisible = false } } @@ -102,10 +101,11 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageVoiceBroadcastItem private fun renderPlayingState(holder: Holder, state: VoiceBroadcastPlayer.State) { with(holder) { bufferingView.isVisible = state == VoiceBroadcastPlayer.State.BUFFERING - playPauseButton.isVisible = state != VoiceBroadcastPlayer.State.BUFFERING + voiceBroadcastMetadata.isVisible = state != VoiceBroadcastPlayer.State.BUFFERING when (state) { - VoiceBroadcastPlayer.State.PLAYING -> { + VoiceBroadcastPlayer.State.PLAYING, + VoiceBroadcastPlayer.State.BUFFERING -> { playPauseButton.setImageResource(R.drawable.ic_play_pause_pause) playPauseButton.contentDescription = view.resources.getString(R.string.a11y_pause_voice_broadcast) } @@ -114,7 +114,6 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageVoiceBroadcastItem playPauseButton.setImageResource(R.drawable.ic_play_pause_play) playPauseButton.contentDescription = view.resources.getString(R.string.a11y_play_voice_broadcast) } - VoiceBroadcastPlayer.State.BUFFERING -> Unit } renderLiveIndicator(holder) @@ -174,7 +173,7 @@ abstract class MessageVoiceBroadcastListeningItem : AbsMessageVoiceBroadcastItem class Holder : AbsMessageVoiceBroadcastItem.Holder(STUB_ID) { val playPauseButton by bind(R.id.playPauseButton) - val bufferingView by bind(R.id.bufferingView) + val bufferingView by bind(R.id.bufferingMetadata) val fastBackwardButton by bind(R.id.fastBackwardButton) val fastForwardButton by bind(R.id.fastForwardButton) val seekBar by bind(R.id.seekBar) diff --git a/vector/src/main/java/im/vector/app/features/voicebroadcast/views/VoiceBroadcastBufferingView.kt b/vector/src/main/java/im/vector/app/features/voicebroadcast/views/VoiceBroadcastBufferingView.kt new file mode 100644 index 0000000000..eabefa323e --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/voicebroadcast/views/VoiceBroadcastBufferingView.kt @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.features.voicebroadcast.views + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.LinearLayout +import im.vector.app.databinding.ViewVoiceBroadcastBufferingBinding + +class VoiceBroadcastBufferingView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : LinearLayout(context, attrs, defStyleAttr) { + + init { + ViewVoiceBroadcastBufferingBinding.inflate( + LayoutInflater.from(context), + this + ) + } +} 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 1d31afba99..f872db3d00 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 @@ -51,7 +51,7 @@ android:layout_height="wrap_content" android:layout_marginTop="4dp" android:orientation="vertical" - app:constraint_referenced_ids="broadcasterNameMetadata,voiceBroadcastMetadata,listenersCountMetadata" + app:constraint_referenced_ids="broadcasterNameMetadata,bufferingMetadata,voiceBroadcastMetadata,listenersCountMetadata" app:flow_horizontalAlign="start" app:flow_verticalGap="4dp" app:layout_constraintStart_toEndOf="@id/avatarRightBarrier" @@ -64,6 +64,11 @@ app:metadataIcon="@drawable/ic_voice_broadcast_mic" tools:metadataValue="@sample/users.json/data/displayName" /> + + @@ -117,16 +122,6 @@ android:src="@drawable/ic_play_pause_play" app:tint="?vctr_content_secondary" /> - - + + + + + +