Added layout selector on conference waiting room fragment

This commit is contained in:
Sylvain Berfini 2022-02-23 13:20:53 +01:00
parent 492a23b61e
commit 8bcb0278ee
20 changed files with 184 additions and 41 deletions

View file

@ -42,6 +42,12 @@ class ConferenceWaitingRoomViewModel : ViewModel() {
val isBluetoothHeadsetSelected = MutableLiveData<Boolean>()
val layoutMenuSelected = MutableLiveData<Boolean>()
val isActiveSpeakerLayoutSelected = MutableLiveData<Boolean>()
val isAudioOnlyLayoutSelected = MutableLiveData<Boolean>()
val isVideoAvailable = MutableLiveData<Boolean>()
val isVideoEnabled = MutableLiveData<Boolean>()
@ -95,6 +101,11 @@ class ConferenceWaitingRoomViewModel : ViewModel() {
Log.i("[Conference Waiting Room] Microphone will be ${if (callParams.isMicEnabled) "enabled" else "muted"}")
updateMicState()
layoutMenuSelected.value = false
isActiveSpeakerLayoutSelected.value = false
isAudioOnlyLayoutSelected.value = false
updateLayout()
isVideoAvailable.value = core.isVideoCaptureEnabled || core.isVideoPreviewEnabled
callParams.isVideoEnabled = isVideoAvailable.value == true
callParams.videoDirection = if (core.videoActivationPolicy.automaticallyInitiate) MediaDirection.SendRecv else MediaDirection.RecvOnly
@ -188,6 +199,31 @@ class ConferenceWaitingRoomViewModel : ViewModel() {
updateAudioRouteState()
}
fun toggleLayoutMenu() {
layoutMenuSelected.value = layoutMenuSelected.value != true
}
fun setMosaicLayout() {
Log.i("[Conference Waiting Room] Set default layout to Mosaic")
coreContext.core.defaultConferenceLayout = ConferenceLayout.Grid
updateLayout()
layoutMenuSelected.value = false
}
fun setActiveSpeakerLayout() {
Log.i("[Conference Waiting Room] Set default layout to ActiveSpeaker")
coreContext.core.defaultConferenceLayout = ConferenceLayout.ActiveSpeaker
updateLayout()
layoutMenuSelected.value = false
}
fun setAudioOnlyLayout() {
Log.i("[Conference Waiting Room] Set default layout to AudioOnly")
coreContext.core.defaultConferenceLayout = ConferenceLayout.Legacy // TODO: FIXME: Replace Legacy by AudioOnly
updateLayout()
layoutMenuSelected.value = false
}
fun toggleVideo() {
if (!PermissionHelper.get().hasCameraPermission()) {
askPermissionEvent.value = Event(Manifest.permission.CAMERA)
@ -247,6 +283,12 @@ class ConferenceWaitingRoomViewModel : ViewModel() {
isBluetoothHeadsetSelected.value = outputDeviceType == AudioDevice.Type.Bluetooth
}
private fun updateLayout() {
val layout = coreContext.core.defaultConferenceLayout
isActiveSpeakerLayoutSelected.value = layout == ConferenceLayout.ActiveSpeaker
isAudioOnlyLayoutSelected.value = layout == ConferenceLayout.Legacy // TODO: FIXME: Replace Legacy by AudioOnly
}
private fun updateVideoState() {
isVideoEnabled.value = callParams.videoDirection == MediaDirection.SendRecv
isSwitchCameraAvailable.value = callParams.isVideoEnabled && coreContext.showSwitchCameraButton()

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@color/voip_light_gray" />
<item android:state_pressed="true" android:color="@color/voip_dark_gray" />
<item android:state_enabled="false" android:color="?attr/voipFormFieldBackgroundColor" />
<item android:state_pressed="true" android:color="?attr/voipTextColor2" />
<item android:color="@color/white_color"/>
</selector>

View file

@ -1,7 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_call_add"
android:tint="?attr/voipDrawablePressedColor"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_call_add"
android:tint="?attr/voipDrawableDisabledColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_call_add"
android:tint="@color/white_color"/>
android:tint="?attr/voipDrawableColor2"/>
</item>
</selector>

View file

@ -2,14 +2,14 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_call_chat"
android:tint="@color/voip_dark_gray"/>
android:tint="?attr/voipDrawablePressedColor"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_call_chat"
android:tint="@color/voip_light_gray"/>
android:tint="?attr/voipDrawableDisabledColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_call_chat"
android:tint="@color/white_color"/>
android:tint="?attr/voipDrawableColor2"/>
</item>
</selector>

View file

@ -1,7 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_call_forward"
android:tint="?attr/voipDrawablePressedColor"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_call_forward"
android:tint="?attr/voipDrawableDisabledColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_call_forward"
android:tint="@color/white_color"/>
android:tint="?attr/voipDrawableColor2"/>
</item>
</selector>

View file

@ -2,11 +2,11 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_call_numpad"
android:tint="@color/voip_dark_gray"/>
android:tint="?attr/voipTextColor2"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_call_numpad"
android:tint="@color/voip_light_gray"/>
android:tint="?attr/voipFormFieldBackgroundColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_call_numpad"

View file

@ -2,14 +2,14 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_call_participants"
android:tint="@color/voip_dark_gray"/>
android:tint="?attr/voipDrawablePressedColor"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_call_participants"
android:tint="@color/voip_light_gray"/>
android:tint="?attr/voipDrawableDisabledColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_call_participants"
android:tint="@color/white_color"/>
android:tint="?attr/voipDrawableColor2"/>
</item>
</selector>

View file

@ -2,14 +2,14 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_call_stats"
android:tint="@color/voip_dark_gray"/>
android:tint="?attr/voipDrawablePressedColor"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_call_stats"
android:tint="@color/voip_light_gray"/>
android:tint="?attr/voipDrawableDisabledColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_call_stats"
android:tint="@color/white_color"/>
android:tint="?attr/voipDrawableColor2"/>
</item>
</selector>

View file

@ -2,14 +2,14 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_calls_list"
android:tint="@color/voip_dark_gray"/>
android:tint="?attr/voipDrawablePressedColor"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_calls_list"
android:tint="@color/voip_light_gray"/>
android:tint="?attr/voipDrawableDisabledColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_calls_list"
android:tint="@color/white_color"/>
android:tint="?attr/voipDrawableColor2"/>
</item>
</selector>

View file

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_conference_mosaic"
android:tint="@color/voip_dark_gray"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_conference_mosaic"
android:tint="@color/voip_light_gray"/>
</item>
<item>
<bitmap android:src="@drawable/voip_conference_mosaic"
android:tint="@color/white_color"/>
</item>
</selector>

View file

@ -1,7 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_conference_active_speaker"
android:tint="?attr/voipDrawablePressedColor"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_conference_active_speaker"
android:tint="?attr/voipDrawableDisabledColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_conference_active_speaker"
android:tint="?attr/voipDrawableColor"/>
android:tint="?attr/voipDrawableColor2"/>
</item>
</selector>

View file

@ -1,7 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_conference_audio_only"
android:tint="?attr/voipDrawablePressedColor"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_conference_audio_only"
android:tint="?attr/voipDrawableDisabledColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_conference_audio_only"
android:tint="?attr/voipDrawableColor"/>
android:tint="?attr/voipDrawableColor2"/>
</item>
</selector>

View file

@ -1,7 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/voip_conference_mosaic"
android:tint="?attr/voipTextColor2"/>
</item>
<item android:state_enabled="false">
<bitmap android:src="@drawable/voip_conference_mosaic"
android:tint="?attr/voipFormFieldBackgroundColor"/>
</item>
<item>
<bitmap android:src="@drawable/voip_conference_mosaic"
android:tint="?attr/voipDrawableColor"/>
android:tint="?attr/voipDrawableColor2"/>
</item>
</selector>

View file

@ -119,7 +119,7 @@
android:layout_above="@id/buttons"
android:background="@drawable/shape_audio_routes_background"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:layout_marginBottom="10dp"
android:orientation="vertical">
<ImageView
@ -154,6 +154,55 @@
</LinearLayout>
<LinearLayout
android:visibility="@{viewModel.layoutMenuSelected ? View.VISIBLE : View.GONE, default=gone}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/buttons"
android:background="@drawable/shape_audio_routes_background"
android:layout_alignParentEnd="true"
android:layout_marginBottom="10dp"
android:layout_marginEnd="15dp"
android:orientation="vertical">
<ImageView
android:selected="@{!viewModel.isActiveSpeakerLayoutSelected &amp;&amp; !viewModel.isAudioOnlyLayoutSelected}"
android:onClick="@{() -> viewModel.setMosaicLayout()}"
android:contentDescription="@string/conference_display_mode_mosaic"
android:layout_width="@dimen/voip_call_button_size"
android:layout_height="@dimen/voip_call_button_size"
android:background="@drawable/button_toggle_background_reverse"
android:layout_margin="5dp"
android:padding="5dp"
android:src="@drawable/icon_conference_layout_grid"
app:tint="@color/white_color" />
<ImageView
android:selected="@{viewModel.isActiveSpeakerLayoutSelected}"
android:onClick="@{() -> viewModel.setActiveSpeakerLayout()}"
android:contentDescription="@string/conference_display_mode_active_speaker"
android:layout_width="@dimen/voip_call_button_size"
android:layout_height="@dimen/voip_call_button_size"
android:background="@drawable/button_toggle_background_reverse"
android:layout_margin="5dp"
android:padding="5dp"
android:src="@drawable/icon_conference_layout_active_speaker"
app:tint="@color/white_color"/>
<ImageView
android:selected="@{viewModel.isAudioOnlyLayoutSelected}"
android:onClick="@{() -> viewModel.setAudioOnlyLayout()}"
android:contentDescription="@string/conference_display_mode_audio_only"
android:layout_width="@dimen/voip_call_button_size"
android:layout_height="@dimen/voip_call_button_size"
android:background="@drawable/button_toggle_background_reverse"
android:layout_margin="5dp"
android:padding="5dp"
android:src="@drawable/icon_conference_layout_audio_only"
app:tint="@color/white_color" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
@ -222,6 +271,20 @@
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintStart_toEndOf="@id/speaker" />
<ImageView
android:onClick="@{() -> viewModel.toggleLayoutMenu()}"
android:selected="@{viewModel.layoutMenuSelected}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:background="@drawable/button_toggle_background_reverse"
android:src="@{viewModel.isActiveSpeakerLayoutSelected ? @drawable/icon_conference_layout_active_speaker : viewModel.isAudioOnlyLayoutSelected ? @drawable/icon_conference_layout_audio_only : @drawable/icon_conference_layout_grid, default=@drawable/icon_conference_layout_grid}"
android:padding="10dp"
android:layout_marginEnd="20dp"
android:contentDescription="@string/content_description_toggle_layout_menu"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>

View file

@ -136,7 +136,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="20dp"
app:drawableTopCompat="@drawable/icon_conf_layout"
android:drawableTop="@{conferenceViewModel.conferenceActiveSpeakerDisplayMode ? @drawable/icon_conference_layout_active_speaker : conferenceViewModel.conferenceAudioOnlyDisplayMode ? @drawable/icon_conference_layout_audio_only : @drawable/icon_conference_layout_grid, default=@drawable/icon_conference_layout_grid}"
android:gravity="center"
style="@style/call_options_font"
android:text="@string/call_action_change_conf_layout"/>

View file

@ -68,7 +68,8 @@
android:text="@string/conference_display_mode_mosaic"
android:enabled="@{conferenceViewModel.conferenceParticipantDevices.size() > conferenceViewModel.maxParticipantsForMosaicLayout ? false : true}"
android:checked="@={conferenceViewModel.conferenceMosaicDisplayMode}"
android:drawableEnd="@drawable/icon_conference_layout_grid"/>
android:drawableEnd="@drawable/icon_conference_layout_grid"
android:drawableTint="?attr/voipDrawableColor"/>
<View
android:layout_width="match_parent"
@ -85,7 +86,8 @@
android:text="@string/conference_display_mode_active_speaker"
android:enabled="@{conferenceViewModel.conferenceParticipantDevices.size() > conferenceViewModel.maxParticipantsForMosaicLayout ? false : true}"
android:checked="@={conferenceViewModel.conferenceActiveSpeakerDisplayMode}"
android:drawableEnd="@drawable/icon_conference_layout_active_speaker"/>
android:drawableEnd="@drawable/icon_conference_layout_active_speaker"
android:drawableTint="?attr/voipDrawableColor"/>
<View
android:layout_width="match_parent"
@ -101,7 +103,8 @@
android:layout_marginBottom="10dp"
android:text="@string/conference_display_mode_audio_only"
android:checked="@={conferenceViewModel.conferenceAudioOnlyDisplayMode}"
android:drawableEnd="@drawable/icon_conference_layout_audio_only"/>
android:drawableEnd="@drawable/icon_conference_layout_audio_only"
android:drawableTint="?attr/voipDrawableColor"/>
<View
android:layout_width="match_parent"

View file

@ -52,6 +52,9 @@
<item name="voipExtraButtonsBackgroundColor">@color/voip_dark_color3</item>
<item name="voipToolbarBackgroundColor">@color/voip_dark_color4</item>
<item name="voipDrawableColor">@color/white_color</item>
<item name="voipDrawableColor2">@color/white_color</item>
<item name="voipDrawablePressedColor">@color/voip_text_dark_color</item>
<item name="voipDrawableDisabledColor">@color/voip_dark_color4</item>
<item name="voipTextColor">@color/white_color</item>
<item name="voipTextColor2">@color/voip_text_dark_color</item>
<item name="voipFormBackgroundColor">@color/voip_dark_color4</item>

View file

@ -37,6 +37,9 @@
<attr name="voipExtraButtonsBackgroundColor" format="color" />
<attr name="voipToolbarBackgroundColor" format="color" />
<attr name="voipDrawableColor" format="color" />
<attr name="voipDrawableColor2" format="color" />
<attr name="voipDrawablePressedColor" format="color" />
<attr name="voipDrawableDisabledColor" format="color" />
<attr name="voipTextColor" format="color" />
<attr name="voipTextColor2" format="color" />
<attr name="voipFormBackgroundColor" format="color" />

View file

@ -807,4 +807,5 @@
<string name="content_description_hide_numpad">Hide numpad</string>
<string name="content_description_go_to_chat_rooms_list">Go to conversations list</string>
<string name="content_description_conference_participant_mic_muted">Participant has it\'s microphone muted</string>
<string name="content_description_toggle_layout_menu">Show or hide conference layout menu</string>
</resources>

View file

@ -58,6 +58,9 @@
<item name="voipExtraButtonsBackgroundColor">@color/voip_gray</item>
<item name="voipToolbarBackgroundColor">@color/toolbar_color</item>
<item name="voipDrawableColor">@color/voip_dark_gray</item>
<item name="voipDrawableColor2">@color/white_color</item>
<item name="voipDrawablePressedColor">@color/voip_dark_gray</item>
<item name="voipDrawableDisabledColor">@color/light_grey_color</item>
<item name="voipTextColor">@color/voip_dark_gray</item>
<item name="voipTextColor2">@color/voip_dark_gray</item>
<item name="voipFormBackgroundColor">@color/form_field_gray_background</item>