Trying new in-call layout

This commit is contained in:
Sylvain Berfini 2024-01-31 20:27:14 +01:00
parent 72daf9ebd2
commit 784803336c
10 changed files with 117 additions and 124 deletions

View file

@ -94,9 +94,8 @@ class ActiveCallFragment : GenericCallFragment() {
}
}
private val bottomSheetCallback = object : BottomSheetBehavior.BottomSheetCallback() {
private val numpadBottomSheetCallback = object : BottomSheetBehavior.BottomSheetCallback() {
override fun onStateChanged(bottomSheet: View, newState: Int) {
Log.i("$TAG Bottom sheet state is [$newState]")
if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
val numpadBottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
numpadBottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN
@ -106,6 +105,14 @@ class ActiveCallFragment : GenericCallFragment() {
override fun onSlide(bottomSheet: View, slideOffset: Float) { }
}
private val actionsBottomSheetCallback = object : BottomSheetBehavior.BottomSheetCallback() {
override fun onStateChanged(bottomSheet: View, newState: Int) {
callViewModel.extraActionsBottomSheetVisible.value = newState != BottomSheetBehavior.STATE_COLLAPSED
}
override fun onSlide(bottomSheet: View, slideOffset: Float) { }
}
override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
if (findNavController().currentDestination?.id == R.id.newCallFragment || findNavController().currentDestination?.id == R.id.callsListFragment) {
// Holds fragment in place while new fragment slides over it
@ -141,10 +148,15 @@ class ActiveCallFragment : GenericCallFragment() {
val actionsBottomSheetBehavior = BottomSheetBehavior.from(binding.bottomBar.root)
actionsBottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
actionsBottomSheetBehavior.addBottomSheetCallback(actionsBottomSheetCallback)
val numpadBottomSheetBehavior = BottomSheetBehavior.from(binding.callNumpad.root)
numpadBottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN
numpadBottomSheetBehavior.addBottomSheetCallback(bottomSheetCallback)
numpadBottomSheetBehavior.addBottomSheetCallback(numpadBottomSheetCallback)
binding.setBackClickListener {
requireActivity().finish()
}
binding.setNewCallClickListener {
val action = ActiveCallFragmentDirections.actionActiveCallFragmentToNewCallFragment()

View file

@ -39,6 +39,7 @@ import org.linphone.core.Core
import org.linphone.core.CoreListenerStub
import org.linphone.core.MediaDirection
import org.linphone.core.MediaEncryption
import org.linphone.core.StreamType
import org.linphone.core.tools.Log
import org.linphone.ui.call.model.AudioDeviceModel
import org.linphone.ui.call.model.CallMediaEncryptionModel
@ -150,6 +151,8 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
// Extras actions
val extraActionsBottomSheetVisible = MutableLiveData<Boolean>()
val toggleExtraActionsBottomSheetEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
@ -711,8 +714,12 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
}
isMediaEncrypted.postValue(true)
// When Post Quantum is available, ZRTP is Post Quantum
isZrtpPq.postValue(coreContext.core.postQuantumAvailable)
// When Post Quantum is available, ZRTP is Post Quantum if key exchange was made with Post Quantum algorithm
val stats = currentCall.getStats(StreamType.Audio)
isZrtpPq.postValue(
coreContext.core.postQuantumAvailable && stats?.isZrtpKeyAgreementAlgoPostQuantum == true
)
if (!isDeviceTrusted && !authToken.isNullOrEmpty()) {
Log.i("$TAG Showing ZRTP SAS confirmation dialog")

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="256"
android:viewportHeight="256">
<path
android:pathData="M196.12,128c24.65,-34.61 37.22,-70.38 19.74,-87.86S162.61,35.23 128,59.88C93.39,35.23 57.62,22.66 40.14,40.14S35.23,93.39 59.88,128c-24.65,34.61 -37.22,70.38 -19.74,87.86h0c5.63,5.63 13.15,8.14 21.91,8.14 18.48,0 42.48,-11.17 66,-27.88C151.47,212.83 175.47,224 194,224c8.76,0 16.29,-2.52 21.91,-8.14h0C233.34,198.38 220.77,162.61 196.12,128ZM204.55,51.45c7.64,7.64 2.48,32.4 -18.52,63.28a300.33,300.33 0,0 0,-21.19 -23.57A300.33,300.33 0,0 0,141.27 70C172.15,49 196.91,43.8 204.55,51.45ZM176.29,128a289.14,289.14 0,0 1,-22.76 25.53A289.14,289.14 0,0 1,128 176.29a289.14,289.14 0,0 1,-25.53 -22.76A289.14,289.14 0,0 1,79.71 128,298.62 298.62,0 0,1 128,79.71a289.14,289.14 0,0 1,25.53 22.76A289.14,289.14 0,0 1,176.29 128ZM51.45,51.45c2.2,-2.21 5.83,-3.35 10.62,-3.35C73.89,48.1 92.76,55 114.72,70A304,304 0,0 0,91.16 91.16,300.33 300.33,0 0,0 70,114.73C49,83.85 43.81,59.09 51.45,51.45ZM51.45,204.55C43.81,196.91 49,172.15 70,141.27a300.33,300.33 0,0 0,21.19 23.57A304.18,304.18 0,0 0,114.73 186C83.85,207 59.09,212.2 51.45,204.55ZM204.55,204.55c-7.64,7.65 -32.4,2.48 -63.28,-18.52a304.18,304.18 0,0 0,23.57 -21.19A300.33,300.33 0,0 0,186 141.27C207,172.15 212.19,196.91 204.55,204.55ZM140,128a12,12 0,1 1,-12 -12A12,12 0,0 1,140 128Z"
android:fillColor="#4e6074"/>
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="38dp"
android:height="9dp"
android:viewportWidth="38"
android:viewportHeight="9">
<path
android:pathData="M0,6.907C0,6.231 0.442,5.635 1.088,5.439L19,0L36.912,5.439C37.558,5.635 38,6.231 38,6.907C38,7.944 36.993,8.682 36.004,8.37L19,3L1.996,8.37C1.007,8.682 0,7.944 0,6.907Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="256"
android:viewportHeight="256">
<path
android:pathData="M208,80H176V56a48,48 0,0 0,-96 0V80H48A16,16 0,0 0,32 96V208a16,16 0,0 0,16 16H208a16,16 0,0 0,16 -16V96A16,16 0,0 0,208 80ZM96,56a32,32 0,0 1,64 0V80H96ZM208,208H48V96H208V208Z"
android:fillColor="#4e6074"/>
</vector>

View file

@ -11,9 +11,6 @@
<variable
name="callsListClickListener"
type="View.OnClickListener" />
<variable
name="callStatisticsClickListener"
type="View.OnClickListener" />
<variable
name="viewModel"
type="org.linphone.ui.call.viewmodel.CurrentCallViewModel" />
@ -26,6 +23,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/call_all_actions_menu_height"
android:background="@drawable/shape_call_bottom_sheet_background"
android:visibility="@{viewModel.fullScreenMode || viewModel.pipMode ? View.INVISIBLE : View.VISIBLE}"
app:behavior_hideable="false"
app:behavior_peekHeight="@dimen/call_main_actions_menu_height"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
@ -126,28 +124,12 @@
android:background="@drawable/shape_round_in_call_disabled_button_background"
android:padding="@dimen/call_button_icon_padding"
android:src="@drawable/chat_teardrop_text"
android:visibility="gone"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="@id/chat_label"
app:layout_constraintStart_toStartOf="@id/chat_label"
app:layout_constraintTop_toBottomOf="@id/main_actions"
app:tint="@color/gray_500" />
<ImageView
android:id="@+id/stats"
android:onClick="@{callStatisticsClickListener}"
android:layout_width="0dp"
android:layout_height="@dimen/call_button_size"
android:layout_marginTop="@dimen/call_extra_button_top_margin"
android:background="@drawable/in_call_button_background_red"
android:padding="@dimen/call_button_icon_padding"
android:src="@drawable/chart_bar"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toEndOf="@id/stats_label"
app:layout_constraintStart_toStartOf="@id/stats_label"
app:layout_constraintTop_toBottomOf="@id/main_actions"
app:tint="@color/in_call_button_tint_color" />
<ImageView
android:id="@+id/pause_call"
android:onClick="@{() -> viewModel.togglePause()}"
@ -227,7 +209,7 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_show_dialer"
app:layout_constraintEnd_toStartOf="@id/stats_label"
app:layout_constraintEnd_toStartOf="@id/chat_label"
app:layout_constraintStart_toEndOf="@id/calls_list_label"
app:layout_constraintTop_toBottomOf="@id/numpad" />
@ -238,23 +220,10 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_show_messages"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@id/pause_call_label"
app:layout_constraintStart_toEndOf="@id/numpad_label"
app:layout_constraintTop_toBottomOf="@id/chat" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/stats_label"
android:onClick="@{callStatisticsClickListener}"
style="@style/in_call_extra_action_label_style"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_show_statistics"
app:layout_constraintEnd_toStartOf="@id/pause_call_label"
app:layout_constraintStart_toEndOf="@id/numpad_label"
app:layout_constraintTop_toBottomOf="@id/stats" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/in_call_extra_action_label_style"
android:id="@+id/pause_call_label"
@ -265,7 +234,7 @@
android:paddingBottom="15dp"
android:text="@{viewModel.isPaused ? @string/call_action_resume_call : @string/call_action_pause_call, default=@string/call_action_pause_call}"
app:layout_constraintEnd_toStartOf="@id/record_call_label"
app:layout_constraintStart_toEndOf="@id/stats_label"
app:layout_constraintStart_toEndOf="@id/chat_label"
app:layout_constraintTop_toBottomOf="@id/pause_call" />
<androidx.appcompat.widget.AppCompatTextView

View file

@ -11,9 +11,6 @@
<variable
name="callsListClickListener"
type="View.OnClickListener" />
<variable
name="callStatisticsClickListener"
type="View.OnClickListener" />
<variable
name="viewModel"
type="org.linphone.ui.call.viewmodel.CurrentCallViewModel" />
@ -26,6 +23,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/call_all_actions_menu_height"
android:background="@drawable/shape_call_bottom_sheet_background"
android:visibility="@{viewModel.fullScreenMode || viewModel.pipMode ? View.INVISIBLE : View.VISIBLE}"
app:behavior_hideable="false"
app:behavior_peekHeight="@dimen/call_main_actions_menu_height"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
@ -126,28 +124,12 @@
android:padding="@dimen/call_button_icon_padding"
android:src="@drawable/chat_teardrop_text"
android:background="@drawable/shape_round_in_call_disabled_button_background"
android:visibility="gone"
app:tint="?attr/color_grey_500"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintTop_toBottomOf="@id/transfer_label"
app:layout_constraintStart_toStartOf="@id/transfer"
app:layout_constraintEnd_toEndOf="@id/transfer"/>
<ImageView
android:id="@+id/stats"
android:onClick="@{callStatisticsClickListener}"
android:layout_width="0dp"
android:layout_height="@dimen/call_button_size"
android:layout_marginTop="@dimen/call_extra_button_top_margin"
android:padding="@dimen/call_button_icon_padding"
android:src="@drawable/chart_bar"
android:background="@drawable/in_call_button_background_red"
app:tint="@color/in_call_button_tint_color"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintTop_toBottomOf="@id/transfer_label"
app:layout_constraintStart_toStartOf="@id/transfer"
app:layout_constraintEnd_toEndOf="@id/transfer"/>
<ImageView
android:id="@+id/pause_call"
android:onClick="@{() -> viewModel.togglePause()}"
@ -234,22 +216,10 @@
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_show_messages"
android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/chat"
app:layout_constraintStart_toStartOf="@id/transfer_label"
app:layout_constraintEnd_toEndOf="@id/transfer_label" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/in_call_extra_action_label_style"
android:id="@+id/stats_label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingBottom="15dp"
android:text="@string/call_action_show_statistics"
app:layout_constraintTop_toBottomOf="@id/stats"
app:layout_constraintStart_toStartOf="@id/transfer_label"
app:layout_constraintEnd_toEndOf="@id/transfer_label" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/in_call_extra_action_label_style"
android:id="@+id/pause_call_label"

View file

@ -21,7 +21,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="11dp"
android:src="@drawable/shape_drawer_handle"
android:src="@{viewModel.extraActionsBottomSheetVisible ? @drawable/caret_down : @drawable/handle, default=@drawable/handle}"
app:tint="@color/white"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View file

@ -6,6 +6,9 @@
<data>
<import type="android.view.View" />
<import type="org.linphone.core.ChatRoom.SecurityLevel" />
<variable
name="backClickListener"
type="View.OnClickListener" />
<variable
name="newCallClickListener"
type="View.OnClickListener" />
@ -58,7 +61,7 @@
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="@dimen/call_main_actions_menu_margin"
app:layout_constraintTop_toBottomOf="@id/call_direction_label"
app:layout_constraintTop_toBottomOf="@id/media_encryption"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
@ -77,7 +80,7 @@
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toTopOf="@id/background"
app:layout_constraintBottom_toTopOf="@id/name"/>
app:layout_constraintBottom_toTopOf="@id/address"/>
<ImageView
android:id="@+id/trust_badge"
@ -88,30 +91,17 @@
app:layout_constraintStart_toStartOf="@id/avatar"
app:layout_constraintBottom_toBottomOf="@id/avatar"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style_300"
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="@{viewModel.displayedName, default=`John Doe`}"
android:textColor="@color/white"
android:textSize="22sp"
app:layout_constraintTop_toBottomOf="@id/avatar"
app:layout_constraintBottom_toTopOf="@id/address"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="5dp"
android:text="@{viewModel.displayedAddress, default=`sip:johndoe@sip.linphone.org`}"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintTop_toBottomOf="@id/name"
app:layout_constraintTop_toBottomOf="@id/avatar"
app:layout_constraintBottom_toBottomOf="@id/background"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
@ -134,31 +124,30 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{viewModel.fullScreenMode || viewModel.pipMode ? View.INVISIBLE : View.VISIBLE}"
app:constraint_referenced_ids="call_direction_icon, call_direction_label, separator, chronometer" />
app:constraint_referenced_ids="back, name, separator, chronometer" />
<ImageView
android:id="@+id/call_direction_icon"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_marginStart="10dp"
android:id="@+id/back"
android:onClick="@{backClickListener}"
android:layout_width="wrap_content"
android:layout_height="@dimen/top_bar_height"
android:adjustViewBounds="true"
android:src="@{viewModel.isOutgoing ? @drawable/outgoing_call : @drawable/incoming_call, default=@drawable/outgoing_call}"
android:padding="15dp"
android:src="@drawable/caret_left"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/call_direction_label"
app:layout_constraintBottom_toBottomOf="@id/call_direction_label"/>
app:layout_constraintTop_toTopOf="parent"
app:tint="@color/white" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/call_header_style"
android:id="@+id/call_direction_label"
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="@dimen/call_top_bar_text_height"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="@{viewModel.isOutgoing ? @string/call_outgoing : viewModel.incomingCallTitle, default=@string/call_outgoing}"
app:layout_constraintStart_toEndOf="@id/call_direction_icon"
app:layout_constraintTop_toTopOf="@id/hinge_top"
app:layout_constraintBottom_toTopOf="@id/background"/>
android:text="@{viewModel.displayedName, default=`John Doe`}"
app:layout_constraintStart_toEndOf="@id/back"
app:layout_constraintTop_toTopOf="@id/back"
app:layout_constraintBottom_toBottomOf="@id/back"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/call_header_style"
@ -167,8 +156,8 @@
android:layout_height="@dimen/call_top_bar_text_height"
android:layout_marginStart="5dp"
android:text="@string/vertical_separator"
app:layout_constraintStart_toEndOf="@id/call_direction_label"
app:layout_constraintTop_toTopOf="@id/call_direction_label"/>
app:layout_constraintStart_toEndOf="@id/name"
app:layout_constraintTop_toTopOf="@id/name"/>
<Chronometer
style="@style/call_header_style"
@ -179,8 +168,8 @@
android:visibility="@{viewModel.isPaused || viewModel.isPausedByRemote ? View.GONE : View.VISIBLE}"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@id/separator"
app:layout_constraintEnd_toStartOf="@id/media_encryption"
app:layout_constraintTop_toTopOf="@id/call_direction_label"/>
app:layout_constraintEnd_toStartOf="@id/switch_camera"
app:layout_constraintTop_toTopOf="@id/name"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/call_header_style"
@ -193,20 +182,39 @@
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@id/separator"
app:layout_constraintEnd_toStartOf="@id/media_encryption"
app:layout_constraintTop_toTopOf="@id/call_direction_label"/>
app:layout_constraintTop_toTopOf="@id/name"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/media_encryption"
android:onClick="@{() -> viewModel.showMediaEncryptionStatisticsIfPossible()}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="@{viewModel.isZrtpPq ? @string/call_post_quantum_zrtp_end_to_end_encrypted : @string/call_zrtp_end_to_end_encrypted, default=@string/call_post_quantum_zrtp_end_to_end_encrypted}"
android:textSize="12sp"
android:textColor="@color/blue_info_500"
android:maxLines="1"
android:ellipsize="end"
android:drawableStart="@{viewModel.isZrtpPq ? @drawable/atom : @drawable/lock_simple, default=@drawable/atom}"
android:drawablePadding="5dp"
android:drawableTint="@color/blue_info_500"
android:visibility="@{!viewModel.fullScreenMode &amp;&amp; !viewModel.pipMode &amp;&amp; viewModel.isMediaEncrypted ? View.VISIBLE : View.GONE}"
app:layout_constraintStart_toEndOf="@id/back"
app:layout_constraintTop_toBottomOf="@id/name"/>
<ImageView
android:id="@+id/media_encryption"
android:onClick="@{() -> viewModel.showZrtpSasDialogIfPossible()}"
android:onLongClick="@{() -> viewModel.showMediaEncryptionStatisticsIfPossible()}"
android:id="@+id/stats"
android:onClick="@{callStatisticsClickListener}"
android:layout_width="@dimen/call_top_bar_info_height"
android:layout_height="@dimen/call_top_bar_info_height"
android:padding="10dp"
android:src="@{viewModel.isZrtpPq ? @drawable/media_encryption_zrtp_pq : @drawable/media_encryption_srtp, default=@drawable/media_encryption_zrtp_pq}"
android:visibility="@{!viewModel.fullScreenMode &amp;&amp; !viewModel.pipMode &amp;&amp; viewModel.isMediaEncrypted ? View.VISIBLE : View.GONE}"
app:layout_constraintTop_toTopOf="@id/call_direction_label"
app:layout_constraintBottom_toBottomOf="@id/call_direction_label"
app:layout_constraintEnd_toStartOf="@id/switch_camera" />
android:src="@drawable/cell_signal_full"
android:visibility="@{!viewModel.fullScreenMode &amp;&amp; !viewModel.pipMode ? View.VISIBLE : View.GONE}"
app:tint="@color/white"
app:layout_constraintTop_toTopOf="@id/back"
app:layout_constraintBottom_toBottomOf="@id/back"
app:layout_constraintEnd_toEndOf="parent" />
<ImageView
android:onClick="@{() -> viewModel.switchCamera()}"
@ -214,13 +222,13 @@
android:layout_width="@dimen/call_top_bar_info_height"
android:layout_height="@dimen/call_top_bar_info_height"
android:padding="10dp"
android:layout_marginEnd="10dp"
android:layout_marginEnd="5dp"
android:src="@drawable/camera_rotate"
android:visibility="@{!viewModel.fullScreenMode &amp;&amp; !viewModel.pipMode &amp;&amp; viewModel.isVideoEnabled &amp;&amp; viewModel.showSwitchCamera ? View.VISIBLE : View.GONE}"
app:tint="@color/white"
app:layout_constraintTop_toTopOf="@id/call_direction_label"
app:layout_constraintBottom_toBottomOf="@id/call_direction_label"
app:layout_constraintEnd_toEndOf="parent" />
app:layout_constraintTop_toTopOf="@id/back"
app:layout_constraintBottom_toBottomOf="@id/back"
app:layout_constraintEnd_toStartOf="@+id/stats" />
<org.linphone.ui.call.view.RoundCornersTextureView
android:id="@+id/local_preview_video_surface"
@ -252,13 +260,11 @@
<include
android:id="@+id/bottom_bar"
android:visibility="@{viewModel.fullScreenMode || viewModel.pipMode ? View.INVISIBLE : View.VISIBLE}"
layout="@layout/call_actions_bottom_sheet"
bind:viewModel="@{viewModel}"
bind:callsViewModel="@{callsViewModel}"
bind:newCallClickListener="@{newCallClickListener}"
bind:callsListClickListener="@{callsListClickListener}"
bind:callStatisticsClickListener="@{callStatisticsClickListener}"/>
bind:callsListClickListener="@{callsListClickListener}"/>
<include
android:id="@+id/call_numpad"

View file

@ -514,6 +514,8 @@
<string name="call_state_paused_by_remote">Paused by remote</string>
<string name="call_state_resuming">Resuming…</string>
<string name="call_state_ended">Ended</string>
<string name="call_zrtp_end_to_end_encrypted">End-to-end encrypted by ZRTP</string>
<string name="call_post_quantum_zrtp_end_to_end_encrypted">End-to-end encrypted by post-quantum ZRTP</string>
<string name="calls_list_title">Calls list</string>
<string name="call_transfer_title">Transfer call to</string>
<string name="call_remote_is_recording">%s is recording</string>