Improved conference pause/resume + hide video surfaces when call or conference is paused

This commit is contained in:
Sylvain Berfini 2024-02-21 10:46:26 +01:00
parent f91252f678
commit e82f42e51a
11 changed files with 54 additions and 19 deletions

View file

@ -60,6 +60,8 @@ class ConferenceModel {
val conferenceLayout = MutableLiveData<Int>()
val isPaused = MutableLiveData<Boolean>()
val isMeParticipantSendingVideo = MutableLiveData<Boolean>()
val showLayoutMenuEvent: MutableLiveData<Event<Boolean>> by lazy {
@ -195,6 +197,7 @@ class ConferenceModel {
isCurrentCallInConference.postValue(true)
conference = conf
conference.addListener(conferenceListener)
isPaused.postValue(conference.isIn)
Log.i(
"$TAG Configuring conference with subject [${conference.subject}] from call [${call.callLog.callId}]"
@ -479,4 +482,19 @@ class ConferenceModel {
participantDevices.postValue(list)
}
@WorkerThread
fun togglePause() {
if (::conference.isInitialized) {
if (conference.isIn) {
Log.i("$TAG Temporary leaving conference")
conference.leave()
isPaused.postValue(true)
} else {
Log.i("$TAG Entering conference again")
conference.enter()
isPaused.postValue(false)
}
}
}
}

View file

@ -589,14 +589,23 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
fun togglePause() {
coreContext.postOnCoreThread {
if (::currentCall.isInitialized) {
when (isCallPaused()) {
true -> {
Log.i("$TAG Resuming call [${currentCall.remoteAddress.asStringUriOnly()}]")
currentCall.resume()
}
false -> {
Log.i("$TAG Pausing call [${currentCall.remoteAddress.asStringUriOnly()}]")
currentCall.pause()
if (currentCall.conference != null) {
conferenceModel.togglePause()
} else {
when (isCallPaused()) {
true -> {
Log.i(
"$TAG Resuming call [${currentCall.remoteAddress.asStringUriOnly()}]"
)
currentCall.resume()
}
false -> {
Log.i(
"$TAG Pausing call [${currentCall.remoteAddress.asStringUriOnly()}]"
)
currentCall.pause()
}
}
}
}

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/gray_500" />
<item android:state_enabled="false" android:color="@color/gray_400" />
<item android:state_pressed="true" android:color="@color/white" />
<item android:color="@color/white"/>
</selector>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<size android:width="55dp" android:height="55dp" />
<solid android:color="@color/white"/>
<solid android:color="@color/gray_600"/>
</shape>

View file

@ -220,6 +220,7 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_show_messages"
android:enabled="false"
app:layout_constraintEnd_toStartOf="@id/pause_call_label"
app:layout_constraintStart_toEndOf="@id/numpad_label"
app:layout_constraintTop_toBottomOf="@id/chat" />

View file

@ -167,6 +167,7 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/conference_action_screen_sharing"
android:enabled="false"
app:layout_constraintTop_toBottomOf="@id/screen_sharing"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/participants_label"/>
@ -214,6 +215,7 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_show_messages"
android:enabled="false"
app:layout_constraintTop_toBottomOf="@id/chat"
app:layout_constraintStart_toEndOf="@id/layout_label"
app:layout_constraintEnd_toStartOf="@id/pause_call_label" />
@ -236,6 +238,7 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_record_call"
android:enabled="false"
app:layout_constraintTop_toBottomOf="@id/record_call"
app:layout_constraintStart_toEndOf="@id/pause_call_label"
app:layout_constraintEnd_toEndOf="parent" />

View file

@ -216,6 +216,7 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_show_messages"
android:enabled="false"
app:layout_constraintTop_toBottomOf="@id/chat"
app:layout_constraintStart_toStartOf="@id/transfer_label"
app:layout_constraintEnd_toEndOf="@id/transfer_label" />

View file

@ -100,7 +100,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:visibility="@{viewModel.isPaused || viewModel.isPausedByRemote ? View.GONE : View.VISIBLE}"
android:visibility="@{conferenceViewModel.isPaused ? View.GONE : View.VISIBLE}"
app:layout_constraintStart_toEndOf="@id/separator"
app:layout_constraintEnd_toStartOf="@id/paused_call_header"
app:layout_constraintTop_toTopOf="@id/conference_subject"/>
@ -111,8 +111,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="@{viewModel.isPaused ? @string/call_state_paused : @string/call_state_paused_by_remote, default=@string/call_state_paused}"
android:visibility="@{viewModel.isPaused || viewModel.isPausedByRemote ? View.VISIBLE : View.GONE, default=gone}"
android:text="@string/call_state_paused"
android:visibility="@{conferenceViewModel.isPaused ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@id/chronometer"
app:layout_constraintEnd_toStartOf="@id/switch_camera"
@ -139,7 +139,7 @@
android:layout_height="@dimen/call_top_bar_info_height"
android:padding="10dp"
android:src="@drawable/pause"
android:visibility="@{!viewModel.fullScreenMode &amp;&amp; !viewModel.pipMode &amp;&amp; (viewModel.isPaused || viewModel.isPausedByRemote) ? View.VISIBLE : View.GONE, default=gone}"
android:visibility="@{!viewModel.fullScreenMode &amp;&amp; !viewModel.pipMode &amp;&amp; conferenceViewModel.isPaused ? View.VISIBLE : View.GONE, default=gone}"
app:tint="@color/main1_500"
app:layout_constraintTop_toTopOf="@id/back"
app:layout_constraintBottom_toBottomOf="@id/back"
@ -152,7 +152,7 @@
android:layout_height="@dimen/call_top_bar_info_height"
android:padding="10dp"
android:src="@{viewModel.qualityIcon, default=@drawable/cell_signal_full}"
android:visibility="@{!viewModel.fullScreenMode &amp;&amp; !viewModel.pipMode &amp;&amp; !(viewModel.isPaused || viewModel.isPausedByRemote) ? View.VISIBLE : View.GONE}"
android:visibility="@{!viewModel.fullScreenMode &amp;&amp; !viewModel.pipMode &amp;&amp; !conferenceViewModel.isPaused ? View.VISIBLE : View.GONE}"
android:tint="@{viewModel.qualityValue >= 2 ? @color/white : viewModel.qualityValue >= 1 ? @color/orange_warning_600 : @color/red_danger_500, default=@color/white}"
app:layout_constraintTop_toTopOf="@id/conference_subject"
app:layout_constraintBottom_toBottomOf="@id/conference_subject"
@ -239,7 +239,7 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="@{viewModel.fullScreenMode || viewModel.pipMode ? @dimen/zero : @dimen/call_main_actions_menu_margin, default=@dimen/call_main_actions_menu_margin}"
android:visibility="@{conferenceViewModel.participantDevices.size() > 1 ? View.VISIBLE : View.GONE}"
android:visibility="@{conferenceViewModel.participantDevices.size() > 1 &amp;&amp; !conferenceViewModel.isPaused ? View.VISIBLE : View.GONE}"
app:navGraph="@navigation/conference_nav_graph"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -113,7 +113,7 @@
android:layout_marginBottom="@{viewModel.fullScreenMode || viewModel.pipMode || viewModel.halfOpenedFolded ? @dimen/zero : @dimen/call_main_actions_menu_margin, default=@dimen/call_main_actions_menu_margin}"
android:layout_marginTop="@{viewModel.fullScreenMode || viewModel.pipMode || viewModel.halfOpenedFolded ? @dimen/zero : @dimen/call_top_bar_info_height, default=@dimen/call_top_bar_info_height}"
android:onClick="@{() -> viewModel.toggleFullScreen()}"
android:visibility="@{viewModel.isVideoEnabled ? View.VISIBLE : View.GONE}"
android:visibility="@{viewModel.isVideoEnabled &amp;&amp; !(viewModel.isPaused || viewModel.isPausedByRemote) ? View.VISIBLE : View.GONE}"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/hinge_bottom"
app:layout_constraintEnd_toEndOf="parent"
@ -270,7 +270,7 @@
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_marginBottom="20dp"
android:visibility="@{viewModel.isVideoEnabled ? View.VISIBLE : View.GONE}"
android:visibility="@{viewModel.isVideoEnabled &amp;&amp; !(viewModel.isPaused || viewModel.isPausedByRemote) ? View.VISIBLE : View.GONE}"
app:alignTopRight="true"
app:displayMode="black_bars"
app:layout_constraintBottom_toBottomOf="@id/remote_video_surface"

View file

@ -166,6 +166,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/conference_action_screen_sharing"
android:enabled="false"
app:layout_constraintTop_toBottomOf="@id/screen_sharing"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/participants_label"/>
@ -210,6 +211,7 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_show_messages"
android:enabled="false"
app:layout_constraintTop_toBottomOf="@id/chat"
app:layout_constraintStart_toStartOf="@id/screen_sharing_label"
app:layout_constraintEnd_toEndOf="@id/screen_sharing_label" />
@ -232,6 +234,7 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_record_call"
android:enabled="false"
app:layout_constraintTop_toBottomOf="@id/record_call"
app:layout_constraintStart_toStartOf="@id/calls_list_label"
app:layout_constraintEnd_toEndOf="@id/calls_list_label" />

View file

@ -148,7 +148,7 @@
<style name="in_call_extra_action_label_style">
<item name="android:fontFamily">@font/noto_sans</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textColor">@color/in_call_label_color</item>
<item name="android:gravity">center</item>
<item name="maxLines">1</item>
<item name="android:ellipsize">end</item>