Added joining state to conference participant device
This commit is contained in:
parent
1fbac6e4d5
commit
f1628060c6
10 changed files with 116 additions and 77 deletions
|
@ -25,10 +25,7 @@ import androidx.lifecycle.MediatorLiveData
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.contact.GenericContactData
|
import org.linphone.contact.GenericContactData
|
||||||
import org.linphone.core.MediaDirection
|
import org.linphone.core.*
|
||||||
import org.linphone.core.ParticipantDevice
|
|
||||||
import org.linphone.core.ParticipantDeviceListenerStub
|
|
||||||
import org.linphone.core.StreamType
|
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
|
|
||||||
class ConferenceParticipantDeviceData(
|
class ConferenceParticipantDeviceData(
|
||||||
|
@ -42,12 +39,14 @@ class ConferenceParticipantDeviceData(
|
||||||
|
|
||||||
val isSendingVideo = MutableLiveData<Boolean>()
|
val isSendingVideo = MutableLiveData<Boolean>()
|
||||||
|
|
||||||
val activeSpeaker = MutableLiveData<Boolean>()
|
val isSpeaking = MutableLiveData<Boolean>()
|
||||||
|
|
||||||
val micMuted = MutableLiveData<Boolean>()
|
val isMuted = MutableLiveData<Boolean>()
|
||||||
|
|
||||||
val isInConference = MutableLiveData<Boolean>()
|
val isInConference = MutableLiveData<Boolean>()
|
||||||
|
|
||||||
|
val isJoining = MutableLiveData<Boolean>()
|
||||||
|
|
||||||
private var textureView: TextureView? = null
|
private var textureView: TextureView? = null
|
||||||
|
|
||||||
private val listener = object : ParticipantDeviceListenerStub() {
|
private val listener = object : ParticipantDeviceListenerStub() {
|
||||||
|
@ -56,23 +55,31 @@ class ConferenceParticipantDeviceData(
|
||||||
isSpeaking: Boolean
|
isSpeaking: Boolean
|
||||||
) {
|
) {
|
||||||
Log.i("[Conference Participant Device] Participant [${participantDevice.address.asStringUriOnly()}] is ${if (isSpeaking) "speaking" else "not speaking"}")
|
Log.i("[Conference Participant Device] Participant [${participantDevice.address.asStringUriOnly()}] is ${if (isSpeaking) "speaking" else "not speaking"}")
|
||||||
activeSpeaker.value = isSpeaking
|
this@ConferenceParticipantDeviceData.isSpeaking.value = isSpeaking
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onIsMuted(participantDevice: ParticipantDevice, isMuted: Boolean) {
|
override fun onIsMuted(participantDevice: ParticipantDevice, isMuted: Boolean) {
|
||||||
Log.i("[Conference Participant Device] Participant [${participantDevice.address.asStringUriOnly()}] is ${if (isMuted) "muted" else "not muted"}")
|
Log.i("[Conference Participant Device] Participant [${participantDevice.address.asStringUriOnly()}] is ${if (isMuted) "muted" else "not muted"}")
|
||||||
micMuted.value = isMuted
|
this@ConferenceParticipantDeviceData.isMuted.value = isMuted
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onConferenceJoined(participantDevice: ParticipantDevice) {
|
override fun onStateChanged(
|
||||||
Log.i("[Conference Participant Device] Participant [${participantDevice.address.asStringUriOnly()}] has joined the conference")
|
participantDevice: ParticipantDevice,
|
||||||
isInConference.value = true
|
state: ParticipantDeviceState
|
||||||
updateWindowId(textureView)
|
) {
|
||||||
}
|
Log.i("[Conference Participant Device] Participant [${participantDevice.address.asStringUriOnly()}] state has changed: $state")
|
||||||
|
when (state) {
|
||||||
override fun onConferenceLeft(participantDevice: ParticipantDevice) {
|
ParticipantDeviceState.Joining, ParticipantDeviceState.Alerting -> isJoining.value = true
|
||||||
Log.i("[Conference Participant Device] Participant [${participantDevice.address.asStringUriOnly()}] has left the conference")
|
ParticipantDeviceState.OnHold -> {
|
||||||
isInConference.value = false
|
isInConference.value = false
|
||||||
|
}
|
||||||
|
ParticipantDeviceState.Present -> {
|
||||||
|
isJoining.value = false
|
||||||
|
isInConference.value = true
|
||||||
|
updateWindowId(textureView)
|
||||||
|
}
|
||||||
|
else -> {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStreamCapabilityChanged(
|
override fun onStreamCapabilityChanged(
|
||||||
|
@ -105,14 +112,17 @@ class ConferenceParticipantDeviceData(
|
||||||
Log.i("[Conference Participant Device] Created device width Address [${participantDevice.address.asStringUriOnly()}], is it myself? $isMe")
|
Log.i("[Conference Participant Device] Created device width Address [${participantDevice.address.asStringUriOnly()}], is it myself? $isMe")
|
||||||
participantDevice.addListener(listener)
|
participantDevice.addListener(listener)
|
||||||
|
|
||||||
activeSpeaker.value = false
|
isSpeaking.value = false
|
||||||
micMuted.value = participantDevice.isMuted
|
isMuted.value = participantDevice.isMuted
|
||||||
|
|
||||||
videoAvailable.value = participantDevice.getStreamAvailability(StreamType.Video)
|
videoAvailable.value = participantDevice.getStreamAvailability(StreamType.Video)
|
||||||
val videoCapability = participantDevice.getStreamCapability(StreamType.Video)
|
val videoCapability = participantDevice.getStreamCapability(StreamType.Video)
|
||||||
isSendingVideo.value = videoCapability == MediaDirection.SendRecv || videoCapability == MediaDirection.SendOnly
|
isSendingVideo.value = videoCapability == MediaDirection.SendRecv || videoCapability == MediaDirection.SendOnly
|
||||||
isInConference.value = participantDevice.isInConference
|
isInConference.value = participantDevice.isInConference
|
||||||
|
|
||||||
|
val state = participantDevice.state
|
||||||
|
isJoining.value = state == ParticipantDeviceState.Joining || state == ParticipantDeviceState.Alerting
|
||||||
|
|
||||||
videoEnabled.value = isVideoAvailableAndSendReceive()
|
videoEnabled.value = isVideoAvailableAndSendReceive()
|
||||||
videoEnabled.addSource(videoAvailable) {
|
videoEnabled.addSource(videoAvailable) {
|
||||||
videoEnabled.value = isVideoAvailableAndSendReceive()
|
videoEnabled.value = isVideoAvailableAndSendReceive()
|
||||||
|
@ -121,7 +131,7 @@ class ConferenceParticipantDeviceData(
|
||||||
videoEnabled.value = isVideoAvailableAndSendReceive()
|
videoEnabled.value = isVideoAvailableAndSendReceive()
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.i("[Conference Participant Device] Participant [${participantDevice.address.asStringUriOnly()}], is in conf? ${isInConference.value}, is video available? ${videoAvailable.value} ($videoCapability), is mic muted? ${micMuted.value}")
|
Log.i("[Conference Participant Device] Participant [${participantDevice.address.asStringUriOnly()}], is in conf? ${isInConference.value}, is video available? ${videoAvailable.value} ($videoCapability), is mic muted? ${isMuted.value}")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun destroy() {
|
override fun destroy() {
|
||||||
|
|
|
@ -124,17 +124,23 @@ class ConferenceViewModel : ViewModel() {
|
||||||
this@ConferenceViewModel.subject.value = subject
|
this@ConferenceViewModel.subject.value = subject
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onParticipantDeviceJoined(conference: Conference, device: ParticipantDevice) {
|
override fun onParticipantDeviceStateChanged(
|
||||||
|
conference: Conference,
|
||||||
|
device: ParticipantDevice,
|
||||||
|
state: ParticipantDeviceState
|
||||||
|
) {
|
||||||
if (conference.isMe(device.address)) {
|
if (conference.isMe(device.address)) {
|
||||||
Log.i("[Conference] Entered conference")
|
when (state) {
|
||||||
isConferenceLocallyPaused.value = false
|
ParticipantDeviceState.Present -> {
|
||||||
}
|
Log.i("[Conference] Entered conference")
|
||||||
}
|
isConferenceLocallyPaused.value = false
|
||||||
|
}
|
||||||
override fun onParticipantDeviceLeft(conference: Conference, device: ParticipantDevice) {
|
ParticipantDeviceState.OnHold -> {
|
||||||
if (conference.isMe(device.address)) {
|
Log.i("[Conference] Left conference")
|
||||||
Log.i("[Conference] Left conference")
|
isConferenceLocallyPaused.value = true
|
||||||
isConferenceLocallyPaused.value = true
|
}
|
||||||
|
else -> {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
android:layout_marginTop="@{controlsViewModel.folded || controlsViewModel.fullScreenMode ? @dimen/margin_0dp : conferenceViewModel.isRemotelyRecorded ? @dimen/voip_single_call_header_size_with_record_info : @dimen/voip_single_call_header_size, default=@dimen/voip_single_call_header_size}"/>
|
android:layout_marginTop="@{controlsViewModel.folded || controlsViewModel.fullScreenMode || controlsViewModel.pipMode ? @dimen/margin_0dp : conferenceViewModel.isRemotelyRecorded ? @dimen/voip_single_call_header_size_with_record_info : @dimen/voip_single_call_header_size, default=@dimen/voip_single_call_header_size}"/>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Guideline
|
<androidx.constraintlayout.widget.Guideline
|
||||||
android:id="@+id/hinge_top"
|
android:id="@+id/hinge_top"
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
android:layout_marginTop="@{controlsViewModel.folded ? @dimen/margin_0dp : conferenceViewModel.isRemotelyRecorded ? @dimen/voip_single_call_header_size_with_record_info : @dimen/voip_single_call_header_size, default=@dimen/voip_single_call_header_size}"/>
|
android:layout_marginTop="@{controlsViewModel.fullScreenMode || controlsViewModel.pipMode || controlsViewModel.folded ? @dimen/margin_0dp : conferenceViewModel.isRemotelyRecorded ? @dimen/voip_single_call_header_size_with_record_info : @dimen/voip_single_call_header_size, default=@dimen/voip_single_call_header_size}"/>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Guideline
|
<androidx.constraintlayout.widget.Guideline
|
||||||
android:id="@+id/hinge_top"
|
android:id="@+id/hinge_top"
|
||||||
|
@ -126,7 +126,6 @@
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintBottom_toTopOf="@id/hinge_bottom"
|
app:layout_constraintBottom_toTopOf="@id/hinge_bottom"
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:onClick="@{() -> controlsViewModel.toggleFullScreen()}"
|
android:onClick="@{() -> controlsViewModel.toggleFullScreen()}"
|
||||||
app:entries="@{conferenceViewModel.conferenceParticipantDevices}"
|
app:entries="@{conferenceViewModel.conferenceParticipantDevices}"
|
||||||
app:layout="@{@layout/voip_conference_participant_remote_grid}" />
|
app:layout="@{@layout/voip_conference_participant_remote_grid}" />
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
android:layout_marginTop="@{controlsViewModel.folded || controlsViewModel.fullScreenMode ? @dimen/margin_0dp : conferenceViewModel.isRemotelyRecorded ? @dimen/voip_single_call_header_size_with_record_info : @dimen/voip_single_call_header_size, default=@dimen/voip_single_call_header_size}"/>
|
android:layout_marginTop="@{controlsViewModel.folded || controlsViewModel.fullScreenMode || controlsViewModel.pipMode ? @dimen/margin_0dp : conferenceViewModel.isRemotelyRecorded ? @dimen/voip_single_call_header_size_with_record_info : @dimen/voip_single_call_header_size, default=@dimen/voip_single_call_header_size}"/>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Guideline
|
<androidx.constraintlayout.widget.Guideline
|
||||||
android:id="@+id/hinge_top"
|
android:id="@+id/hinge_top"
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
android:layout_marginTop="@{controlsViewModel.folded ? @dimen/margin_0dp : conferenceViewModel.isRemotelyRecorded ? @dimen/voip_single_call_header_size_with_record_info : @dimen/voip_single_call_header_size, default=@dimen/voip_single_call_header_size}"/>
|
android:layout_marginTop="@{controlsViewModel.fullScreenMode || controlsViewModel.pipMode || controlsViewModel.folded ? @dimen/margin_0dp : conferenceViewModel.isRemotelyRecorded ? @dimen/voip_single_call_header_size_with_record_info : @dimen/voip_single_call_header_size, default=@dimen/voip_single_call_header_size}"/>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Guideline
|
<androidx.constraintlayout.widget.Guideline
|
||||||
android:id="@+id/hinge_top"
|
android:id="@+id/hinge_top"
|
||||||
|
@ -126,7 +126,6 @@
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintBottom_toTopOf="@id/hinge_bottom"
|
app:layout_constraintBottom_toTopOf="@id/hinge_bottom"
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:onClick="@{() -> controlsViewModel.toggleFullScreen()}"
|
android:onClick="@{() -> controlsViewModel.toggleFullScreen()}"
|
||||||
app:entries="@{conferenceViewModel.conferenceParticipantDevices}"
|
app:entries="@{conferenceViewModel.conferenceParticipantDevices}"
|
||||||
app:layout="@{@layout/voip_conference_participant_remote_grid}" />
|
app:layout="@{@layout/voip_conference_participant_remote_grid}" />
|
||||||
|
|
|
@ -15,14 +15,15 @@
|
||||||
android:layout_width="@dimen/voip_active_speaker_miniature_size"
|
android:layout_width="@dimen/voip_active_speaker_miniature_size"
|
||||||
android:layout_height="@dimen/voip_active_speaker_miniature_size"
|
android:layout_height="@dimen/voip_active_speaker_miniature_size"
|
||||||
android:layout_margin="5dp"
|
android:layout_margin="5dp"
|
||||||
android:background="@{!data.isInConference ? @drawable/shape_remote_paused_background : data.videoEnabled ? @drawable/shape_remote_video_background : @drawable/shape_remote_background, default=@drawable/shape_remote_background}"
|
android:background="@{!data.isInConference && !data.isJoining ? @drawable/shape_remote_paused_background : data.videoEnabled ? @drawable/shape_remote_video_background : @drawable/shape_remote_background, default=@drawable/shape_remote_background}"
|
||||||
app:layout_alignSelf="flex_end"
|
app:layout_alignSelf="flex_end"
|
||||||
app:layout_flexShrink="0">
|
app:layout_flexShrink="0">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:id="@+id/participant_avatar"
|
||||||
android:layout_width="@dimen/voip_conference_active_speaker_miniature_avatar_size"
|
android:layout_width="@dimen/voip_conference_active_speaker_miniature_avatar_size"
|
||||||
android:layout_height="@dimen/voip_conference_active_speaker_miniature_avatar_size"
|
android:layout_height="@dimen/voip_conference_active_speaker_miniature_avatar_size"
|
||||||
android:visibility="@{data.videoEnabled || !data.isInConference ? View.GONE : View.VISIBLE}"
|
android:visibility="@{data.isInConference || data.isJoining ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@null"
|
android:contentDescription="@null"
|
||||||
coilVoipContact="@{data}"
|
coilVoipContact="@{data}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
@ -44,12 +45,13 @@
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:id="@+id/paused"
|
||||||
android:layout_width="@dimen/voip_conference_active_speaker_miniature_avatar_size"
|
android:layout_width="@dimen/voip_conference_active_speaker_miniature_avatar_size"
|
||||||
android:layout_height="@dimen/voip_conference_active_speaker_miniature_avatar_size"
|
android:layout_height="@dimen/voip_conference_active_speaker_miniature_avatar_size"
|
||||||
android:background="@drawable/shape_button_background"
|
android:background="@drawable/shape_button_background"
|
||||||
android:contentDescription="@string/content_description_participant_is_paused"
|
android:contentDescription="@string/content_description_participant_is_paused"
|
||||||
android:src="@drawable/icon_pause"
|
android:src="@drawable/icon_pause"
|
||||||
android:visibility="@{data.isInConference ? View.GONE : View.VISIBLE, default=gone}"
|
android:visibility="@{data.isInConference || data.isJoining ? View.GONE : View.VISIBLE, default=gone}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
@ -71,7 +73,7 @@
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:contentDescription="@null"
|
android:contentDescription="@null"
|
||||||
android:src="@drawable/shape_conference_active_speaker_border"
|
android:src="@drawable/shape_conference_active_speaker_border"
|
||||||
android:visibility="@{data.activeSpeaker ? View.VISIBLE : View.GONE, default=gone}"
|
android:visibility="@{data.isSpeaking ? View.VISIBLE : View.GONE, default=gone}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
@ -90,16 +92,15 @@
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent" />
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
|
|
||||||
<!--<TextView
|
<ProgressBar
|
||||||
android:visibility="@{data.isInConference ? View.GONE : View.VISIBLE, default=gone}"
|
android:id="@+id/joining"
|
||||||
android:text="@string/conference_participant_paused"
|
android:layout_width="@dimen/voip_conference_participant_joining_icon_size_active_speaker"
|
||||||
style="@style/call_remote_name_font"
|
android:layout_height="@dimen/voip_conference_participant_joining_icon_size_active_speaker"
|
||||||
android:layout_width="0dp"
|
android:indeterminate="true"
|
||||||
android:layout_height="wrap_content"
|
android:indeterminateDrawable="@drawable/icon_spinner_rotating"
|
||||||
android:layout_marginStart="5dp"
|
android:visibility="@{data.isJoining ? View.VISIBLE : View.GONE, default=gone}"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
app:layout_constraintBottom_toTopOf="@id/participant_name"/>-->
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="@dimen/voip_conference_participant_mic_muted_icon_size_active_speaker"
|
android:layout_width="@dimen/voip_conference_participant_mic_muted_icon_size_active_speaker"
|
||||||
|
@ -109,7 +110,7 @@
|
||||||
android:contentDescription="@string/content_description_conference_participant_mic_muted"
|
android:contentDescription="@string/content_description_conference_participant_mic_muted"
|
||||||
android:padding="2dp"
|
android:padding="2dp"
|
||||||
android:src="@drawable/icon_mic_muted"
|
android:src="@drawable/icon_mic_muted"
|
||||||
android:visibility="@{data.micMuted ? View.VISIBLE : View.GONE, default=gone}"
|
android:visibility="@{data.isMuted ? View.VISIBLE : View.GONE, default=gone}"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:contentDescription="@null"
|
android:contentDescription="@null"
|
||||||
android:src="@drawable/shape_conference_audio_only_border"
|
android:src="@drawable/shape_conference_audio_only_border"
|
||||||
android:visibility="@{data.activeSpeaker ? View.VISIBLE : View.GONE, default=gone}"
|
android:visibility="@{data.isSpeaking ? View.VISIBLE : View.GONE, default=gone}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
@ -48,10 +48,10 @@
|
||||||
android:layout_height="@dimen/voip_conference_audio_only_participant_avatar_size"
|
android:layout_height="@dimen/voip_conference_audio_only_participant_avatar_size"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
android:contentDescription="@null"
|
android:contentDescription="@null"
|
||||||
android:visibility="@{data.isInConference ? View.VISIBLE : View.GONE}"
|
android:visibility="@{data.isInConference || data.isJoining ? View.VISIBLE : View.GONE}"
|
||||||
coilVoipContact="@{data}"
|
coilVoipContact="@{data}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/paused_avatar"
|
app:layout_constraintEnd_toStartOf="@id/paused_avatar"
|
||||||
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
@ -64,10 +64,10 @@
|
||||||
android:background="@drawable/shape_button_background"
|
android:background="@drawable/shape_button_background"
|
||||||
android:contentDescription="@string/content_description_participant_is_paused"
|
android:contentDescription="@string/content_description_participant_is_paused"
|
||||||
android:src="@drawable/icon_pause"
|
android:src="@drawable/icon_pause"
|
||||||
android:visibility="@{data.isInConference ? View.GONE : View.VISIBLE, default=gone}"
|
android:visibility="@{data.isInConference || data.isJoining ? View.GONE : View.VISIBLE, default=gone}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/participant_name"
|
app:layout_constraintEnd_toStartOf="@id/participant_name"
|
||||||
app:layout_constraintStart_toEndOf="@+id/participant_avatar"
|
app:layout_constraintStart_toEndOf="@id/participant_avatar"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -80,10 +80,29 @@
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:maxLines="2"
|
android:maxLines="2"
|
||||||
android:text="@{(data.contact.name ?? data.displayName) + (data.isInConference ? `` : ` ` + @string/conference_participant_paused), default=`Merry Brandybuck`}"
|
android:text="@{(data.contact.name ?? data.displayName) + (data.isInConference || data.isJoining ? `` : ` ` + @string/conference_participant_paused), default=`Merry Brandybuck`}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/participant_mic_muted"
|
app:layout_constraintEnd_toStartOf="@id/endBarrier"
|
||||||
app:layout_constraintStart_toEndOf="@+id/paused_avatar"
|
app:layout_constraintStart_toEndOf="@id/paused_avatar"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Barrier
|
||||||
|
android:id="@+id/endBarrier"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:barrierDirection="left"
|
||||||
|
app:constraint_referenced_ids="joining, participant_mic_muted" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/joining"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:indeterminate="true"
|
||||||
|
android:indeterminateDrawable="@drawable/icon_spinner_rotating"
|
||||||
|
android:visibility="@{data.isJoining ? View.VISIBLE : View.GONE, default=gone}"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/participant_name"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@ -95,10 +114,10 @@
|
||||||
android:contentDescription="@string/content_description_conference_participant_mic_muted"
|
android:contentDescription="@string/content_description_conference_participant_mic_muted"
|
||||||
android:padding="2dp"
|
android:padding="2dp"
|
||||||
android:src="@drawable/icon_mic_muted"
|
android:src="@drawable/icon_mic_muted"
|
||||||
android:visibility="@{data.micMuted ? View.VISIBLE : View.GONE, default=gone}"
|
android:visibility="@{data.isMuted ? View.VISIBLE : View.GONE, default=gone}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@+id/participant_name"
|
app:layout_constraintStart_toEndOf="@id/participant_name"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
|
@ -20,18 +20,19 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_margin="5dp"
|
android:layout_margin="5dp"
|
||||||
android:background="@{!data.isInConference ? @drawable/shape_remote_paused_background : data.videoEnabled ? @drawable/shape_remote_video_background : @drawable/shape_remote_background, default=@drawable/shape_remote_background}"
|
android:background="@{!data.isInConference && !data.isJoining ? @drawable/shape_remote_paused_background : data.videoEnabled ? @drawable/shape_remote_video_background : @drawable/shape_remote_background, default=@drawable/shape_remote_background}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:id="@+id/participant_avatar"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_margin="30dp"
|
android:layout_margin="30dp"
|
||||||
android:contentDescription="@null"
|
android:contentDescription="@null"
|
||||||
android:visibility="@{data.videoEnabled || !data.isInConference ? View.GONE : View.VISIBLE}"
|
android:visibility="@{data.isInConference || data.isJoining ? View.VISIBLE : View.GONE}"
|
||||||
coilVoipContact="@{data}"
|
coilVoipContact="@{data}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
@ -55,12 +56,13 @@
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:id="@+id/paused"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@drawable/shape_button_background"
|
android:background="@drawable/shape_button_background"
|
||||||
android:contentDescription="@string/content_description_participant_is_paused"
|
android:contentDescription="@string/content_description_participant_is_paused"
|
||||||
android:src="@drawable/icon_pause"
|
android:src="@drawable/icon_pause"
|
||||||
android:visibility="@{data.isInConference ? View.GONE : View.VISIBLE, default=gone}"
|
android:visibility="@{data.isInConference || data.isJoining ? View.GONE : View.VISIBLE, default=gone}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
@ -73,7 +75,7 @@
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:contentDescription="@null"
|
android:contentDescription="@null"
|
||||||
android:src="@drawable/shape_conference_active_speaker_border"
|
android:src="@drawable/shape_conference_active_speaker_border"
|
||||||
android:visibility="@{data.activeSpeaker ? View.VISIBLE : View.GONE, default=gone}"
|
android:visibility="@{data.isSpeaking ? View.VISIBLE : View.GONE, default=gone}"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
|
@ -90,16 +92,6 @@
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent" />
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
style="@style/call_remote_name_font"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="5dp"
|
|
||||||
android:text="@string/conference_participant_paused"
|
|
||||||
android:visibility="@{data.isInConference ? View.GONE : View.VISIBLE, default=gone}"
|
|
||||||
app:layout_constraintBottom_toBottomOf="@id/participant_name"
|
|
||||||
app:layout_constraintStart_toEndOf="@id/participant_name" />
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -112,6 +104,17 @@
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/joining"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="2dp"
|
||||||
|
android:indeterminate="true"
|
||||||
|
android:indeterminateDrawable="@drawable/icon_spinner_rotating"
|
||||||
|
android:visibility="@{data.isJoining ? View.VISIBLE : View.GONE, default=gone}"
|
||||||
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="@dimen/voip_conference_participant_mic_muted_icon_size_grid"
|
android:layout_width="@dimen/voip_conference_participant_mic_muted_icon_size_grid"
|
||||||
android:layout_height="@dimen/voip_conference_participant_mic_muted_icon_size_grid"
|
android:layout_height="@dimen/voip_conference_participant_mic_muted_icon_size_grid"
|
||||||
|
@ -120,7 +123,7 @@
|
||||||
android:contentDescription="@string/content_description_conference_participant_mic_muted"
|
android:contentDescription="@string/content_description_conference_participant_mic_muted"
|
||||||
android:padding="2dp"
|
android:padding="2dp"
|
||||||
android:src="@drawable/icon_mic_muted"
|
android:src="@drawable/icon_mic_muted"
|
||||||
android:visibility="@{data.micMuted ? View.VISIBLE : View.GONE, default=gone}"
|
android:visibility="@{data.isMuted ? View.VISIBLE : View.GONE, default=gone}"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,9 @@
|
||||||
<dimen name="voip_active_speaker_miniature_margin">10dp</dimen>
|
<dimen name="voip_active_speaker_miniature_margin">10dp</dimen>
|
||||||
<dimen name="voip_conference_active_speaker_miniature_avatar_size">50dp</dimen>
|
<dimen name="voip_conference_active_speaker_miniature_avatar_size">50dp</dimen>
|
||||||
<dimen name="voip_conference_participant_mic_muted_icon_size_grid">30dp</dimen>
|
<dimen name="voip_conference_participant_mic_muted_icon_size_grid">30dp</dimen>
|
||||||
|
<dimen name="voip_conference_participant_joining_icon_size_grid">30dp</dimen>
|
||||||
<dimen name="voip_conference_participant_mic_muted_icon_size_active_speaker">25dp</dimen>
|
<dimen name="voip_conference_participant_mic_muted_icon_size_active_speaker">25dp</dimen>
|
||||||
|
<dimen name="voip_conference_participant_joining_icon_size_active_speaker">35dp</dimen>
|
||||||
<dimen name="voip_dialog_button_max_width">137dp</dimen>
|
<dimen name="voip_dialog_button_max_width">137dp</dimen>
|
||||||
<dimen name="voip_contact_avatar_max_size">180dp</dimen>
|
<dimen name="voip_contact_avatar_max_size">180dp</dimen>
|
||||||
<dimen name="voip_contact_avatar_text_size">80sp</dimen>
|
<dimen name="voip_contact_avatar_text_size">80sp</dimen>
|
||||||
|
|
Loading…
Reference in a new issue