Added joining indeterminate progress bar/label & paused icon/label on conference participants cells

This commit is contained in:
Sylvain Berfini 2024-02-26 12:19:31 +01:00
parent a707c6c988
commit d7d6767361
6 changed files with 200 additions and 7 deletions

View file

@ -29,7 +29,7 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="5dp"
android:visibility="@{model.isSendingVideo ? View.GONE : View.VISIBLE}"
android:visibility="@{model.isSendingVideo || model.isJoining || !model.isInConference ? View.GONE : View.VISIBLE}"
coilCallAvatar="@{model.avatarModel}"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintWidth_max="@dimen/avatar_in_active_speaker_miniature_conference_call_size"
@ -56,12 +56,67 @@
app:alignTopRight="false"
app:displayMode="hybrid"
participantTextureView="@{model}"
android:visibility="@{model.isSendingVideo ? View.VISIBLE : View.GONE, default=gone}"
android:visibility="@{model.isSendingVideo && model.isInConference ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/joining"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:indeterminate="true"
android:visibility="@{model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:indicatorColor="@color/white"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/joining_label" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/joining_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/conference_participant_joining_text"
android:textColor="@color/white"
android:textSize="11sp"
android:visibility="@{model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintTop_toBottomOf="@id/joining"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/paused"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:contentDescription="@null"
android:src="@drawable/pause"
android:visibility="@{!model.isInConference &amp;&amp; !model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:tint="@color/white"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/paused_label" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/paused_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/conference_participant_paused_text"
android:textColor="@color/white"
android:textSize="11sp"
android:visibility="@{!model.isInConference &amp;&amp; !model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintTop_toBottomOf="@id/paused"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/muted"
android:layout_width="@dimen/small_icon_size"

View file

@ -27,7 +27,7 @@
android:layout_height="0dp"
android:layout_marginTop="5dp"
coilCallAvatar="@{conferenceViewModel.activeSpeaker.avatarModel}"
android:visibility="@{conferenceViewModel.activeSpeaker.isSendingVideo ? View.GONE : View.VISIBLE}"
android:visibility="@{conferenceViewModel.activeSpeaker.isSendingVideo || conferenceViewModel.activeSpeaker.isJoining || !conferenceViewModel.activeSpeaker.isInConference ? View.GONE : View.VISIBLE}"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintWidth_max="@dimen/avatar_in_call_size"
app:layout_constraintHeight_max="@dimen/avatar_in_call_size"
@ -42,12 +42,67 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:onClick="@{() -> viewModel.toggleFullScreen()}"
android:visibility="@{conferenceViewModel.activeSpeaker.isSendingVideo ? View.VISIBLE : View.GONE, default=gone}"
android:visibility="@{conferenceViewModel.activeSpeaker.isSendingVideo &amp;&amp; conferenceViewModel.activeSpeaker.isInConference ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/joining"
android:layout_width="@dimen/big_icon_size"
android:layout_height="@dimen/big_icon_size"
android:indeterminate="true"
android:visibility="@{conferenceViewModel.activeSpeaker.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:indicatorColor="@color/white"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/joining_label" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/joining_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/conference_participant_joining_text"
android:textColor="@color/white"
android:textSize="16sp"
android:visibility="@{conferenceViewModel.activeSpeaker.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintTop_toBottomOf="@id/joining"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/paused"
android:layout_width="@dimen/big_icon_size"
android:layout_height="@dimen/big_icon_size"
android:contentDescription="@null"
android:src="@drawable/pause"
android:visibility="@{!conferenceViewModel.activeSpeaker.isInConference &amp;&amp; !conferenceViewModel.activeSpeaker.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:tint="@color/white"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/paused_label" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/paused_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/conference_participant_paused_text"
android:textColor="@color/white"
android:textSize="16sp"
android:visibility="@{!conferenceViewModel.activeSpeaker.isInConference &amp;&amp; !conferenceViewModel.activeSpeaker.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintTop_toBottomOf="@id/paused"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style_500"
android:id="@+id/active_speaker_name"

View file

@ -60,9 +60,34 @@
android:background="@drawable/shape_circle_white_call_background"
android:visibility="@{model.isMuted ? View.VISIBLE : View.GONE}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="@id/joining"
app:layout_constraintBottom_toBottomOf="parent"/>
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/joining"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_marginEnd="10dp"
android:indeterminate="true"
android:visibility="@{model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:indicatorColor="@color/white"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@id/paused"
app:layout_constraintBottom_toBottomOf="parent" />
<ImageView
android:id="@+id/paused"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_marginEnd="10dp"
android:contentDescription="@null"
android:src="@drawable/pause"
android:visibility="@{!model.isInConference &amp;&amp; !model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:tint="@color/white"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style_500"
android:id="@+id/name"

View file

@ -29,7 +29,7 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="5dp"
android:visibility="@{model.isSendingVideo ? View.GONE : View.VISIBLE}"
android:visibility="@{model.isSendingVideo || model.isJoining || !model.isInConference ? View.GONE : View.VISIBLE}"
coilCallAvatar="@{model.avatarModel}"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintWidth_max="@dimen/avatar_in_call_size"
@ -56,12 +56,67 @@
app:alignTopRight="false"
app:displayMode="hybrid"
participantTextureView="@{model}"
android:visibility="@{model.isSendingVideo ? View.VISIBLE : View.GONE, default=gone}"
android:visibility="@{model.isSendingVideo &amp;&amp; model.isInConference ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/joining"
android:layout_width="@dimen/big_icon_size"
android:layout_height="@dimen/big_icon_size"
android:indeterminate="true"
android:visibility="@{model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:indicatorColor="@color/white"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/joining_label" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/joining_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/conference_participant_joining_text"
android:textColor="@color/white"
android:textSize="16sp"
android:visibility="@{model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintTop_toBottomOf="@id/joining"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/paused"
android:layout_width="@dimen/big_icon_size"
android:layout_height="@dimen/big_icon_size"
android:contentDescription="@null"
android:src="@drawable/pause"
android:visibility="@{!model.isInConference &amp;&amp; !model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:tint="@color/white"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/paused_label" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/paused_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/conference_participant_paused_text"
android:textColor="@color/white"
android:textSize="16sp"
android:visibility="@{!model.isInConference &amp;&amp; !model.isJoining ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintTop_toBottomOf="@id/paused"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/muted"
android:layout_width="@dimen/icon_size"

View file

@ -10,6 +10,7 @@
<dimen name="small_icon_size">14dp</dimen>
<dimen name="icon_size">24dp</dimen>
<dimen name="big_icon_size">48dp</dimen>
<dimen name="welcome_icon_size">100dp</dimen>
<dimen name="avatar_bubble_size">30dp</dimen>

View file

@ -574,6 +574,8 @@
<item quantity="one">%s participant</item>
<item quantity="other">%s participants</item>
</plurals>
<string name="conference_participant_joining_text">Joining…</string>
<string name="conference_participant_paused_text">Paused</string>
<string name="conference_layout_grid">Mosaic</string>
<string name="conference_layout_active_speaker">Speaker</string>