Reworked layouts to use ConstraintLayout properly

This commit is contained in:
Sylvain Berfini 2022-03-10 13:37:16 +01:00
parent 6044ed07f8
commit 6559cc24ec
15 changed files with 941 additions and 893 deletions

View file

@ -18,136 +18,117 @@
<ImageView
android:id="@+id/hangup"
android:onClick="@{() -> controlsViewModel.hangUp()}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@drawable/button_call_terminate_background"
android:src="@drawable/icon_call_hangup"
android:padding="5dp"
android:contentDescription="@string/content_description_terminate_call"
android:onClick="@{() -> controlsViewModel.hangUp()}"
android:padding="5dp"
android:src="@drawable/icon_call_hangup"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1.26:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
app:layout_constraintStart_toStartOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/hangup"
app:layout_constraintEnd_toStartOf="@id/more">
<ImageView
android:onClick="@{() -> controlsViewModel.toggleMuteMicrophone()}"
android:selected="@{controlsViewModel.isMicrophoneMuted}"
android:enabled="@{controlsViewModel.isMuteMicrophoneEnabled}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:background="@drawable/button_background_reverse"
android:src="@drawable/icon_toggle_mic"
android:padding="5dp"
android:layout_marginEnd="5dp"
android:contentDescription="@{controlsViewModel.isMicrophoneMuted ? @string/content_description_disable_mic_mute : @string/content_description_enable_mic_mute}"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/speaker"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/speaker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<ImageView
android:onClick="@{() -> controlsViewModel.toggleSpeaker()}"
android:selected="@{controlsViewModel.isSpeakerSelected}"
android:visibility="@{controlsViewModel.audioRoutesEnabled ? View.GONE : View.VISIBLE}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:background="@drawable/button_background_reverse"
android:src="@drawable/icon_toggle_speaker"
android:padding="5dp"
android:contentDescription="@{controlsViewModel.isSpeakerSelected ? @string/content_description_disable_speaker : @string/content_description_enable_speaker}"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:onClick="@{() -> controlsViewModel.toggleRoutesMenu()}"
android:selected="@{controlsViewModel.audioRoutesSelected}"
android:visibility="@{controlsViewModel.audioRoutesEnabled ? View.VISIBLE : View.GONE, default=gone}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:background="@drawable/button_toggle_background_reverse"
android:src="@drawable/icon_audio_routes"
android:padding="5dp"
android:contentDescription="@string/content_description_toggle_audio_menu"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:id="@+id/video"
android:onClick="@{() -> controlsViewModel.toggleVideo()}"
android:selected="@{controlsViewModel.isVideoEnabled &amp;&amp; controlsViewModel.isVideoSendReceive}"
android:enabled="@{controlsViewModel.isVideoAvailable &amp;&amp; !controlsViewModel.isVideoUpdateInProgress}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:background="@drawable/button_background_reverse"
android:src="@drawable/icon_toggle_camera"
android:padding="5dp"
android:layout_marginStart="5dp"
android:contentDescription="@{controlsViewModel.isVideoEnabled &amp;&amp; controlsViewModel.isVideoSendReceive ? @string/content_description_disable_video : @string/content_description_enable_video}"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/speaker"/>
<ProgressBar
android:visibility="@{controlsViewModel.isVideoUpdateInProgress ? View.VISIBLE : View.GONE, default=gone}"
style="?android:attr/progressBarStyle"
android:layout_height="match_parent"
android:layout_width="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/video"
app:layout_constraintEnd_toEndOf="@id/video" />
</androidx.constraintlayout.widget.ConstraintLayout>
<RelativeLayout
android:id="@+id/more"
android:onClick="@{() -> controlsViewModel.showExtraButtons()}"
<ImageView
android:id="@+id/microphone"
android:layout_width="0dp"
android:layout_height="match_parent"
app:layout_constraintDimensionRatio="W,1:1"
android:layout_marginEnd="5dp"
android:background="@drawable/button_background_reverse"
android:contentDescription="@{controlsViewModel.isMicrophoneMuted ? @string/content_description_disable_mic_mute : @string/content_description_enable_mic_mute}"
android:enabled="@{controlsViewModel.isMuteMicrophoneEnabled}"
android:onClick="@{() -> controlsViewModel.toggleMuteMicrophone()}"
android:padding="5dp"
android:selected="@{controlsViewModel.isMicrophoneMuted}"
android:src="@drawable/icon_toggle_mic"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent">
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toStartOf="@id/speaker"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@id/hangup" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_background"
android:padding="5dp"
android:src="@drawable/icon_call_more"
android:contentDescription="@string/content_description_call_context_menu"/>
<ImageView
android:id="@+id/speaker"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@drawable/button_background_reverse"
android:contentDescription="@{controlsViewModel.isSpeakerSelected ? @string/content_description_disable_speaker : @string/content_description_enable_speaker}"
android:onClick="@{() -> controlsViewModel.toggleSpeaker()}"
android:padding="5dp"
android:selected="@{controlsViewModel.isSpeakerSelected}"
android:src="@drawable/icon_toggle_speaker"
android:visibility="@{controlsViewModel.audioRoutesEnabled ? View.GONE : View.VISIBLE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toStartOf="@id/audio_routes"
app:layout_constraintStart_toEndOf="@id/microphone" />
<TextView
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:background="@drawable/unread_message_count_bg"
android:gravity="center"
android:translationY="@{controlsViewModel.bouncyCounterTranslateY}"
android:text="@{String.valueOf(callsViewModel.chatAndCallsCount), default=2}"
android:visibility="@{callsViewModel.chatAndCallsCount == 0 ? View.GONE : View.VISIBLE}" />
<ImageView
android:id="@+id/audio_routes"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@drawable/button_toggle_background_reverse"
android:contentDescription="@string/content_description_toggle_audio_menu"
android:onClick="@{() -> controlsViewModel.toggleRoutesMenu()}"
android:padding="5dp"
android:selected="@{controlsViewModel.audioRoutesSelected}"
android:src="@drawable/icon_audio_routes"
android:visibility="@{controlsViewModel.audioRoutesEnabled ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toStartOf="@id/video"
app:layout_constraintStart_toEndOf="@id/speaker" />
</RelativeLayout>
<ImageView
android:id="@+id/video"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:background="@drawable/button_background_reverse"
android:contentDescription="@{controlsViewModel.isVideoEnabled &amp;&amp; controlsViewModel.isVideoSendReceive ? @string/content_description_disable_video : @string/content_description_enable_video}"
android:enabled="@{controlsViewModel.isVideoAvailable &amp;&amp; !controlsViewModel.isVideoUpdateInProgress}"
android:onClick="@{() -> controlsViewModel.toggleVideo()}"
android:padding="5dp"
android:selected="@{controlsViewModel.isVideoEnabled &amp;&amp; controlsViewModel.isVideoSendReceive}"
android:src="@drawable/icon_toggle_camera"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toStartOf="@id/more"
app:layout_constraintStart_toEndOf="@id/audio_routes" />
<ProgressBar
style="?android:attr/progressBarStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:visibility="@{controlsViewModel.isVideoUpdateInProgress ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/video"
app:layout_constraintStart_toStartOf="@id/video" />
<ImageView
android:id="@+id/more"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_call_context_menu"
android:onClick="@{() -> controlsViewModel.showExtraButtons()}"
android:padding="5dp"
android:src="@drawable/icon_call_more"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/unread_message_count_bg"
android:gravity="center"
android:text="@{String.valueOf(callsViewModel.chatAndCallsCount), default=2}"
android:translationY="@{controlsViewModel.bouncyCounterTranslateY}"
android:visibility="@{callsViewModel.chatAndCallsCount == 0 ? View.GONE : View.VISIBLE}"
app:layout_constraintEnd_toEndOf="@id/more"
app:layout_constraintTop_toTopOf="@id/more"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
@ -15,165 +16,175 @@
type="org.linphone.activities.voip.viewmodels.ConferenceViewModel" />
</data>
<LinearLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/voip_call_extra_buttons_height"
android:gravity="center"
android:layout_marginEnd="15dp"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:background="@drawable/shape_extra_buttons_background"
android:orientation="vertical">
android:gravity="center">
<LinearLayout
android:layout_width="match_parent"
<TextView
android:id="@+id/numpad"
style="@style/call_options_font"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:gravity="center"
android:onClick="@{() -> controlsViewModel.showNumpad()}"
android:text="@string/call_action_numpad"
app:drawableTopCompat="@drawable/icon_call_numpad"
app:layout_constraintBottom_toBottomOf="@id/chat"
app:layout_constraintEnd_toStartOf="@id/call_stats"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/chat"/>
<TextView
android:onClick="@{() -> controlsViewModel.showNumpad()}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
app:drawableTopCompat="@drawable/icon_call_numpad"
android:gravity="center"
style="@style/call_options_font"
android:text="@string/call_action_numpad"/>
<TextView
android:onClick="@{() -> controlsViewModel.showCallStats(false)}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
app:drawableTopCompat="@drawable/icon_call_stats"
android:gravity="center"
style="@style/call_options_font"
android:text="@string/call_action_statistics"/>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:id="@+id/chat"
style="@style/call_options_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:onClick="@{() -> controlsViewModel.goToChat()}"
android:text="@string/call_action_chat"
app:drawableTopCompat="@drawable/icon_call_chat" />
<TextView
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toEndOf="@id/chat"
android:background="@drawable/unread_message_count_bg"
android:gravity="center"
android:translationY="@{controlsViewModel.bouncyCounterTranslateY}"
android:text="@{String.valueOf(callsViewModel.currentCallUnreadChatMessageCount), default=1}"
android:visibility="@{callsViewModel.currentCallUnreadChatMessageCount == 0 ? View.GONE : View.VISIBLE}" />
<ProgressBar
android:visibility="@{controlsViewModel.chatRoomCreationInProgress ? View.VISIBLE : View.GONE, default=gone}"
style="?android:attr/progressBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
<TextView
android:id="@+id/call_stats"
style="@style/call_options_font"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:gravity="center"
android:onClick="@{() -> controlsViewModel.showCallStats(false)}"
android:text="@string/call_action_statistics"
app:drawableTopCompat="@drawable/icon_call_stats"
app:layout_constraintBottom_toBottomOf="@id/chat"
app:layout_constraintEnd_toStartOf="@id/chat"
app:layout_constraintStart_toEndOf="@id/numpad"
app:layout_constraintTop_toTopOf="@id/chat" />
<TextView
android:onClick="@{() -> controlsViewModel.goToDialerForCallTransfer()}"
android:visibility="@{conferenceViewModel.conferenceExists ? View.GONE : View.VISIBLE}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="20dp"
app:drawableTopCompat="@drawable/icon_call_forward"
android:gravity="center"
style="@style/call_options_font"
android:text="@string/call_action_transfer_call"/>
<TextView
android:id="@+id/chat"
style="@style/call_options_font"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:onClick="@{() -> controlsViewModel.goToChat()}"
android:text="@string/call_action_chat"
app:drawableTopCompat="@drawable/icon_call_chat"
app:layout_constraintBottom_toTopOf="@id/calls"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/call_stats"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="spread" />
<TextView
android:onClick="@{() -> controlsViewModel.goToConferenceParticipantsList()}"
android:visibility="@{conferenceViewModel.conferenceExists ? View.VISIBLE : View.GONE, default=gone}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="20dp"
app:drawableTopCompat="@drawable/icon_call_participants"
android:gravity="center"
style="@style/call_options_font"
android:text="@string/call_action_participants_list"/>
<TextView
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="60dp"
android:background="@drawable/unread_message_count_bg"
android:gravity="center"
android:text="@{String.valueOf(callsViewModel.currentCallUnreadChatMessageCount), default=1}"
android:translationY="@{controlsViewModel.bouncyCounterTranslateY}"
android:visibility="@{callsViewModel.currentCallUnreadChatMessageCount == 0 ? View.GONE : View.VISIBLE}"
app:layout_constraintEnd_toEndOf="@id/chat"
app:layout_constraintStart_toStartOf="@id/chat"
app:layout_constraintTop_toTopOf="@id/chat" />
<TextView
android:onClick="@{() -> controlsViewModel.goToDialerForNewCall()}"
android:visibility="@{conferenceViewModel.conferenceExists ? View.GONE : View.VISIBLE}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="20dp"
app:drawableTopCompat="@drawable/icon_call_add"
android:gravity="center"
style="@style/call_options_font"
android:text="@string/call_action_add_call"/>
<ProgressBar
style="?android:attr/progressBarStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:visibility="@{controlsViewModel.chatRoomCreationInProgress ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintBottom_toBottomOf="@id/chat"
app:layout_constraintEnd_toEndOf="@id/chat"
app:layout_constraintStart_toStartOf="@id/chat"
app:layout_constraintTop_toTopOf="@id/chat"/>
<TextView
android:onClick="@{() -> controlsViewModel.goToConferenceLayout()}"
android:visibility="@{conferenceViewModel.conferenceExists ? View.VISIBLE : View.GONE, default=gone}"
android:enabled="@{conferenceViewModel.isVideoConference}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="20dp"
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"/>
<TextView
android:id="@+id/transfer_call"
style="@style/call_options_font"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:onClick="@{() -> controlsViewModel.goToDialerForCallTransfer()}"
android:text="@string/call_action_transfer_call"
android:visibility="@{conferenceViewModel.conferenceExists ? View.GONE : View.VISIBLE, default=gone}"
app:drawableTopCompat="@drawable/icon_call_forward"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/conference_participants"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/numpad"/>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="20dp">
<TextView
android:id="@+id/conference_participants"
style="@style/call_options_font"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:onClick="@{() -> controlsViewModel.goToConferenceParticipantsList()}"
android:text="@string/call_action_participants_list"
android:visibility="@{conferenceViewModel.conferenceExists ? View.VISIBLE : View.GONE}"
app:drawableTopCompat="@drawable/icon_call_participants"
app:layout_constraintBottom_toBottomOf="@id/calls"
app:layout_constraintEnd_toStartOf="@id/add_call"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toEndOf="@id/transfer_call"
app:layout_constraintTop_toTopOf="@id/calls"/>
<TextView
android:id="@+id/calls"
style="@style/call_options_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:onClick="@{() -> controlsViewModel.goToCallsList()}"
android:text="@string/call_action_calls_list"
app:drawableTopCompat="@drawable/icon_calls_list" />
<TextView
android:id="@+id/add_call"
style="@style/call_options_font"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:onClick="@{() -> controlsViewModel.goToDialerForNewCall()}"
android:text="@string/call_action_add_call"
android:visibility="@{conferenceViewModel.conferenceExists ? View.GONE : View.VISIBLE, default=gone}"
app:drawableTopCompat="@drawable/icon_call_add"
app:layout_constraintBottom_toBottomOf="@id/calls"
app:layout_constraintEnd_toStartOf="@id/conference_layout"
app:layout_constraintStart_toEndOf="@id/conference_participants"
app:layout_constraintTop_toTopOf="@id/calls"/>
<TextView
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toEndOf="@id/calls"
android:background="@drawable/unread_message_count_bg"
android:gravity="center"
android:translationY="@{controlsViewModel.bouncyCounterTranslateY}"
android:text="@{String.valueOf(callsViewModel.inactiveCallsCount), default=1}"
android:visibility="@{callsViewModel.inactiveCallsCount == 0 ? View.GONE : View.VISIBLE}" />
<TextView
android:id="@+id/conference_layout"
style="@style/call_options_font"
android:layout_width="0dp"
android:layout_height="wrap_content"
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:enabled="@{conferenceViewModel.isVideoConference}"
android:gravity="center"
android:onClick="@{() -> controlsViewModel.goToConferenceLayout()}"
android:text="@string/call_action_change_conf_layout"
android:visibility="@{conferenceViewModel.conferenceExists ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="@id/calls"
app:layout_constraintEnd_toStartOf="@id/calls"
app:layout_constraintStart_toEndOf="@id/add_call"
app:layout_constraintTop_toTopOf="@id/calls"
tools:ignore="UseCompatTextViewDrawableXml" />
</RelativeLayout>
<TextView
android:id="@+id/calls"
style="@style/call_options_font"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:onClick="@{() -> controlsViewModel.goToCallsList()}"
android:text="@string/call_action_calls_list"
app:drawableTopCompat="@drawable/icon_calls_list"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/conference_layout"
app:layout_constraintTop_toBottomOf="@id/chat" />
</LinearLayout>
<TextView
style="@style/unread_count_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="60dp"
android:background="@drawable/unread_message_count_bg"
android:gravity="center"
android:text="@{String.valueOf(callsViewModel.inactiveCallsCount), default=1}"
android:translationY="@{controlsViewModel.bouncyCounterTranslateY}"
android:visibility="@{callsViewModel.inactiveCallsCount == 0 ? View.GONE : View.VISIBLE}"
app:layout_constraintEnd_toEndOf="@id/calls"
app:layout_constraintStart_toStartOf="@id/calls"
app:layout_constraintTop_toTopOf="@id/calls" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -11,50 +11,38 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/voip_buttons_fragment_size"
android:layout_margin="10dp">
android:layout_height="@dimen/voip_buttons_fragment_size">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
<ImageView
android:id="@+id/hangup"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:background="@drawable/button_call_terminate_background"
android:contentDescription="@string/content_description_terminate_call"
android:onClick="@{() -> viewModel.hangUp()}"
android:padding="5dp"
android:src="@drawable/icon_call_hangup"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
app:layout_constraintDimensionRatio="W,1.26:1"
app:layout_constraintEnd_toStartOf="@id/answer"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/middle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<ImageView
android:onClick="@{() -> viewModel.hangUp()}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:background="@drawable/button_call_terminate_background"
android:src="@drawable/icon_call_hangup"
android:padding="5dp"
android:layout_marginEnd="5dp"
android:contentDescription="@string/content_description_terminate_call"
app:layout_constraintDimensionRatio="W,1.26:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/middle"/>
<ImageView
android:onClick="@{() -> viewModel.answer()}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:background="@drawable/button_call_answer_background"
android:src="@drawable/icon_call_answer"
android:padding="5dp"
android:layout_marginStart="5dp"
android:contentDescription="@string/content_description_answer_call"
app:layout_constraintDimensionRatio="W,1.26:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/middle"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:id="@+id/answer"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:background="@drawable/button_call_answer_background"
android:contentDescription="@string/content_description_answer_call"
android:onClick="@{() -> viewModel.answer()}"
android:padding="5dp"
android:src="@drawable/icon_call_answer"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1.26:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/hangup" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -11,87 +11,68 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/voip_buttons_fragment_size"
android:layout_margin="10dp">
android:layout_height="@dimen/voip_buttons_fragment_size">
<ImageView
android:id="@+id/hangup"
android:onClick="@{() -> controlsViewModel.hangUp()}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@drawable/button_call_terminate_background"
android:src="@drawable/icon_call_hangup"
android:padding="5dp"
android:contentDescription="@string/content_description_terminate_call"
app:layout_constraintDimensionRatio="W,1.26:1"
android:onClick="@{() -> controlsViewModel.hangUp()}"
android:padding="5dp"
android:src="@drawable/icon_call_hangup"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1.26:1"
app:layout_constraintStart_toStartOf="parent"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/hangup"
app:layout_constraintEnd_toStartOf="@id/numpad">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/middle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<ImageView
android:onClick="@{() -> controlsViewModel.toggleMuteMicrophone()}"
android:selected="@{controlsViewModel.isMicrophoneMuted}"
android:enabled="@{controlsViewModel.isMuteMicrophoneEnabled}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:background="@drawable/button_background_reverse"
android:src="@drawable/icon_toggle_mic"
android:padding="5dp"
android:layout_marginEnd="5dp"
android:contentDescription="@{controlsViewModel.isMicrophoneMuted ? @string/content_description_disable_mic_mute : @string/content_description_enable_mic_mute}"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/middle"/>
<ImageView
android:onClick="@{() -> controlsViewModel.toggleSpeaker()}"
android:selected="@{controlsViewModel.isSpeakerSelected}"
android:layout_height="match_parent"
android:layout_width="0dp"
android:background="@drawable/button_background_reverse"
android:src="@drawable/icon_toggle_speaker"
android:padding="5dp"
android:layout_marginStart="5dp"
android:contentDescription="@{controlsViewModel.isSpeakerSelected ? @string/content_description_disable_speaker : @string/content_description_enable_speaker}"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/middle"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<RelativeLayout
android:id="@+id/numpad"
android:visibility="@{controlsViewModel.isOutgoingEarlyMedia ? View.VISIBLE : View.INVISIBLE, default=invisible}"
android:onClick="@{() -> controlsViewModel.showNumpad()}"
<ImageView
android:id="@+id/microphone"
android:layout_width="0dp"
android:layout_height="match_parent"
app:layout_constraintDimensionRatio="W,1:1"
android:layout_marginEnd="5dp"
android:background="@drawable/button_background_reverse"
android:contentDescription="@{controlsViewModel.isMicrophoneMuted ? @string/content_description_disable_mic_mute : @string/content_description_enable_mic_mute}"
android:enabled="@{controlsViewModel.isMuteMicrophoneEnabled}"
android:onClick="@{() -> controlsViewModel.toggleMuteMicrophone()}"
android:padding="5dp"
android:selected="@{controlsViewModel.isMicrophoneMuted}"
android:src="@drawable/icon_toggle_mic"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent">
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toStartOf="@id/speaker"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@id/hangup"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/button_background"
android:padding="10dp"
android:src="@drawable/icon_call_numpad"
android:contentDescription="@string/content_description_show_numpad"/>
<ImageView
android:id="@+id/speaker"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:background="@drawable/button_background_reverse"
android:contentDescription="@{controlsViewModel.isSpeakerSelected ? @string/content_description_disable_speaker : @string/content_description_enable_speaker}"
android:onClick="@{() -> controlsViewModel.toggleSpeaker()}"
android:padding="5dp"
android:selected="@{controlsViewModel.isSpeakerSelected}"
android:src="@drawable/icon_toggle_speaker"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toEndOf="@id/numpad"
app:layout_constraintStart_toEndOf="@id/microphone"/>
</RelativeLayout>
<ImageView
android:id="@+id/numpad"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_show_numpad"
android:onClick="@{() -> controlsViewModel.showNumpad()}"
android:padding="10dp"
android:src="@drawable/icon_call_numpad"
android:visibility="@{controlsViewModel.isOutgoingEarlyMedia ? View.VISIBLE : View.GONE, default=gone}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -12,7 +12,7 @@
type="org.linphone.activities.voip.viewmodels.ControlsViewModel" />
</data>
<RelativeLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/voipBackgroundColor">
@ -22,100 +22,93 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:id="@+id/top_info"
android:layout_width="match_parent"
<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:gravity="center_horizontal"
android:orientation="vertical">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/icon_spinner_rotating"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
style="@style/call_header_title"
android:text="@string/call_incoming_title"/>
<Chronometer
android:id="@+id/incoming_call_timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
style="@style/call_header_title" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/buttons"
android:layout_below="@id/top_info"
android:layout_centerInParent="true"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="10dp"
android:gravity="center"
android:orientation="vertical">
android:indeterminate="true"
android:indeterminateDrawable="@drawable/icon_spinner_rotating"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<include
android:id="@+id/avatar"
layout="@layout/voip_contact_avatar_alt"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:data="@{callsViewModel.currentCallData}" />
<TextView
style="@style/call_header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:maxLines="1"
android:ellipsize="end"
android:text="@{callsViewModel.currentCallData.contact.fullName ?? callsViewModel.currentCallData.displayName, default=`Bilbo Baggins`}" />
<TextView
style="@style/call_header_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:maxLines="1"
android:ellipsize="end"
android:text="@{callsViewModel.currentCallData.address, default=`sip:bilbo.baggins@sip.linphone.org`}" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
<TextView
android:id="@+id/incoming_call_title"
style="@style/call_header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="10dp">
android:layout_marginTop="10dp"
android:text="@string/call_incoming_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/progress" />
<include
layout="@layout/voip_buttons_incoming"
android:layout_width="0dp"
android:layout_height="@dimen/voip_buttons_fragment_size"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintWidth_max="@dimen/voip_buttons_max_width"
app:viewModel="@{controlsViewModel}" />
<Chronometer
android:id="@+id/incoming_call_timer"
style="@style/call_header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/incoming_call_title" />
</androidx.constraintlayout.widget.ConstraintLayout>
<include
android:id="@+id/avatar"
layout="@layout/voip_contact_avatar_alt"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
app:data="@{callsViewModel.currentCallData}"
app:layout_constraintBottom_toTopOf="@id/caller_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_max="@dimen/voip_contact_avatar_max_height"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/incoming_call_timer"
app:layout_constraintVertical_chainStyle="packed" />
</RelativeLayout>
<TextView
android:id="@+id/caller_name"
style="@style/call_header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:ellipsize="end"
android:maxLines="1"
android:text="@{callsViewModel.currentCallData.contact.fullName ?? callsViewModel.currentCallData.displayName, default=`Bilbo Baggins`}"
app:layout_constraintBottom_toTopOf="@id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/avatar" />
<TextView
android:id="@+id/textView"
style="@style/call_header_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:text="@{callsViewModel.currentCallData.address, default=`sip:bilbo.baggins@sip.linphone.org`}"
app:layout_constraintBottom_toTopOf="@id/buttons"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/caller_name" />
<include
android:id="@+id/buttons"
layout="@layout/voip_buttons_incoming"
android:layout_width="0dp"
android:layout_height="@dimen/voip_buttons_fragment_size"
android:layout_margin="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_max="@dimen/voip_buttons_max_width"
app:viewModel="@{controlsViewModel}" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -12,115 +12,108 @@
type="org.linphone.activities.voip.viewmodels.ControlsViewModel" />
</data>
<RelativeLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/voipBackgroundColor">
<LinearLayout
android:id="@+id/top_info"
android:layout_width="match_parent"
<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:gravity="center_horizontal"
android:orientation="vertical">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:indeterminate="true"
android:indeterminateDrawable="@drawable/icon_spinner_rotating"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
style="@style/call_header_title"
android:text="@string/call_outgoing_title"/>
<Chronometer
android:id="@+id/outgoing_call_timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
style="@style/call_header_title" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/buttons"
android:layout_below="@id/top_info"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="10dp"
android:layout_centerInParent="true"
android:gravity="center"
android:orientation="vertical">
android:indeterminate="true"
android:indeterminateDrawable="@drawable/icon_spinner_rotating"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<include
android:id="@+id/avatar"
layout="@layout/voip_contact_avatar_alt"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:data="@{callsViewModel.currentCallData}"
app:isConferenceCall="@{callsViewModel.currentCallData.remoteConferenceSubject.length > 0}" />
<TextView
style="@style/call_header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:maxLines="1"
android:ellipsize="end"
android:text="@{callsViewModel.currentCallData.remoteConferenceSubject ?? callsViewModel.currentCallData.contact.fullName ?? callsViewModel.currentCallData.displayName, default=`Bilbo Baggins`}" />
<TextView
style="@style/call_header_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:maxLines="1"
android:ellipsize="end"
android:text="@{callsViewModel.currentCallData.remoteConferenceSubject.length > 0 ? @string/conference : callsViewModel.currentCallData.address, default=`sip:bilbo.baggins@sip.linphone.org`}" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
<TextView
android:id="@+id/outgoing_call_title"
style="@style/call_header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="10dp">
android:layout_marginTop="10dp"
android:text="@string/call_outgoing_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/progress" />
<include
layout="@layout/voip_buttons_outgoing"
android:layout_width="0dp"
android:layout_height="@dimen/voip_buttons_fragment_size"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintWidth_max="350dp"
app:controlsViewModel="@{controlsViewModel}" />
<Chronometer
android:id="@+id/outgoing_call_timer"
style="@style/call_header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/outgoing_call_title" />
</androidx.constraintlayout.widget.ConstraintLayout>
<include
android:id="@+id/avatar"
layout="@layout/voip_contact_avatar_alt"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
app:data="@{callsViewModel.currentCallData}"
app:isConferenceCall="@{callsViewModel.currentCallData.remoteConferenceSubject.length > 0}"
app:layout_constraintBottom_toTopOf="@id/callee_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_max="@dimen/voip_contact_avatar_max_height"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/outgoing_call_timer"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/callee_name"
style="@style/call_header_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:ellipsize="end"
android:maxLines="1"
android:text="@{callsViewModel.currentCallData.remoteConferenceSubject ?? callsViewModel.currentCallData.contact.fullName ?? callsViewModel.currentCallData.displayName, default=`Bilbo Baggins`}"
app:layout_constraintBottom_toTopOf="@id/callee_address"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/avatar" />
<TextView
android:id="@+id/callee_address"
style="@style/call_header_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:text="@{callsViewModel.currentCallData.remoteConferenceSubject.length > 0 ? @string/conference : callsViewModel.currentCallData.address, default=`sip:bilbo.baggins@sip.linphone.org`}"
app:layout_constraintBottom_toTopOf="@id/buttons"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/callee_name" />
<include
android:id="@+id/buttons"
layout="@layout/voip_buttons_outgoing"
android:layout_width="0dp"
android:layout_height="@dimen/voip_buttons_fragment_size"
android:layout_margin="10dp"
app:controlsViewModel="@{controlsViewModel}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_max="350dp" />
<ViewStub
android:id="@+id/stub_numpad"
android:layout="@layout/voip_numpad"
android:visibility="@{controlsViewModel.numpadVisible ? View.VISIBLE : View.GONE, default=gone}"
app:inflatedVisibility="@{controlsViewModel.numpadVisible ? View.VISIBLE : View.GONE}"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:controlsViewModel="@{controlsViewModel}"/>
android:layout="@layout/voip_numpad"
android:visibility="@{controlsViewModel.numpadVisible ? View.VISIBLE : View.GONE, default=gone}"
app:controlsViewModel="@{controlsViewModel}"
app:inflatedVisibility="@{controlsViewModel.numpadVisible ? View.VISIBLE : View.GONE}" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
@ -11,47 +12,54 @@
type="Integer" />
</data>
<RelativeLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="@{inflatedVisibility}"
android:focusable="true"
android:background="@color/voip_translucent_popup_background"
android:clickable="true"
android:background="@color/voip_translucent_popup_background">
android:focusable="true"
android:visibility="@{inflatedVisibility}">
<LinearLayout
android:layout_width="match_parent"
<ImageView
android:id="@+id/resume_call"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@drawable/shape_orange_circle"
android:contentDescription="@null"
android:onClick="@{() -> data.resume()}"
android:padding="40dp"
android:src="@drawable/voip_conference_play_big"
app:layout_constraintBottom_toTopOf="@id/paused_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/paused_title"
style="@style/conference_paused_title_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginTop="20dp"
android:gravity="center"
android:orientation="vertical">
android:text="@string/call_locally_paused_title"
app:layout_constraintBottom_toTopOf="@id/paused_subtitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/resume_call" />
<ImageView
android:onClick="@{() -> data.resume()}"
android:layout_width="200dp"
android:layout_height="200dp"
android:padding="40dp"
android:background="@drawable/shape_orange_circle"
android:src="@drawable/voip_conference_play_big"
android:contentDescription="@null"/>
<TextView
android:id="@+id/paused_subtitle"
style="@style/conference_paused_subtitle_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/call_locally_paused_subtitle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/paused_title" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
style="@style/conference_paused_title_font"
android:text="@string/call_locally_paused_title"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
style="@style/conference_paused_subtitle_font"
android:text="@string/call_locally_paused_subtitle"/>
</LinearLayout>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
@ -8,34 +9,41 @@
type="Integer" />
</data>
<RelativeLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="@{inflatedVisibility}"
android:focusable="true"
android:background="@color/voip_translucent_popup_background"
android:clickable="true"
android:background="@color/voip_translucent_popup_background">
android:focusable="true"
android:visibility="@{inflatedVisibility}">
<ImageView
android:id="@+id/paused_icon"
android:id="@+id/paused_call"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_centerInParent="true"
android:background="@drawable/shape_orange_circle"
android:contentDescription="@null"
android:padding="40dp"
android:src="@drawable/voip_conference_paused_big" />
android:src="@drawable/voip_conference_paused_big"
app:layout_constraintBottom_toTopOf="@id/paused_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/paused_title"
style="@style/conference_paused_title_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/paused_icon"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:gravity="center"
android:text="@string/call_remotely_paused_title" />
android:text="@string/call_remotely_paused_title"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/paused_call" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -18,49 +18,52 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/voip_translucent_popup_background"
android:clickable="true"
android:visibility="@{inflatedVisibility}"
android:background="@color/voip_translucent_popup_background">
android:visibility="@{inflatedVisibility}">
<RelativeLayout
<View
android:id="@+id/background"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginTop="80dp"
android:layout_marginBottom="70dp"
android:layout_marginStart="10dp"
android:layout_marginTop="80dp"
android:layout_marginEnd="10dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginBottom="70dp"
android:background="@drawable/shape_call_popup_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintWidth_max="@dimen/voip_views_max_width"
android:background="@drawable/shape_call_popup_background">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_max="@dimen/voip_views_max_width" />
<ImageView
android:id="@+id/hide_stats"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_margin="10dp"
android:onClick="@{() -> controlsViewModel.hideCallStats()}"
android:src="@drawable/icon_cancel_alt"
android:contentDescription="@string/content_description_hide_statistics"/>
<ImageView
android:id="@+id/hide_stats"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="10dp"
android:contentDescription="@string/content_description_hide_statistics"
android:onClick="@{() -> controlsViewModel.hideCallStats()}"
android:src="@drawable/icon_cancel_alt"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintTop_toTopOf="@id/background" />
<androidx.core.widget.NestedScrollView
<androidx.core.widget.NestedScrollView
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_below="@id/hide_stats"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toBottomOf="@id/hide_stats"
app:layout_constraintBottom_toBottomOf="@id/background"
android:layout_marginBottom="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/hide_stats"
android:layout_marginBottom="10dp">
android:layout_height="wrap_content"
android:orientation="vertical"
app:entries="@{statsViewModel.callStatsList}"
app:layout="@{@layout/voip_call_stats_cell}" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:entries="@{statsViewModel.callStatsList}"
app:layout="@{@layout/voip_call_stats_cell}" />
</androidx.core.widget.NestedScrollView>
</RelativeLayout>
</androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
@ -11,47 +12,54 @@
type="Integer" />
</data>
<RelativeLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="@{inflatedVisibility}"
android:focusable="true"
android:background="@color/voip_translucent_popup_background"
android:clickable="true"
android:background="@color/voip_translucent_popup_background">
android:focusable="true"
android:visibility="@{inflatedVisibility}">
<LinearLayout
android:layout_width="match_parent"
<ImageView
android:id="@+id/resume_conference"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@drawable/shape_orange_circle"
android:contentDescription="@null"
android:onClick="@{() -> conferenceViewModel.resumeConference()}"
android:padding="40dp"
android:src="@drawable/voip_conference_play_big"
app:layout_constraintBottom_toTopOf="@id/out_of_conf_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/out_of_conf_title"
style="@style/conference_paused_title_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginTop="20dp"
android:gravity="center"
android:orientation="vertical">
android:text="@string/conference_paused_title"
app:layout_constraintBottom_toTopOf="@id/out_of_conf_subtitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/resume_conference" />
<ImageView
android:onClick="@{() -> conferenceViewModel.resumeConference()}"
android:layout_width="200dp"
android:layout_height="200dp"
android:padding="40dp"
android:background="@drawable/shape_orange_circle"
android:src="@drawable/voip_conference_play_big"
android:contentDescription="@null"/>
<TextView
android:id="@+id/out_of_conf_subtitle"
style="@style/conference_paused_subtitle_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/conference_paused_subtitle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/out_of_conf_title" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
style="@style/conference_paused_title_font"
android:text="@string/conference_paused_title"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
style="@style/conference_paused_subtitle_font"
android:text="@string/conference_paused_subtitle"/>
</LinearLayout>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -15,7 +15,7 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:maxHeight="200dp">
android:maxHeight="@dimen/voip_contact_avatar_max_height">
<ImageView
android:layout_width="match_parent"

View file

@ -9,85 +9,106 @@
type="org.linphone.activities.main.viewmodels.DialogViewModel" />
</data>
<LinearLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:focusable="true"
android:clickable="true">
android:clickable="true"
android:focusable="true">
<LinearLayout
<View
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:background="@drawable/shape_dialog_background"
app:layout_constraintTop_toTopOf="@id/dialog_message"
app:layout_constraintBottom_toBottomOf="@id/bottom_barrier"/>
<TextView
android:id="@+id/cancel_button"
style="@style/big_orange_button_font"
android:layout_width="0dp"
app:layout_constraintWidth_max="@dimen/voip_dialog_button_max_width"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:background="@drawable/shape_rect_gray_button"
android:gravity="center"
android:onClick="@{() -> viewModel.onCancelClicked()}"
android:padding="10dp"
android:text="@{viewModel.cancelLabel, default=Cancel}"
android:visibility="@{viewModel.showCancel ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toStartOf="@id/delete_button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_chainStyle="spread"/>
<TextView
android:id="@+id/delete_button"
style="@style/big_orange_button_font"
android:layout_width="0dp"
app:layout_constraintWidth_max="@dimen/voip_dialog_button_max_width"
android:layout_height="wrap_content"
android:background="@drawable/shape_rect_orange_button"
android:gravity="center"
android:onClick="@{() -> viewModel.onDeleteClicked()}"
android:padding="10dp"
android:text="@{viewModel.deleteLabel, default=Delete}"
android:visibility="@{viewModel.showDelete ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toStartOf="@id/ok_button"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/cancel_button" />
<TextView
android:id="@+id/ok_button"
style="@style/big_orange_button_font"
android:layout_width="0dp"
app:layout_constraintWidth_max="@dimen/voip_dialog_button_max_width"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:background="@drawable/shape_rect_green_button"
android:gravity="center"
android:onClick="@{() -> viewModel.onOkClicked()}"
android:padding="10dp"
android:text="@{viewModel.okLabel, default=OK}"
android:visibility="@{viewModel.showOk ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/delete_button" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/top_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="top"
app:barrierMargin="-10dp"
app:constraint_referenced_ids="ok_button,delete_button,cancel_button"/>
<androidx.constraintlayout.widget.Barrier
android:id="@+id/bottom_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:barrierMargin="20dp"
app:constraint_referenced_ids="ok_button,delete_button,cancel_button"/>
<TextView
android:id="@+id/dialog_message"
style="@style/dialog_message_font"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical"
android:background="@drawable/shape_dialog_background">
android:padding="10dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:gravity="center"
android:text="@{viewModel.message, default=Message}"
app:layout_constraintBottom_toTopOf="@id/top_barrier"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="20dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
style="@style/dialog_message_font"
android:text="@{viewModel.message, default=Message}"/>
<com.google.android.flexbox.FlexboxLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:gravity="center"
app:flexWrap="nowrap"
app:alignItems="center"
app:justifyContent="space_around">
<TextView
android:onClick="@{() -> viewModel.onCancelClicked()}"
android:layout_width="137dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:padding="10dp"
android:gravity="center"
android:background="@drawable/shape_rect_gray_button"
android:visibility="@{viewModel.showCancel ? View.VISIBLE : View.GONE}"
android:text="@{viewModel.cancelLabel, default=Cancel}"
style="@style/big_orange_button_font"/>
<TextView
android:onClick="@{() -> viewModel.onDeleteClicked()}"
android:layout_width="137dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:padding="10dp"
android:gravity="center"
android:background="@drawable/shape_rect_orange_button"
android:visibility="@{viewModel.showDelete ? View.VISIBLE : View.GONE}"
android:text="@{viewModel.deleteLabel, default=Delete}"
style="@style/big_orange_button_font"/>
<TextView
android:onClick="@{() -> viewModel.onOkClicked()}"
android:layout_width="137dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:padding="10dp"
android:gravity="center"
android:background="@drawable/shape_rect_green_button"
android:visibility="@{viewModel.showOk ? View.VISIBLE : View.GONE}"
android:text="@{viewModel.okLabel, default=OK}"
style="@style/big_orange_button_font"/>
</com.google.android.flexbox.FlexboxLayout>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
@ -11,49 +12,59 @@
type="android.view.View.OnClickListener" />
</data>
<LinearLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:focusable="true"
android:background="@color/voip_translucent_popup_background"
android:clickable="true"
android:background="@color/voip_translucent_popup_background">
android:focusable="true">
<LinearLayout
<View
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:layout_marginTop="-20dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="-20dp"
android:background="@drawable/shape_dialog_background"
app:layout_constraintBottom_toBottomOf="@id/ok_button"
app:layout_constraintTop_toTopOf="@id/dialog_message"/>
<TextView
android:id="@+id/dialog_message"
style="@style/dialog_message_font"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="vertical"
android:background="@drawable/shape_dialog_background">
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
android:layout_marginBottom="20dp"
android:gravity="center"
android:text="@{dialogMessage}"
app:layout_constraintBottom_toTopOf="@id/ok_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="20dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
style="@style/dialog_message_font"
android:text="@{dialogMessage}"/>
<TextView
android:id="@+id/ok_button"
style="@style/big_orange_button_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:background="@drawable/shape_rect_orange_button"
android:onClick="@{dismissClickListener}"
android:paddingLeft="40dp"
android:paddingTop="8dp"
android:paddingRight="40dp"
android:paddingBottom="8dp"
android:text="@string/dialog_ok"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:onClick="@{dismissClickListener}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="40dp"
android:paddingTop="8dp"
android:paddingRight="40dp"
android:paddingBottom="8dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:layout_gravity="center"
android:background="@drawable/shape_rect_orange_button"
android:text="@string/dialog_ok"
style="@style/big_orange_button_font"/>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View file

@ -15,144 +15,184 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/voip_translucent_popup_background"
android:clickable="true"
android:visibility="@{inflatedVisibility}"
android:background="@color/voip_translucent_popup_background">
android:visibility="@{inflatedVisibility}">
<RelativeLayout
<View
android:id="@+id/background"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:layout_marginTop="80dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="70dp"
app:layout_constraintStart_toStartOf="parent"
android:background="@drawable/shape_call_popup_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintWidth_max="@dimen/voip_views_max_width"
android:background="@drawable/shape_call_popup_background">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_max="@dimen/voip_views_max_width" />
<ImageView
android:id="@+id/hide_numpad"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="10dp"
android:contentDescription="@string/content_description_hide_numpad"
android:onClick="@{() -> controlsViewModel.hideNumpad()}"
android:src="@drawable/icon_cancel_alt" />
<ImageView
android:id="@+id/hide_numpad"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_margin="10dp"
android:contentDescription="@string/content_description_hide_numpad"
android:onClick="@{() -> controlsViewModel.hideNumpad()}"
android:src="@drawable/icon_cancel_alt"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintTop_toTopOf="@id/background" />
<TextView
android:id="@+id/entered_dtmfs"
style="@style/call_dtmf_history_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/hide_numpad"
android:layout_centerHorizontal="true"
android:text="@{controlsViewModel.dtmfHistory}"/>
<TextView
android:id="@+id/entered_dtmfs"
style="@style/call_dtmf_history_font"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="center_horizontal"
android:text="@{controlsViewModel.dtmfHistory, default=`0123456`}"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toBottomOf="@id/hide_numpad" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/entered_dtmfs">
<ImageView
android:id="@+id/dtmf_1"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_1"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('1')}"
android:src="@drawable/voip_numpad_1"
app:layout_constraintBottom_toTopOf="@id/dtmf_4"
app:layout_constraintEnd_toStartOf="@id/dtmf_2"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toBottomOf="@id/entered_dtmfs"
app:layout_constraintVertical_chainStyle="spread" />
<com.google.android.flexbox.FlexboxLayout
android:layout_width="0dp"
android:layout_height="0dp"
app:alignContent="space_around"
app:alignItems="center"
app:flexWrap="wrap"
app:justifyContent="space_around"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHeight_max="350dp"
app:layout_constraintWidth_max="250dp">
<ImageView
android:id="@+id/dtmf_2"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_2"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('2')}"
android:src="@drawable/voip_numpad_2"
app:layout_constraintBottom_toTopOf="@id/dtmf_5"
app:layout_constraintEnd_toStartOf="@id/dtmf_3"
app:layout_constraintStart_toEndOf="@id/dtmf_1"
app:layout_constraintTop_toBottomOf="@id/entered_dtmfs"
app:layout_constraintVertical_chainStyle="spread" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_1"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('1')}"
android:src="@drawable/voip_numpad_1" />
<ImageView
android:id="@+id/dtmf_3"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_3"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('3')}"
android:src="@drawable/voip_numpad_3"
app:layout_constraintBottom_toTopOf="@id/dtmf_6"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintStart_toEndOf="@id/dtmf_2"
app:layout_constraintTop_toBottomOf="@id/entered_dtmfs"
app:layout_constraintVertical_chainStyle="spread" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_2"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('2')}"
android:src="@drawable/voip_numpad_2" />
<ImageView
android:id="@+id/dtmf_4"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_4"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('4')}"
android:src="@drawable/voip_numpad_4"
app:layout_constraintBottom_toTopOf="@id/dtmf_7"
app:layout_constraintEnd_toStartOf="@id/dtmf_5"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toBottomOf="@id/dtmf_1" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_3"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('3')}"
android:src="@drawable/voip_numpad_3" />
<ImageView
android:id="@+id/dtmf_5"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_5"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('5')}"
android:src="@drawable/voip_numpad_5"
app:layout_constraintBottom_toTopOf="@id/dtmf_8"
app:layout_constraintEnd_toStartOf="@id/dtmf_6"
app:layout_constraintStart_toEndOf="@id/dtmf_4"
app:layout_constraintTop_toBottomOf="@id/dtmf_2" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_4"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('4')}"
android:src="@drawable/voip_numpad_4"
app:layout_wrapBefore="true" />
<ImageView
android:id="@+id/dtmf_6"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_6"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('6')}"
android:src="@drawable/voip_numpad_6"
app:layout_constraintBottom_toTopOf="@id/dtmf_9"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintStart_toEndOf="@id/dtmf_5"
app:layout_constraintTop_toBottomOf="@id/dtmf_3" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_5"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('5')}"
android:src="@drawable/voip_numpad_5" />
<ImageView
android:id="@+id/dtmf_7"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_7"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('7')}"
android:src="@drawable/voip_numpad_7"
app:layout_constraintBottom_toTopOf="@id/dtmf_star"
app:layout_constraintEnd_toStartOf="@id/dtmf_8"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toBottomOf="@id/dtmf_4" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_6"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('6')}"
android:src="@drawable/voip_numpad_6" />
<ImageView
android:id="@+id/dtmf_8"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_8"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('8')}"
android:src="@drawable/voip_numpad_8"
app:layout_constraintBottom_toTopOf="@id/dtmf_0"
app:layout_constraintEnd_toStartOf="@id/dtmf_9"
app:layout_constraintStart_toEndOf="@id/dtmf_7"
app:layout_constraintTop_toBottomOf="@id/dtmf_5" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_7"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('7')}"
android:src="@drawable/voip_numpad_7"
app:layout_wrapBefore="true" />
<ImageView
android:id="@+id/dtmf_9"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_9"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('9')}"
android:src="@drawable/voip_numpad_9"
app:layout_constraintBottom_toTopOf="@id/dtmf_sharp"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintStart_toEndOf="@id/dtmf_8"
app:layout_constraintTop_toBottomOf="@id/dtmf_6" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_8"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('8')}"
android:src="@drawable/voip_numpad_8" />
<ImageView
android:id="@+id/dtmf_star"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_star"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('*')}"
android:src="@drawable/voip_numpad_star"
app:layout_constraintBottom_toBottomOf="@id/background"
app:layout_constraintEnd_toStartOf="@id/dtmf_0"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="@id/background"
app:layout_constraintTop_toBottomOf="@id/dtmf_7" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_9"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('9')}"
android:src="@drawable/voip_numpad_9" />
<ImageView
android:id="@+id/dtmf_0"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_0"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('0')}"
android:src="@drawable/voip_numpad_0"
app:layout_constraintBottom_toBottomOf="@id/background"
app:layout_constraintEnd_toStartOf="@id/dtmf_sharp"
app:layout_constraintStart_toEndOf="@id/dtmf_star"
app:layout_constraintTop_toBottomOf="@id/dtmf_8" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_star"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('*')}"
android:src="@drawable/voip_numpad_star"
app:layout_wrapBefore="true" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_0"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('0')}"
android:src="@drawable/voip_numpad_0" />
<ImageView
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_sharp"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('#')}"
android:src="@drawable/voip_numpad_hash" />
</com.google.android.flexbox.FlexboxLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>
<ImageView
android:id="@+id/dtmf_sharp"
style="@style/call_numpad_digit"
android:contentDescription="@string/content_description_numpad_sharp"
android:onClick="@{() -> controlsViewModel.handleDtmfClick('#')}"
android:src="@drawable/voip_numpad_hash"
app:layout_constraintBottom_toBottomOf="@id/background"
app:layout_constraintEnd_toEndOf="@id/background"
app:layout_constraintStart_toEndOf="@id/dtmf_0"
app:layout_constraintTop_toBottomOf="@id/dtmf_9" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -57,4 +57,6 @@
<dimen name="voip_call_header_height">60dp</dimen>
<dimen name="voip_conference_active_speaker_miniature_avatar_size">50dp</dimen>
<dimen name="voip_conference_participant_mic_muted_icon_size">30dp</dimen>
<dimen name="voip_dialog_button_max_width">137dp</dimen>
<dimen name="voip_contact_avatar_max_height">200dp</dimen>
</resources>