mirror of
https://github.com/element-hq/element-android
synced 2024-11-23 09:55:40 +03:00
Move buffering view in tile header
This commit is contained in:
parent
fe0bca75f8
commit
912de8286f
5 changed files with 79 additions and 21 deletions
|
@ -3092,12 +3092,13 @@
|
|||
<string name="audio_message_file_size">(%1$s)</string>
|
||||
|
||||
<string name="voice_broadcast_live">Live</string>
|
||||
<!-- TODO Rename id to voice_broadcast_buffering -->
|
||||
<string name="a11y_voice_broadcast_buffering">Buffering…</string>
|
||||
<string name="a11y_resume_voice_broadcast_record">Resume voice broadcast record</string>
|
||||
<string name="a11y_pause_voice_broadcast_record">Pause voice broadcast record</string>
|
||||
<string name="a11y_stop_voice_broadcast_record">Stop voice broadcast record</string>
|
||||
<string name="a11y_play_voice_broadcast">Play or resume voice broadcast</string>
|
||||
<string name="a11y_pause_voice_broadcast">Pause voice broadcast</string>
|
||||
<string name="a11y_voice_broadcast_buffering">Buffering</string>
|
||||
<string name="a11y_voice_broadcast_fast_backward">Fast backward 30 seconds</string>
|
||||
<string name="a11y_voice_broadcast_fast_forward">Fast forward 30 seconds</string>
|
||||
<string name="error_voice_broadcast_unauthorized_title">Can’t start a new voice broadcast</string>
|
||||
|
|
|
@ -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<ImageButton>(R.id.playPauseButton)
|
||||
val bufferingView by bind<View>(R.id.bufferingView)
|
||||
val bufferingView by bind<VoiceBroadcastBufferingView>(R.id.bufferingMetadata)
|
||||
val fastBackwardButton by bind<ImageButton>(R.id.fastBackwardButton)
|
||||
val fastForwardButton by bind<ImageButton>(R.id.fastForwardButton)
|
||||
val seekBar by bind<SeekBar>(R.id.seekBar)
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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" />
|
||||
|
||||
<im.vector.app.features.voicebroadcast.views.VoiceBroadcastBufferingView
|
||||
android:id="@+id/bufferingMetadata"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<im.vector.app.features.voicebroadcast.views.VoiceBroadcastMetadataView
|
||||
android:id="@+id/voiceBroadcastMetadata"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -92,7 +97,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
app:constraint_referenced_ids="fastBackwardButton,playPauseButton,bufferingView,fastForwardButton"
|
||||
app:constraint_referenced_ids="fastBackwardButton,playPauseButton,fastForwardButton"
|
||||
app:layout_constraintBottom_toTopOf="@id/seekBar"
|
||||
app:layout_constraintTop_toBottomOf="@id/headerBottomBarrier" />
|
||||
|
||||
|
@ -117,16 +122,6 @@
|
|||
android:src="@drawable/ic_play_pause_play"
|
||||
app:tint="?vctr_content_secondary" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/bufferingView"
|
||||
android:layout_width="@dimen/voice_broadcast_player_button_size"
|
||||
android:layout_height="@dimen/voice_broadcast_player_button_size"
|
||||
android:contentDescription="@string/a11y_voice_broadcast_buffering"
|
||||
android:indeterminate="true"
|
||||
android:indeterminateTint="?vctr_content_secondary"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/fastForwardButton"
|
||||
android:layout_width="24dp"
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
tools:parentTag="android.widget.LinearLayout">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/metadataIcon"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:contentDescription="@string/a11y_voice_broadcast_buffering"
|
||||
android:indeterminate="true"
|
||||
android:indeterminateTint="?vctr_content_secondary"
|
||||
tools:src="@drawable/ic_voice_broadcast" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/metadata_value"
|
||||
style="@style/Widget.Vector.TextView.Caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/a11y_voice_broadcast_buffering" />
|
||||
</merge>
|
Loading…
Reference in a new issue