Attended transfer

This commit is contained in:
Sylvain Berfini 2023-10-02 11:56:18 +02:00
parent d0f052177e
commit 1d0abc4cb9
5 changed files with 44 additions and 19 deletions

View file

@ -135,11 +135,6 @@ class ActiveCallFragment : GenericCallFragment() {
findNavController().navigate(action)
}
binding.setTransferClickListener {
val action = ActiveCallFragmentDirections.actionActiveCallFragmentToTransferCallFragment()
findNavController().navigate(action)
}
binding.setCallsListClickListener {
val action = ActiveCallFragmentDirections.actionActiveCallFragmentToCallsListFragment()
findNavController().navigate(action)
@ -153,6 +148,13 @@ class ActiveCallFragment : GenericCallFragment() {
updateHingeRelatedConstraints(feature)
}
callViewModel.goToInitiateBlindTransferEvent.observe(viewLifecycleOwner) {
it.consume {
val action = ActiveCallFragmentDirections.actionActiveCallFragmentToTransferCallFragment()
findNavController().navigate(action)
}
}
callViewModel.fullScreenMode.observe(viewLifecycleOwner) { hide ->
Log.i("$TAG Switching full screen mode to ${if (hide) "ON" else "OFF"}")
sharedViewModel.toggleFullScreenEvent.value = Event(hide)

View file

@ -102,6 +102,10 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
MutableLiveData<String>()
}
val goToInitiateBlindTransferEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
val goTEndedCallEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
@ -595,6 +599,35 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
showNumpadBottomSheetEvent.value = Event(true)
}
@UiThread
fun transferClicked() {
coreContext.postOnCoreThread { core ->
if (core.callsNb == 1) {
Log.i("$TAG Only one call, initiate blind call transfer")
goToInitiateBlindTransferEvent.postValue(Event(true))
} else {
val callToTransferTo = core.calls.findLast {
it.state == Call.State.Paused && it != currentCall
}
if (callToTransferTo == null) {
Log.e(
"$TAG Couldn't find a call in Paused state to transfer current call to"
)
return@postOnCoreThread
}
Log.i(
"$TAG Doing an attended transfer between currently displayed call [${currentCall.remoteAddress.asStringUriOnly()}] and paused call [${callToTransferTo.remoteAddress.asStringUriOnly()}]"
)
if (callToTransferTo.transferToAnother(currentCall) != 0) {
Log.e("$TAG Failed to make attended transfer!")
} else {
Log.i("$TAG Attended transfer is successful")
}
}
}
}
@WorkerThread
fun blindTransferCallTo(to: Address) {
if (::currentCall.isInitialized) {

View file

@ -5,9 +5,6 @@
<data>
<import type="android.view.View" />
<variable
name="transferClickListener"
type="View.OnClickListener" />
<variable
name="newCallClickListener"
type="View.OnClickListener" />
@ -45,7 +42,7 @@
<ImageView
android:id="@+id/transfer"
android:onClick="@{transferClickListener}"
android:onClick="@{() -> viewModel.transferClicked()}"
android:layout_width="0dp"
android:layout_height="@dimen/call_button_size"
android:layout_marginTop="@dimen/call_extra_button_top_margin"
@ -171,7 +168,7 @@
<androidx.appcompat.widget.AppCompatTextView
style="@style/in_call_extra_action_label_style"
android:id="@+id/transfer_label"
android:onClick="@{transferClickListener}"
android:onClick="@{() -> viewModel.transferClicked()}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingBottom="15dp"

View file

@ -6,9 +6,6 @@
<data>
<import type="android.view.View" />
<import type="org.linphone.core.ChatRoom.SecurityLevel" />
<variable
name="transferClickListener"
type="View.OnClickListener" />
<variable
name="newCallClickListener"
type="View.OnClickListener" />
@ -267,7 +264,6 @@
layout="@layout/call_extra_actions"
bind:viewModel="@{viewModel}"
bind:callsViewModel="@{callsViewModel}"
bind:transferClickListener="@{transferClickListener}"
bind:newCallClickListener="@{newCallClickListener}"
bind:callsListClickListener="@{callsListClickListener}"/>

View file

@ -5,9 +5,6 @@
<data>
<import type="android.view.View" />
<variable
name="transferClickListener"
type="View.OnClickListener" />
<variable
name="newCallClickListener"
type="View.OnClickListener" />
@ -45,7 +42,7 @@
<ImageView
android:id="@+id/transfer"
android:onClick="@{transferClickListener}"
android:onClick="@{() -> viewModel.transferClicked()}"
android:layout_width="0dp"
android:layout_height="@dimen/call_button_size"
android:layout_marginTop="@dimen/call_extra_button_top_margin"
@ -171,7 +168,7 @@
<androidx.appcompat.widget.AppCompatTextView
style="@style/in_call_extra_action_label_style"
android:id="@+id/transfer_label"
android:onClick="@{transferClickListener}"
android:onClick="@{() -> viewModel.transferClicked()}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/call_action_transfer"