mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-21 13:48:11 +00:00
Improved conference pause/resume + hide video surfaces when call or conference is paused
This commit is contained in:
parent
f91252f678
commit
e82f42e51a
11 changed files with 54 additions and 19 deletions
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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 && !viewModel.pipMode && (viewModel.isPaused || viewModel.isPausedByRemote) ? View.VISIBLE : View.GONE, default=gone}"
|
||||
android:visibility="@{!viewModel.fullScreenMode && !viewModel.pipMode && 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 && !viewModel.pipMode && !(viewModel.isPaused || viewModel.isPausedByRemote) ? View.VISIBLE : View.GONE}"
|
||||
android:visibility="@{!viewModel.fullScreenMode && !viewModel.pipMode && !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 && !conferenceViewModel.isPaused ? View.VISIBLE : View.GONE}"
|
||||
app:navGraph="@navigation/conference_nav_graph"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
|
|
|||
|
|
@ -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 && !(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 && !(viewModel.isPaused || viewModel.isPausedByRemote) ? View.VISIBLE : View.GONE}"
|
||||
app:alignTopRight="true"
|
||||
app:displayMode="black_bars"
|
||||
app:layout_constraintBottom_toBottomOf="@id/remote_video_surface"
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue